函数调用栈

函数调用过程

esp指向堆栈顶端,ebp指向old ebp,返回地址为ebp-4,参数为ebp-8,ebp-12。。。

函数调用栈_第1张图片
Paste_Image.png

调用:

  1. 将调用参数压栈

  2. 将下一条指令地址压栈,作为返回地址

  3. 将ebp压栈,将ebp设置为esp

  4. 跳转到函数执行

返回:

  1. esp 设置为 ebp,回收局部变量

  2. pop ebp:恢复ebp的值为old ebp

  3. 从栈中获得返回地址,并跳转到该位置

不同的出栈方和参数传递顺序决定不同的调用惯例

函数调用栈_第2张图片
Paste_Image.png

你可能感兴趣的:(函数调用栈)