Mach-O
Mach-O(まーく・おー)はコンパイラが生成するオブジェクトファイルおよび実行ファイルのファイルフォーマットである。NEXTSTEPに由来し、macOSで標準のバイナリファイルフォーマットとして採用されている。
拡張子 | なし、.o、.dylib |
---|---|
種別 | バイナリ、実行可能、オブジェクト、共有ライブラリ、コアダンプ |
複数アーキテクチャのバイナリを保持する事が可能である。(ファットバイナリ)
以下のような構造になっている。
- FatHeader
- アーキテクチャの数を含む。なくてもよい。
- fat_arch
- FatHeaderの後に続く。CPUの種類などをふくむ。FatHeaderがある場合のみ存在する。
- MachHeader
- CPUの種類、ファイルの種類、ロードコマンドの数を含む。
- ロードコマンド
- MachHeaderの後にロードコマンドがいくつか続く。これはセグメントの情報や実行されるときのレジスタの初期値を指定する。
実行ファイルとして体をなすにはロードコマンドは少なくともセグメントコマンドとスレッドコマンドが必要である。
Carbonアプリケーションではオブジェクトファイル・実行ファイルのフォーマットとしてPreferred Executable Format (PEF) とMach-Oの双方を利用できるが、macOSの機能を利用するにはMach-Oが最も適する。