函数栈帧创建与销毁一些理解

在电脑中有寄存器——存放数据的
而寄存器中的 ebp 和 esp 这两个寄存器存放的是地址——用来维护函数栈帧的

每一个函数调用,都要栈区上创建一块空间。
在调用某个函数时,esp 和 ebp 就存储维护这个函数在栈区中的地址
esp 和 ebp 之间的空间就为这个函数在栈区的空间。

栈区是先使用高地址,再使用低地址。
esp 又名栈顶指针(存放低地址),ebp 又名栈底指针(存放高地址)

push        压栈:给栈顶放一个元素进去
pop        出栈:从栈顶弹出一个元素

1.局部变量的创建:
正在调用的函数栈帧空间内中申请一片空间给这个局部变量

2.局部变量未初始化:
函数栈帧空间创立时,栈帧中默认值是编译器放的。

3.函数的传参,以及顺序:
push    压栈放栈区使用的,顺序是由右到左

4.形参和实参的关系:
形参是压栈压进去的,是独立的空间,值与实参相同而已

5.函数调用:
call调用对应函数
留下下一条指令的地址
留下上一个函数的ebp栈底地址
跳到对应函数使用的地址

6.函数的返回:
返回值:由寄存器eax暂时保存
esp返回:把ebp赋值给esp ——跳回上个函数的栈顶
ebp返回:弹出上一个函数的ebp,放ebp中 ——返回上一个函数的栈底
ret返回:返回栈区留下的下一条指令的地址
传参销毁:esp往下跳,之后使用就会覆盖它了

推荐还是去看一下函数的栈帧和销毁这部视频,对理解代码在内存中的使用有很大的帮助。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值