csapp实验二 ---bomb(第二关)

解决了第一个问题后

来到phase_2

gdb bomb 
disas phase_2

这里写图片描述

输入仍然是input 在 rdi中

然后开了40字节的缓冲区

接着把栈头地址丢给rsi

调用read_six_number 顾名思义但是我们还是看看

disas read_six_numbers

这里写图片描述

在read_six_numbsers中我们看到
考虑到sscanf 的第三个参数是我们的输入所以rsi 放入到rdx中
看下

x/s 0x4025c3

“%d %d %d %d %d %d”是sscanf的第二参数

作为sscanf的第二个参数esi接受了输入 并且最后判断是否是否大于 5
在phase_2中调用read_six_numbsers后打断点

b *0x400f0a

这里写图片描述
可以看到we are right

回到phase_2中
我们看到对于栈顶也就是第一个数必须要是0不然直接炸
然后跳转到52
一个int 4个字节所以这句是下一个数
然后跳到上面去把这个数的前一个数*2 与这个数比较不相等直接炸

最后打个断点看下rbp
在比较处打上断点

这里写图片描述
看到寄存器rbx 与 rbp的差值是16个字节算上第一个和这次的一共可以比较前6个整数

所以答案是
1 2 4 8 16 32

这里写图片描述

Amazing Magic

猜你喜欢

转载自blog.csdn.net/weixin_38739799/article/details/80257448
今日推荐