2012-10-13 30 views
0

我想明白這一點在GDB在那裏我看到以下內容:爲什麼二進制值與NASM x86中的十六進制表示不匹配?

(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

你在看兩個完全不同的東西。你的第一個命令輸出eax寄存器的值。你的第二個命令輸出內存中特定位置的值。沒有理由以任何方式等同於另一方。

由於gdb幫助說:

檢查內存:X/FMT 地址
ADDRESS是內存地址的表達式來檢查。

至於你的最後一個問題,eax的低字節是000110100001是十六進制的11010是十六進制的a。所以0x1a

相關問題