c语言-函数栈帧的创建与销毁

1.寄存器:

ebp,esp 这两个寄存器中存放的是地址,这两个地址是用来维护函数的。

2.函数栈帧:

每个函数调用,都要在栈区创建一个空间,这个空间叫做这个函数的函数栈帧。

3.main函数栈帧框架:

main函数也是被其他函数调用的。

4.函数栈帧创建销毁过程:

1.esp指针上移一个地址;

2.ebp代替esp;

 3.esp继续上移,开辟main函数的栈帧;

 4.在esp上加三个值(push):ebx,esi,edi,同时esp上移;

 注:压栈(push):在栈顶加一个元素;
        出栈(pop):从栈顶减去一个元素。

5.将main函数栈帧内容初始化;

 6.传参,将参数加到栈顶,esp上移(图中没画)

7.将main函数执行到的地址和ebp地址存在栈顶:

 

8.创建main函数内部函数(例:add),同上(1-5);

 

8.函数运行,返回结果放到一个寄存器中;

9.将三个值减去;再将esp赋给ebp;再根据存的ebp地址将ebp归位;

 

10.将参数除去,esp下移:

 

11.将寄存器中的返回值赋给main中变量;

12.销毁main函数,同上(9,10);

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值