栈帧

本文通过VC6.0环境下的示例代码详细解释了栈帧的概念及其工作原理,包括函数调用过程中栈帧的创建与释放、临时变量的存储方式,并通过调试分析了call与ret指令的作用。

下面在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指令的功能。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值