【问题标题】:Why jump into the unavailable address(GDB)为什么跳转到不可用地址(GDB)
【发布时间】:2016-10-21 05:53:50
【问题描述】:

当我调试了一段代码,发现:

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 

问:为什么“jmp 0x8048567”会跳转到?它不存在指令。重点是什么?谢谢。

【问题讨论】:

    标签: gdb disassembly


    【解决方案1】:

    为什么“jmp 0x8048567”会跳转到?它不存在指令

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

    可能发生的情况是0x8048565 处的指令实际上并不存在,但 GDB 并不知道这一点,继续反汇编一条又一条指令,并与实际指令流不同步。

    【讨论】:

    • 如何在0x8048565得到真正的指令?
    • 0x8048565没有真正的指令,只有字节可以解释为十进制、十六进制、浮点或指令。如果您将 0x8048565 处的字节解释为指令,您将得到 GDB 已经向您显示的 dec %edx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 2010-11-23
    • 2012-01-22
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    相关资源
    最近更新 更多