先把farm.c转换成汇编语言
现在写汇编代码lines.s
现在要找在farm.txt中找到58 c3和48 89 c7 c3
两者的地址分别为0xf和0x15
据此写出攻击代码的16进制表示
其中前10行为任意40字节
11~12行对应返回地址,这里设为了farm中对应pop %rax;ret 的地址
13~14行是曲奇饼的值,这样在执行pop的时候就会把曲奇饼的值赋给%rax
15~16行是执行11–12行ret时的返回地址,这里设为了farm中对应mov %rax,%rdi的地址
17~18行是执行15-16行ret时的返回地址,这里是touch2的地址
转换为字符串后gdb调试,发现无法辨认出0xf
以往gdb会偏移0x555555554000的,这次是不是也会偏移呢?
于是写了hextwo,把f和15都作了偏移
在gdb中查看对应函数的地址,发现并没有偏移
分割线----
经同学提醒这里的farm的两个地址要在rtarget中去找
因此两个地址应该为0x1d5b和0x1d61
于是写了第三个hex
成功调用touch2了,但是参数写反了!
重新改动了一下,就过关啦!