装配JE在CMP之后没有跳跃

时间:2015-09-27 08:41:56

标签: assembly gdb

我有以下代码片段导致我出现问题。

0x0000000000401556 <+56>:   cmp    $0x37,%edx
0x0000000000401559 <+59>:   je     0x401560 <phase_5+66>
0x000000000040155b <+61>:   callq  0x401a64 <do_not_come_here>
0x0000000000401560 <+66>:   pop    %rbx
0x0000000000401561 <+67>:   retq 

这里是+59行的寄存器状态的一部分,就在它跳转与否之前。

rax            0x6  6
rbx            0x6d97c0 7182272
rcx            0x3  3
rdx            0x21 37
rsi            0x6d97c0 7182272
rdi            0x6d97c6 7182278

现在显然我们想要跳到+66行并返回。然而,尽管事实如此

%rdx = 37 (hence %edx=37),

代码不会跳转并进入“do_not_come_here”。 我的gdb报告说,在跳转时,设置的标志是

eflags         0x297    [ CF PF AF SF IF ]

我甚至没有ZF旗帜。到底是怎么回事?请帮帮我。

1 个答案:

答案 0 :(得分:0)

糟糕。我的错。 $ 0x37与37不一样,我完全被骗了。