cmp和je在比较相等值时不起作用

时间:2011-09-30 03:19:53

标签: x86 cmp

[家庭作业免责声明]

我正在研究binary bomb lab。基本上,我必须使用“炸弹”可执行文件的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值。但是,当我在程序执行中达到这一点时,即使ebx和eax是相同的值,也不会调用je。在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) 

为什么这不起作用?这是第一次出现这个问题的任务。

1 个答案:

答案 0 :(得分:1)

(%eax)%eax不同。

(%eax)表示加载eax指向的值,而不是eax本身。