保存的 EBP 仍链接到 EBP 寄存器



我是逆转的新手,最近我正在研究缓冲区溢出以了解它是如何工作的。

我知道当您在程序集中看到这些时会调用一个函数:

push ebp             ; Save the caller's ebp
mov ebp, esp         ; Update ebp with current stack frame's esp

起初,我猜测一旦调用者的 ebp 保存在堆栈上,它只会在您弹出它时更改。在我对缓冲区溢出进行了一些试验和错误之后,我注意到如果我创建一个有效负载(如 77777777\x0e\x86\x04\x08)来覆盖保存的 EIP,EBP 寄存器也会被有效负载更改。

我知道有效负载会更改堆栈上保存的 eip 和保存的调用方 ebp 的值,但是如何更改 ebp 寄存器?或者堆栈中的条目指向的地址仍然链接到寄存器本身?

当缓冲区溢出中覆盖 ebp 指向的存储值时,不会修改寄存器。 您确定您没有:(a) 查看存储在 ebp 中的地址的内存值?(b) 在ret看涨期权后EBP的价值?

最新更新