这是我的汇编代码:
0x08048bd0 <+0>: sub $0x2c,%esp
0x08048bd3 <+3>: movl $0x0,0x1c(%esp)
0x08048bdb <+11>: lea 0x1c(%esp),%eax
0x08048bdf <+15>: mov %eax,0x8(%esp)
0x08048be3 <+19>: movl $0x804a439,0x4(%esp)
0x08048beb <+27>: mov 0x30(%esp),%eax
0x08048bef <+31>: mov %eax,(%esp)
=> 0x08048bf2 <+34>: call 0x8048870 <__isoc99_sscanf@plt>
0x08048bf7 <+39>: cmp $0x1,%eax
0x08048bfa <+42>: je 0x8048c01 <phase_1+49>
0x08048bfc <+44>: call 0x8049455 <explode_bomb>
0x08048c01 <+49>: cmpl $0x19a,0x1c(%esp)
0x08048c09 <+57>: je 0x8048c10 <phase_1+64>
0x08048c0b <+59>: call 0x8049455 <explode_bomb>
0x08048c10 <+64>: add $0x2c,%esp
0x08048c13 <+67>: ret
我正在使用二进制炸弹,它提供了汇编代码,必须从汇编代码中找到正确的输入以对其进行解散。我是GDB和Assembly的新手,所以他在代码的特定部分遇到了麻烦。
我已在phase_1处设置了断点,但是当我使用ni遍历代码时,炸弹在到达<explode_bomb>
的位置时会爆炸,有什么办法可以解决?我知道eax
必须等于1,才能使炸弹不爆炸。我对第一个函数调用中的内容感到困惑,当我键入si时,它看起来像这样。
=> 0x08048870 <+0>: jmp *0x804d058
0x08048876 <+6>: push $0x98
0x0804887b <+11>: jmp 0x8048730