我昨天问了一个问题,如何调用__fastcall函数,它运行得很好。
现在我接到电话的最后一项功能是遇到了一些困难。
这是ASM功能。
seg000:0043671F push 0AA2BAD1Bh
seg000:00436724 lea ecx, [ebp+var_14]
seg000:00436727 call sub_458E90
IDA PRO将其标记为。
int __thiscall sub_458E90(void *this, int a2)
它被称为这样
sub_458E90(&v9, -1439978213);
现在这里是我尝试的代码,它只是在运行时给我一个异常
int addr = 0x458E90;
__declspec(naked) void sub_458E90(int buffer, int key)
{
__asm{
push key
mov ecx, buffer
call [addr]
retn
}
}
也试过
__declspec(naked) void sub_458E90_1(int buffer, int key)
{
__asm{
push key
mov ecx, buffer
jmp [addr]
}
}
两个都给我
应用程序错误 “0x00458e93”处的指令在“0x00000000”处重新激活存储器。内存无法“读取”。
答案 0 :(得分:1)
解决ebx
必须用于密钥。就这么简单。
void
也必须更改为int
忘记了这一点。 (很可能不重要)