栈帧
下面在VC6.0下通过一段代码来说明栈帧的概念及相关知识,代码如下:
#include<stdio.h>
int fun(int x,int y)
{
int z=x+y;
return z;
}
int main()
{
int a=0xAAAAAAAA;
int b=0xBBBBBBBB;
int c=fun(a,b);
printf("you should run here\n");
printf("%d\n",c);
return 0;
}
1.首先要说明几点。
(1)程序跑起来,第一个被调用的函数不是main函数,而是mainCRTStartup函数,可以按F10进行调试—点击查看—调试窗口—Call Stack,结果如下:
(2)CPU通过CPU中的EIP寄存器知道具体执行什么指令。
(3)当CPU正在执行PC(即寄存器EIP)所给的指令时,PC去指向下一条要执行的指令。
(4)调用函数时要跳转到该函数处。
(5)每一次函数调用都是一个过程,这个过程要为函数开辟栈空间,用于本次函数的调用中临时变量的保存,这个栈空间称为栈帧。
(6)每一个函数都有一个栈帧。
(7)栈是向下生长的,即向低地址处生长。
2.画图说明创建栈帧以及释放栈帧、临时变量的过程。
3.对于所画的栈帧图,通过调试分析该过程。
(1)call指令的功能。
(2)ret指令的功能。