首页 > 解决方案 > 使用 GDB 从 4 字节寄存器读取超过 4 字节

问题描述

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

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

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

标签: assemblyx86gdbcpu-registers

解决方案


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

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

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

如果您想要一个寄存器,请使用p /x $eax、 或info reg、 或layout reg


推荐阅读