为什么跳转到不可用的地址(GDB)

时间:2016-06-20 04:33:12

标签: gdb disassembly

当我调试代码时,发现:

0x08048500 <+0>:  push %ebp
0x08048501 <+1>:  mov %esp,%ebp
...
0x08048563 <+99>: jmp 0x8048567 <Postion+103>   <===0x8048567 doesn't exist an instruction.
0x08048565 <+101>: dec %edx
0x08048566 <+102>: cmp %bh,%al
0x08048568 <+104>: test %edx,%esp 

问:为什么&#34; jmp 0x8048567&#34;跳到&lt; + 103&gt;?它不存在指令。重点是什么?感谢。

1 个答案:

答案 0 :(得分:1)

  

为什么&#34; jmp 0x8048567&#34;跳到&lt; + 103&gt;?它不存在指令

0x8048567处的指令很可能确实存在。您可以使用x/4i 0x8048567看到它。

可能发生的事情是0x8048565处的指令确实不存在,但GDB并不知道,继续反汇编一条指令,与实际指令失去同步流。