基础知识
1、复现一下Ret2Libc 32位下的内存布局
针对这张图,我们在上一节做了细致的分析
32位的调用方式
- 32位系统中调用函数的方式:栈传递参数
- 构造函数调用将参数和返回地址放在栈上
- 构造执行write(1,buf2,20)后,再返回main函数
64位的调用方式
- 64位系统中使用寄存器传递参数:rdi、rsi、rdx、rcx、r8、r9(1-6个参数)
- http://abcdxyzk.github.io/blog/2012/11/23/assembly-args/
- 要构造write(1,buf2,20),需要控制3个参数:rdi、rsi、rdx,第3个参数代表输出的size,如果没有rdx的gadget可以暂时不管,输出多少无所谓,在下面我们构造payload的时候,我们不写第3个参数