инструкция cmp в сборке? - PullRequest
       36

инструкция cmp в сборке?

0 голосов
/ 22 октября 2018

У меня есть инструкция по сборке следующим образом

=> 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.Так что я очень смущен.Спасибо.

...