在Mach-O __DATA段中找到的字符串是什么编码,__ cfstring部分使用?

时间:2010-12-01 01:32:38

标签: iphone string macos encoding mach-o

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

我对__DATA__cfstring部分中找到的字符串感到好奇。这些部分似乎包含简单结构的数组:

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

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

1 个答案:

答案 0 :(得分:3)

CFString可用here的来源中对其进行了描述。它是ASCII或UTF16(处理器端序)。 另请参阅clang的源代码,可用here。寻找GenerateConstantString。常量字符串最终由this piece of code生成,查找GetAddrOfConstantCFString。源代码表示常量CFString的格式为

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

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