2016-06-20 40 views
1

当我调试的代码,并发现:为什么跳进不可用的地址(GDB)

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 

Q:为什么 “JMP 0x8048567” 跳进< +103>?它不存在指令。重点是什么?谢谢。

回答

1

为什么“jmp 0x8048567”跳转到< +103>?它不存在指令

这很可能是0x8048567确实存在的指令。你可以用x/4i 0x8048567看到它。

可能发生的情况是0x8048565上的指令并不存在,但GDB并不知道这种情况,继续将一条指令拆分为另一条指令,并且与实际的指令流不同步。

+0

如何获得0x8048565的真实指令? –

+0

* 0x8048565处没有*真正的指令,只有可以解释为十进制,十六进制或浮点数的字节或指令。如果你在'0x8048565'解释字节作为指令,你会得到GDB已经向你显示的'dec%edx'。 –

相关问题