执行retn、call、leave指令的时候,esp和eip的变化情况

windows 32位汇编的环境下

0A10FF61 call      0A11FFAA
0A10FF66 MOV EAX,DWORD PTR SS:[EBP+3C]

  1. call
esp = esp - 4



[esp]
= 0A10FF66   //将返回地址压入栈中
 
  eip = 0A11FFAA    //跳转到函数地址
 

 2. retn


eip
= [esp]
esp
= esp - 4 //将esp中的数据出栈到eip中

 3.  leave



mov esp,ebp
pop ebp
//还原函数栈

原文地址:https://www.cnblogs.com/rainduck/p/1796879.html