我知道如果你在 Mac OS 的源代码中定义了一堆 @"" NSString 对象。这些 NSString 将存储在 Mach-O 库中的一个段中。
Section
sectname __ustring
segname __TEXT
addr 0x000b3b54
size 0x000001b7
offset 731988
align 2^1 (2)
reloff 0
nreloc 0
flags 0x00000000
reserved1 0
reserved2 0
0x0000
如果我对二进制文件进行十六进制转储,它们将与分隔符一一紧密对齐。我想知道的是Mac OS X中的加载器在程序运行时如何加载这些NSStrings?它们是通过识别分隔符简单地加载0x0000
还是这些是二进制文件中其他地方的字符串偏移表,指向单独的 NSString 对象?谢谢。
(我真正想做的是增加其中一个 NSString 的长度,所以我必须知道加载器如何识别这些单独的对象)
补充:我知道如果你在代码中定义像@“abc”这样的CStrings,它将进入cstring段。如果它是像 @"“”" 这样的字符串,并且没有 ascii 字符,根据我的挖掘,它将进入 ustring 部分。