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




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


下载地址: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相关推荐

  1. 逆向工程核心原理学习笔记(四):检索API方法2-设置断点

    同样,还是用我们的那个helloworld小程序,然后,如图所示,查找所有模块的名称 然后,结果如图所示 在这个界面,我们敲键盘字母,messagebox,一个一个敲出来,就会自己跳到相应的地址,如图 ...

  2. 逆向工程核心原理学习笔记(十三):分析abex' crackme #1 的延伸:将参数压入栈

    还是上一次的abex' crackme #1,我们用OD附加看一下. 我们发现在调用这个MessageBox函数的时候,用了4个PUSH指令,我们在后面的注释中可以清楚的看到压入参数的内容. 如果我们 ...

  3. 逆向工程核心原理学习笔记(十二):分析abex' crackme #1

    程序下载地址:http://t.cn/RX1wpX7 我们首先运行一下,看看提示什么: 我们初步推测,这个程序应该是判断磁盘是否运行在一个CD-ROM上. 为了验证我们的推测,我们拖进OD看一下. 我 ...

  4. 逆向工程核心原理学习笔记(十一):栈

    栈(stack)用途广泛,通常用于存储局部变量.传递函数参数,保存函数返回地址等. 调试程序需要不断查看栈内存,这是很有必要的. 栈是一种数据结构,按照后进先出的原则存储数据. 栈的特征: 一个进程中 ...

  5. 逆向工程核心原理学习笔记(十):IA-32寄存器基本讲解

    什么是CPU寄存器: 为什么要学习寄存器: IA-32寄存器: 基本程序运行寄存器: 下面介绍一下各种寄存器:

  6. 逆向工程核心原理学习笔记(七):总结

    首先就是上一节,我们尝试把修改后的代码保存后运行,发现不可以,. 这是由于我们修改的那部分缓冲区造成的. 可执行文件加大再到内存中兵役进程的形式运行并非原封不动的载入内存,而是遵循一定的规则进行,这一 ...

  7. 逆向工程核心原理学习笔记(九):小端序标记法2

    程序地址:http://t.cn/RXnT2pD 我们用OD查看小端序. 代码如下: 我们编译,然后拖进OD查看,直接跳到0x401000入口点. 我们看到几个位置: 由此处我们可以推测后面括号中存放 ...

  8. 逆向工程核心原理学习笔记(八):小端序标记法1

    顶 0 踩

  9. 逆向工程核心原理学习笔记(六):实战开辟新内存区域写入缓冲区跳转修改字符串

    首先我们跳转到程序的入口点,然后观察 00401007      68 00ED4000   push    0x40ED00                         ;  Hello Wor ...

最新文章

  1. 硕士,博士太多了?看完这组数据你就不那么认为了!
  2. Linux文件系统2---VFS的四个主要对象
  3. 【Linux】一步一步学Linux——rename命令(36)
  4. android手势识别
  5. 7/7 SELECT语句:创建计算字段
  6. 使用async,await关键字进行API Access Token的获取
  7. undefined reference to `std::cout'等错误
  8. bash的一些小技巧
  9. 在腾讯云开通短信验证服务设置正确格式的签名和正文模板并完成群发消息测试
  10. html+正则+换行+回车,正则与回车换行符使用详解
  11. gulp工具rename
  12. 无监督特征选择算法综述
  13. 项目研发过程中甲方要增加合同外的需求,项目经理该如何处理?
  14. 盐酸二甲双胍pH敏感性壳聚糖水凝胶微球/木质素磺酸钠海藻酸钠壳聚糖水凝胶微球的研究制备
  15. Unity3D插件 Doozy UI 学习(二):与DoozyUI的事件传递
  16. crt和zoc7的快捷键记录
  17. Halcon入门教程手册
  18. yolo v4 weights 权重
  19. oracle 一维数转二维数组,js将一维数组转化为二维数组
  20. linux vt码的学习和使用

热门文章

  1. 重载练习3_实现重载的println方法
  2. 数字转换英语c语言程序,c语言 把英文数字 例如 one hundred and eleven 转换位数字 111;怎样编写程序,要求1~1000内的英文数字...
  3. 使用支持向量机进行光学字符识别_从零推导支持向量机 (SVM)
  4. 【报错笔记】程序报错:Cause: java.sql.SQLException: Invalid value for getInt() - ‘4ab72edc-c02f-423f-ae9e-18c30
  5. (轉貼) ThinkPad鍵盤設計原理和哲學 (NB) (ThinkPad)
  6. 2018 美团、腾讯、头条、蔚来 社招面试随谈
  7. 微信小程序图片上传(文字识别)
  8. zabbix-3.0.1结合grafana绘图
  9. CodeSmith 基础用法和例子
  10. 第五六周机电传动控制作业