其他分享
首页 > 其他分享> > csapp attack lab level5

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