gdb中的Little Endian

时间:2017-10-13 19:22:40

标签: x86 gdb endianness

        0x0      0x6      0x0       0x1

BIG - 00000000 00000110 00000000 00000001

LIT - 00000001 00000000 00000110 00000000

所以我期待0xcfb01420 + 2为0x6,但事实并非如此。我错过了什么吗?

(gdb) p &tx_q_sem->mlock.u.mtxa_owner
$41 = (volatile __uintptr_t *) 0xcfb01420
(gdb) p/x tx_q_sem->mlock.u.mtxa_owner
$34 = 0x601
(gdb) p (char)*(char*)(0xcfb01420+0)
$36 = 0x1
(gdb) p (char)*(char*)(0xcfb01420+1)
$37 = 0x6
(gdb) p (char)*(char*)(0xcfb01420+2)
$38 = 0x0
(gdb) p (char)*(char*)(0xcfb01420+3)
$39 = 0x0

我的假设是小端格式的0x601的字节序列应该与我在上面表示的方式相匹配。因此第二个字节应该全为零。在那里,我猜错了所有的半字节。

1 个答案:

答案 0 :(得分:2)

您的初始十六进制值都是缺失的数字,相对于您实际检查的数字。

000000010x01 - 它是8个二进制数字,所以是一个完整的字节。

所以0x601 == 0x0601 == 00000110 00000001

您可以在gdb中看到:

(gdb) print /t 0x601
$1 = 11000000001