逆向——从一个实际例子看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 @ 2023-04-02 20:23  bonelee  阅读(100)  评论(0编辑  收藏  举报