一、栈
1、传统的栈:被定义为一个特殊的容器,用户可以将数据压入栈中,也可以将压入
栈中的数据弹出,但必须遵守一条规则:先进后出。
2、计算机系统中的栈:是一个有以上属性的动态内存区域,压栈操作使得栈增大,
弹出操作使栈减小。栈通常是向下增长的。
3、 最重要的是栈保存了一个函数调用所需的维护信息,这通常被称为堆栈帧。
二、函数调用堆栈过程
函数调用堆栈过程书上从反汇编函数去一步一步分析的,我这儿我想从压栈
和清栈两方面去总结。
压栈:
对调用方函数来说:
1) 压入形参变量的地址和值;
2) 压入函数调用返回后要执行的指令的地址;
对被调用函数来说:
1) 压入调用函数的栈底指针,把栈底指针寄存器指向被调用函数的栈底;
2) 开辟被调用函数的栈帧大小,并初始化为cc;
清栈:
对调用函数来说:
1) 清理形参变量的内存;
对被调用函数来说:
1) 清理被调用函数开辟的栈帧大小;
2) 回退栈底指针到调用函数的栈底;
3) 把回退到调用函数要执行的指令地址给pc寄存器;
三、举例
下面写一个简单的程序来解释一下函数调用堆栈过程:函数的活动记录用
ebp和esp这两个寄存器(帧指针)规定范围,
函数调用堆栈
最新推荐文章于 2022-10-30 16:34:48 发布
![](https://img-home.csdnimg.cn/images/20240611030827.png)