csapp attack lab level5
作者:互联网
做完了第一个ROP来看看第二个,当然这个显然很难。
显然这个和touch3一样,但是无法注入,所以只能用ret来连接gadget,我刚开始看第一个建议很疑惑,为啥要复习movl。直到我从farm这个函数反汇编后所能用到的指令真是少的可怜。如图类似grep抓取关键字然后对照下图表发现能用的指令太少了,
根据相关表的抓取符合条件的指令。
然后总结所有能用的指令
所以要用这几个指令来完成这个实验,最关键的是lea(%rdi,%rsi,1),%rax
因为开启了栈地址随机化,而存储字符串的地址不能确定,当然我们可以想到用 %rdi=%rsp+偏移地址表示字符串的地址。(lea(%rdi,%rsi,1),%rax这条指令确定的,即然这样rsi存储偏移地址)
这条指令是farm.c
这个唯一一个没有以val命名的函数。
lea(%rdi,%rsi,1),%rax 意思是 %rax = %rdi + %rsi.
对此
1.rdi寄存器内容为rsp的地址。
2.rsi内容为偏移地址的值
3.在执行movq %rax,%rdi即可获得rdi=rsp+偏移量
如图可视
这是我写的整个过程
因为farm反汇编指令没有movq %rax,%rsi这条指令,所以只能用movl eax…
当时我一直以为偏移量是80个字节,当时一直报错,我在仔细看了看,第一条指令是返回地址的不算栈顶,只有从第二条指令到字符串之前这才是72个字节即0x48
最后编写
成功
标签:lea,csapp,rsi,地址,lab,attack,指令,rdi,rax 来源: https://blog.csdn.net/qq_25044201/article/details/110927250