- 从iOS3.1开始,为了提高性能,绝大部分的系统动态库文件都打包存放到了一个缓存文件中(dyld shared cache)
- 缓存文件路径:
/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armX
- (X所代表的是当前设备CPU所支持的指令集架构)
- 现在的ida、Hopper反编译工具都可以识别动态库共享缓存
-
动态库共享缓存一个非常明显的好处是节省内存
Snip20200804_3.png
动态库的加载
在Mac\iOS中,是使用了/usr/lib/dyld程序来加载动态库
dyld
:
- dynamic link editor,动态链接编辑器
- dynamic loader,动态加载器
dyld源码
https://opensource.apple.com/tarballs/dyld/
提取动态库
1、首先要将设备里的/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armX
文件拷贝到本机。
2、下载dyld源码
3、修改dyld源码中的aunch-cache/dsc_extractor.cpp
文件,将#if预处理指令的条件判断0改为1。
4、执行下面命令编译dsc_extractor.cpp
文件
clang++ -o dsc_extractor dsc_extractor.cpp
5、运行dsc_extractor开始提取动态库
./dsc_extractor 动态库共享缓存文件的路径 用于存放抽取结果的文件夹
网友评论