iOS为了节省空间,将系统框架以动态库的形式,保存在dyld中,这样每个app都能使用这些库.也不需要每个app中都包含这些库.只需要在使用时调用就行.这个手机中就保存了一份.大大节省了内存.
系统动态库的位置
那系统动态库的存放位置在哪呢?
需要越狱后得手机能看到.
存放地址:/System/Library/Caches/com.apple.dyld/
通过funbox可以看到两个动态库dyld_shared_cache_arm64和dyld_shared_cache_armv7s

动态加载器dyld下载地址
苹果官方源码地址:dyld下载
一般来说文件名数组越大,文件最大的就是最新的代码.

修改源码
1.可以使用dyld源码中的launch-cache/dsc_extractor.cpp.将#if 0前面的代码删除(包括#if 0),把最后面的#endif也删掉.

2.执行命令生成dsc_extractor
$ clang++ -o dsc_extractor dsc_extractor.cpp

3.用生成的可执行文件分离系统库
$ ./dsc_extractor 动态库共享缓存文件的路径 用于存放抽取结果的文件夹

抽取后动态库包含两个文件夹:System和usr

可以用Hopper或者machoView查看系统的mach-o文件.

网友评论