一个简单的问题 c语言调用汇编代码再调用Messagebox函数,求代码分析

#include<stdio.h>
#include<windows.h>
int main()
{
HINSTANCE h=LoadLibrary("user32.dll");
__asm{
push ebp
mov ebp,esp
xor edi,edi
push edi
mov byte ptr[ebp-04h],48h
mov byte ptr[ebp-03h],69h
mov byte ptr[ebp-02h],21h
mov edx,0x77D507EA -----------------Messagebox在User32中的内存地址赋给edx
push edx
push edi
lea edx,[ebp-04h] ----------这里和下面的3行起到了什么作用??
push edx ------------
push edx -------------
push edi --------------
call dword ptr[ebp-08h] --------------这里直接call调用Messagebox时参数“Hi“传进去。
}
FreeLibrary(h);
}
运行效果如图:

问题在代码中:
lea edx,[ebp-04h] ----------这里和下面的3行起到了什么作用??
push edx ------------
push edx -------------
push edi --------------
...............................................................
好人,求解、万分感激!!!!!

内嵌汇编可以直call函数名调用函数,根本不用这么折腾。另外其实他获得函数入口的的方法是错的,知识碰巧能用而已。

lea edx, [ebp - 04h] 就相当于edx = ebp - 04h汇编写就是
mov edx, ebp
sub edx, 04h
但是前一种写法方便,执行效率也高。

三个push是把MessageBox的参数推进栈。类似于C里写MessageBox(edi, edx, edx, edi)(因为前面还有一个push edi)。因为edi是0,edx是那个Hi,所以其实就是MessageBox(0, "Hi!", "Hi!", 0)。
温馨提示:答案为网友推荐,仅供参考
相似回答