逆向工程核心原理学习笔记(十四):栈帧1

本文通过实例演示了栈帧的形成过程,详细解释了如何通过修改寄存器值实现参数转存,以及如何使用调试工具观察栈帧的变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

栈帧的话,直接截了一些图,大家看一下就好了,理解起来很简单,就是简单的参数转存。




看完之后,我们需要用一个小程序来进一步学习我们的栈帧了。


下载地址:http://t.cn/RaUSglI


代码写法:



取消优化,编译发布版本,代码生成格式为MT。


载入OD查看:


我们直接跳转到0x401000地址处




由代码可知道:0x401020是main函数开始的地方





我们在这里F2设置一个断点:





然后F9执行程序。




此时ESP的值为0019FF3C



此时EBP的值为0019FF80




然后我们继续看图:


401229这个地址存放在地址19FF3C中,19FF3C就是我们的ESP栈顶指针


401229这个地址是main函数执行完毕返回的地址。



然后我们看一下栈帧的形成是怎样的:





由图可知,401020和401021的代码:


push ebp

mov ebp,esp


其实就是做了一个简单的参数的替换,这样之后栈帧就形成了




然后我们回到栈窗口,鼠标右键:




让它显示为相对于EBP,这样可以更加直观的观察栈内的情况。




此时EBP指向了19FF80,与寄存器中吻合。


19FF80中存着19FF94,19FF94是main函数执行完成后要返回的地址。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值