逆向工程核心原理学习笔记(十四):栈帧1
2017-05-06 17:06
274 查看
栈帧的话,直接截了一些图,大家看一下就好了,理解起来很简单,就是简单的参数转存。
看完之后,我们需要用一个小程序来进一步学习我们的栈帧了。
下载地址: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函数执行完成后要返回的地址。
看完之后,我们需要用一个小程序来进一步学习我们的栈帧了。
下载地址: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函数执行完成后要返回的地址。
相关文章推荐
- 逆向工程核心原理学习笔记(十六):栈帧3:add()函数参数传递与调用
- 逆向工程核心原理学习笔记(十九):栈帧6:ADD运算
- 逆向工程核心原理学习笔记(十八):栈帧5:设置add()函数的局部变量(x,y)
- 逆向工程核心原理学习笔记(二十三):栈帧10:设置返回值,删除栈帧&main()函数终止
- 逆向工程核心原理学习笔记(十四):栈帧1
- 逆向工程核心原理学习笔记(二十二):栈帧9:调用printf()函数
- 逆向工程核心原理学习笔记(二十):栈帧7:删除函数add()的栈帧&函数返回
- 逆向工程核心原理学习笔记(二十一):栈帧8:删除函数add()的参数(整理栈)
- 逆向工程核心原理学习笔记(十五):栈帧2:设置局部变量
- 逆向工程核心原理学习笔记(七):总结
- 逆向工程核心原理学习笔记(三):检索API方法
- 逆向工程核心原理学习笔记(二十六):abex'crackme #2 name的存取
- 逆向工程核心原理学习笔记2-基址重定位基本原理
- 逆向工程核心原理学习笔记(二十五):abex'crackme #2初步破解
- 逆向工程核心原理学习笔记(一):寻找程序的主函数(Main)
- 逆向工程核心原理学习笔记1-通过IAT手工定位notepad.exe中的导入函数
- 逆向工程核心原理学习笔记(五):实战“打补丁方法”修改字符串
- 逆向工程核心原理学习笔记(二十四):abex'crackme #2 初探
- 逆向工程核心原理学习笔记(四):检索API方法2-设置断点
- 逆向工程核心原理学习笔记(八):小端序标记法1