Mach-O文件的来源
根据Wiki描述Mach-O为Mach Object文件格式的缩写,其由卡耐基梅隆大学和Apple开发和维护
Mach-O的格式
Mach-O分为多个格式
Mach-O格式 | 说明 |
---|---|
Executable | 可执行程序,可运行的App最终会变成这个 |
Bundle | 不可以被Link的动态库,运行时可以通过NSBundle基于dlopen方法加载 |
StaticLibrary | 静态链接,Xcode默认情况下.a库会使用 |
DynamicLibrary | 动态链接,Xcode默认情况下.framework会使用 |
RelocatableObjectFile | 是编译过程中的中间产物,就是.o文件 |
Mach-O文件的结构
根据苹果的WWDC视频介绍,任何一个Mach-O的可执行文件(dylib和executable)可以分为三个区域
Mach-O区域 | 权限 | 作用 |
---|---|---|
TEXT | r-x读和执行 | 保存mach-o的文件头可执行的code以及constant常量 |
DATA | rw-读写 | 保存用于程序的全局和静态变量 |
LINKEDIT | r–只读 | 保存该库meta data,用来表示怎么加载 |
Universal Mach-O & Fat Mach-O & 多架构Framework
一个Mach-O可以包含多种架构,这种方式被苹果官方称为 Universal Mach-O, 俗称Fat Mach-O Fat-Framework等等,可以使用lipo工具进行组合和拆解
1 |
|
查看这个Mach-O文件包含了哪些架构可以使用
1 | lipo -info .../../../XXXX |