我有以下代码片段导致我出现问题。
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 :(得分:0)
糟糕。我的错。 $ 0x37与37不一样,我完全被骗了。