0

我试图在 GDB 中理解这一点,我看到以下内容:

(gdb) print/t $eax
$2 = 1000000001001010000000011010
(gdb) x/4xb $eax
0x804a01a <testinput>:  0x41    0x42    0x43    0x44

这本质上是 ascii 值“ABCD”。我想一次获取一个字节的这些值,并尝试从获取 $al 中的第一个字节开始。但是 $al 包含 0x1a。

首先,二进制1000000001001010000000011010如何等于0x41 0x42 0x43 0x44?(我认为 0x41 等于 0100 0001 但我没有看到上面的模式) 其次,为什么 $al 包含 0x1a?

4

1 回答 1

0

你在看两个完全不同的东西。您的第一个命令输出eax寄存器的值。您的第二个命令输出内存中特定位置的值。没有理由以任何方式将一个等同于另一个。

正如gdb帮助所说:

检查内存: x/FMT ADDRESSADDRESS 是要检查的内存地址
的表达式。

至于你的最后一个问题,低字节eax00011010. 00011十六进制的。1010a十六进制的。所以0x1a

于 2012-10-13T21:57:45.313 回答