英語版
このページの英語版を見る

core.sys.darwin.mach.loader

このファイルは Mach-O オブジェクトファイルのフォーマットについて記述している。
Dヘッダーファイル mach-o/loader.hmacOS 10.15 SDK から。
Authors:
Jacob Carlborg
Version:
初期作成:2010年2月20日-2018年
struct mach_header;
32ビットのmachヘッダーは、32ビット・アーキテクチャ用のオブジェクト・ファイル 32ビット・アーキテクチャ用の
uint magic;
Machマジックナンバー識別子。
int cputype;
CPU 指定子。
int cpusubtype;
マシン指定子。
uint filetype;
ファイルの型。
uint ncmds;
ロードコマンド数
uint sizeofcmds;
すべてのロードコマンドのサイズ
uint flags;
フラグ
MH_MAGIC
マシンのマジックナンバー
MH_CIGAM
NXSwapInt(MH_MAGIC)
struct mach_header_64;
64ビットmachヘッダは、64ビットアーキテクチャ用のオブジェクトファイルの先頭にある。 64ビットアーキテクチャのオブジェクトファイルの先頭に表示される。
uint magic;
Machマジックナンバー識別子。
int cputype;
CPU 指定子。
int cpusubtype;
マシン指定子。
uint filetype;
ファイルの型。
uint ncmds;
ロードコマンド数
uint sizeofcmds;
すべてのロードコマンドのサイズ
uint flags;
フラグ。
uint reserved;
予約。
MH_MAGIC_64
64ビットMHマジックナンバー。
MH_CIGAM_64
NXSwapInt(MH_MAGIC_64).
MH_OBJECT
再配置可能オブジェクトファイル。
MH_EXECUTE
デマンドページング実行ファイル。
MH_FVMLIB
固定VM共有ライブラリファイル
MH_CORE
コアファイル
MH_PRELOAD
プリロードされた実行ファイル
MH_DYLIB
動的にバインドされた共有ライブラリ
MH_DYLINKER
ダイナミックリンクエディター
MH_BUNDLE
動的にバインドされたバンドルファイル
MH_DYLIB_STUB
静的リンク専用の共有ライブラリスタブ。
MH_DSYM
デバッグセクションのみのコンパニオンファイル
MH_KEXT_BUNDLE
X86_64 kexts。
MH_NOUNDEFS
オブジェクトファイルには未定義の参照がない。
MH_INCRLINK
オブジェクトファイルは、ベースファイルに対するインクリメンタルリンクの出力である。 オブジェクトファイルはベースファイルに対するインクリメンタルリンクの出力であり、再度リンク編集することはできない。
MH_DYLDLINK
オブジェクト・ファイルはダイナミック・リンカーの入力であり、再度静的にリンク編集できない。 静的にリンク編集することはできない。
MH_BINDATLOAD
オブジェクト・ファイルの未定義参照は、ロード時にダイナミック・リンカーによってバインドされる。 リンカによってバインドされる。
MH_PREBOUND
そのファイルは、動的未定義参照が事前にバインドされている。
MH_SPLIT_SEGS
ファイルの読み取り専用セグメントと読み取り/書き込みセグメントが分割されている。
MH_LAZY_INIT
共有ライブラリーのinitルーチンは、書き込み可能なセグメントへのメモリーフォールトをキャッチして、遅延実行される。 書き込み可能なセグメント(時代遅れ)へのメモリーフォールトをキャッチして、共有ライブラリーのinitルーチンを遅延実行する。
MH_TWOLEVEL
イメージは2レベルの名前空間バインディングを使っている。
MH_FORCE_FLAT
実行ファイルはすべてのイメージにフラットな名前空間バインディングを強制する。
MH_NOMULTIDEFS
この傘は、サブイメージのシンボルを複数定義しないことを保証している。 この傘は、そのサブイメージでシンボルの多重定義がないことを保証しているので、常に2レベル名前空間ヒントを使用することができる。
MH_NOFIXPREBINDING
dyldにこの実行ファイルについてプレバインディングエージェントに通知させない。
MH_PREBINDABLE
バイナリはプリバインドされないが、プリバインドをやり直すことができる。 MH_PREBOUNDが設定されていないときに使われる。
MH_ALLMODSBOUND
このバイナリが依存ライブラリのすべての2レベル名前空間モジュールにバインドすることを示す。 MH_PREBINDABLE と MH_TWOLEVELの両方が設定されている場合のみ使用される。
MH_SUBSECTIONS_VIA_SYMBOLS
デッドコードストリップのために、シンボルによってセクションをサブセクションに分割しても安全である。 コードのストリッピングを行う。
MH_CANONICAL
バイナリは unprebind オペレーションによって正規化されている。
MH_WEAK_DEFINES
最終的なリンク画像に外部の弱いシンボルが含まれている。
MH_BINDS_TO_WEAK
最終リンク画像は弱いシンボルを使用している。
MH_ALLOW_STACK_EXECUTION
このビットがセットされると、タスク内のすべてのスタックにスタック実行権限が与えられる。 実行権限が与えられる。MH_EXECUTE ファイルタイプでのみ使用される。
MH_ROOT_SAFE
このビットがセットされると、バイナリは uid が 0 のプロセスで安全に使えることを宣言する。 プロセスでの使用が安全であることを宣言する。
MH_SETUID_SAFE
このビットがセットされている場合、バイナリは "@safeid" での使用が安全であることを宣言する。 プロセスで使用しても安全であると宣言する。
MH_NO_REEXPORTED_DYLIBS
このビットがdylibに設定されている場合、スタティック・リンカは 依存するdylibが再エクスポートされているかどうかを調べる必要がなくなる。
MH_PIE
このビットが設定されていると、OSはメイン実行ファイルをランダムなアドレスでロードする。 にロードする。MH_EXECUTEファイルタイプでのみ使用される。
MH_DEAD_STRIPPABLE_DYLIB
dylibでのみ使用する。この ビットが設定されているdylibに対してリンクする場合、スタティック・リンカーは自動的に LC_LOAD_DYLIBロードコマンドを作成しない。 dylib.LC_LOAD_DYLIBロードコマンドを作成しない。
MH_HAS_TLV_DESCRIPTORS
S_THREAD_LOCAL_VARIABLES型のセクションを含む。
MH_NO_HEAP_EXECUTION
このビットが設定されていると、OSはメイン実行ファイルを実行不可能なヒープで実行する。 を必要としないプラットフォーム(i386など)であっても、実行不可能なヒープでメイン実行ファイルを実行する。 ヒープを必要としないプラットフォーム(i386など)でも、メイン実行ファイルを実行できないヒープで実行する。MH_EXECUTEファイルタイプでのみ使用される。
MH_APP_EXTENSION_SAFE
アプリケーション拡張で使用するためにリンクされている。
MH_NLIST_OUTOFSYNC_WITH_DYLDINFO
nlistシンボルテーブルにリストされている外部シンボルには、dylistシンボルテーブルにリストされているすべてのシンボルが含まれていない。 dyld情報にリストされているすべてのシンボルが含まれていない。
MH_SIM_SUPPORT
LC_MIN_VERSION_MACOSおよびLC_BUILD_VERSIONロードコマンドを、以下のプラットフォームで許可する。 macOS、iOSMac、iOSSimulator、tvOSSimulator、および watchOSSimulator で使用できる。
MH_DYLIB_IN_CACHE
dylibs でのみ使用する。このビットがセットされている場合、dylibは dylld共有キャッシュの一部となる。
struct load_command;
ロードコマンドは mach_header に直接続く。全ての コマンドの合計サイズは mach_header の sizeofcmds フィールドで与えられる。すべての ロードコマンドは、その最初の2つのフィールドとして cmd と cmdsize を持たなければならない。cmdフィールドには cmdフィールドはそのコマンド型の定数で埋められる。それぞれの コマンド型はそれ専用の構造体を持っている。cmdsizeフィールドは 特定のロードコマンド構造体のバイトサイズと、それに続くロードコマンドの一部である フィールドのバイトサイズである。 (セクション構造体、文字列など)のサイズである。次のロード 次のロード・コマンドに進むには、cmdsizeを現在のロード・コマンドのオフセットまたはポインタに追加することができる。 に追加することができる。32 ビット・アーキテクチャの cmdsize は、4 バイトの倍数でなければならない(MUST)。 4バイトの倍数でなければならない。 (の倍数でなければならない(これらは、どのロード・コマンドの最大アライメントにも当てはまらない)。パディングされた パディングされたバイトはゼロでなければならない。オブジェクト・ファイル内のすべてのテーブルも、以下の規則に従わなければならない。 オブジェクト・ファイル内のすべてのテーブルもこれらのルールに従わなければならない。そうでなければ そうでないと、これらのテーブルへのポインタがうまく動作しなかったり、マシンによってはまったく動作しなかったりする。 すべてのパディングをゼロにすると、オブジェクトはバイトごとに比較される。
uint cmd;
ロードコマンドの型。
uint cmdsize;
コマンドの合計サイズ(バイト)。
enum LC_REQ_DYLD;
MacOS X 10.1以降、新しいロード・コマンドが追加された場合、そのコマンドをダイナミック・リンカーが理解する必要がある。 イメージを正しく実行するためにダイナミック・リンカーが理解する必要がある新しいロード・コマンドが追加された場合 LC_REQ_DYLDビットがロード・コマンド定数に追加される。もし ダイナミック・リンカが理解できないロード・コマンドを見つけた場合、「unknown load command required for the image to execute」を発行する。 実行に必要なロード・コマンドが不明」というエラーを出し、イメージの使用を拒否する。 イメージの使用を拒否する。このビットのない、理解できない他のロード・コマンドは無視される。 単に無視される。
LC_SEGMENT
マップされるファイルのセグメント。
LC_SYMTAB
link-edit stab シンボルテーブル情報。
LC_SYMSEG
リンクエディット gdb シンボルテーブル情報(廃止予定)。
LC_THREAD
スレッド。
LC_UNIXTHREAD
Unixスレッド(スタックを含む)。
LC_LOADFVMLIB
指定された固定 VM 共有ライブラリをロードする。
LC_IDFVMLIB
固定 VM 共有ライブラリの識別。
LC_IDENT
オブジェクト識別情報(廃止)。
LC_FVMFILE
固定 VM ファイルインクルード(内部使用)。
LC_PREPAGE
Prepage コマンド(内部使用)。
LC_DYSYMTAB
動的リンク編集シンボルテーブル情報
LC_LOAD_DYLIB
動的にリンクされた共有ライブラリをロードする。
LC_ID_DYLIB
動的にリンクされた共有ライブラリの識別
LC_LOAD_DYLINKER
動的リンカのロード
LC_ID_DYLINKER
動的リンカの識別
LC_PREBOUND_DYLIB
動的にリンクされた共有ライブラリ用に事前にバインドされたモジュール
LC_ROUTINES
イメージ・ルーチン
LC_SUB_FRAMEWORK
サブフレームワーク。
LC_SUB_UMBRELLA
サブアンブレラ。
LC_SUB_CLIENT
サブクライアント。
LC_SUB_LIBRARY
サブライブラリ。
LC_TWOLEVEL_HINTS
2レベルの名前空間検索のヒント。
LC_PREBIND_CKSUM
プリバインド・チェックサム。
enum LC_LOAD_WEAK_DYLIB;
動的にリンクされた共有ライブラリをロードする。 (すべてのシンボルが弱インポートされる)。
LC_SEGMENT_64
マップされるファイルの 64 ビットセグメント。
LC_ROUTINES_64
64ビットイメージルーチン。
LC_UUID
uuid。
LC_RPATH
ランパスの追加。
LC_CODE_SIGNATURE
コード署名のローカル。
LC_SEGMENT_SPLIT_INFO
セグメントを分割する情報のローカル
LC_REEXPORT_DYLIB
dylib のロードと再エクスポート。
LC_LAZY_LOAD_DYLIB
最初の使用まで dylib のロードを遅らせる。
LC_ENCRYPTION_INFO
セグメント情報の暗号化
LC_DYLD_INFO
圧縮されたdyld情報。
LC_DYLD_INFO_ONLY
圧縮されたdyld情報のみ
LC_LOAD_UPWARD_DYLIB
上向きのdylibをロードする。
LC_VERSION_MIN_MACOSX
MacOSXの最小OSバージョン用にビルドする。
LC_VERSION_MIN_IPHONEOS
iPhoneOS最小OSバージョン用にビルドする。
LC_FUNCTION_STARTS
関数開始アドレスの表を圧縮する。
LC_DYLD_ENVIRONMENT
dyldが環境変数のように扱うための文字列。
LC_MAIN
LC_UNIXTHREAD の置き換え。
LC_DATA_IN_CODE
textの非インストラクションの表。
LC_SOURCE_VERSION
バイナリのビルドに使用したソースバージョン。
LC_DYLIB_CODE_SIGN_DRS
リンクされたdylibからコピーされたコード署名DR。
LC_ENCRYPTION_INFO_64
64 ビット暗号化セグメント情報
LC_LINKER_OPTION
MH_OBJECT ファイルのリンカーオプション。
LC_LINKER_OPTIMIZATION_HINT
MH_OBJECT ファイルの最適化のヒント。
LC_VERSION_MIN_TVOS
AppleTV の最小 OS バージョン用にビルドする。
LC_VERSION_MIN_WATCHOS
Watch の最小 OS バージョン用にビルドした。
LC_NOTE
Mach-O ファイルに含まれる任意のデータ。
LC_BUILD_VERSION
プラットフォーム最小OSバージョン用にビルドする。
LC_DYLD_EXPORTS_TRIE
linkedit_data_commandと併用し、ペイロードをtrieにする。
LC_DYLD_CHAINED_FIXUPS
linkedit_data_commandと併用する。
union lc_str;
ロードコマンドの可変長文字列はlc_str 共用体 "で表される。文字列はロードコマンド構造体の直後に格納される。 オフセットはロードコマンド構造体の開始位置からである。文字列のサイズは 文字列のサイズは、ロードコマンドのcmdsizeフィールドに反映される。 cmdsizeフィールドを4バイトの倍数にするためにパディングされたバイトはゼロでなければならない。 を4バイトの倍数にするためにパディングされたバイトはゼロでなければならない。
uint offset;
文字列へのオフセット。
char* ptr;
文字列へのポインタ(64ビット以外のプラットフォームでのみ使用可能)。
struct segment_command;
セグメントロードコマンドは、このファイルの一部がタスクのアドレスにマップされることを示す。 タスクのアドレス空間にマップされることを示す。メモリ上のセグメントのサイズ、 vmsizeは、このファイルからマップする量と同じか、それよりも大きいかもしれない、 ファイルサイズである。ファイルはfileoffから始まり、メモリ上のセグメントvmaddの先頭にマップされる。 ファイルはfileoffから始まり、メモリ上のセグメントvmaddrの先頭にマップされる。セグメントの残りのメモリーは、もしあればゼロフィルで割り当てられる、 は、オンデマンドでゼロフィルされる。セグメントの最大仮想メモリー保護と初期仮想メモリー保護は セグメントの最大仮想メモリー保護と初期仮想メモリー保護は maxprot フィールドと initprot フィールドで指定される。セグメントにセクションがある場合は セクションがある場合、セクション構造は segment コマンドに直接続き、そのサイズは cmdsize に反映される。 cmdsize に反映される。
uint cmd;
LC_SEGMENT.
uint cmdsize;
sizeof セクション構造体を含む。
char[16] segname;
セグメント名。
uint vmaddr;
このセグメントのメモリーアドレス。
uint vmsize;
このセグメントのメモリサイズ
uint fileoff;
このセグメントのファイルオフセット。
uint filesize;
ファイルからマップする量。
int maxprot;
最大VM保護
int initprot;
初期 VM 保護。
uint nsects;
セグメント内のセクション数
uint flags;
フラグ。
SG_HIGHVM
このセグメントのファイル・コンテンツは、VMスペースの高い部分のものである。 領域の上位部分であり、下位部分はゼロ・フィルである(コア・ファイルのスタック用)。
SG_FVMLIB
このセグメントは、固定VMライブラリーによって割り当てられるVMである、 リンクエディターでのオーバーラップチェックのためである。
SG_NORELOC
このセグメントには、その中に再配置されたものも、そこに再配置されたものもない。 つまり、再配置せずに安全に置き換えることができる。
SG_PROTECTED_VERSION_1
このセグメントは保護されている。
セグメントがファイルオフセット0から始まる場合、セグメントの最初のページ は保護されない。セグメントの他のページはすべて保護される。
SG_READ_ONLY
このセグメントは、修正後は読み取り専用になる。
struct section;
セグメントは 0 個以上のセクションで構成される。非 MH_OBJECT ファイルは 非 MH_OBJECT ファイルは、すべてのセグメントに適切なセクションを持ち、 指定されたセグメントアラインメントになるようにパディングされる。 非 MH_OBJECT ファイルは、リンクエディターによって生成されるとき、指定されたセグメントアライメントですべてのセグメントを持つ。最初の MH_EXECUTE と MH_FVMLIB フォーマットファイルの最初のセグメントには を含む。 セクションが含まれる。ゼロフィル・セクションは、常にセグメントの最後にある。 (すべてのフォーマットにおいて)。これにより、ゼロフィルセクションが存在する可能性のあるメモリに、 ゼロフィルセグメントパディングをマッピングすることができる。 をゼロフィルセクションのあるメモリにマッピングすることができる。ギガバイトのゼロフィル セクションは、セクション型がS_GB_ZEROFILLである。 ギガバイトのゼロフィル・セクションは、この型のセクションを持つセグメント内にしか存在できない。これらのセグメントは の後に配置される。
MH_OBJECTフォーマットは、コンパクトにするために、すべてのセクションを1つのセグメ ントにまとめている。 にまとめている。指定されたセグメント境界へのパディングはない。 mach_header と load コマンドはセグメントの一部ではない。
同じセクション名(sectname)を持つセクションは、同じセグメント(segname)に入る。 を持つセクションは、リンクエディターによって結合される。結果のセクション は、結合されたセクションの最大アライメントに揃えられ、新しいセクションのアライメントとなる。 新しいセクションのアライメントとなる。結合されたセクションは 結合されたセクションは、結合されたセクションの元のアライメントに整列される。指定されたアライメントを得るためにパディングされたバイトはすべてゼロになる。 指定されたアライメントを得るためにパディングされたバイトはゼロになる。
セクション構造の reloff フィールドと nreloc フィールドで参照される再配置エントリのフォーマットは、 mach オブジェクトファイルのセクション構造の reloff フィールドと nreloc フィールドで参照される再配置エントリのフォーマットに記述されている。 フィールドで参照される再配置エントリのフォーマットは ヘッダファイル に記述されている。
char[16] sectname;
このセクションの名前。
char[16] segname;
このセクションが入るセグメント。
uint addr;
このセクションのメモリアドレス。
uint size;
このセクションのバイト単位のサイズ
uint offset;
このセクションのファイルオフセット
uint align_;
セクションのアラインメント(2のべき乗)。
uint reloff;
再配置エントリのファイルオフセット。
uint nreloc;
再配置エントリの数
uint flags;
フラグ(セクション型と属性)。
uint reserved1;
予約(オフセットまたはインデックス)。
uint reserved2;
予約(countまたはsizeof)。
struct section_64;
char[16] sectname;
このセクションの名前。
char[16] segname;
このセクションが入るセグメント
ulong addr;
このセクションのメモリアドレス
ulong size;
このセクションのバイト単位のサイズ
uint offset;
このセクションのファイルオフセット
uint align_;
セクションのアラインメント(2のべき乗)。
uint reloff;
再配置エントリのファイルオフセット。
uint nreloc;
再配置エントリの数
uint flags;
フラグ(セクション型と属性)。
uint reserved1;
予約(オフセットまたはインデックス)。
uint reserved2;
予約(カウントまたはsizeof)。
uint reserved3;
予約されている。
SECTION_TYPE
256のセクション型。
SECTION_ATTRIBUTES
24のセクション属性。
S_REGULAR
通常セクション。
S_ZEROFILL
ゼロフィル・オンデマンド・セクション。
S_CSTRING_LITERALS
リテラルC文字列のみのセクション
S_4BYTE_LITERALS
4バイトリテラルのみのセクション
S_8BYTE_LITERALS
8バイト・リテラルだけのセクション
S_LITERAL_POINTERS
リテラルへのポインタだけを持つセクション
S_NON_LAZY_SYMBOL_POINTERS
非レイジーシンボルのポインタのみを持つセクション
2種類のシンボル・ポインタ・セクションとシンボル・スタブ・セクションには、間接的なシンボル・テーブル・エントリがある。 セクションについては、間接的なシンボル・テーブル・エントリーを持つ。セクションの セクションの各エントリに対して、間接シンボルテーブルのエントリがある。 セクション構造体のreserved1フィールドに格納されたインデックスから始まる。 で始まる。間接記号テーブルのエントリは 間接記号テーブルのエントリはセクションのエントリに対応するので、間接記号テーブルのエントリ数は無限である。 間接記号テーブル・エントリーはセクションのエントリーに対応するので、間接記号テーブル・エントリーの数は、セクションのサイズを 間接記号テーブル・エントリの数は、セクションのサイズをセクションのエントリのサイズで割った値から推測される。 セクションのエントリーのサイズで割った値から間接記号テーブルのエントリーの数が推測される。シンボルポインターセクションの場合、セクションのエントリーのサイズは4バイトである。 セクションのエントリのサイズは4バイトである。 のバイトサイズはセクション構造体の reserved2 フィールドに格納される。
S_LAZY_SYMBOL_POINTERS
遅延シンボルポインタだけを持つセクション。
S_SYMBOL_STUBS
シンボルスタブのみを持つセクション、reserved2フィールドにスタブのバイトサイズが格納される。
S_MOD_INIT_FUNC_POINTERS
初期化用の関数ポインタだけを持つセクション。
S_MOD_TERM_FUNC_POINTERS
終了用関数ポインタのみを持つセクション。
S_COALESCED
合体されるシンボルを含むセクション。
S_GB_ZEROFILL
ゼロフィル・オンデマンド・セクション(4ギガバイトより大きくてもよい)。
S_INTERPOSING
インターポーズ用の関数ポインタのペアのみを持つセクション。
S_16BYTE_LITERALS
16バイト・リテラルだけを含むセクション。
S_DTRACE_DOF
DTraceオブジェクト・フォーマットを含むセクション。
S_LAZY_DYLIB_SYMBOL_POINTERS
遅延ロードされたDylibへの遅延シンボル・ポインタだけを持つセクション。
S_THREAD_LOCAL_REGULAR
TLVの初期値のテンプレート。
S_THREAD_LOCAL_ZEROFILL
TLVの初期値のテンプレート。
S_THREAD_LOCAL_VARIABLES
TLV記述子。
S_THREAD_LOCAL_VARIABLE_POINTERS
TLV記述子へのポインタ。
S_THREAD_LOCAL_INIT_FUNCTION_POINTERS
TLV値を初期化するために呼び出す関数。
S_INIT_FUNC_OFFSETS
初期化子への32ビットオフセット。
SECTION_ATTRIBUTES_USR
ユーザーが設定可能な属性
S_ATTR_PURE_INSTRUCTIONS
セクションは真のマシン命令のみを含む。
S_ATTR_NO_TOC
このセクションには、ranlibの目次にはない結合されたシンボルが含まれる。
S_ATTR_STRIP_STATIC_SYMS
MH_DYLDLINKフラグのあるファイルでは、このセクションの静的シンボルをストリップしてもOK。
S_ATTR_NO_DEAD_STRIP
デッドストリップはしない。
S_ATTR_LIVE_SUPPORT
ブロックは生きているブロックを参照していれば生きている。
S_ATTR_SELF_MODIFYING_CODE
dyldによって書き込まれたi386コードスタブで使われる。
S_ATTR_DEBUG
デバッグセクション。
セグメントに S_ATTR_DEBUG のマークが付いたセクションがある場合、 そのセグメント内のすべてのセクションがこの属性を持たなければならない。 とマークされたセクションがある場合、そのセグメント内のすべてのセクションがこの属性を持たなければならない。この属性でマークされたセクション以外の この属性でマークされたセクション以外は、このセクションの内容を参照できない。 を参照することはできない。この属性を持つセクションは、シンボルを含むことができない。 を含むことはできず、セクション型は S_REGULAR でなければならない。スタティック・リンカーは 静的リンカーは、この属性を持つセクションの内容を出力ファイルにコピーしない。 出力ファイルにコピーしない。これらのセクションには、一般にDWARFデバッグ情報が含まれる。
SECTION_ATTRIBUTES_SYS
システムで設定可能な属性である。
S_ATTR_SOME_INSTRUCTIONS
セクションにマシン命令が含まれている。
S_ATTR_EXT_RELOC
セクションに外部再配置エントリがある。
S_ATTR_LOC_RELOC
セクションにはローカル再配置エントリがある。
SEG_PAGEZERO
ページゼロセグメントは保護されておらず、MH_EXECUTEファイルのNULL参照をキャッチする。 参照をキャッチする。
SEG_TEXT
伝統的なUNIXテキストセグメント。
SECT_TEXT
ヘッダもパディングもない。
SECT_FVMLIB_INIT0
fvmlib 初期化セクション。
SECT_FVMLIB_INIT1
fvmlib 初期化セクションに続くセクション。
SEG_DATA
伝統的な UNIX データセグメント。
SECT_DATA
本当の初期化データセクション パディングなし、bss オーバーラップなし。
SECT_BSS
本当の未初期化データセクション(パディングなし)
SECT_COMMON
リンクエディターによって共通シンボルが割り当てられるセクション。
SEG_OBJC
Objective-Cのランタイムセグメント。
SECT_OBJC_SYMBOLS
シンボルテーブル。
SECT_OBJC_MODULES
モジュール情報。
SECT_OBJC_STRINGS
文字列テーブル
SECT_OBJC_REFS
文字列テーブル
SEG_ICON
アイコンセグメント。
SECT_ICON_HEADER
アイコンヘッダー
SECT_ICON_TIFF
tiff形式のアイコン
SEG_LINKEDIT
リンクエディターが作成・管理するすべての構造体を含むセグメント。 エディタ。MH_EXECUTE および FVMLIB ファイルタイプに対してのみ、ld(1) の -seglinkedit オプションで作成される。 FVMLIB ファイル型のみ。
SEG_UNIXSTACK
unix スタックセグメント。
SEG_IMPORT
自己 (dyld) 改変コードスタブのためのセグメントであり、読み込み、書き込み、実行のパーミッションを持つ、 書き込みと実行のパーミッションがある。
struct fvmlib;
固定仮想メモリー共有ライブラリーは、次の2つによって識別される。それは ターゲットパス名(実行時に見つかったライブラリの名前)と マイナーバージョン番号。ヘッダーがロードされるアドレスは header_addrにある(これは廃止され、もうサポートされていない)。
lc_str name;
ライブラリのターゲットパス名。
uint minor_version;
ライブラリのマイナーバージョン番号。
uint header_addr;
ライブラリーのヘッダーアドレス。
struct fvmlib_command;
固定仮想共有ライブラリ(machヘッダの filetype == MH_FVMLIB)。 ライブラリを識別するための fvmlib_command (cmd == LC_IDFVMLIB) を含む。 固定仮想共有ライブラリを使用するオブジェクトにも fvmlib_command (cmd == LC_LOADFVMLIB) を含む。 (これは廃止され、もはやサポートされていない)。
uint cmd;
LC_IDFVMLIB または LC_LOADFVMLIB を指定する。
uint cmdsize;
パス名文字列を含む。
fvmlib fvmlib_;
ライブラリの識別。
struct dylib;
動的にリンクされた共有ライブラリは2つのもので識別される。それは パス名(実行時に見つかるライブラリの名前)と 互換バージョン番号。パス名は一致しなければならない。 ライブラリーのユーザーにおける互換性番号は、使用されるライブラリーと同じかそれ以上でなければならない。 と等しくなければならない。タイムスタンプは タイムスタンプは、ライブラリがビルドされ、ユーザーにコピーされた時刻を記録するために使用される。 タイムスタンプは、ライブラリがビルドされ、ユーザーにコピーされた時間を記録するために使われる。 実行時に使用されるライブラリーが、プログラムのビルドに使用されたものとまったく同じかどうかを判断するために使用される。
lc_str name;
ライブラリーのパス名。
uint timestamp;
ライブラリのビルドタイムスタンプ
uint current_version;
ライブラリの現在のバージョン番号
uint compatibility_version;
ライブラリの互換バージョン番号。
struct dylib_command;
動的にリンクされた共有ライブラリ (machヘッダのfiletype == MH_DYLIB)はdylib_commandを含む。 (cmd == LC_ID_DYLIB)が含まれている。動的にリンクされた共有ライブラリを使用する 動的にリンクされた共有ライブラリを使用するオブジェクトも、dylib_commandを含む (cmd == LC_LOAD_DYLIB、LC_LOAD_WEAK_DYLIB、または LC_REXPORT_DYLIB)を含む。 を使用する。
uint cmd;
lc_id_dylib, lc_load_{,weak_}dylib, lc_reexport_dylib.
uint cmdsize;
パス名文字列を含む。
dylib dylib_;
ライブラリの識別。
struct sub_framework_command;
動的にリンクされる共有ライブラリーは、アンブレラ・フレームワークのサブフレームワークである場合がある。 フレームワークのサブフレームワークかもしれない。その場合、"-umbrella umbrella_name"でリンクされる。 umbrella_name "はアンブレラ・フレームワークの名前である。A サブフレームワークは、アンブレラフレームワークか、アンブレラフレームワークに含まれる他のサブフレームワークによってのみリンクされる。 同じアンブレラフレームワークの一部である他のサブフレームワークによってのみリンクできる。 そうでない場合、スタティックリンクエディターはエラーを生成し、アンブレラフレームワークに対してリンクするよう述べる と記述する。サブフレームワークのためのアンブレラフレームワークの名前は サブフレームワークのアンブレラフレームワーク名は次の構造体に記録される。
uint cmd;
lc_sub_framework.
uint cmdsize;
アンブレラ文字列を含む。
lc_str umbrella;
アンブレラ・フレームワーク名。
struct sub_client_command;
アンブレラ・フレームワークのサブフレームワークである動的にリンクされた共有ライブラリでは、アンブレラ・フレームワーク以外のクライアントを許可することができる。 アンブレラフレームワークのサブフレームワークである動的リンクされた共有ライブラリは、アンブレラフレームワークまたは他のサブフレームワーク以外のクライアントを許可することができる。 フレームワークや、同じアンブレラ・フレームワーク内の他のサブフレームワーク以外のクライアントを許可することができる。そのために サブフレームワークは"-allowable_client client_name"でビルドされる。 各-allowable_clientフラグに対してLC_SUB_CLIENTロードコマンドが作成される。 client_nameは通常フレームワーク名である。また バンドルが"-client_name client_name"でビルドされる場合、バンドル・クライアントに使用される名前であることもある。 "-client_name client_name"でバンドルがビルドされるバンドルクライアントに使用される名前であることもできる。
uint cmd;
LC_SUB_CLIENT。
uint cmdsize;
クライアント文字列を含む。
lc_str client;
クライアント名。
struct sub_umbrella_command;
動的にリンクされる共有ライブラリは、アンブレラフレームワークのサブ_アンブレラである可能性がある。 フレームワークのサブ_アンブレラかもしれない。その場合、"-sub_umbrella umbrella_name"でリンクされる。 ここで、"umbrella_name"はサブ_アンブレラフレームワークの名前である。その場合 twolevel_namespaceが有効なときに静的にリンクする場合、2レベルの名前空間アンブレラフレームワークは、-sub_umbrella_umbrella_nameでリンクされる。 名前空間アンブレラフレームワークは、そのサブフレームワークとサブ_アンブレラフレームワークとしてリストされたフレームワークだけを引き起こす。 サブフレームワークとサブ_アンブレラフレームワークとしてリストされたフレームワークだけがリンクされる。 その他の依存するダイナミック・ライブラリは -2level_namespaceが有効なときはリンクされない。シンボルを解決するときに これらのライブラリのシンボルを解決するときにスタティック・リンカーによって記録されるプライマリ・ライブラリは、アンブレラ・フレームワークになる。 アンブレラ・フレームワークである。アンブレラ・フレームワークによって、0個以上のサブ_アンブレラ・フレームワークが使用されることがある。 アンブレラフレームワークによって使用される。サブ_アンブレラフレームワークの名前は以下の構造体に記録される。 に記録される。
uint cmd;
lc_sub_umbrella.
uint cmdsize;
sub_umbrella文字列を含む。
lc_str sub_umbrella;
サブ_アンブレラフレームワーク名。
struct sub_library_command;
動的にリンクされた共有ライブラリーは、他の共有ライブラリーのサブ_ライブラリーになることがある。 動的にリンクされる共有ライブラリは、他の共有ライブラリのサブ_ライブラリである可能性がある。その場合、"-sub_library library_name"でリンクされる。 ここで、"library_name"はサブ_ライブラリ共有ライブラリの名前である。その場合 twolevel_namespaceが有効なときに静的にリンクする場合、2レベル名前空間共有ライブラリは、-twolevel_namespaceが有効なときに静的にリンクする。 名前空間共有ライブラリは、そのサブフレームワークと、サブ_アンブレラとしてリストされたフレームワークのみを引き起こす。 サブフレームワークとしてリストされたフレームワークと、サブ_アンブレラフレームワークとしてリストされたライブラリーは、そのサブフレームワークとサブ_ライブラリーにのみリンクされる。 sub_librariesとしてリストされたライブラリのみがリンクされる。他の依存するダイナミック twolevel_namespaceが有効な場合、他の依存ダイナミック・ライブラリはリンクされない。 スタティック・リンカーがシンボルを解決するときに記録するプライマリ・ライブラ リは、アンブレラ・ライブラリである。 を解決するときにスタティック・リンカーが記録するプライマリ・ライブラリは、アンブレラ・フレームワーク(またはダイナミック・ライブラリ)になる。 0個以上のsub_library共有ライブラリーは、アンブレラ・フレームワークまたは(またはダイナミック・ライブラリーによって)使用される可能性がある。 またはダイナミック・ライブラリー)によって使用される。サブ_ライブラリー・フレームワークの名前は、以下の構造体に記録される。 次のような構造で記録される。例: /usr/lib/libobjc_profile.A.dylibは、"libobjc"として記録される。
uint cmd;
lc_sub_library。
uint cmdsize;
sub_library文字列を含む。
lc_str sub_library;
サブライブラリ名。
struct prebound_dylib_command;
ダイナミック・ライブラリに事前にバインドされているプログラム (filetype == MH_EXECUTE) は、サブライブラリの名前を持つ。 ダイナミック・ライブラリにプレバウンドされるプログラム(filetype == MH_EXECUTE)は スタティック・リンカがプリバインドに使用した各ライブラリに対して1つある。これには ビットが含まれている。ビットは、どのモジュールがバインドされ(1)、どのモジュールがバインドされない(0)かを示す。 0)を示す。モジュール0のビットは、最初のバイトの である。つまり、N番目のモジュールのビットは次のようになる: (linked_modules[N/8] >> N%8) & 1である。
uint cmd;
lc_prebound_dylib.
uint cmdsize;
文字列を含む。
lc_str name;
ライブラリのパス名。
uint nmodules;
ライブラリのモジュール数
lc_str linked_modules;
リンクされたモジュールのビット・ベクトル。
struct dylinker_command;
ダイナミック・リンカーを使用するプログラムには、ダイナミック・リンカーの名前(LC_LOAD_DYLLIB)を特定するdylinker_commandが含まれる。 ダイナミック・リンカーの名前(LC_LOAD_DYLINKER)を特定する。また、ダイナミック リンカーには、ダイナミック・リンカーを識別するdylinker_commandが含まれる。 (lc_id_dylinker)を含む。ファイルには、これらのうち最大1つを含めることができる。 この構造体は、LC_DYLD_ENVIRONMENTロード・コマンドにも使用される。 dyldが環境変数のように扱うための文字列を含む。
uint cmd;
LC_ID_DYLINKER、LC_LOAD_DYLINKER、LC_DYLD_ENVIRONMENTのいずれかである。
uint cmdsize;
パス名文字列を含む。
lc_str name;
動的リンカのパス名。
struct thread_command;
スレッドコマンドには、スレッド状態プリミティブで使用するのに適したマシン固有のデータ構造が含まれている。 スレッド状態プリミティブで使用するのに適したマシン固有データ構造が含まれている。マシン固有のデータ構造 は、次のようにstruct thread_commandに従う。 マシン固有データ構造の各フレーバーの前には、そのデータ構造のフレーバーに対応する uint32_t 定数であるuint32_tが付けられている。 uint32_tは状態データ構造のサイズである。 と続く。このトリプルは フレーバーに対して繰り返される。フレーバー、カウント、ステートデータ構造の定数は、以下のようになる。 の定数は、ヘッダーファイル <machine/thread_status.h> にあることが期待される。 これらのマシン固有のデータ構造のサイズは、4バイトの倍数でなければならない。 4バイトの倍数でなければならない。cmdsize は thread_command の合計サイズを反映する。 およびフレーバー、カウント、ステートの定数のすべてのサイズを反映する。 データ構造の定数のすべてのサイズを反映する。
unixプロセスである実行可能オブジェクトには、1つの スレッドコマンド(cmd == LC_UNIXTHREAD)が作成される。 これはLC_THREADと同じであるが、スタックが自動的に作成される。 これはLC_THREADと同じである。コマンド 引数と環境変数がそのスタックにコピーされる。
uint cmd;
LC_THREADまたはLC_UNIXTHREAD。
uint cmdsize;
このコマンドの合計サイズ。
struct routines_command;
routinesコマンドには、動的共有ライブラリ初期化ルーチン 初期化ルーチンのアドレスと、ルーチンを定義するモジュールのモジュール・テーブルへのインデックスが含まれる。 ルーチンを定義するモジュールのモジュール・テーブルへのインデックスが含まれる。ライブラリからモジュールを使用する前に ダイナミック・リンカは、ライブラリからモジュールが使用される前に、初期化ルーチンを定義しているモジュールを完全にバインドし、それを呼び出す。 ルーチンを定義するモジュールを完全にバインドし、それを呼び出す。これは、どのモジュールの 初期化ルーチン(C++の静的コンストラクタに使用される)の前に呼び出される。
uint cmd;
LC_ROUTINES.
uint cmdsize;
このコマンドの合計サイズ。
uint init_address;
初期化ルーチンのアドレス。
uint init_module;
モジュール・テーブルのインデックス。
uint reserved1;
uint reserved2;
uint reserved3;
uint reserved4;
uint reserved5;
uint reserved6;
struct routines_command_64;
64ビット・ルーチン・コマンド。上記と同じ使用法。
uint cmd;
lc_routines_64.
uint cmdsize;
このコマンドの合計サイズ。
ulong init_address;
初期化ルーチンのアドレス。
ulong init_module;
モジュール・テーブルのインデックス。
ulong reserved1;
ulong reserved2;
ulong reserved3;
ulong reserved4;
ulong reserved5;
ulong reserved6;
struct symtab_command;
symtab_コマンドは、link-edit 4.3BSDのオフセットとサイズを含む。 「stab "スタイルのシンボルテーブルのオフセットとサイズが含まれる。 および
uint cmd;
LC_SYMTAB.
uint cmdsize;
Sizeof(struct "symtab_command")。
uint symoff;
シンボルテーブルのオフセット。
uint nsyms;
シンボルテーブルのエントリ数。
uint stroff;
文字列テーブルオフセット。
uint strsize;
バイト単位の文字列テーブル・サイズ。
struct dysymtab_command;
これはシンボル情報の2番目のセットで、動的リンク・エディターのデータ構造をサポートするために使用される。 ダイナミック・リンク・エディターのデータ構造をサポートする。
シンボル・テーブルと文字列テーブルを含むsymtab_commandのシンボル情報のオリジナル・セットは、このロード時に存在しなければならない。 シンボルテーブルと文字列テーブルを含むsymtab_commandの元のシンボル情報のセットも、このloadコマンドが存在するときには存在しなければならない。 存在しなければならない。このロード・コマンドが存在する場合、シンボル・テーブルは次の3つのシンボル・グループに編成される。 シンボルの3つのグループに編成される:
  • ローカル・シンボル(スタティック・シンボルとデバッグ・シンボル) - モジュールごとにグループ化される。
  • 定義された外部シンボル - モジュールごとにグループ化される(libでない場合は名前順)。
  • 未定義の外部シンボル(MH_BINDATLOADが設定されていない場合、名前順にソートされる、 未定義の外部シンボル(MH_BINDATLOADが設定されていない場合は名前順、MH_BINDATLOADが設定されている場合は静的リンカーが見た順 MH_BINDATLOADが設定されている場合は、スタティック・リンカーが見た順)
このロード・コマンドには、3つのシンボル・グループそれぞれに対するオフセットとカウントがある。 のシンボル・グループにオフセットとカウントがある。
このロード・コマンドには、以下の新しいシンボル情報テーブルのオフセットとサイズが含まれている。 シンボル情報テーブルが含まれている:
  • 目次
  • モジュールテーブル
  • 参照記号テーブル
  • 間接記号表
上記の最初の3つのテーブル(目次、モジュール・テーブル、参照シンボル・テーブル)は、ファイルが動的シンボル・テーブルである場合にのみ存在する。 参照シンボル・テーブル)は、ファイルが動的にリンクされた共有ライブラリである場合にのみ存在する。 リンクされた共有ライブラリの場合のみ存在する。実行可能モジュールとオブジェクト・モジュールの場合は、1つのモジュールだけを含むファイルである。 ファイルである実行可能モジュールとオブジェクト・モジュールの場合、これら3つのテーブルにある情報は次のように決定される。 テーブルは次のように決定される:
  • 目次 - 定義された外部シンボルが名前順に並んでいる。
  • モジュール・テーブル - ファイルには1つのモジュールしか含まれていない。 ファイル内のすべてがモジュールの一部である。
  • 参照シンボル表 - 定義済みおよび未定義の外部シンボルである。
動的にリンクされた共有ライブラリー・ファイルの場合、このロード・コマンドは以下の情報も含んでいる。 には、再配置エントリーのプールへのオフセットとサイズが含まれる。 セクションの再配置エントリーのプールへのオフセットとサイズも含まれる:
  • 外部再配置エントリ
  • ローカル再配置エントリ
実行可能モジュールとオブジェクト・モジュールでは、再配置エントリーは引き続きセクション構造から外れる。 セクション構造からぶら下がっている。
uint cmd;
LC_DYSYMTAB.
uint cmdsize;
sizeof(struct dysymtab_command).
uint ilocalsym;
ローカルシンボルへのインデックス。
LC_SYMTABロードコマンドのsymoffとnsymsで示されるシンボルは以下の3つのグループに分類される。 は以下の3つのグループに分類される:
  • ローカル・シンボル(さらにその元となるモジュールによってグループ化される)
  • 定義された外部シンボル(さらに、それらが由来するモジュールによってグループ化される)
  • 未定義シンボル
ローカル・シンボルはデバッグにのみ使用される。ダイナミック・バインディング プロセスは、バインドされるモジュールのローカル・シンボルをデバッガに示すために、ローカル・シンボルを使わなければならないかもしれない。 シンボルをデバッガに示すために使用しなければならないかもしれない。
最後の2つのグループは、ダイナミック・バインディング・プロセスがバインディングを行うために使用する。 バインディングを行うために使用される(動的リンクされた共有ライブラリ・ファイルの場合は、モジュール・テーブルと参照シンボル・テーブルを通して間接的に)。 テーブルを通して間接的に)バインディングを行う。
uint nlocalsym;
ローカルシンボルの数。
uint iextdefsym;
外部定義シンボルへのインデックス。
uint nextdefsym;
外部定義シンボルの数。
uint iundefsym;
未定義シンボルへのインデックス。
uint nundefsym;
未定義シンボルの数
uint tocoff;
目次へのファイルオフセット
ダイナミック・バインディング・プロセスで、シンボルがどのモジュールで定義されているかを見つけるために がどのモジュールに定義されているかを見つけるために、目次が使用される(アーカイブのranlib 構造体が使われる)。 モジュールにマッピングする。これは、動的にリンクされた 共有ライブラリファイルにのみ存在する。実行可能モジュールとオブジェクト・モジュールでは、定義された 定義された外部シンボルは名前でソートされ、目次として使われる。 目次として使用される。
uint ntoc;
目次のエントリ数。
uint modtaboff;
モジュール・テーブルへのファイル・オフセット。
モジュール」(オブジェクト・ファイル全体)のダイナミック・バインディングをサポートするために、シンボル・テーブルはファイルが作成されたモジュールを反映しなければならない。 シンボル・テーブルは、ファイルが作成されたモジュールを反映しなければならない。 これは、各モジュールのマージされたテーブルへのインデックスとカウントを持つモジュール・テーブルを持つことによって行われる。 を持つモジュール・テーブルを持つことによって行われる。モジュール構造 この2つのエントリーが参照するモジュール構造については後述する。これは 動的にリンクされた共有ライブラリ・ファイルにのみ存在する。実行可能モジュールとオブジェクト モジュールの場合、ファイルには1つのモジュールしか含まれない。 に属する。
uint nmodtab;
モジュール・テーブル・エントリーの数。
uint extrefsymoff;
参照されるシンボル・テーブルへのオフセット。
動的なモジュール・バインディングをサポートするために、各モジュールのモジュール構造には 各モジュールが行う外部参照(定義済みと未定義)を示す。 を示す。各モジュールには、モジュールが参照するシンボルの参照シンボル・テーブルへのオフセットとカウントがある。 参照シンボル・テーブルへのオフセットとカウントがある。 これは、動的にリンクされた共有ライブラリ・ファイルにのみ存在する。実行モジュールと 定義された外部シンボルと未定義の外部シンボルがある。 未定義の外部シンボルは外部参照を示す。
uint nextrefsyms;
参照されるシンボル・テーブル・エントリーの数。
uint indirectsymoff;
間接シンボル・テーブルへのファイル・オフセット。
シンボル・ポインタ」と「ルーチン・スタブ」を含むセクションには セクションのサイズとエントリの固定サイズに基づく暗黙のカウント)。 各ポインタとスタブの「間接シンボル」テーブルへのインデックスと(エントリの固定サイズに基づく暗黙のカウント)。 へのインデックスと(セクションのサイズとエントリーの固定サイズに基づく暗黙のカウント) を持つ。これら2つの型のセクションごとに、間接記号テーブルへのインデックスがある。 間接記号テーブルへのインデックスは、セクションヘッダの フィールドreserved1に格納される。間接記号テーブル・エントリーは、単純に32ビットの インデックスである。 を参照する。間接記号テーブルは、セクションの セクションのエントリと一致するように並べられる。
uint nindirectsyms;
間接記号テーブル・エントリーの数。
uint extreloff;
外部再配置エントリへのオフセット
ライブラリファイル内の個々のモジュールの再配置を迅速に行うには、ライブラリ内の各モジュールの外部再配置エントリが必要である。 ライブラリファイル内の各モジュールの外部再配置エントリを効率的にアクセスする必要がある。 を効率的にアクセスする必要がある。再配置エントリーは、ライブラリファイルのセクションヘッダーからアクセスすることはできない。 再配置エントリは、ライブラリファイルのセクションヘッダからアクセスすることができないため、以下のように分けられている。 ローカルエントリと外部エントリのグループに分けられる。 に分けられる。この場合、loadコマンドのpresentsは次のようになる。 extreloff、nextrel、locreloff、nlocrelの各フィールドがゼロ以外の場合 は、マージされていないセクションの再配置エントリが、セクション構造を通して参照されていないことを示す。 セクションヘッダのreloffフィールドとnrelocフィールドが設定されている。 フィールドがゼロに設定されている)。
再配置エントリはセクションヘッダを通してアクセスされないので、セクションヘッダの 再配置項目はセクションヘッダを通してアクセスされないので、 r_addressフィールドは再配置される項目を識別するためにセクションオフセット以外の何かである必要がある。 をセクションオフセット以外のものにする必要がある。この場合 の vmaddr からのオフセットが設定される。 LC_SEGMENT コマンドからのオフセットが設定される。MH_SPLIT_SEGS 画像の場合、r_address は、最初の LC_SEGMENT コマンドの vmaddr からのオフセットに設定される。 オフセットに設定される。
再配置エントリはモジュールごとにグループ化され、モジュール・テーブルのエントリにはインデックスとカウントがある。 エントリは、そのモジュールの外部再配置エントリのグループのインデックスとカウントを持つ。 モジュールテーブルエントリには、そのモジュールの外部再配置エントリのグループのインデックスとカウントがある。
モジュール間でマージされたセクションについては、そのセクションの外部再配置エントリが残っていてはならない。 外部再配置エントリが残っていてはならない。 はローカルでなければならない)。
uint nextrel;
外部再配置エントリの数。
uint locreloff;
ローカル再配置エントリへのオフセット。
すべてのローカル再配置エントリはグループ化される。 オブジェクトが静的にリンク編集されたアドレスから移動する場合にのみ使用されるためである。 オブジェクトが静的にリンク編集されたアドレスから移動した場合にのみ使用されるため、モジュールごとにグループ化されない)。
uint nlocrel;
ローカル再配置エントリの数。
INDIRECT_SYMBOL_LOCAL
INDIRECT_SYMBOL_ABS
struct dylib_table_of_contents;
目次エントリ。
uint symbol_index;
定義された外部シンボル(シンボルテーブルへのインデックス)。
uint module_index;
このシンボルが定義されているモジュール・テーブルへのインデックス。
struct dylib_module;
モジュールテーブルエントリ。
uint module_name;
モジュール名(文字列テーブルへのインデックス)。
uint iextdefsym;
外部定義シンボルへのインデックス。
uint nextdefsym;
外部定義シンボルの数
uint irefsym;
参照シンボルテーブルへのインデックス。
uint nrefsym;
参照シンボルテーブルのエントリ数
uint ilocalsym;
ローカルシンボルのシンボルへのインデックス。
uint nlocalsym;
ローカルシンボルの数
uint iextrel;
外部再配置エントリへのインデックス。
uint nextrel;
外部再配置エントリーの数。
uint iinit_iterm;
下位16ビットはinitセクションへのインデックス、上位16ビットはtermセクションへのインデックスである。 項セクションへのインデックスである。
uint ninit_nterm;
下位16ビットはinitセクションのエントリ数、上位16ビットはtermセクションのエントリ数である。 は期間セクションのエントリ数である。
uint objc_module_info_addr;
(_OBJC,_module_info)セクションである。
このモジュールの開始アドレスである。
uint objc_module_info_size;
(_OBJC,_module_info)セクション。
このモジュールのサイズ
struct dylib_module_64;
64ビットのモジュールテーブルエントリ
uint module_name;
モジュール名(文字列テーブルへのインデックス)。
uint iextdefsym;
外部定義シンボルへのインデックス。
uint nextdefsym;
外部定義シンボルの数。
uint irefsym;
参照シンボル・テーブルへのインデックス。
uint nrefsym;
参照シンボル・テーブル・エントリーの数。
uint ilocalsym;
ローカルシンボルのシンボルへのインデックス。
uint nlocalsym;
ローカルシンボルの数
uint iextrel;
外部再配置エントリへのインデックス
uint nextrel;
外部再配置エントリーの数。
uint iinit_iterm;
下位16ビットはinitセクションへのインデックス、上位16ビットはtermセクションへのインデックスである。 インデックスである。
uint ninit_nterm;
下位16ビットはinitセクションのエントリ数、上位16ビットはtermセクションのエントリ数である。 は期間セクションのエントリ数である。
uint objc_module_info_size;
(_OBJC,_module_info)セクションである。
このモジュールのサイズは
ulong objc_module_info_addr;
(_OBJC,_module_info)セクション。
このモジュールの開始アドレス。
struct dylib_reference;
参照シンボル・テーブルのエントリーは、(静的リンク・エディターでも動的リンク・エディターでも)モジュールをロードするときに使われる。 参照シンボルテーブルのエントリは、(静的リンクエディターと動的リンクエディターの両方による)モジュールのロード時、およびモジュールがアンロードされたり置換されたりしたときに使用される。 アンロードまたは置換された場合にも使用される。したがって、すべての外部シンボル (定義済みおよび未定義)は、モジュールの参照表にリストされる。そのため フラグは、参照されているシンボルの型を表す。フラグの定数 フラグの定数は<mach-o/nlist.h>で定義されている。 で定義されている。
const pure nothrow @nogc @property @safe uint isym();

pure nothrow @nogc @property @safe void isym(uint v);
シンボルテーブルへのインデックス。
const pure nothrow @nogc @property @safe uint flags();

pure nothrow @nogc @property @safe void flags(uint v);
参照の型を示すフラグ。
struct twolevel_hints_command;
twolevel_hints_commandは、2レベル名前空間検索のヒントである 2レベル名前空間検索ヒント・テーブルのオフセットとヒント数が含まれる。
uint cmd;
lc_twolevel_hints.
uint cmdsize;
sizeof(struct twolevel_hints_command)。
uint offset;
ヒント・テーブルへのオフセット。
uint nhints;
ヒント・テーブルのヒント数。
struct twolevel_hint;
2レベル名前空間ルックアップ・ヒント・テーブルのエントリは以下のとおりである。 twolevel_hint 構造体である。これらはダイナミック・リンク・エディターにヒントを提供する。 に2レベル名前空間の未定義シンボルを探すヒントを提供する。 imageである。isub_imageフィールドはサブイメージのインデックスである。 (サブフレームワークとサブアンブレラ・リスト)のインデックスである。 フィールドのインデックスである。 リンクエディターによって構築された。isub-imageが0の場合、シンボルはライブラリで定義され、サブイメージでは定義されない。 ライブラリで定義され、サブイメージでは定義されない。isub-imageが0以外の場合、それはサブイメージの配列のインデックスである。 サブイメージの配列のインデックスである。 が1である。サブイメージの配列は、傘のサブイメージの順番に並んだリストである。 サブイメージの配列は、umbrellaのサブイメージを順番に並べたリストである。 を持つシンボルに対して検索されるサブイメージの順序付きリストである。目次インデックス は、ライブラリの目次へのインデックスである。これは バイナリサーチまたは有向線形探索の開始点として使われる。
const pure nothrow @nogc @property @safe uint isub_image();

pure nothrow @nogc @property @safe void isub_image(uint v);
サブ画像へのインデックス。
const pure nothrow @nogc @property @safe uint itoc();

pure nothrow @nogc @property @safe void itoc(uint v);
目次へのインデックス。
struct prebind_cksum_command;
prebind_cksum_commandには、プレバインドされたファイルの元のチェックサムの値、またはゼロが格納される。 の値かゼロが格納される。プレバインドファイルが最初に作成されたとき、またはプレバインドファイルの更新以外の目的で チェックサムの値はゼロに設定される。 の値はゼロに設定される。ファイルにバインド前情報が再作成されたとき、および チェックサムの値がゼロの場合、元のチェックサムが計算され、cksumフィールドに格納される。 計算され、出力ファイルのこのloadコマンドのcksumフィールドに格納される。 ファイルに格納される。プリバインドが再実行され、cksumフィールドがゼロでない場合 である場合、それは入力ファイルから変更されずに残される。
uint cmd;
lc_prebind_cksum.
uint cmdsize;
Sizeof(struct_prebind_cksum_command)。
uint cksum;
チェックサムまたはゼロ。
struct uuid_command;
uuid loadコマンドは、静的バインドによって生成されたオブジェクトを識別する128ビットの一意な乱数を含む。 スタティックリンクエディターによって生成されたオブジェクトを識別する。
uint cmd;
LC_UUID。
uint cmdsize;
Sizeof(構造体uuid_command)。
ubyte[16] uuid;
128ビットのuuid。
struct rpath_command;
rpath_commandは、実行時に@を見つけるために使用される現在のランパスに追加されるパスを含む。 rpath_commandは実行時に@rpath接頭辞付きdylibsを見つけるために使用される現在の実行パスに追加されるべきパスを含む。
uint cmd;
LC_RPATH。
uint cmdsize;
文字列を含む。
lc_str path;
ランパスに追加するパス。
struct linkedit_data_command;
linkedit_data_commandには、_LINKEDIT_data_commandにあるデータのブロブのオフセットとサイズが含まれる。 のオフセットとサイズが含まれる。
uint cmd;
lc_code_signature、lc_segment_split_info、lc_function_starts、 lc_data_in_code, lc_dylib_code_sign_drs、 LC_LINKER_OPTIMIZATION_HINT, LC_DYLD_EXPORTS_TRIE または LC_DYLD_CHAINED_FIXUPS のいずれかである。
uint cmdsize;
sizeof(struct linkedit_data_command).
uint dataoff;
LINKEDITセグメント内のデータのファイルオフセット。
uint datasize;
LINKEDITセグメント内のデータのファイルサイズ。
struct encryption_info_command;
encryption_info_commandは、暗号化セグメントのファイルオフセットとサイズを含む。 暗号化されたセグメントの
uint cmd;
lc_encryption_info.
uint cmdsize;
sizeof(struct encryption_info_command)。
uint cryptoff;
暗号化された範囲のファイルオフセット。
uint cryptsize;
暗号化された範囲のファイル・サイズ。
uint cryptid;
どの暗号化システムか。0はまだ暗号化されていないことを意味する。
struct encryption_info_command_64;
encryption_info_command_64は、暗号化されたセグメントのファイルオフセットとサイズを含む。 暗号化されたセグメントのファイルオフセットとサイズ(x86_64ターゲットで使用)。
uint cmd;
lc_encryption_info_64.
uint cmdsize;
sizeof(struct encryption_info_command_64)。
uint cryptoff;
暗号化された範囲のファイルオフセット。
uint cryptsize;
暗号化範囲のファイル・サイズ。
uint cryptid;
0はまだ暗号化されていないことを意味する。
uint pad;
この構造体のサイズを8バイトの倍数にするためのパディング。
struct version_min_command;
version_min_commandには、このバイナリが動作するようにビルドされたOSの最小バージョンが格納される。 バイナリを実行するためにビルドされたOSの最小バージョンが含まれる。
uint cmd;
LC_VERSION_MIN_MACOSX または LC_VERSION_MIN_IPHONEOS または LC_VERSION_MIN_WATCHOS または LC_VERSION_MIN_TVOS である。
uint cmdsize;
Sizeof(struct_min_version_command)。
uint version_;
X.Y.Z は、ニブル xxxx.yy.zz でエンコードされる。
uint sdk;
X.Y.Zはnibbles xxxx.yy.zzでエンコードされる。
struct build_version_command;
build_version_commandは、このバイナリがそのプラットフォームで動作するようにビルドされた最小OSバージョンを含む。 バイナリがそのプラットフォームで動作するようにビルドされた最小のOSバージョンが含まれる。既知のプラットフォームと ツールの値が続く。
uint cmd;
lc_build_version.
uint cmdsize;
sizeof(struct build_version_command) plus ntools. sizeof(struct build_tool_version)である。
uint platform;
プラットフォーム。
uint minos;
X.Y.Zはニブルxxxx.yy.zzでエンコードされる。
uint sdk;
X.Y.Zはnibbles xxxx.yy.zzでエンコードされる。
uint ntools;
これに続くツールエントリーの数。
struct build_tool_version;
uint tool;
ツールの列挙型。
uint version_;
ツールのバージョン番号。
PLATFORM_MACOS
PLATFORM_IOS
PLATFORM_TVOS
PLATFORM_WATCHOS
PLATFORM_BRIDGEOS
PLATFORM_UIKITFORMAC
PLATFORM_IOSSIMULATOR
PLATFORM_TVOSSIMULATOR
PLATFORM_WATCHOSSIMULATOR
PLATFORM_DRIVERKIT
TOOL_CLANG
TOOL_SWIFT
TOOL_LD
struct dyld_info_command;
dyld_info_commandには、新しい圧縮形式の情報dyld_info_commandのファイルオフセットとサイズが含まれている。 dyldが画像を読み込むのに必要な情報の新しい圧縮形式のファイルのオフセットとサイズが含まれている。 画像のロードに必要な情報の新しい圧縮形式のファイルのオフセットとサイズが含まれる。この情報は、Mac OS X 10.6以降で使用される。このコマンド はバイトストリームを使ってエンコードされるので、エンディアンスワップは必要ない。 は必要ない。
uint cmd;
LC_DYLD_INFOまたはLC_DYLD_INFO_ONLYである。
uint cmdsize;
sizeof(struct dyld_info_command)。
uint rebase_off;
情報をリベースするファイルオフセット。
dyldが優先アドレスと異なるアドレスで画像をロードするたびに、画像をリベースする。 リベース情報へのファイルオフセット。リベース情報は で始まるバイトサイズのオペコードのストリームである。 概念的には、リベース情報はタプルのテーブルである: オペコードは、列が変更された時だけエンコードすることで、テーブルを圧縮している。 オペコードは、カラムが変更された時のみエンコードすることで、テーブルをエンコードする圧縮された方法である。さらに のような単純なパターンは、数バイトでエンコードできる。 バイトで符号化できる。
uint rebase_size;
リベース情報のサイズ。
uint bind_off;
バインディング情報へのファイルオフセット。
Dyldはローディングの過程で画像をバインドする。 他のイメージのシンボルへのポインタを初期化する必要がある。 バインド情報はバイト単位のストリームである。 シンボル名がBIND_OPCODE_で始まる。 概念的には、バインド情報はタプルのテーブルである: オペコードは、カラムが変更されたときだけエンコードすることで、テーブルをエンコードする圧縮された方法である。 オペコードは、カラムが変更されたときだけエンコードすることによって、テーブルをエンコードする圧縮された方法である。さらに、単純なパターン さらに、同じ値に初期化されたポインタの実行のような単純なパターンは、数バイトでエンコードできる。 数バイトでエンコードできる。
uint bind_size;
バインディング情報のサイズ。
uint weak_bind_off;
弱いバインディング情報へのファイルオフセット。
C++プログラムの中には、プロセス内のすべてのイメージがあるコード/データの同じコピーを使用するように、一意のシンボルへのdyldを必要とするものがある。 を一意のシンボルにする必要がある。 このステップはバインディングの後に行われる。weak_bind の内容はbind_infoのようなオペコードストリームである。ただし シンボル名でアルファベット順にソートされる。これによりdyldは 弱バインド情報を持つすべてのイメージを順番に歩き、衝突を探すことができる。 衝突を探す。衝突がなければ、dyldは更新を行わない。 は更新を行わない。つまり、いくつかの修正もbind_infoにエンコードされる。 にエンコードされる。例えば、"operator new"のすべての呼び出しは、まずlibstdc++.dylibにバインドされる。 への呼び出しはすべて、まずbind_infoの情報を使ってlibstdc++.dylibにバインドされる。 にバインドされる。次に、あるイメージが operator new をオーバーライドした場合、weak_bind_info が検出される。 をオーバーライドしている場合、weak_bind情報が処理されるときにそれが検出される。 演算子 new の呼び出しがリバウンドされる。
uint weak_bind_size;
weak_bind情報のサイズ。
uint lazy_bind_off;
遅延バインド情報へのファイルオフセット。
外部シンボルの使用法によっては、すぐにバインドする必要がないものもある。 その代わりに、最初の使用時に遅延バインドすることができる。lazy_bind には、すべての遅延シンボルをバインドするためのBINDオペコードのストリームが含まれる。 通常の使い方では、dyldは画像をロードするときにlazy_bindセクションを無視する。 を無視する。代わりにスタティック・リンカーが 代わりに、スタティックリンカーは、lazyポインタが最初にヘルパー関数を指すようにアレンジした。 その関数は、バインドが必要なシンボルのオフセットを lazy_bind エリアにプッシュする。 次にdyldにジャンプし、dyldは単純にそのオフセットをlazy_bindに追加する。 dyldにジャンプする。 を取得する。
uint lazy_bind_size;
遅延バインディングinfsのサイズ。
uint export_off;
遅延バインディング情報へのファイルオフセット。
dylibによってエクスポートされるシンボルはtrieでエンコードされる。これは は共通の接頭辞を取り除いたコンパクトな表現である。 また、すべての情報(名前、アドレス、フラグ)を1つにエンコードするため、RAM上のLINKEDITページを減らすことができる。 情報(名前、アドレス、フラグ)を1つの小さな連続した範囲にエンコードするため、RAMのLINKEDITページも削減できる。 エクスポート領域はノードのストリームである。順次最初のノード がトライの開始ノードである。
シンボルのノードは、これまでの文字列のエクスポートされたシンボル情報の長さであるuleb128で始まる。 で始まる。 エクスポートされたシンボルがない場合、ノードはゼロバイトで始まる。 エクスポートされた情報がある場合は、長さに続く。
最初はフラグを含むuleb128である。通常、これに続くのは uleb128でエンコードされたオフセットが続く。 このオフセットは、画像のmach_headerからシンボルで指定されたコンテンツの位置である。フラグが がEXPORT_SYMBOL_FLAGS_REXPORTの場合、 flagsの後に続くのは uleb128でエンコードされたライブラリの序数詞、そしてゼロで終端された UTF8文字列である。文字列の長さがゼロの場合、シンボル は指定されたdylibから同じ名前で再エクスポートされる。 flagsがEXPORT_SYMBOL_FLAGS_STUB_AND_RESOLVERの場合、次のようになる。 スタブオフセットとリゾルバオフセットである。 スタブは、レイジーでないポインタで使用される。リゾルバは レゾルバは遅延ポインタによって使用され、実際に使用するアドレスを取得するためにコールされなければならない。
オプションでエクスポートされるシンボル情報の後に、次のバイトがある。 このノードが残すエッジの数(0-255)である、 その後に各エッジが続く。 各エッジはゼロ終端のUTF8で、シンボル内の追加文字を表す。 のゼロ終端UTF8であり、その後にそのエッジが指すノードのuleb128オフセットが続く。 が続く。
uint export_size;
遅延バインディングのサイズ infs.
REBASE_TYPE_POINTER
REBASE_TYPE_TEXT_ABSOLUTE32
REBASE_TYPE_TEXT_PCREL32
REBASE_OPCODE_MASK
REBASE_IMMEDIATE_MASK
REBASE_OPCODE_DONE
REBASE_OPCODE_SET_TYPE_IMM
REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
REBASE_OPCODE_ADD_ADDR_ULEB
REBASE_OPCODE_ADD_ADDR_IMM_SCALED
REBASE_OPCODE_DO_REBASE_IMM_TIMES
REBASE_OPCODE_DO_REBASE_ULEB_TIMES
REBASE_OPCODE_DO_REBASE_ADD_ADDR_ULEB
REBASE_OPCODE_DO_REBASE_ULEB_TIMES_SKIPPING_ULEB
BIND_TYPE_POINTER
BIND_TYPE_TEXT_ABSOLUTE32
BIND_TYPE_TEXT_PCREL32
BIND_SPECIAL_DYLIB_SELF
BIND_SPECIAL_DYLIB_MAIN_EXECUTABLE
BIND_SPECIAL_DYLIB_FLAT_LOOKUP
BIND_SPECIAL_DYLIB_WEAK_LOOKUP
BIND_SYMBOL_FLAGS_WEAK_IMPORT
BIND_SYMBOL_FLAGS_NON_WEAK_DEFINITION
BIND_OPCODE_MASK
BIND_IMMEDIATE_MASK
BIND_OPCODE_DONE
BIND_OPCODE_SET_DYLIB_ORDINAL_IMM
BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB
BIND_OPCODE_SET_DYLIB_SPECIAL_IMM
BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
BIND_OPCODE_SET_TYPE_IMM
BIND_OPCODE_SET_ADDEND_SLEB
BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
BIND_OPCODE_ADD_ADDR_ULEB
BIND_OPCODE_DO_BIND
BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB
BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED
BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB
BIND_OPCODE_THREADED
BIND_SUBOPCODE_THREADED_SET_BIND_ORDINAL_TABLE_SIZE_ULEB
BIND_SUBOPCODE_THREADED_APPLY
EXPORT_SYMBOL_FLAGS_KIND_MASK
EXPORT_SYMBOL_FLAGS_KIND_REGULAR
EXPORT_SYMBOL_FLAGS_KIND_THREAD_LOCAL
EXPORT_SYMBOL_FLAGS_KIND_ABSOLUTE
EXPORT_SYMBOL_FLAGS_WEAK_DEFINITION
EXPORT_SYMBOL_FLAGS_REEXPORT
EXPORT_SYMBOL_FLAGS_STUB_AND_RESOLVER
struct symseg_command;
symseg_コマンドは、ヘッダーに記述されているGNUスタイルのシンボルテーブル情報のオフセットとサイズを含む。 シンボルテーブル情報のオフセットとサイズが含まれる。 シンボル・セグメントのシンボル・ルートも、ファイル内で適切に整列されていなければならない。 を正しく揃える必要がある。そのため、オフセットを4バイトの倍数に揃える必要がある。 つまり、オフセットを4バイトの倍数に揃えるという要件は、シンボル・ルーツの長さフィールドを4バイトの倍数に揃えるということになる。 の長さフィールドもlongの倍数になる。また、パディングもゼロにしなければならない。 をゼロにしなければならない。(これは廃止され、もはやサポートされていない)。
uint cmd;
LC_SYMSEG.
uint cmdsize;
sizeof(struct symseg_command)。
uint offset;
シンボルセグメントのオフセット。
uint size;
バイト単位のシンボルセグメントのサイズ。
struct ident_command;
ident_command 構造体に続くフリーフォーマット文字列テーブルを含む。 ident_command 構造体に続くフリーフォーマット文字列テーブルを含む。文字列はヌル終端で、コマンドのサイズは コマンドのサイズは4バイトの倍数までゼロバイトでパディングされる。 (THIS IS OBSOLETE and no longer supported)。
uint cmd;
LC_IDENT.
uint cmdsize;
このコマンドに続く文字列。
struct fvmfile_command;
fvmfile_コマンドは、指定された仮想アドレスにロードされるファイルへの参照を含む。 指定された仮想アドレスにロードされるファイルへの参照を含む。(現在、このコマンドは に予約されている。カーネルはプログラムをメモリにロードするときにこのコマンドを無視する)。 カーネルはこのコマンドを無視する)。
uint cmd;
LC_FVMFILE.
uint cmdsize;
パス名文字列を含む。
lc_str name;
ファイルのパス名。
uint header_addr;
ファイルの仮想アドレス。
struct entry_point_command;
entry_point_commandはthread_commandの代替である。 main()の場所(ファイルオフセット)を指定するために、メイン実行ファイルに使用される。 の場所(ファイル・オフセット)を指定する。リンク時に -stack_size が使用された場合、stacksize フィールドには、メイン・スレッドに必要なスタック・サイズが格納される。
uint cmd;
LC_MAIN は MH_EXECUTE ファイルタイプでのみ使用される。
uint cmdsize;
24.
ulong entryoff;
main()のファイル(_TEXT)オフセット。
ulong stacksize;
ゼロでない場合、初期スタック・サイズ。
struct source_version_command;
source_version_command は、オプションのロード・コマンドである。 バイナリをビルドするために使用されるソースのバージョン。
uint cmd;
lc_source_version.
uint cmdsize;
16.
ulong version_;
A.B.C.D.Eはa24.b10.c10.d10.e10としてパックされる。
struct data_in_code_entry;
LC_DATA_IN_CODEロード・コマンドはlinkedit_data_commandを使用する。 を使用してdata_in_code_entryエントリーの配列を指す。各エントリ はコードセクションのデータ範囲を記述する。
uint offset;
mach_header からデータ範囲の開始まで。
ushort length;
データ範囲のバイト数。
ushort kind;
DICE_KIND_*値。
DICE_KIND_DATA
DICE_KIND_JUMP_TABLE8
DICE_KIND_JUMP_TABLE16
DICE_KIND_JUMP_TABLE32
DICE_KIND_ABS_JUMP_TABLE32
struct tlv_descriptor;
S_THREAD_LOCAL_VARIABLES型のセクションはtlv_descriptorの配列を含む。 tlv_descriptor構造体の配列が含まれる。
void* function(tlv_descriptor*) thunk;
c_ulong key;
c_ulong offset;
struct note_command;
LC_NOTEコマンドはMach-Oファイルに含まれる任意のデータ領域を記述する。 ファイルに含まれる任意のデータ領域を記述する。最初の用途は、MH_CORE ファイルに追加データを記録することである。
uint cmd;
LC_NOTE.
uint cmdsize;
sizeof(struct note_command)。
char[16] data_owner;
この LC_NOTE のオーナー名。
ulong offset;
このデータのファイルオフセット。
ulong size;
データ領域の長さ。