深度了解可以看下这篇文章:探秘 Mach-O 文件
Mach-O术语
文件类型:
-
Executable:应用的主要二进制文件(比如.o文件)
-
Dylib:动态库(又称 DSO 或 DLL)
-
Bundle: 资源文件,不能被链接的 Dylib,只能在运行时使用 dlopen() 加载
Image:指的是Executable,Dylib或者Bundle的一种,文中会多次使用Image这个名词。
Framework:动态库和对应头文件和资源的集合
Mach-O文件
介绍了 Mach-O内部结构,每个分区和如何支持不同架构等。
1、 Mach-O被分为下图的几个segment:
-
__TEXT : 代码段 ,只读,包括函数,和只读的字符串,上图中类似__TEXT,__text的都是代码段
-
__DATA: 数据段,读写,包括可读写的全局变量等,上图类似中的__DATA,__data都是数据段
-
__LINKEDIT :包含了方法和变量的元数据(位置,偏移量),以及代码签名等信息。
2、每个segment又划分为不同的Sections
不同section区域存放内容:
-
Text.__text: 主程序代码
-
Text.__cstring:c 字符串
-
Text.__stubs:桩代码(桩代码就是用来代替某些代码的代码)
-
Text.__stub_helper
-
Data.__data :初始化可变的数据
-
Data.__objc_ima