2015-09-27 57 views
0

我有下面的代码片段,这导致我的问题。JE不在CMP后跳转

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标志在那里。到底是怎么回事?请帮帮我。

+0

订单在这里不是问题。当我的断点为<+56>时,下一步将导致我到<+59>等等。 – user3467433

回答

0

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