1

我想知道如何从 Mach-O 二进制文件的特定部分正确读取字符串。(这是 iOS 的二进制文件。)

我很好奇在__DATA段中找到的字符串,__cfstring部分。这些部分似乎包含简单结构的数组:

NSConstantString
{
    Class class;
    const char *string;
    int length;
}

问题归结为:您如何确定 的编码string

4

1 回答 1

3

它在此处CFString可用的来源中进行了描述。它是 ASCII 或 UTF16(在处理器字节序中)。另请参阅 的源代码,可在此处获得。寻找。常量字符串最终是由这段代码生成的,寻找。源代码说常量 CFString 的格式是clangGenerateConstantStringGetAddrOfConstantCFString

  struct __builtin_CFString {
     const int *isa; // point to __CFConstantStringClassReference
     int flags;
     const char *str;
     long length;
 };

(至少在 OS X 上,我不确定 iOS。)flags告诉你它是 ASCII 还是 UTF16。

于 2010-12-01T09:00:52.647 回答