[作业免责声明]
我正在研究二元炸弹实验室。基本上,我必须使用“炸弹”可执行文件的 objdump 来找到正确的输入字符串来解除“炸弹”。目前我已经解决了 5/7 阶段,并且正在处理包含此程序集的第 6 阶段:
8048eb0: 39 18 cmp %ebx,(%eax)
8048eb2: 74 05 je 8048eb9 <phase_6+0x49>
8048eb4: e8 d0 0a 00 00 call 8049989 <explode_bomb>
为了不引爆炸弹,我需要将 ebx 和 eax 设置为相同的值,以便je
调用它而不是explode_bomb
函数。所以,我找到了一个输入字符串,它给出了相同的 ebx 和 eax 值。但是,当我在程序执行中达到这一点时,je
即使 ebx 和 eax 的值相同,也不会调用 。在 GDB 中:
Good work! On to the next...
134530284
Breakpoint 2, 0x08048e74 in phase_6 ()
Current language: auto; currently asm
(gdb) break *0x8048eb0
Breakpoint 3 at 0x8048eb0
(gdb) c
Continuing.
Breakpoint 3, 0x08048eb0 in phase_6 ()
(gdb) print $ebx
$1 = 134530284
(gdb) print $eax
$2 = 134530284
(gdb) si
0x08048eb2 in phase_6 ()
(gdb) si
0x08048eb4 in phase_6 ()
(gdb) si
0x08049989 in explode_bomb ()
(gdb)
为什么这不起作用?这是这个问题第一次出现这个问题。