我试图在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?
答案 0 :(得分:0)
你正在看两件完全不同的东西。您的第一个命令输出eax
寄存器的值。您的第二个命令输出内存中特定位置的值。没有理由以任何方式等同于对方。
正如gdb
帮助所说:
检查记忆:x / FMT ADDRESS ADDRESS是要检查的内存地址的表达式。
关于您的上一个问题,eax
的低字节为00011010
。十六进制0001
为1
。十六进制1010
为a
。所以0x1a
。