为什么二进制值与NASM x86中的十六进制表示不匹配?

时间:2012-10-13 21:49:18

标签: assembly binary nasm

我试图在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?

1 个答案:

答案 0 :(得分:0)

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

正如gdb帮助所说:

  

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

关于您的上一个问题,eax的低字节为00011010。十六进制00011。十六进制1010a。所以0x1a