Mach-O

Mach-O
Mac OS X中可执行二进制的图标
扩展名
无, .o, .dylib
统一类型标识com.apple.mach-o-binary
开发者卡内基梅隆大学/蘋果公司
格式类型二进制文件可执行文件目标代码動態函式庫内核转储
作为容器ARM,SPARC,PA-RISC,PowerPC以及x86的可执行文件,内存转储

Mach-OMach Object文件格式的缩写,它是一种用于可執行檔目标代码動態函式庫内核转储的檔案格式。作为a.out格式的替代者,Mach-O提供了更强的扩展性,并提升了符号表中資訊的访问速度。

Mach-O曾经为大部分基于Mach核心的作業系統所使用。NeXTSTEPDarwinMac OS X等系统使用这种格式作为其原生可執行檔,库和目标代码的格式。而同样使用GNU Mach作为其微内核GNU Hurd系统则使用ELF而非Mach-O作为其标准的二进制檔案格式。

Mach-O文件结构

每个Mach-O檔案包括一个Mach-O头,然后是一系列的载入命令,再是一个或多个區塊,每个块包括0到255个。Mach-O使用REL再定位格式控制对符号的引用。Mach-O在两级命名空间中将每个符号编码成“对象-符号名”对,在查找符号时则采用线性搜索法。

Mach-O的基本结构,引用了檔案中数据页的变长「載入指令」表,也用于Accent核心的可执行檔格式中,而这种格式则是基于来自Spice Lisp的理念。

多重架构二进制

NeXTSTEPOPENSTEPMac OS X中,可以将多个Mach-O檔案组合进一个多重架构二进制檔案中,以用一个单独的二进制檔案支持多种架构的指令集。例如,一个Mac OS X中的多重架构二进制可以包含32位元64位元PowerPC程式碼,或PowerPC和x86的32位元程式碼,甚至包含32位元的PowerPC程式碼,64位元PowerPC程式碼,32位元x86程式碼和64位元x86(AMD64)。

Mach-O的未来

由于Darwin 10.0(对应Mac OS X 10.6)中对Mach-O文件的结构定义进行了一些重要的修改,因此在Mac OS X 10.6中以默认选项编译的二进制文件只能在10.6平台中运行。其差异之一在于Mac OS X的连接器(dyld)产生的载入命令无法为早期版本的Mac OS X所理解。另外一个重要改变是Link Edit表(__LINKEDIT段)的作用。在10.6中,新的Link Edit表中的无用資訊会被去除,从而起到压缩的作用,而Mac OS X 10.5及以前的版本无法识别这种新格式。为解决这个问题,在连接时常常需要使用-mmacosx-version-min=连接器标志。苹果公司作为Mach-O格式的维护者,推荐开发者在建立二进制应用程序的时候使用与其所用的對應SDK版本标志。

参见

外部链接

  • Mach-O File Format Reference (Apple Inc.)
  • Mach Object Files
  • Mach-O Dynamic Library Reference (页面存档备份,存于互联网档案馆
  • Mach-O Manual Page (页面存档备份,存于互联网档案馆
  • Mach-O Viewer (页面存档备份,存于互联网档案馆
執行檔目标文件英语object file格式
  • a.out
  • AIF英语Arm Image Format
  • COFF
  • CMD英语CMD file (CP/M)
  • COM
  • ECOFF英语ECOFF
  • ELF
  • GOFF英语GOFF
  • Hunk英语Amiga Hunk
  • Mach-O
  • MZ
  • NE英语New Executable
  • OMF英语Relocatable Object Module Format
  • OS/360英语OS/360 Object File Format
  • PE
  • PEF英语Preferred Executable Format
  • XCOFF英语XCOFF
  • 格式比较英语Comparison of executable file formats
  • .exe
版本
macOS wordmark
应用程序
停止開發
实用工具
停止開發
技術與
使用者界面
停止開發