我想知道如何从 Mach-O 二进制文件的特定部分正确读取字符串。(这是 iOS 的二进制文件。)
我很好奇在__DATA
段中找到的字符串,__cfstring
部分。这些部分似乎包含简单结构的数组:
NSConstantString
{
Class class;
const char *string;
int length;
}
问题归结为:您如何确定 的编码string
?
它在此处CFString
可用的来源中进行了描述。它是 ASCII 或 UTF16(在处理器字节序中)。另请参阅 的源代码,可在此处获得。寻找。常量字符串最终是由这段代码生成的,寻找。源代码说常量 CFString 的格式是clang
GenerateConstantString
GetAddrOfConstantCFString
struct __builtin_CFString {
const int *isa; // point to __CFConstantStringClassReference
int flags;
const char *str;
long length;
};
(至少在 OS X 上,我不确定 iOS。)flags
告诉你它是 ASCII 还是 UTF16。