汇编中的cmp指令?

时间:2018-10-21 22:49:09

标签: assembly x86 cmp

我有如下的组装说明

=> 0x00000000004011ed <+53>:  cmp    $0x35,%ecx
   0x00000000004011f0 <+56>:  je     0x4011f7 <phase_5+63>
   0x00000000004011f2 <+58>:  callq  0x40171e <explode_bomb>
   0x00000000004011f7 <+63>:  pop    %rbx
   0x00000000004011f8 <+64>:  retq   

据我所知,将$ 35与$ ecx中的值进行比较,因此我显示 gdb寄存器中的内容是什么。

(gdb) i r
rax            0x605106 6312198
rbx            0x605100 6312192
rcx            0x23     35
rdx            0xa      10
rsi            0x4      4
rdi            0x605106 6312198
rbp            0x402500 0x402500 <__libc_csu_init>
rsp            0x7fffffffea10 0x7fffffffea10
r8             0x616aa7 6384295
r9             0x7ffff7fc6700 140737353901824
r10            0x7ffff7fc6700 140737353901824
r11            0x246    582
r12            0x400d00 4197632
r13            0x7fffffffeb00 140737488349952
r14            0x0      0
r15            0x0      0
rip            0x4011ed 0x4011ed <phase_5+53>
eflags         0x246    [ PF ZF IF ]
cs             0x33     51
ss             0x2b     43
ds             0x0      0
es             0x0      0
fs             0x0      0
gs             0x0      0

它是35,所以跳转指令应跳转到phase_5 + 63, 并跳过explode_bomb调用,但事实并非如此。

=> 0x00000000004011f0 <+56>:  je     0x4011f7 <phase_5+63>
   0x00000000004011f2 <+58>:  callq  0x40171e <explode_bomb>
   0x00000000004011f7 <+63>:  pop    %rbx
   0x00000000004011f8 <+64>:  retq   
End of assembler dump.

=> 0x00000000004011f2 <+58>:  callq  0x40171e <explode_bomb>
   0x00000000004011f7 <+63>:  pop    %rbx
   0x00000000004011f8 <+64>:  retq   
End of assembler dump.
(gdb) 

它实际上去调用explode_bomb函数。 所以我很困惑。谢谢。

0 个答案:

没有答案