关于函数栈帧,变量是如何创建和销毁的(附图解)

18 篇文章 0 订阅
7 篇文章 0 订阅
本文详细解析了编程中函数栈帧的创建和销毁过程,通过实例展示了变量创建、局部变量初始化、参数传递及函数返回的内部机制。使用VS2019编译器为例,探讨了调用函数时寄存器espebp的作用,以及内存栈区的变化。文章以图解方式逐步解释了函数调用的每一步,包括值的返回和栈帧的清理,帮助读者更好地理解编程底层运作。
摘要由CSDN通过智能技术生成

hollow各位程序猿,当我们学习编程时有没有和我一样有这种困惑

比如变量是如何创建的?

为何局部变量是随机值?

函数返回调用是如何传递参数?

和函数是如何返回的?

这里我用的编译器是VS2019接下来我将带着大家了解函数栈帧是如何创建销毁 注:函数栈帧创建销毁每个编译器不一定会相同

如有疏漏之处欢迎大佬指出和讨论,瑞斯拜 瑞斯拜 

                       此时我们创建一个函数并且调用它 

     而调用函数就会用到寄存器此时我们用到的寄存器有这两个

                                        esp ebp 

                           此时我们内存空间里的栈区里面是这样

                      然后开始函数调用此时内存中ebp开始压栈

 下一步然后内存中ebp和esp开辟了为main函数所创建变量的空间

                                        此时main函数开始创建变量

 Add函数,开始调用计算计算完成的值赋给eax,此时我们的计算已经完成,接下来调用的值开始返回

 这时esp的值从esl开始返回函数,esp每次增加4字节直到返回到edp所在位置,edp将值赋予esp,esp所处地址在下到edp,esp再增加4

字节,然后执行ret返回call指令的下一行

 最后一步main函数返回栈帧

 这就是今天给大家图解的如何创建销毁函数栈帧,

希望可以帮到大家,如有错误欢迎指出

轻点喷 各位大佬们 哈哈

求点赞 求点赞 求点赞 素质三连

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值