IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> iOS开发:对于动态库共享缓存(dyld)的了解 -> 正文阅读

[移动开发]iOS开发:对于动态库共享缓存(dyld)的了解


在了解动态库共享缓存之前,我们先了解一下APP从开发到安装到手机的基本过程
1、从开发到打包
在这里插入图片描述 MJRefreshExample.app中的 MJRefreshExample文件是 iOS中的可执行文件,文件格式是 Mach-O

这里有一个很重要的过程需要说明,从下面代码编译的流程图可以知道,不同的OC代码,编译出来的汇编代码可能是一样的。
![在这里插入图片描述](https://img-blog.csdnimg.cn/e5ee8ebdedb34adea681ca94a3554bcb.png

2、上传和安装在这里插入图片描述
在了解了APP从开发到安装到手机的基本过程,我们对了解dyld就会有更深的理解。

1、dyld由来

如果在没有使用dyld之前,那么几个APP的通用动态库,需要各自编译一遍,这样就特别消耗内存。形象图如下:
在这里插入图片描述

但是,假如我们做了优化,把通用动态库放在一个所有APP都可以访问的位置,那么就可以把重复需要编译的库,只要实现一遍就可以。形象图如下:
在这里插入图片描述
通过以上我们就可以看出来,APP越多,每个APP引用的动态库越多,那么共享缓存的优势就越明显。

而苹果官方从iOS3.1开始,为了提高手机性能,就将绝大部分的系统动态库文件都打包存放到了一个缓存文件中(dyld shared cache
其缓存文件路径为:/System/Library/Caches/com.apple.dyld/dyld_shared_cache_armX

dyld全称为:dyld shared cache,直接翻译为动态库共享缓存。

那么接下来我们主要来了解一下dyld指令集、如何加载以及如何抽取动态库。

2、dyld指令集

1、指令集架构
dyld_shared_cache_armXX代表ARM处理器指令集架构:

v6
iPhone、iPhone3G
iPod Touch、iPod Touch2

v7
iPhone3GS、iPhone4、iPhone4S
iPad、iPad2、iPad3(The New iPad)
iPad mini
iPod Touch3G、iPod Touch4、iPod Touch5

v7s
iPhone5、iPhone5C
iPad4

arm64
iPhone5S、iPhone6、iPhone6 Plus、iPhone6S、iPhone6S Plus
iPhoneSE、iPhone7、iPhone7 Plus、iPhone8、iPhone8 Plus、iPhoneX
iPad5、iPad Air、iPad Air2、iPad Pro、iPad Pro2
iPad mini with Retina display、iPad mini3、iPad mini4
iPod Touch6

2、所有指令集原则上都是向下兼容的。
3、动态库共享缓存一个非常明显的好处是节省内存。
4、现在的ida、Hopper反编译工具都可以识别动态库共享缓存。

3、如何加载动态库

在Mac\iOS中,是使用了/usr/lib/dyld程序来加载动态库。
dyld 有两种解释,大众比较偏向第一种说法:

dynamic link editor:动态链接编辑器
dynamic loader:动态加载器

dyld的源码地址:https://opensource.apple.com/tarballs/dyld/,有兴趣的可以多了解一下。

4、如何抽取动态库

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

clang++ -o dsc_extractor dsc_extractor.cpp

3、使用dsc_extractor

./dsc_extractor  动态库共享缓存文件的路径   用于存放抽取结果的文件夹

执行过程如下:
在这里插入图片描述

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-06-25 18:16:18  更:2022-06-25 18:18:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 3:50:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码