我想知道如何从Mach-O二进制文件的特定部分正确读取字符串。 (这是iOS的二进制文件。)
我对__DATA
段__cfstring
部分中找到的字符串感到好奇。这些部分似乎包含简单结构的数组:
NSConstantString
{
Class class;
const char *string;
int length;
}
问题归结为:您如何决定string
的编码?
答案 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。