位于文件系统中的iOS框架二进制文件在哪里?

Zma*_*ter 12 iphone jailbreak ios

我对iOS上的框架感到困惑.我认为它们基本上是一个包含动态库,标题和资源的目录.

但是在我的设备中,System/Library/Frameworks中的框架目录不包含动态库.这怎么可能?当需要它的应用程序启动时,是否应该将其加载到内存中?

Dus*_*ett 20

二进制文件不再存在于设备上(并且自iOS 3.1以来就没有):Apple已将它们全部合并为一个大的mmap()'ed缓存文件,以使应用程序启动更高效.由于页面通常永远不会更改,因此内核可以在每个运行的映像之间有效地共享它们 您仍然可以使用dlopen()缓存中保存的文件,因为dyld当缓存中存在给定库时,短路文件查找.

缓存文件位于/System/Library/Caches/com.apple.dyld,并以体系结构(armv6armv7)命名.可以使用此存储库中提供的dsc_extractor或KennyTM的dyld_decache 来提取其中的,但是一旦提取它们就无法实际正确地加载到内存中(因为它们都有效地将它们的符号表合并到缓存中.)

这里有一些更好的(虽然更老,更少知情,更深入)的文章:http://blog.howett.net/2009/09/cache-or-check/.