#include<stdio.h>
#include<windows.h>
int myadd (int x,int y)
{
int z = x + y;
return z;
}
int main()
{
int a = ;
int b = ;
int c = myadd(a,b);
printf("you should run here!\n");
printf("result:%d\n",c);
system("pause");
return ;
}
最初的栈结构

定义a,b
将b放在eax,将eax push入栈,esp下移
将a放在ecx,将ecx push入栈,esp下移
执行call命令,将当前正在执行的指令的下一条地址压入栈中
执行call指令,通过jump命令跳转到指定函数处,myadd函数的地址是00401020,则eip变为00401020
将mian函数的ebp压入栈底,mov ebp,esp
形成一个新空间myadd函数的栈帧
将[ebp+8]加上[ebp+0ch]放入eax,再把eax放入[ebp-4]
mov esp,ebp
将ebp弹出
把00401093弹入eip中,esp上移,执行main函数当前执行的指令
add esp,8,把eax的值z放入[ebp-0ch],回到最初