认识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函数。