Lldb 使用 x去查看内存中的对象

(lldb) po 0xa00000000006e652
en
(lldb) po [$x20 class]
NSTaggedPointerString
(lldb) p/x $x20
(unsigned long) $36 = 0xa00000000006e652
(lldb) x/20xg 0xa00000000006e652
error: memory read failed for 0xa00000000006e600

这样一个对象,使用po 去看能够正常的显示,但是具体的看内存的时候就不能读了

而且看这个数字也不像是一个内存地址

这是一个什么情况

这个叫NSTaggedPointerString的东西, 是把字符串塞在寄存器里, 并不是一个指针

低4位是长度, 65 6e是字符串

In [1]: chr(0x6e)
Out[1]: 'n'

In [2]: chr(0x65)
Out[2]: 'e'

https://www.mikeash.com/pyblog/friday-qa-2015-07-31-tagged-pointer-strings.html

明白了
謝謝
之前 用x/s 去看的時候是從0x52開始解釋的,原來是從第5位開始的