六:mach-O文件
2019-02-19 本文已影响0人
Ray_lawq
定义:
Mach-O 为Mach object文件格式的缩写,他是一种用于可执行文件,目标代码,动态库文件格式。作为a.out格式的替代,mach-o提供了更强的扩展性。
常见的格式:
目标文件: .o
库文件: .a .dylib framework
可执行文件: dyld .dsym
可以通过 $ file "文件名字” 来产看是否是machO文件

那么xcode是怎么确定二进制文件包含什么架构呢?
首先:debug 模式是单一架构
然后:release 模式是多架构,下图详见:

通用二进制文件特点:

【注】:
这个概念是苹果提出的,在这个以前,二进制文件只会是单一的架构,如果需要运行到别的架构中,系统去处理(以模拟器的方法去运行),这样导致运行效率比较差。
使用lipo 命令可以对通用二进制文件拆分,也可以对单一二进制文件合并




【注】:
LC_SEGMENT_64 (_PAGEZERO)段在文件中不存在,但是在虚拟内存中存在(64位中是4G),不具备访问权限(公共区域),专门用来处理空指针。

dyld:苹果动态链接器,是苹果操作系统重要的组成部分,在系统内核做好准备工作以后,交由dyld负责后续的工作。
