为什么保存的 rip 被推送改变了?

逆向工程 部件 linux 数据库 x86-64
2021-07-09 15:28:15

我在做反向作业。请看以下图片:

在此处输入图片说明

从这张图片中可以看出,在调用之前push touch3,“保存的 rip”在 0x5561dca8,它等于当前的 rsp(0x5561dca8)。

一旦调用push touch3,“保存的 rip” 位于 0x5561dca0,它也等于新的 rsp(0x5561dca0)。

我的问题是,为什么推送指令更改了“保存的 rip”地址。

在此处输入图片说明

1个回答

主要是因为该程序之前做了足够的工作poprsp将保存的rip. 然后,一个简单的push将覆盖保存的rip.

正如您在第一张图片中所注意到的,您保存rip的文件也在0x5561dca8rsp因此,push操作会将touch3函数的地址存储为堆栈帧的返回地址。

这里没有什么特别难的。