这里用一个简单的Add加法程序讲解函数调用过程
#include <stdio.h>
#include <windows.h>
#include <assert.h>
int Add(int x, int y)
{
int z = 0;
z = x + y;
return z;
}
int main()
{
int a = 1;
int b = 2;
int ret = 0;
ret = Add(a, b);
system("pause");
return 0;
}
先从主函数部分开始。
首先创建mainCRTStartup函数的栈帧。
esp栈顶指针减0E4(228),开辟了228字节大小空间。
接着又压入3个寄存器ebx、esi、edi
然后用下面代码把开辟的空间初始化为cc cc cc cc
![]()
接下来就是创建局部变量a,b,ret并赋值。
然后便开始传参
call调用Add函数,并且调用前保存了call指定的下一条指定的地址。main函数
》
开始Add部分
刚开始也是一样为Add函数创建栈帧
接着创建z变量,赋值为0
把x放到eax中
把y也加到eax中
把eax放到z里面
Add到这就差不多结束了,开始return z,z放到eax里,把寄存器变量传回去;
pop出栈
Add函数