gdb 中的 Little Endian

Little Endian in gdb

        0x0      0x6      0x0       0x1

大 - 00000000 00000110 00000000 00000001

LIT - 00000001 00000000 00000110 00000000

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

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

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

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

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

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

你可以在 gdb 中看到这个:

(gdb) print /t 0x601
 = 11000000001