在gdb

时间:2016-03-11 02:01:02

标签: c debugging assembly gdb binaryfiles

我正试图找到其中一个二进制炸弹的答案。这是为了学校,所以请帮助我指出正确的方向,我相信我已接近解决这个难题。

这是我坚持的组件:

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>函数。

非常感谢任何指针和帮助,谢谢!

0 个答案:

没有答案