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

问题描述

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

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

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

解决方法

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

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

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

如果要注册,请使用p /x $eaxinfo reglayout reg

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...