我正试图找到其中一个二进制炸弹的答案。这是为了学校,所以请帮助我指出正确的方向,我相信我已接近解决这个难题。
这是我坚持的组件:
0x080485e9 <+127>: call 0x8048400 <strtol@plt>
0x080485ee <+132>: cmp %eax,0x80498d4(,%ebx,4)
0x080485f5 <+139>: je 0x80485fc <main+146>
0x080485f7 <+141>: call 0x8048540 <bomb>
0x080485fc <+146>: add $0x1,%ebx
所以我需要避免炸弹的方法调用,否则它会爆炸!这意味着语句cmp %eax,0x80498d4(,%ebx,4)
必须设置零标记,%eax
必须等于0x80498d4(,%ebx,4)
。
'%eax'
结束从我正在读入程序的文件的第一行输入。我已经在gdb中验证了这一点。
我在gdb中运行了一个print语句,看看cmp中第二个参数的值是什么,所以我可以将它与%eax
等同。
我跑了:
print (0x80498d4 + $ebx*4)
gdb中的导致$1 = 134519000
。
所以我接着输入上面的内容,以便我得到:
(gdb) print $eax
$2 = 134519000
现在两个cmp参数看起来根据gdp具有相同的值,但是je
如果相等的标志跳转仍未评估为真且仍然调用<bomb>
函数。
非常感谢任何指针和帮助,谢谢!