在gdb中,如何反汇编先前的地址指令?

ken*_*uck 7 gdb disassembly

我们知道,在给定地址(包括)之后反汇编指令可以通过以下方式实现:

x/5i address
Run Code Online (Sandbox Code Playgroud)

这将打印5条指令,但如何拆解前一条指令?

我正在调试JIT代码,所以像拆解一行这样的东西不起作用.我可以反汇编包含地址的随机范围:

disas address-10 address+10
Run Code Online (Sandbox Code Playgroud)

但这很尴尬,你会看到(bad)(希望不在中间!)并开始担心你没有得到正确的东西.我正在寻找的是:

x/-5i address
Run Code Online (Sandbox Code Playgroud)

,但以上将无法正常工作.

Emp*_*ian 9

x/-5i地址不起作用

在x86或任何具有可变指令大小的体系结构上,通常无法知道上一条指令的起始地址,因此无法可靠地反汇编先前的指令.

我做什么(很相似,你做什么)x/15i $pc-35.当您退回足够数量的字节(此处为35)时,指令流反汇编通常会重新同步,您只能(bad)在开头看到一条或两条指令,但周围的指令$pc看起来是正确的.