Mach-O 実行可能ファイルを手書きしようとしています。次の 3 つのロード コマンドがあります。
LC_SEGMENT_64
読み込み中__PAGEZERO
LC_SEGMENT_64
ロード__TEXT
中、単一の__text
セクションでLC_UNIXTHREAD
適切に設定されたrip
mach/loader.h
すべてのコマンドは、構造体と関連するヘッダーに一致します。otool -l
期待どおりに情報がリストされ、エラーは報告されません。すべてのアカウントで、これは整形式のオブジェクト ファイルですが、OS X 10.10.5 はタスクを終了します (SIGKILL)。
OS X がロードする前に、Mach-O 実行可能ファイルのどの機能がチェックされますか? この情報はどこにありますか? これらの機能はバージョンごとに変更されますか? (よく引用される「OS X ABI Mach-O リファレンス」は明らかに欠落しています。)
これは、部分的に注釈が付けられたバイナリの 16 進ダンプです。
otool
健全性チェック (抜粋):
$ otool -l machtest
machtest:
Load command 0
cmd LC_SEGMENT_64
cmdsize 72
segname __PAGEZERO
…
Load command 1
cmd LC_SEGMENT_64
cmdsize 152
segname __TEXT
…
Section
sectname __text
segname __TEXT
…
Load command 2
cmd LC_UNIXTHREAD
…