Mach-O为Mach Object文件格式的缩写,它是一种用于可执行文件,目标代码,动态库,内核转储的文件格式。作为a.out格式的替代,Mach-O提供了更强的扩展性,并提升了符号表中信息的访问速度。
Mach-O曾经为大部分基于Mach核心的操作系统所使用。NeXTSTEP,Darwin和Mac OS X等系统使用这种格式作为其原生可执行文件,库和目标代码的格式。而同样使用GNU Mach作为其微内核的GNU Hurd系统则使用ELF而非Mach-O作为其标准的二进制文件格式。
扩展名 | 无, .o, .dylib |
---|---|
统一类型标识 | com.apple.mach-o-binary |
开发者 | 卡内基梅隆大学/苹果公司 |
格式 | 二进制文件,可执行文件,目标代码,动态库,内核转储 |
专门属 | ARM,SPARC,PA-RISC,PowerPC以及x86的可执行文件,内存转储 |
Mach-O文件结构
每个Mach-O文件包括一个Mach-O头,然后是一系列的载入命令,再是一个或多个块,每个块包括0到255个段。Mach-O使用REL再定位格式控制对符号的引用。Mach-O在两级命名空间中将每个符号编码成“对象-符号名”对,在查找符号时则采用线性搜索法。
Mach-O的基本结构,引用了文件中数据页的变长“加载命令”表,也用于Accent核心的可执行文件格式中,而这种格式则是基于来自Spice Lisp的理念。