在C++中调用ASM函数
我昨天问了一个问题,如何调用 __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”处的内存。无法“读取”内存。
I asked a question yesterday, how to call a __fastcall function, it worked great.
Now my final function i got to call is having some difficulties.
Here is the ASM function.
seg000:0043671F push 0AA2BAD1Bh
seg000:00436724 lea ecx, [ebp+var_14]
seg000:00436727 call sub_458E90
IDA PRO labels it as.
int __thiscall sub_458E90(void *this, int a2)
It's called like this
sub_458E90(&v9, -1439978213);
Now here is the code I tried and it just gives me a Exception at runtime
int addr = 0x458E90;
__declspec(naked) void sub_458E90(int buffer, int key)
{
__asm{
push key
mov ecx, buffer
call [addr]
retn
}
}
Also tried
__declspec(naked) void sub_458E90_1(int buffer, int key)
{
__asm{
push key
mov ecx, buffer
jmp [addr]
}
}
Both give me
Application Error
The instruction at "0x00458e93" refenced memory at "0x00000000". The memory could not be "read".
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
解决了 ebx 必须用于密钥的问题。就这么简单。
void
也必须更改为int
忘记了这一点。 (很可能不重要)Solved
ebx
must of been used for key. Simple as that.void
also must of been changed toint
forgot about that. (most likely not to important)