1.定义
原理:栈迁移实际上是解决当原始栈可读入字符串长度不够的情况下rop链往哪儿写的问题,因为rop链必须借助栈溢出来达到攻击手段,所以rop链必须写在栈上,所以我们需要改变rsp的值来改变栈帧为能容纳rop链的那块区域。

2.利用方式
1.pop rsp

2.leave ret

3.利用xchg
xchg是交换指令,在gdb里search xchg,找到该指令的gadget片段,利用 将rsp和其他寄存器的值进行交换的指令,来控制这个寄存器的值从而控制rsp的值来达到栈迁移的目的。
search xchg % rsp 或者 search mov % rsp
3.案例

这段exp太抽象了,理解起来很不容易,多次进行栈迁移。
总之,要在新的区域构造rop链,就要修改rsp把栈迁移过去。