逆向——从一个实际例子看EBP+4为何是函数的返回地址

第六节 1、逆向CRACKME

1、OD加载CRACKME后,为啥地址停在0x00401000?--需要知道什么是PE结构。

 

 

——————

2、出现这个框,表示程序已经执行完判断。

3、弹出窗口是WIN32 API的知识,它是API的MessageBoxA函数实现的功能。

 

 

——————

4、如何正确的下断点?

(1)在OD的命令窗口:bp MessageBoxA(1)在OD的命令窗口:bp MessageBoxA
—>如果程序执行弹口窗口功能,则程序停下。

 

 

(2)程序停下后的代码区和堆栈区

 

 


 

 

5、什么是函数调用?

6、熟悉堆栈,通过画堆栈图彻底了解堆栈。

7、一个函数刚开始执行时,栈顶存储的是调用这个函数的上一个函数的返回地址。

 

 


 

 

上图在ODB里对应的是:

刚刚进入函数调用,可以看到堆栈顶的return的地址

 

右键该地址:

 

 

可以看到该地址是调用函数的下一条指令地址:

 

 我们追踪下stack的变化就看到如下栈提升以后的情况:

 

 

 那个返回地址刚好就是EBP+4!

 

当然,记得去结合我文章里写堆栈图的例子更加容易理解。

 

 

 

posted @   bonelee  阅读(142)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
历史上的今天:
2018-04-02 leetcode 543. Diameter of Binary Tree
2018-04-02 leetcode 268. Missing Number
2018-04-02 DBSCAN
点击右上角即可分享
微信分享提示