问题描述
我有一个理解上的问题。例如,一个32位x86芯片的寄存器长度为4个字节。精细。使用gdb,我可以指定从目标寄存器读取4个字节。 (x/4b $edx
)。
但是,如果我输入x/40b
,则意味着“从4个字节的寄存器中给我40个字节”。这使我非常困惑。那怎么可能?
是在第四个字节“垃圾”之后,还是从内存/寄存器中的另一个区域访问?
解决方法
x
读取内存,而不是寄存器。
它从您使用的表达式中获取一个地址(恰好包含一个寄存器值),并对其进行递增以从内存中读取所需的字节数。
这些字节都不是寄存器 value 。寄存器值仅出现在x
输出的地址栏中。 (然后,仅当您碰巧使用的是单个寄存器而不是$eax + $edi
,$edi + 16
或(char*)symbol + 12
的表达式时)
如果要注册值,请使用p /x $eax
或info reg
或layout reg
。