函数调用堆栈

本文详细介绍了函数调用过程中栈的工作原理,包括压栈和清栈的过程。在压栈时,形参变量的地址和值被压入栈中,而函数返回后要执行的指令地址也被保存。在被调用函数中,栈底指针被更新以指向新的栈底。清栈时,形参变量的内存被清理,调用函数的栈底指针回退,执行指令地址被加载到pc寄存器。通过一个简单的程序实例,演示了函数调用堆栈的具体操作。
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值