关于栈迁移
在 Pwn 中的作用
解决可溢出长度不足的问题。
栈迁移的本质
通过改变 ebp / rbp 寄存器的值,再经过两次 leave,从而使 esp / rsp 指针指向目标内存附近。
一般实现方法
- 通过溢出将 old ebp 覆盖为长度足够的指定内存段,再将返回地址覆盖为某 leave 指令的地址。
- 参见 plaidctf2015_ebp’s Write up。
注意事项
- 在 32 位系统下,应将 old ebp 覆盖为比指定内存段的首地址低 4 字节的内存地址
- 在 64 位系统下,应将 old ebp 覆盖为比指定内存段的首地址低 8 字节的内存地址