Pwn ret2text in x86
原理
ret2text 的意思是返回到特定代码段.
程序被装载后, 在(虚拟)内存中是这样的:

调用一个函数的时候, 内存中栈上的数据是这样排列的:

其中, 返回地址 指的是函数执行完成之后, 要执行的下一条指令的地址.
可以看到, 栈是从高位向低位增长的, 而数组是从低位向高位填充的. 也就是说, 如果 数组越界 不加处理, 我们可以 覆盖掉返回地址, 从而控制程序的运行.
然而, 在开启了 栈不可执行保护 的程序中, 我们不能够在栈中写入 shellcode, 覆盖掉返回地址一般来说是程序代码段中的内容.
x86 汇编指令
咕
call
指令先 push
下一个命令的地址(返回地址), 再 jmp
.
leave
是恢复上一个栈桢, ret
是 pop eip
.