General
(征西)
#1
(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
General
(征西)
#3
明白了
謝謝
之前 用x/s 去看的時候是從0x52開始解釋的,原來是從第5位開始的