【发布时间】:2011-10-10 03:29:02
【问题描述】:
我正在尝试从 iPhone Mach-O 二进制文件中读取常量(或初始化)字符串。我知道 3 个相关的 segment.sections 是 _TEXT._cstring _TEXT._ustring 和 _DATA._cfstring。但是,即使我知道字符串信息存储在我提取的这三个数据块中,我也无法理解它,而且看起来像垃圾 - 我看不到任何可识别的字符串。任何人都可以对此有所了解并让我了解读取字符串数据需要采取哪些步骤?
我查看了一些代码(来自 http://llvm.org/svn/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp 的 GetAddrOfConstantCFString()),但同样无法将其与我在二进制文件中看到的内容完全联系起来。
在我的情况下,相关部分的大小是:
__TEXT.__cstring (99 K-bytes)
__TEXT.__ustring (<200 bytes)
__DATA.__cfstring (29 K-bytes)
给你一个想法,__cfstring 部分的前 32 个字节,我认为它包含实际的字符串,如下所示:
转储_数据。_cfstring
00 00 00 00 c8 07 00 00 74 02 0d 00 15 00 00 00
00 00 00 00 c8 07 00 00 8c 02 0d 00 01 00 00 00
...
非常感谢您的帮助!
【问题讨论】:
-
认为它的目标是 iPhone,可能会以某种方式被压缩。
-
我认为
__cfstring部分将仅包含对象数据,这意味着它将具有指向__cstring部分的指针,该部分随后包含原始字符串字符。 -
ughoavgfhw,这听起来很合理,并且可以解释为什么 __cstring 比其他部分大。问题是 __cstring 数据看起来像垃圾。我试图将它解码为 UTF-16,但它没有产生一个普通的字符串。
标签: iphone c binary constants mach-o