#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],回到最初