一.引言
什么是dyld_shared_cache?
-
dyld是macOS和iOS系统中的动态链接器(Dynamic Linker),负责在程序运行时加载和链接共享库(如框架和动态库)。
-
shared_cache是一个预编译的共享库缓存,包含系统中常用的动态库(如 Foundation、UIKit 等),以优化应用程序的启动速度和内存使用。
-
arm表示该缓存文件是针对ARM架构(Apple的处理器架构,如A系列芯片或M系列芯片)编译的。
-
有什么作用?
-
提高性能:通过将常用的动态库预先编译并存储在共享缓存中,减少应用程序启动时的加载时间。
-
节省内存:多个应用程序可以共享同一个缓存文件,避免重复加载相同的库。
-
优化存储:将多个动态库合并到一个缓存文件中,减少磁盘空间占用。
二.编译
在iOS系统中文件路径为/System/Library/Caches/com.apple.dyld/,macOS我也不知道在哪,有能力的自己找。既然苹果是通过dyld加载的,并生成了dyld_shared_cache的资源包,那么它也自然支持解包了。
打开dyld源码里的xcodeproj,在底部的过滤器搜索dsc_extractor。

cd进入所在文件夹,

用clang++编译clang++ -o dsc_extractor dsc_extractor.cpp,结果报错。
只有这一段代码是用来提取的,其他代码全部删掉即可。

编译通过,生成对应文件。

三.使用
用TrollStore或者越狱安装Filza,打开/System/Library/Caches/com.apple.dyld/,提取dyld_shared_cache_armX和dyld_shared_cache_armX.1到mac上,iPhone 11 Pro是arm64e所以X是64e。

运行命令./dsc_extractor dyld_shared_cache_arm64e test提取,如果没有dyld_shared_cache_armX.1会报错返回-1,

把dyld_shared_cache_armX.1放进去,再运行一次就不会报错了。

提取文件夹内容如下。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
文章评论