函数的调用过程(栈帧)

来源:互联网 发布:扭力弩炮 知乎 编辑:程序博客网 时间:2024/04/30 12:58

认识c/c++程序占用内存的分布:

这里写图片描述
简单看一下下面的程序:

   #include<stdio.h>int Add(int x, int y){    int z = 0;    z = x + y;    return z;}int main(){    int a = 10;    int b = 20;    int res=Add(a, b);    printf("%d\n", res);    system("pause");    return 0;}

f10调试后,打开查看堆栈窗口:
这里写图片描述说明:main函数也是被其他函数调用的。
下面进入主题,函数调用过程:这里写图片描述
分析主函数的栈帧:这里写图片描述
注意call指令:这里写图片描述
执行call指令时,f11走到下图所示:这里写图片描述
再按f11,进入Add函数:这里写图片描述
再看返回z是如何返回的这里写图片描述出栈的时候,就使用pop指令依次让edi,esi,ebx,出栈。再将ebp赋给esp,pop 出edp,再回到main函数。这里写图片描述