Mach-O

自分が使っている Mac での実行ファイルについて。Mac OS X にはユニバーサルバイナリーという仕組みがある。

ふっと「gcc ってユニバーサルバイナリーを作れるのか?」と疑問に思った。/usr/bin/gccApple が拡張?した gcc で、AppleXcode 開発環境は、コンパイラにこの gcc を使うのだから作れるはずだ。man gcc を参照すると、-arch という APPLE ONLY と指定されたオプションがあった。hello world を C で書いて、gcc -arch ppcgcc -arch ppc -arch ppc64 で違いを見てみる(-arch i386 は自分の環境ではエラーになった)。

  • 確かに後者は実行ファイルのサイズが2倍くらいになっている
  • od -x でバイナリの1行目を調べると、上記の itmedia の記事にあるとおり、 cafebabe や feedface, feedfacf というマジックナンバーがちゃんと埋め込まれている。

なるほど。

かなり遠い目標としては、 Movitz の binary-types ライブラリーを使って、 Mach-O を直接書いてみる、こと。