FreeBSD 日本語マニュアル検索 (jman/japropos/jwhatis)


日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。

4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.3-RELEASE-K, 13.0-RELEASE-K から 13.2-RELEASE-K は、全翻訳済み)

13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。



検索コマンド: man apropos whatis
コマンド/キーワード:
日本語マニュアル RELEASE :
セクション:
Table of Contents
名称 | 書式 | 解説 | 関連項目 | 歴史 | 作者
ELF(5)              FreeBSD ファイルフォーマットマニュアル              ELF(5)

名称
     elf -- ELF 実行形式バイナリファイルのフォーマット

書式
     #include <elf.h>

解説
     ヘッダファイル <elf.h> は、ELF 実行形式バイナリファイルのフォーマットを定
     義しています。ELF には普通の実行可能ファイル、再配置可能なオブジェクト
     ファイル、コアファイル、共有ライブラリがあります。

     ELF ファイルフォーマットを使っている実行可能ファイルは ELF ヘッダを持ちま
     す。そして、プログラムヘッダテーブルか、セクションヘッダテーブル、あるい
     はその両方が続きます。ELF ヘッダは、常にファイルのオフセット 0 にありま
     す。プログラムヘッダテーブルとセクションヘッダテーブルのファイル中のオフ
     セットは、ELF ヘッダで定義されています。2 つのテーブルは、ファイルの特徴
     の残りの部分を記述します。

     ネイティブアーキテクチャの ELF バイナリファイルを処理するアプリケーション
     は、そのソースコードに <elf.h> をインクルードするだけですみます。これらの
     アプリケーションは、総称名 ``Elf_xxx'' による全タイプと構造体への参照を含
     む必要があり、``ELF_xxx'' によるマクロへの参照を含む必要があるでしょう。
     このようにして記述されたアプリケーションは、どのようなアーキテクチャで
     あっても、ホストが 32 ビットなのか、あるいは 64 ビットなのかということを
     気にしないで、コンパイル可能です。

     未知のアーキテクチャの ELF ファイルを処理する必要があるアプリケーション
     は、<elf.h> ではなく、<sys/elf32.h> と <sys/elf64.h> の両方をインクルード
     する必要があります。さらに、全てのタイプと構造体は、``Elf32_xxx'' か
     ``Elf64_xxx'' によって区別する必要があります。マクロは、``ELF32_xxx'' ま
     たは ``ELF64_xxx'' によって区別する必要があります。

     システムのアーキテクチャがたとえ何であっても、常に <sys/elf_generic.h> だ
     けでなく、<sys/elf_common.h> もインクルードします。

     これらのヘッダファイルでは、上で言及したヘッダを C 構造体として記述し、こ
     れに加えて動的セクションと再配置セクションとシンボルテーブルのための構造
     体を含んでいます。

     以下のタイプが、32 ビットアーキテクチャのために使われています:

           Elf32_Addr      符号無し 32 ビットプログラムアドレス
           Elf32_Half      符号無し 16 ビットフィールド
           Elf32_Lword     符号無し 64 ビットフィールド
           Elf32_Off       符号無し 32 ビットファイルオフセット
           Elf32_Sword     符号付き 32 ビットフィールドまたは整数
           Elf32_Word      符号無し 32 ビットフィールドまたは整数

     64 ビットアーキテクチャ用に以下のタイプが用意されています:

           Elf64_Addr      符号無し 64 ビットプログラムアドレス
           Elf64_Half      符号無し 16 ビットフィールド
           Elf64_Lword     符号無し 64 ビットフィールド
           Elf64_Off       符号無し 64 ビットファイルオフセット
           Elf64_Sword     符号付き 32 ビットフィールド
           Elf64_Sxword    符号付き 64 ビットフィールドまたは整数
           Elf64_Word      符号無し 32 ビットフィールド
           Elf64_Xword     符号無し 64 ビットフィールドまたは整数

     ELF ファイルフォーマットが定義する全てのデータ構造は、関連するクラスのた
     めに ``自然な'' サイズと境界調整のガイドラインに従っています。必要なら
     ば、データ構造は、4 バイトオブジェクトが 4 バイト境界となることを保証する
     ために、構造体のサイズを強制的に 4 の倍数にするとかいった手段で、明示的な
     パディングを含めます。

     ELF ヘッダは、Elf32_Ehdr 型または Elf64_Ehdr 型によって記述されています:

           typedef struct {
                   unsigned char   e_ident[EI_NIDENT];
                   Elf32_Half      e_type;
                   Elf32_Half      e_machine;
                   Elf32_Word      e_version;
                   Elf32_Addr      e_entry;
                   Elf32_Off       e_phoff;
                   Elf32_Off       e_shoff;
                   Elf32_Word      e_flags;
                   Elf32_Half      e_ehsize;
                   Elf32_Half      e_phentsize;
                   Elf32_Half      e_phnum;
                   Elf32_Half      e_shentsize;
                   Elf32_Half      e_shnum;
                   Elf32_Half      e_shstrndx;
           } Elf32_Ehdr;

           typedef struct {
                   unsigned char   e_ident[EI_NIDENT];
                   Elf64_Half      e_type;
                   Elf64_Half      e_machine;
                   Elf64_Word      e_version;
                   Elf64_Addr      e_entry;
                   Elf64_Off       e_phoff;
                   Elf64_Off       e_shoff;
                   Elf64_Word      e_flags;
                   Elf64_Half      e_ehsize;
                   Elf64_Half      e_phentsize;
                   Elf64_Half      e_phnum;
                   Elf64_Half      e_shentsize;
                   Elf64_Half      e_shnum;
                   Elf64_Half      e_shstrndx;
           } Elf64_Ehdr;

     フィールドは、以下の意味を持っています:

           e_ident      このバイト配列はファイルをどのように解釈すべきかを指定
                        します。これは、プロセッサまたはファイルの残りの内容か
                        ら独立しています。この配列中の全要素は、EI_ で開始する
                        マクロにより名付けられ、また先頭に ELF がついた値を持
                        ち得ます。以下のマクロが定義されています:

                        EI_MAG0        マジック番号の第 1 のバイト。ELFMAG0 で
                                       あることが必要です。
                        EI_MAG1        マジック番号の第 2 のバイト。ELFMAG1 で
                                       あることが必要です。
                        EI_MAG2        マジック番号の第 3 のバイト。ELFMAG2 で
                                       あることが必要です。
                        EI_MAG3        マジック番号の第 4 のバイト。ELFMAG3 で
                                       あることが必要です。
                        EI_CLASS       第 5 のバイトは、当該のバイナリファイル
                                       のアーキテクチャを識別します:

                                       ELFCLASSNONE  このクラスは、不当です。
                                       ELFCLASS32    これは、32 ビットアーキテ
                                                     クチャを定義します。ファ
                                                     イル空間と仮想アドレス空
                                                     間が 4 ギガバイトまでにお
                                                     さまるマシンに対応しま
                                                     す。
                                       ELFCLASS64    これは、64 ビットアーキテ
                                                     クチャを定義します。
                        EI_DATA        第 6 のバイトは、ファイルのプロセッサ固
                                       有データのエンコーディングを指定しま
                                       す。現在、次のエンコーディングがサポー
                                       トされています:

                                       ELFDATANONE  未知のデータフォーマット。
                                       ELFDATA2LSB  2 の補数、リトルエンディア
                                                    ン。
                                       ELFDATA2MSB  2 の補数、ビッグエンディア
                                                    ン。
                        EI_VERSION     ELF 仕様書のバージョンナンバ:

                                       EV_NONE     不当なバージョン。
                                       EV_CURRENT  現在のバージョン。
                        EI_OSABI       このバイトは、オブジェクトの対象であ
                                       る、オペレーティングシステムと ABI を識
                                       別します。他の ELF 構造中のフィールドに
                                       は、プラットフォーム依存の意味のものが
                                       あります。そのようなフィールドの解釈
                                       は、このバイトの値で決定されます。次の
                                       値が現在定義されています:

                                       ELFOSABI_SYSV        UNIX System V
                                                            ABI。
                                       ELFOSABI_HPUX        HP-UX オペレーティ
                                                            ングシステム ABI。
                                       ELFOSABI_NETBSD      NetBSD オペレー
                                                            ティングシステム
                                                            ABI。
                                       ELFOSABI_LINUX       GNU/Linux オペレー
                                                            ティングシステム
                                                            ABI。
                                       ELFOSABI_HURD        GNU/Hurd オペレー
                                                            ティングシステム
                                                            ABI。
                                       ELFOSABI_86OPEN      86Open Common IA32
                                                            ABI。
                                       ELFOSABI_SOLARIS     Solaris オペレー
                                                            ティングシステム
                                                            ABI。
                                       ELFOSABI_MONTEREY    Monterey プロジェ
                                                            クト ABI。
                                       ELFOSABI_IRIX        IRIX オペレーティ
                                                            ングシステム ABI。
                                       ELFOSABI_FREEBSD     FreeBSD オペレー
                                                            ティングシステム
                                                            ABI。
                                       ELFOSABI_TRU64       TRU64 UNIX オペ
                                                            レーティングシステ
                                                            ム ABI。
                                       ELFOSABI_ARM         ARM アーキテクチャ
                                                            ABI。
                                       ELFOSABI_STANDALONE  Standalone (組み込
                                                            み) ABI。
                        EI_ABIVERSION  このバイトは、オブジェクトの対象である
                                       ABI のバージョンを識別します。この
                                       フィールドは、同じ ABI でも、互換性の無
                                       いもの同士を区別するために使用されま
                                       す。バージョン番号の解釈は、EI_OSABI
                                       フィールドで識別される ABI に依存しま
                                       す。この仕様に準拠するアプリケーション
                                       は、値 0 を使用します。
                        EI_PAD         パディングの始め。これらのバイトは、予
                                       約されており、0 にセットされます。ここ
                                       を読むプログラムは、これを無視する必要
                                       があります。将来、現在使っていないバイ
                                       トに意味が与えられた時には、EI_PAD の値
                                       は変わります。
                        EI_BRAND       アーキテクチャ識別子の始め。
                        EI_NIDENT      e_ident 配列の大きさ。

           e_type       構造体のこのメンバは、オブジェクトファイルタイプを識別
                        します:

                        ET_NONE  未知のタイプ。
                        ET_REL   再配置可能なファイル。
                        ET_EXEC  実行可能ファイル。
                        ET_DYN   共有オブジェクト。
                        ET_CORE  コアファイル。

           e_machine    このメンバは、個々のファイルに必要なアーキテクチャを指
                        定します:

                        EM_NONE         未知のマシン。
                        EM_M32          AT&T WE 32100
                        EM_SPARC        Sun Microsystems SPARC.
                        EM_386          Intel 80386.
                        EM_68K          Motorola 68000
                        EM_88K          Motorola 88000
                        EM_486          Intel 80486
                        EM_860          Intel 80860
                        EM_MIPS         MIPS RS3000 (ビッグエンディアンのみ)
                        EM_MIPS_RS4_BE  MIPS RS4000 (ビッグエンディアンのみ)
                        EM_SPARC64      SPARC v9 64-bit 非公式
                        EM_PARISC       HPPA
                        EM_PPC          PowerPC
                        EM_ALPHA        Compaq [DEC] Alpha

           e_version    このメンバは、ファイルバージョンを識別します:

                        EV_NONE     不当なバージョン。
                        EV_CURRENT  現在のバージョン。
           e_entry      このメンバは、システムが最初に制御を移す、つまりプロセ
                        スを開始する仮想アドレスを示します。ファイルにエントリ
                        ポイントがないならば、このメンバは 0 になります。
           e_phoff      このメンバは、プログラムヘッダテーブルのバイト単位の
                        ファイルオフセットを持ちます。
           e_shoff      このメンバは、セクションヘッダテーブルのバイト単位の
                        ファイルオフセットを持ちます。ファイルにセクションヘッ
                        ダテーブルがないならば、このメンバは 0 になります。
           e_flags      このメンバは、ファイルに関連する、プロセッサに固有なフ
                        ラグを持ちます。フラグ名は、EF_`machine_flag' という形
                        式になります。現在、定義されたフラグはありません。
           e_ehsize     このメンバは、ELF ヘッダのバイト単位の大きさを持ちま
                        す。
           e_phentsize  このメンバは、ファイルのプログラムヘッダテーブルにある
                        エントリ 1 個分のサイズを持ちます。全てのエントリは、
                        同じ大きさです。
           e_phnum      このメンバは、プログラムヘッダテーブル中のエントリの個
                        数を持ちます。ファイルが拡張プログラムヘッダ番号付けを
                        使用しているなら、e_phnum メンバは値 PN_XNUM を含み、
                        プログラムヘッダテーブルエントリの実際の数は、インデッ
                        クス SHN_UNDEF のセクションヘッダの sh_info メンバに格
                        納されます。e_phentsize の製品とプログラムヘッダテーブ
                        ルエントリの数は、バイト単位でプログラムヘッダテーブル
                        のサイズを与えます。ファイルにプログラムヘッダがないな
                        ら、e_phnum は、値 0 を保持します。
           e_shentsize  このメンバは、セクションヘッダのバイト単位の大きさを持
                        ちます。セクションヘッダは、セクションヘッダテーブルの
                        中の 1 つのエントリです; 全てのエントリは、同じ大きさ
                        です。
           e_shnum      このメンバは、セクションヘッダテーブル中のエントリの個
                        数を持ちます。ファイルが拡張セクション番号付けを使用し
                        ているなら、e_shnum メンバは 0 となり、実際のセクショ
                        ン番号は、インデックス SHN_UNDEF のセクションヘッダの
                        sh_size メンバに格納されます。ファイルにセクションヘッ
                        ダテーブルがないなら、ELF ヘッダの e_shnume_shoff
                        フィールドの両方は、0 となります。e_shentsize の製品と
                        ファイル中のセクションの数は、バイト単位でセクション
                        ヘッダテーブルのサイズを与えます。
           e_shstrndx   このメンバは、セクションヘッダテーブルの、セクション名
                        文字列テーブルに結びつけられたエントリへのインデックス
                        を持ちます。拡張されたセクション番号付けが使用されてい
                        るなら、このフィールドは、値 SHN_XINDEX を保持し、実際
                        のセクションヘッダテーブルのインデックスは、インデック
                        ス SHN_UNDEF のセクションヘッダエントリの sh_link
                        フィールドに存在します。ファイルにセクション名文字列
                        テーブルがないならば、このメンバは値 SHN_UNDEF を持ち
                        ます。

     実行可能ファイルまたは共有オブジェクトファイルのプログラムヘッダテーブル
     は、構造体の配列です。各構造体は、プログラム実行にシステムが必要とする、
     セグメント等の情報を記述します。オブジェクトファイルのセグメントは、1 つ
     以上のセクションを含みます。プログラムヘッダは、実行可能ファイルと共有オ
     ブジェクトファイルだけで意味があります。ファイルは、ELF ヘッダの
     e_phentsizee_phnum メンバでそれ自身のプログラムヘッダサイズを指定しま
     す。ELF 実行形式のヘッダと同様に、プログラムヘッダもアーキテクチャに従い
     異なるバージョンを持ちます:

           typedef struct {
                   Elf32_Word      p_type;
                   Elf32_Off       p_offset;
                   Elf32_Addr      p_vaddr;
                   Elf32_Addr      p_paddr;
                   Elf32_Word      p_filesz;
                   Elf32_Word      p_memsz;
                   Elf32_Word      p_flags;
                   Elf32_Word      p_align;
           } Elf32_Phdr;

           typedef struct {
                   Elf64_Word      p_type;
                   Elf64_Word      p_flags;
                   Elf64_Off       p_offset;
                   Elf64_Addr      p_vaddr;
                   Elf64_Addr      p_paddr;
                   Elf64_Xword     p_filesz;
                   Elf64_Xword     p_memsz;
                   Elf64_Xword     p_align;
           } Elf64_Phdr;

     32 ビットと 64 ビットのプログラムヘッダの間の主な差は、構造体中の p_flags
     メンバの位置だけです。

           p_type    構造体 Phdr のこのメンバは、この配列要素が記述しているセ
                     グメントの種類を示し、どのように配列要素を解釈すべきかを
                     示します。

                     PT_NULL     この配列要素は使っていません。また、他のメン
                                 バの値は未定義です。これにより、プログラム
                                 ヘッダ中に無視されるエントリを持てます。
                     PT_LOAD     この配列要素は、ロード可能なセグメントを指定
                                 します。これは p_fileszp_memsz で記述され
                                 ます。ファイルからのバイトは、メモリセグメン
                                 トの先頭にマップされます。セグメントのメモリ
                                 サイズ (p_memsz) がファイルサイズ (p_filesz)
                                 より大きいならば、``余分な'' バイトは、値 0
                                 を持って、セグメントの初期化された領域に続く
                                 ものと定義されます。ファイルサイズは、メモリ
                                 サイズを越えてはなりません。プログラムヘッダ
                                 テーブルの中のロード可能なセグメントエントリ
                                 は、昇順で現れます。そして、p_vaddr メンバで
                                 ソートされます。
                     PT_DYNAMIC  この配列要素は、動的リンク情報を指定します。
                     PT_INTERP   この配列要素は、インタプリタとして起動するヌ
                                 ル文字で終わるパス名の場所と大きさを指定しま
                                 す。このセグメントタイプは、実行可能ファイル
                                 のみで意味があります (本セグメントタイプは、
                                 共有オブジェクト中にあるかもしれません)。本セ
                                 グメントは、ファイル中で複数個存在してはなり
                                 ません。存在する場合、全ロード可能セグメント
                                 エントリに先行する必要があります。
                     PT_NOTE     この配列要素は、補助情報のために場所と大きさ
                                 を指定します。
                     PT_SHLIB    このセグメントタイプは、予約されており、明記
                                 されていないセマンティクスを持ちます。このタ
                                 イプの配列要素を含むプログラムは、ABI に従い
                                 ません。
                     PT_PHDR     この配列要素が存在する場合、ファイル中とメモ
                                 リイメージ中における、プログラムヘッダテーブ
                                 ル自身の位置と大きさを指定します。本セグメン
                                 トタイプは、ファイル中で複数個存在してはなり
                                 ません。さらに、プログラムヘッダテーブルがプ
                                 ログラムのメモリイメージに含まれる場合のみ、
                                 存在が許されます。存在する場合、全ロード可能
                                 セグメントエントリに先行する必要があります。
                     PT_LOPROC   この値から PT_HIPROC 以下は、プロセッサ固有の
                                 セマンティクスのために予約されています。
                     PT_HIPROC   この値から PT_LOPROC 以上は、プロセッサ固有の
                                 セマンティクスのために予約されています。

           p_offset  このメンバは、セグメントの最初のバイトへの、ファイル先頭
                     からのオフセットを持ちます。
           p_vaddr   このメンバは、セグメントの最初のバイトがメモリで存在する
                     仮想アドレスを持ちます。
           p_paddr   物理アドレッシングのシステム上では、このメンバは、セグメ
                     ントの物理アドレスのために予約されています。BSD では、本
                     メンバは使されず、0 である必要があります。
           p_filesz  このメンバは、セグメントのファイルイメージのバイト数を持
                     ちます。0 であるかもしれません。
           p_memsz   このメンバは、セグメントのメモリイメージのバイト数を持ち
                     ます。0 であるかもしれません。
           p_flags   このメンバは、セグメントに関したフラグを持ちます。

                     PF_X  実行可能セグメント。
                     PF_W  書き込み可能なセグメント。
                     PF_R  読み込み可能なセグメント。

                     テキストセグメントは、一般にフラグ PF_XPF_R を持ちま
                     す。データセグメントは、一般に PF_X, PF_WPF_R を持ち
                     ます。
           p_align   このメンバは、メモリ中およびファイル中でセグメントが整列
                     すべき値を持ちます。ロード可能なプロセスは、p_vaddrp_offset をページサイズで割った余りに適合する値を持つ必要
                     があります。0 と 1 の値は、境界調整が不要であることを意味
                     します。そうでない場合、p_align は、正 (2 の整数乗) であ
                     る必要があります。そして、p_vaddrp_offsetp_align
                     で割った余りと等しい必要があります。

     ファイルのセクションヘッダテーブルは、全てのファイルのセクションの位置決
     定を可能とします。セクションヘッダテーブルは、Elf32_Shdr または
     Elf64_Shdr 構造体の配列です。ELF ヘッダの e_shoff メンバは、セクション
     ヘッダテーブルの、ファイル先頭からのバイトオフセットを与えます。e_shnum
     は、セクションヘッダテーブルのエントリ数を持ちます。e_shentsize は、各エ
     ントリの大きさをバイトで持ちます。

     セクションヘッダテーブルインデックスは、この配列の添字です。セクション
     ヘッダテーブルインデックスには、予約のものがあります。オブジェクトファイ
     ルには、次の特別なインデックスにはセクションがありません:

     SHN_UNDEF      この値は、未定義か、存在しないか、無関係であるか、意味がな
                    いセクション参照を示します。例えば、セクション番号
                    SHN_UNDEF からの相対で ``定義'' されるシンボルは、未定義の
                    シンボルです。
     SHN_LORESERVE  この値は、予約のインデックスの範囲の下限を指定します。
     SHN_LOPROC     この値から SHN_HIPROC 以下は、プロセッサ固有のセマンティク
                    スのために予約されています。
     SHN_HIPROC     この値から SHN_LOPROC 以上は、プロセッサ固有のセマンティク
                    スのために予約されています。
     SHN_ABS        この値は、対応する参照が絶対値であることを指定します。例え
                    ば、セクション番号 SHN_ABS からの相対で定義されるシンボル
                    は、絶対的な数値を持ち、再配置によって影響を受けません。
     SHN_COMMON     このセクションからの相対で定義されるシンボルは、共通シンボ
                    ルであり、Fortran の COMMON や領域が確保されていない C の
                    外部変数が該当します。
     SHN_HIRESERVE  この値は、予約インデックス範囲の上限を指定します。この範囲
                    は、SHN_LORESERVESHN_HIRESERVE の間であり、両端を含み
                    ます。セクションヘッダテーブルは、予約のインデックスのため
                    にエントリを含みません。

     セクションヘッダは、以下の構造体を持ちます:

           typedef struct {
                   Elf32_Word      sh_name;
                   Elf32_Word      sh_type;
                   Elf32_Word      sh_flags;
                   Elf32_Addr      sh_addr;
                   Elf32_Off       sh_offset;
                   Elf32_Word      sh_size;
                   Elf32_Word      sh_link;
                   Elf32_Word      sh_info;
                   Elf32_Word      sh_addralign;
                   Elf32_Word      sh_entsize;
           } Elf32_Shdr;

           typedef struct {
                   Elf64_Word      sh_name;
                   Elf64_Word      sh_type;
                   Elf64_Xword     sh_flags;
                   Elf64_Addr      sh_addr;
                   Elf64_Off       sh_offset;
                   Elf64_Xword     sh_size;
                   Elf64_Word      sh_link;
                   Elf64_Word      sh_info;
                   Elf64_Xword     sh_addralign;
                   Elf64_Xword     sh_entsize;
           } Elf64_Shdr;

     sh_name       このメンバは、セクションの名前を指定します。その値は、セク
                   ションヘッダ文字列テーブルセクションへのインデックスであ
                   り、ヌル文字で終わる文字列の場所を与えます。
     sh_type       このメンバは、セクションの内容とセマンティクスを分類しま
                   す。

                   SHT_NULL      この値は、セクションヘッダが不活性であること
                                 を示します。関連づけられたセクションを持ちま
                                 せん。セクションヘッダの他のメンバは、未定義
                                 値を持ちます。
                   SHT_PROGBITS  このセクションは、プログラムによって定義され
                                 る情報を持ちます。フォーマットと意味は、プロ
                                 グラムだけによってのみ決定されます。
                   SHT_SYMTAB    このセクションは、シンボルテーブルを持ちま
                                 す。一般的に、SHT_SYMTAB はリンクエディットの
                                 ためのシンボルを提供します。これはまた、動的
                                 リンクにも使用可能です。これは完全なシンボル
                                 テーブルであるため、動的リンクのためには不必
                                 要な多くのシンボルを含む場合があります。オブ
                                 ジェクトファイルは、SHN_DYNSYM セクションも含
                                 むことができます。
                   SHT_STRTAB    このセクションは、文字列テーブルを持ちます。
                                 オブジェクトファイルは、複数の文字列テーブル
                                 セクションを持ち得ます。
                   SHT_RELA      このセクションは、明示的な加数を持つ、再配置
                                 エントリを持ちます。例えば、オブジェクトファ
                                 イルの 32 ビットクラスのタイプ Elf32_Rela が
                                 該当します。オブジェクトは、複数の再配置セク
                                 ションを持ち得ます。
                   SHT_HASH      このセクションは、シンボルハッシュテーブルを
                                 持ちます。動的リンクに関連する全オブジェクト
                                 は、シンボルハッシュテーブルを含む必要があり
                                 ます。オブジェクトファイルは、単一のハッシュ
                                 テーブルのみを持ち得ます。
                   SHT_DYNAMIC   このセクションは、動的リンクのために情報を持
                                 ちます。オブジェクトファイルは、単一の動的セ
                                 クションのみを持ち得ます。
                   SHT_NOTE      このセクションは、いくばくかの方法でファイル
                                 に印をする情報を持ちます。
                   SHT_NOBITS    このタイプのセクションは、ファイル中の空間を
                                 占有しませんが、SHN_PROGBITS に似ています。こ
                                 のセクションはバイトを含みませんが、sh_offset
                                 メンバは概念上のファイルオフセットを含みま
                                 す。
                   SHT_REL       このセクションは、明示的な加数無しの再配置オ
                                 フセットを持ちます。例えば、オブジェクトファ
                                 イルの 32 ビットクラスのタイプ Elf32_Rel が該
                                 当します。オブジェクトファイルは、複数の再配
                                 置セクションを持ち得ます。
                   SHT_SHLIB     このセクションは、予約されており、明記されて
                                 いないセマンティクスを持ちます。
                   SHT_DYNSYM    このセクションは、動的リンクシンボルの最小の
                                 セットを持ちます。オブジェクトファイルは、
                                 SHN_SYMTAB セクションも含むことができます。
                   SHT_LOPROC    この値から SHT_HIPROC 以下は、プロセッサ固有
                                 のセマンティクスのために予約されています。
                   SHT_HIPROC    この値から SHT_LOPROC 以上は、プロセッサ固有
                                 のセマンティクスのために予約されています。
                   SHT_LOUSER    この値は、アプリケーションプログラムのために
                                 予約されているインデックス範囲の下限を指定し
                                 ます。
                   SHT_HIUSER    この値は、アプリケーションプログラムのために
                                 予約されているインデックス範囲の上限を指定し
                                 ます。SHT_LOUSERSHT_HIUSER の間のセクショ
                                 ンタイプは、アプリケーションによって使用可能
                                 であり、現在または将来のシステム定義セクショ
                                 ンタイプと衝突しません。

     sh_flags      セクションは、雑多な属性を記述する 1 ビットフラグをサポート
                   します。フラグビットが sh_flags でセットされるならば、その
                   セクションの属性は ``オン'' になります。そうでなければ、属
                   性は ``オフ'' であるか、あてはまりません。未定義属性は、0
                   にセットされます。

                   SHF_WRITE      セクションは、プロセス実行の間、書き込み可能
                                  であるべきデータを含みます。
                   SHF_ALLOC      セクションは、プロセス実行の間、メモリを占有
                                  します。制御セクションには、オブジェクトファ
                                  イルのメモリイメージで存在しないものがありま
                                  す。そのようなセクションでは、この属性はオフ
                                  です。
                   SHF_EXECINSTR  セクションは、実行可能な機械語命令を含みま
                                  す。
                   SHF_MASKPROC   このマスクで含まれる全てのビットは、プロセッ
                                  サ固有のセマンティクスのために確保されます。

     sh_addr       セクションがプロセスのメモリイメージに現れる場合、このメン
                   バは、セクションの最初のバイトが存在するアドレスを持ちま
                   す。そうでない場合、このメンバは 0 を含みます。
     sh_offset     このメンバ値は、このセクションの、ファイル先頭からのバイト
                   オフセットを与えます。1 つのセクションタイプ、すなわち
                   SHT_NOBITS は、ファイル中の空間を占有せず、その sh_offset
                   メンバは、ファイル中の概念上の位置を指定します。
     sh_size       このメンバは、セクションのバイトでの大きさを持ちます。セク
                   ションタイプが SHT_NOBITS でない限り、セクションはファイル
                   中の sh_size バイトを占有します。タイプ SHT_NOBITS のセク
                   ションは 0 以外の大きさを持ち得ますが、ファイル中の空間を占
                   有しません。
     sh_link       このメンバは、セクションヘッダテーブルインデックスリンクを
                   持ちます。この解釈は、セクションタイプ依存です。
     sh_info       このメンバは、追加情報を持ちます。この解釈は、セクションタ
                   イプ依存です。
     sh_addralign  若干のセクションには、アドレス境界の制約があります。セク
                   ションがダブルワードを持つならば、システムはダブルワード境
                   界をセクション全体に保証する必要があります。sh_addr の値
                   は、sh_addralign で割った値が 0 となることが必要です。0 と
                   正の 2 の羃乗だけが許されます。0 または 1 の値は、セクショ
                   ンには境界の制約がないことを意味します。
     sh_entsize    若干のセクションは、固定長エントリのテーブルを持ちます。例
                   えばシンボルテーブルがこれに該当します。そのようなセクショ
                   ンのために、このメンバは、各エントリのバイトでの大きさを与
                   えます。セクションが固定サイズのエントリのテーブルを持たな
                   いならば、このメンバは 0 を含みます。

     様々なセクションが、プログラムと制御情報を持ちます:
     .bss       (シンボルで始まっているブロック) このセクションは初期化されな
                いデータを持ち、プログラムのメモリイメージになります。定義で
                は、プログラム開始時にシステムがデータを 0 初期化します。この
                セクションは、タイプ SHT_NOBITS です。属性タイプは、SHF_ALLOCSHF_WRITE です。
     .comment   このセクションは、バージョン制御情報を持ちます。このセクション
                は、タイプ SHT_PROGBITS です。属性タイプは使われません。
     .data      このセクションは初期化されたデータを持ち、プログラムのメモリイ
                メージになります。このセクションは、タイプ SHT_PROGBITS です。
                属性タイプは、SHF_ALLOCSHF_WRITE です。
     .data1     このセクションは初期化されたデータを持ち、プログラムのメモリイ
                メージになります。このセクションは、タイプ SHT_PROGBITS です。
                属性タイプは、SHF_ALLOCSHF_WRITE です。
     .debug     このセクションは、シンボリックデバッギングのための情報を持ちま
                す。内容は、明記されていません。このセクションは、タイプ
                SHT_PROGBITS です。属性タイプは使われません。
     .dynamic   このセクションは、動的リンク情報を持ちます。セクションの属性
                は、SHF_ALLOC ビットを含みます。SHF_WRITE ビットがセットされる
                か否かは、プロセッサ依存です。このセクションは、タイプ
                SHT_DYNAMIC です。上の属性を見てください。
     .dynstr    このセクションは、動的リンクのために必要とされる文字列を持ちま
                す。そして一般には、名前を表現する文字列であり、シンボルテーブ
                ルエントリと結び付けられています。このセクションは、タイプ
                SHT_STRTAB です。使われる属性タイプは、SHF_ALLOC です。
     .dynsym    このセクションは、動的リンクシンボルテーブルを持ちます。このセ
                クションは、タイプ SHT_DYNSYM です。使われる属性は、SHF_ALLOC
                です。
     .fini      このセクションは、プロセス終了コードの実行可能命令を持ちます。
                プログラムの正常終了時に、システムはこのセクションのコードを実
                行します。このセクションは、タイプ SHT_PROGBITS です。使われる
                属性は、SHF_ALLOCSHF_EXECINSTR です。
     .got       このセクションは、グローバルオフセットテーブルを持ちます。この
                セクションは、タイプ SHT_PROGBITS です。属性は、プロセッサ依存
                です。
     .hash      このセクションは、シンボルハッシュテーブルを持ちます。このセク
                ションは、タイプ SHT_HASH です。使われる属性は、SHF_ALLOC で
                す。
     .init      このセクションは、プロセス初期化コードの実行可能命令を持ちま
                す。プログラム実行開始時に、メインプログラムエントリポイントを
                呼び出す前に、システムはこのセクションのコードを実行します。こ
                のセクションは、タイプ SHT_PROGBITS です。使われる属性は、
                SHF_ALLOCSHF_EXECINSTR です。
     .interp    このセクションは、プログラムインタプリタのパス名を持ちます。
                ファイルがこのセクションを含むロード可能なセグメントを持つなら
                ば、セクションの属性は SHF_ALLOC ビットを含みます。そうでない
                場合、このビットはオフです。このセクションは、タイプ
                SHT_PROGBITS です。
     .line      このセクションはシンボリックデバッギングのために行番号情報を持
                ちます。これは、プログラムソースとマシンコードの間の関係を記述
                します。内容は、明記されていません。このセクションは、タイプ
                SHT_PROGBITS です。属性タイプは使われません。
     .note      このセクションは、下で記述される ``Note Section'' フォーマット
                で、情報を持ちます。このセクションは、タイプ SHT_NOTE です。属
                性タイプは使われません。
     .plt       このセクションは、プロシージャリンケージテーブルを持ちます。こ
                のセクションは、タイプ SHT_PROGBITS です。属性はプロセッサ依存
                です。
     .relNAME   このセクションは、下記のように再配置情報を持ちます。ファイルが
                再配置を含むロード可能なセグメントを持つならば、セクションの属
                性は SHF_ALLOC ビットを含みます。そうでない場合、このビットは
                オフです。規約により、再配置されるセクションから ``NAME'' が与
                えられます。.text のための再配置セクションは、通常名前
                .rel.text を持ちます。このセクションは、タイプ SHT_REL です。
     .relaNAME  このセクションは、下記のように再配置情報を持ちます。ファイルが
                再配置を含むロード可能なセグメントを持つならば、セクションの属
                性は SHF_ALLOC ビットを含みます。そうでない場合、このビットは
                オフです。規約により、再配置されるセクションから ``NAME'' が与
                えられます。.text のための再配置セクションは、通常名前
                .rela.text を持ちます。このセクションは、タイプ SHT_RELA で
                す。
     .rodata    このセクションは読み込み専用データを持ち、典型的にはプロセスイ
                メージの書き込み不可セグメントになります。このセクションは、タ
                イプ SHT_PROGBITS です。使われる属性は、SHF_ALLOC です。
     .rodata1   このセクションは読み込み専用データを持ち、典型的にはプロセスイ
                メージの書き込み不可セグメントになります。このセクションは、タ
                イプ SHT_PROGBITS です。使われる属性は、SHF_ALLOC です。
     .shstrtab  このセクションはセクション名を持ちます。このセクションは、タイ
                プ SHT_STRTAB です。属性タイプは使われません。
     .strtab    このセクションは文字列を持ちます。一般的には名前を表示する文字
                列であり、シンボルテーブルエントリと結び付けられています。ファ
                イルがシンボル文字列テーブルを含むロード可能なセグメントを持つ
                ならば、セクションの属性は SHF_ALLOC ビットを含みます。そうで
                ない場合、このビットはオフです。このセクションは、タイプ
                SHT_STRTAB です。
     .symtab    このセクションは、シンボルテーブルを持ちます。ファイルがシンボ
                ルテーブルを含むロード可能なセグメントを持つならば、セクション
                の属性は SHF_ALLOC ビットを含みます。そうでない場合、このビッ
                トはオフです。このセクションは、タイプ SHT_SYMTAB です。
     .text      このセクションは、プログラムの ``テキスト''、すなわち実行可能
                命令を持ちます。このセクションは、タイプ SHT_PROGBITS です。使
                われる属性は、SHF_ALLOCSHF_EXECINSTR です。
     .jcr       このセクションは、登録される必要がある Java クラスの情報を持ち
                ます。
     .eh_frame  このセクションは、C++ 例外処理に使用される情報を持ちます。

     文字列テーブルセクションは、ヌル文字で終わる文字シーケンス群を持ちます。
     これらは、一般に文字列と呼ばれます。オブジェクトファイルは、シンボルとセ
     クション名を表現するためにこれらの文字列を使います。文字列テーブルセク
     ションのインデックスとして、文字列を参照します。最初のバイト (インデック
     ス 0) は、単一のヌル文字を持つと定義されます。同様に、文字列テーブルの最
     終バイトはヌル文字であると定義されので、文字列全体がナル終端されているこ
     とを保証します。

     オブジェクトファイルのシンボルテーブルは、プログラムのシンボル定義と参照
     の位置決定に必要な情報を保持します。シンボルテーブルインデックスは、この
     配列の添字です。

           typedef struct {
                   Elf32_Word      st_name;
                   Elf32_Addr      st_value;
                   Elf32_Word      st_size;
                   unsigned char   st_info;
                   unsigned char   st_other;
                   Elf32_Half      st_shndx;
           } Elf32_Sym;

           typedef struct {
                   Elf64_Word      st_name;
                   unsigned char   st_info;
                   unsigned char   st_other;
                   Elf64_Half      st_shndx;
                   Elf64_Addr      st_value;
                   Elf64_Xword     st_size;
           } Elf64_Sym;

     st_name   このメンバは、オブジェクトファイルのシンボル文字列テーブルへの
               インデックスを持ちます。シンボル文字列テーブルは、シンボル名の
               文字表現を持ちます。値が 0 以外であるならば、それはシンボル名を
               与える文字列テーブルインデックスを示します。そうでない場合、シ
               ンボルテーブルには名前がありません。
     st_value  このメンバは、関連したシンボルの値を与えます。
     st_size   多くのシンボルは、関連した大きさを持ちます。シンボルには大きさ
               が無いか未知である場合、このメンバは 0 です。
     st_info   このメンバは、シンボルのタイプと束縛属性を指定します:

               STT_NOTYPE   シンボルのタイプは、定義されません。
               STT_OBJECT   シンボルは、データオブジェクトと結び付けられていま
                            す。
               STT_FUNC     シンボルは、関数または他の実行可能コードと結び付け
                            られています。
               STT_SECTION  シンボルは、セクションと結び付けられています。この
                            タイプのシンボルテーブルエントリは、主に再配置のた
                            めに存在して、通常 STB_LOCAL 束縛を持ちます。
               STT_FILE     規約により、シンボルの名前は、オブジェクトファイル
                            と関連するソースファイルの名前を与えます。存在する
                            場合、ファイルシンボルは STB_LOCAL 束縛を持ち、そ
                            のセクションインデックスは SHN_ABS であり、それは
                            ファイルの他の STB_LOCAL シンボルに先行します。
               STT_LOPROC   この値から STT_HIPROC 以下は、プロセッサに固有のセ
                            マンティクスのために予約されています。
               STT_HIPROC   この値から STT_LOPROC 以上は、プロセッサに固有のセ
                            マンティクスのために予約されています。

               STB_LOCAL   ローカルなシンボルは、それらの定義を含んでいるオブ
                           ジェクトファイルの外側には、見えません。同じ名前の
                           ローカルなシンボルは、お互いのじゃまをすることなく
                           複数ファイルで存在し得ます。
               STB_GLOBAL  グローバルシンボルは、結合されている全てのオブジェ
                           クトファイルから見えます。あるファイルによるグロー
                           バルシンボルの定義は、別ファイルの同じシンボルの未
                           定義参照を満足させます。
               STB_WEAK    弱いシンボルはグローバルシンボルに似ています。しか
                           し、彼らの定義は低い優先順位を持ちます。
               STB_LOPROC  この値から STB_HIPROC 以下は、プロセッサに固有のセ
                           マンティクスのために予約されています。
               STB_HIPROC  この値から STB_LOPROC 以上は、プロセッサに固有のセ
                           マンティクスのために予約されています。

                           束縛とタイプフィールドのパックおよびアンパック用の
                           マクロがあります:

                           ELF32_ST_BIND(info)        または
                                                      ELF64_ST_BIND(info) は、
                                                      束縛を st_info 値から引
                                                      出します。
                           ELF64_ST_TYPE(info)        または
                                                      ELF32_ST_TYPE(info) は、
                                                      タイプを st_info 値から
                                                      引出します。
                           ELF32_ST_INFO(bind, type)  または
                                                      ELF64_ST_INFO(bind,
                                                      type) は、束縛とタイプを
                                                      st_info 値へ変換します。

     st_other  このメンバは、現在 0 を持ち、定義された意味を持ちません。
     st_shndx  あらゆるシンボルテーブルエントリは、なんらかのセクションに関し
               て ``定義されています''。このメンバは、関連するセクションヘッダ
               テーブルインデックスを持ちます。

     再配置は、シンボル参照とシンボル定義を接続する処理です。再配置可能なファ
     イルは、それらのセクション内容の修正方法を記述する情報を持つ必要がありま
     す。このようにして、実行可能ファイルと共有オブジェクトファイルが、プロセ
     スのプログラムイメージのための正しい情報を持てます。再配置エントリは、こ
     れらのデータです。

     加数を必要としない再配置構造体:

           typedef struct {
                   Elf32_Addr      r_offset;
                   Elf32_Word      r_info;
           } Elf32_Rel;

           typedef struct {
                   Elf64_Addr      r_offset;
                   Elf64_Xword     r_info;
           } Elf64_Rel;

     加数を必要とする再配置構造体:

           typedef struct {
                   Elf32_Addr      r_offset;
                   Elf32_Word      r_info;
                   Elf32_Sword     r_addend;
           } Elf32_Rela;

           typedef struct {
                   Elf64_Addr      r_offset;
                   Elf64_Xword     r_info;
                   Elf64_Sxword    r_addend;
           } Elf64_Rela;

     r_offset  このメンバは、再配置動作を適用する場所を与えます。再配置可能な
               ファイルでは、値は、再配置によって影響を受ける記憶単位のセク
               ション先頭からのバイトオフセットです。実行可能ファイルまたは共
               用オブジェクトでは、値は、再配置によって影響を受ける記憶単位の
               仮想アドレスです。
     r_info    このメンバは、再配置されるシンボルテーブルインデックスと、使用
               する再配置のタイプを与えます。再配置タイプは、プロセッサ依存で
               す。テキストが再配置エントリの再配置タイプまたはシンボルテーブ
               ルインデックスを参照するとき、エントリの r_info メンバに対し、
               それぞれ ELF_[32|64]_R_TYPE または ELF[32|64]_R_SYM を適用する
               結果を意味しています。
     r_addend  このメンバは、定数の加数を指定します。これは、再配置可能な
               フィールドに格納される値を計算するために使用されます。

関連項目
     as(1), gdb(1), ld(1), objdump(1), execve(2), ar(5), core(5)

     Hewlett Packard, Elf-64 Object File Format.

     Santa Cruz Operation, System V Application Binary Interface.

     Unix System Laboratories, "Object Files", Executable and Linking Format
     (ELF).

歴史
     ELF ヘッダファイルは、FreeBSD 2.2.6 で登場しました。ELF 自体は、AT&T
     System V UNIX ではじめて登場しました。ELF フォーマットは、標準として採用
     されています。

作者
     このマニュアルページは、BSDi の BSD/OS elf マニュアルページに触発されて、
     Jeroen Ruigrok van der Werven <asmodai@FreeBSD.org> によって書かれまし
     た。

FreeBSD 11.2                   December 18, 2005                  FreeBSD 11.2

Table of Contents

FreeBSD マニュアル検索