玩!
小学生日记!
小学生日记!
之前做的题都是找函数, 然后构造 ROP 链. 这两天刷 ROP Emporium, 居然用汇编 Gadgets 向内存中写入数据! 还是思维定势了啊. 记录一下, 加深印象.
浮点数是表示实数的一种方法. 它的思想类似于科学计数法, 即将数字写成 $x = (-1)^S M \cdot 2^E$ 的形式. 那么需要记录 符号 $S$, 尾数 $M$ 和指数或阶(码) $E$.
ret2text 的意思是返回到特定代码段.
程序被装载后, 在(虚拟)内存中是这样的:
调用一个函数的时候, 内存中栈上的数据是这样排列的:
其中, 返回地址 指的是函数执行完成之后, 要执行的下一条指令的地址.
可以看到, 栈是从高位向低位增长的, 而数组是从低位向高位填充的. 也就是说, 如果 数组越界 不加处理, 我们可以 覆盖掉返回地址, 从而控制程序的运行.
然而, 在开启了 栈不可执行保护 的程序中, 我们不能够在栈中写入 shellcode, 覆盖掉返回地址一般来说是程序代码段中的内容.
咕
call
指令先 push
下一个命令的地址(返回地址), 再 jmp
.
leave
是恢复上一个栈桢, ret
是 pop eip
.
向来对 “安装教程” 没啥好感, 安装这个简单得不得了的事还要教程? 官网没有 installation? 直到我 rizin 装了很久…