【问题标题】:cmp and je not working when comparing equal values比较相等的值时 cmp 和 je 不起作用
【发布时间】:2011-09-30 03:19:53
【问题描述】:

[作业免责声明]

我正在处理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) 

为什么这不起作用?这是该作业第一次出现此问题。

【问题讨论】:

  • 上次我检查(%eax) 表示加载eax 指向的值,而不是eax 本身。虽然我对这个确切的汇编语法不太熟悉。
  • 是的,我只是被愚弄了。哎呀。谢谢,我现在找到了正确的答案。 :)
  • 请随意将其作为解决方案提交,以便我将其标记为最佳答案。
  • 做出了我的回答。几年前,我在我的一门课上有几乎完全相同的项目!哦,怀旧... :)
  • AT&T 语法让我暴躁。难怪你有麻烦。手动解析比 Intel 难很多。

标签: x86 cmp


【解决方案1】:

(%eax)%eax 不同。

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

【讨论】:

    最近更新 更多