英語版
このページの英語版を見る
core.sys.darwin.mach.loader
このファイルは Mach-O オブジェクトファイルのフォーマットについて記述している。
Dヘッダーファイル mach-o/
loader
.hmacOS 10.15 SDK から。
License:
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が設定されている場合は、スタティック・リンカーが見た順)
- 目次
- モジュールテーブル
- 参照記号テーブル
- 間接記号表
- 目次 - 定義された外部シンボルが名前順に並んでいる。
- モジュール・テーブル - ファイルには1つのモジュールしか含まれていない。 ファイル内のすべてがモジュールの一部である。
- 参照シンボル表 - 定義済みおよび未定義の外部シンボルである。
- 外部再配置エントリ
- ローカル再配置エントリ
- uint
cmd
; - LC_DYSYMTAB.
- uint
cmdsize
; - sizeof(struct dysymtab_command).
- uint
ilocalsym
; - ローカルシンボルへのインデックス。LC_SYMTABロードコマンドのsymoffとnsymsで示されるシンボルは以下の3つのグループに分類される。 は以下の3つのグループに分類される:
- ローカル・シンボル(さらにその元となるモジュールによってグループ化される)
- 定義された外部シンボル(さらに、それらが由来するモジュールによってグループ化される)
- 未定義シンボル
- 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 voidisym
(uintv
); - シンボルテーブルへのインデックス。
- const pure nothrow @nogc @property @safe uint
flags
();
pure nothrow @nogc @property @safe voidflags
(uintv
); - 参照の型を示すフラグ。
- 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 voidisub_image
(uintv
); - サブ画像へのインデックス。
- const pure nothrow @nogc @property @safe uint
itoc
();
pure nothrow @nogc @property @safe voiditoc
(uintv
); - 目次へのインデックス。
- 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
; - データ領域の長さ。
Copyright © 1999-2024 by the D Language Foundation
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku