Mach-O

作者: 小凡凡520 | 来源:发表于2019-11-05 15:39 被阅读0次
一、名词解释

Executable:可执行文件
Dylib:动态库
Bundle:无法被连接的动态库,只能通过dlopen()加载
Image:指的是Executable,Dylib或者Bundle的一种
Framework:动态库(可以是静态库)和对应的头文件和资源文件的集合

二、mach-o组成结构
1572919064885381.png

Header:头部,包含可以执行的CPU架构,比如x86,arm64
Load commands:加载命令,包含文件的组织架构和在虚拟内存中的布局方式
Data:数据,包含load commands中需要的各个段(segment)的数据,每一个Segment都得大小是Page的整数倍

三、加载动态库

dyld会首先读取mach-o文件的Header和load commands。
接着就知道了这个可执行文件依赖的动态库。例如加载动态库A到内存,接着检查A所依赖的动态库,就这样的递归加载,直到所有的动态库加载完毕。通常一个App所依赖的动态库在100-400个左右,其中大多数都是系统的动态库,它们会被缓存到dyld shared cache,这样读取的效率会很高。

相关文章

网友评论

      本文标题:Mach-O

      本文链接:https://www.haomeiwen.com/subject/ftxebctx.html