问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何解iOS系统中系统库的dyld缓存

发布网友 发布时间:2022-04-24 22:48

我来回答

1个回答

热心网友 时间:2023-10-13 23:05

这几天想反汇编看一下iOS 9系统中安全框架的实现代码,于是找到系统中的“/System/Library/Frameworks/Security.framework/”目录,发现里面除了一些配置文件和本地化字符串文件,其它什么都没有,最重要的“Security”二进制文件更是没有踪影。
查询了许多资料之后才发现,原来从iOS 3.1开始,为了提高系统的性能,所有的系统库文件都被打包保存到了一个很大的缓存文件当中,而为了减少冗余,原始的那些未打包的库二进制文件都被删掉了。
这个缓存在系统中称作dyld缓存,几乎所有的iOS程序都会用到动态库,而动态库在加载的时候都需要用dyld(位于/usr/lib/dyld)程序进行链接。很多系统库几乎都是每个程序都要用到的,与其在每个程序运行的时候再一个一个将这些动态库都加载进来,还不如先把它们打包好,一次加载进来来的快。
dyld缓存在系统中位于“/System/Library/Caches/com.apple.dyld/”目录下,文件名是以“dyld_shared_cache_”开头,再加上这个dyld缓存文件所支持的指令集。在这个目录下,有可能有多个dyld缓存文件,对应所支持的不同指令集。比如,在iPad Air 2上,该目录下就存在两个缓存文件:

因为iPad Air 2是64位的ARM(ARM v8)处理器,同时它也兼容32位的ARM应用,所以就要有两个缓存文件。dyld_shared_cache_arm64对应64位的版本,而dyld_shared_cache_armv7s对应32位的版本。到目前为止,所有iOS支持的ARM指令集有以下四种:
1)armv6
2)armv7
3)armv7s
4)arm64
没有了系统库的原始二进制版本是不是就没发分析了呢?当然不是,我们还可以从dyld缓存文件中将系统库的原始二进制文件给解出来。目前,有两个工具可以做到这点,一是dyld_decache,还有一个就是jtool。
使用dyld_decache可以整体提取dyld缓存文件中的所有库原始二进制文件:
[plain] view plain copy
dyld_decache [-o folder] [-f name [-f name] ...] path/to/dyld_shared_cache_armvX
-o用来指定提取出来的文件所要保存的路径,如果不指定,默认就在当前目录下创建一个叫做“library”的目录保存。-f用来说明要提取库的名字,如果要提取的库不止一个,那么每个库的名字前面都要带上-f。如果不指定默认行为就是把缓存文件中所有的库文件全部都提取出来。例如,如果想要解压Security库,可以使用下面的命令:
[plain] view plain copy
dyld_decache -o ./Security -f Security ./dyld_shared_cache_armv7s
前面也提到了,还可以用jtool来达到提取指定库文件的目的:
[plain] view plain copy
jtool -extract name path/to/dyld_shared_cache_armvx
-extract用来指定要提取库的名字。jtool默认不支持提取全部缓存中库文件的功能,只能一个一个提取。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? ios打包测试我需要怎么选择打包要修改debug的状态吗 申请广发信用卡需提供什么资料 如何适配Arm64架构的 iosAPP-IOS 怎么申请广发样样行? 手机CPU中基于ARM构架设计CPU的“海思”,基于ARMv7-A指令集自行设计CPU... 广发银行信用卡申请办理需要多久 oc怎么获取ios设备的cpu架构 广发信用卡的申请流程是什么啊? ios中怎么将muPDF编译成framwork,能支持armv7,arm64,armv7s? 如何申请广发银行的信用卡? ios 系统自带方法与第三方方法相冲突怎么处理 如何实现protobuf在XCODE上armv7/armv7s/i386的交叉编译 / 蓝讯 广发信用卡怎么申请办理信用卡 怎么查ios app中的.a库支持arm iOS开发之:ios设备中,armv6/armv7/armv7s架构的机器各有哪些? 我朋友有一个清明上河图第十卷十字绣纯手工的1米成2米的值12万吗 纯手工淮山薏米糕的做法 有那位师傅会用传统方法制作鲜湿圆米粉,纯手工的! 纯手工制作和传统生榨米粉呐个味道好吃? 纯手工1.9米骏马图多少钱 广发银行的信用卡具体申请流程是怎么样的?可以分享一下吗? 想申请一张广发银行信用卡,申请条件都有哪些呢 如何实现protobuf在XCODE上armv7/armv7s/i386的交叉编译 我们申请广发信用卡需要哪些条件? ios 如何通过内存地址找到相关代码 广发信用卡申请需要什么条件?要怎么申请? 现在上传appstore 要支持armv7s吗 Xcode的Architectures和Valid Architectures的区别 64bit编译 ios 能编译动态库吗 广发银行申请广发卡和电子帐户是什么意思 如何编译OpenCV进行IOS7 我朋友要到银行贷款300万,要我做中间担保人,我想知道做中间担保人都需要什么条件呀,需要我手里有3? 银行贷款三年期为什么中间还要每年还一次是什么意思 找重庆银行贷款中间有个中介公司合理吗 银行贷款中间业务 贷款的中间商收费上限是多少? 中国人保的客服电话 银行贷款被中间人抽8个点合法吗? 向银行贷款,中间人承担什么责任 人保财险的客服电话是多少