Assembly 使用GDB从4字节寄存器读取4个以上字节

Assembly 使用GDB从4字节寄存器读取4个以上字节,assembly,x86,gdb,cpu-registers,Assembly,X86,Gdb,Cpu Registers,我有一个理解的问题。例如,32位x86芯片的寄存器长度为4字节。好的使用gdb,我可以指定从目标寄存器读取4个字节。(x/4b$edx) 但如果我输入x/40b,这意味着“从4字节寄存器中给我40字节”。这使我非常困惑。这怎么可能 是在第四个字节“垃圾”之后,还是来自内存/寄存器中的另一个区域?x读取内存,而不是寄存器 它从您使用的表达式(恰好包含一个寄存器值)中获取一个地址,并将其递增,以从内存中读取您所要求的字节数 这些字节都不是寄存器值。寄存器值仅出现在x输出的地址列中。(仅当您使用的表达

我有一个理解的问题。例如,32位x86芯片的寄存器长度为4字节。好的使用gdb,我可以指定从目标寄存器读取4个字节。(
x/4b$edx

但如果我输入
x/40b
,这意味着“从4字节寄存器中给我40字节”。这使我非常困惑。这怎么可能


是在第四个字节“垃圾”之后,还是来自内存/寄存器中的另一个区域?

x
读取内存,而不是寄存器

它从您使用的表达式(恰好包含一个寄存器值)中获取一个地址,并将其递增,以从内存中读取您所要求的字节数

这些字节都不是寄存器值。寄存器值仅出现在
x
输出的地址列中。(仅当您使用的表达式是单个寄存器,而不是
$eax+$edi
$edi+16
(char*)symbol+12

如果需要寄存器值,请使用
p/x$eax
,或
info reg
,或
layout reg