このページを編集する際は、編集に関する方針に従ってください。

概要

実装

typedef struct elf32_hdr{

 unsigned char	e_ident[EI_NIDENT];
  • このバイト配列は、プロセッサやファイルの他の部分には依存せずに、ファイルを解釈 (interpret) するために指定される。
    • この配列内のすべてのものは、接頭辞 EI_ で始まるマクロの名前が付き、接頭辞 ELF で始まる値を持つ。
    • EI_NIDENTは16と定義
マクロ名EI_NIDENT説明
EI_MAG00マジックナンバーの第 1 バイト。 ELFMAG0 で埋めなければならない。 (0: 0x7f)
EI_MAG11マジックナンバーの第 2 バイト。 ELFMAG1 で埋めなければならない。 (1: 'E')
EI_MAG22マジックナンバーの第 3 バイト。 ELFMAG2 で埋めなければならない。 (2: 'L')
EI_MAG33マジックナンバーの第 4 バイト。 ELFMAG3 で埋めなければならない。 (3: 'F')
EI_CLASS4下記参照:バイナリのアーキテクチャを示す
EI_DATA5下記参照:ファイル内のプロセッサ固有データのデータエンコーディングを指定する
EI_VERSION6下記参照:ELF仕様のバージョン番号
EI_OSABI7下記参照:このバイトはオブジェクトのターゲットとなるオペレーティングシステムと ABI を示す。他の ELF 構造体のフィールドには、プラットフォーム固有の意味を持つフラグや値を持つものもある。これらのフィールドの解釈は、このバイトの値によって決定される。
EI_PAD8パディングの開始。これらのバイトは予約されており、0 に設定されている。これらを読み込むプログラムは、これらのバイトを無視すべきである。現在使われていないバイトに意味が与えられる場合、 EI_PAD の値は将来変更されるかもしれない。
  • EI_CLASS:バイナリのアーキテクチャを示す
    e_ident[EI_CLASS]説明
    ELFCLASSNONE0このクラスは不正である。
    ELFCLASS32132 ビットアーキテクチャを定義する。ファイルと仮想アドレス空間が 4 ギガバイトまでのマシンをサポートする。
    ELFCLASS64264 ビットアーキテクチャを定義する。
    ELFCLASSNUM3
  • EI_DATA:ファイル内のプロセッサ固有データのデータエンコーディングを指定する
    e_ident[EI_DATA]説明
    ELFDATANONE0不明なデータフォーマット。
    ELFDATA2LSB12 の補数、リトルエンディアン。
    ELFDATA2MSB22 の補数、ビッグエンディアン。
  • EI_VERSION:ELF仕様のバージョン番号
    e_ident[EI_VERSION]説明
    EV_NONE0不正なバージョン。
    EV_CURRENT1現在のバージョン。
    EV_NUM2
  • EI_OSABI:このバイトはオブジェクトのターゲットとなるオペレーティングシステムと ABI を示す
    e_ident[EI_OSABI]説明
    ELFOSABI_NONE0UNIX System V ABI
    ELFOSABI_LINUX3Linux ABI
 Elf32_Half	e_type;
  • オブジェクトファイルタイプ
    マクロ名説明
    ET_NONE0不明なタイプ
    ET_REL1再配置可能ファイル
    ET_EXEC2実行可能ファイル
    ET_DYN3共有オブジェクト
    ET_CORE4コアファイル
    ET_LOPROC0xff00プロセッサに固有
    ET_HIPROC0xffffプロセッサに固有
 Elf32_Half	e_machine;
  • アーキテクチャ
    マクロ名説明
    EM_NONE0不明なマシン
    EM_M321AT&T WE 32100
    EM_SPARC2Sun Microsystems SPARC
    EM_3863Intel 386
    EM_68K4Motorola 68000
    EM_88K5Motorola 88000
    EM_4866Intel 486
    EM_8607Intel 80860
    EM_MIPS8MIPS R3000 (officially, big-endian only)
    EM_MIPS_RS4_BE10MIPS R4000 big-endian
    EM_PARISC15HPPA
    EM_SPARC32PLUS18Sun's "v8plus"
    EM_PPC20PowerPC
    EM_PPC6421PowerPC64
    EM_SH42SuperH
    EM_SPARCV943SPARC v9 64-bit
    EM_IA_6450HP/Intel IA-64
    EM_X86_6462AMD x86-64
    EM_S39022IBM S/390
    EM_CRIS76Axis Communications 32-bit embedded processor
    EM_V85087NEC v850
    EM_M32R88Renesas M32R
    EM_H8_30046Renesas H8/300,300H,H8S
    EM_ALPHA0x9026Alpha
    EM_CYGNUS_V8500x9080cygnus v850
    EM_CYGNUS_M32R0x9041cygnus M32R
    EM_S390_OLD0xA390s390
 Elf32_Word	e_version;
  • ファイルバージョン
    マクロ名説明
    EV_NONE0無効バージョン
    EV_CURRENT1現在のバージョン
    EV_NUM2
 Elf32_Addr	e_entry;  /* Entry point */
  • システムが最初に制御を渡す、つまりプロセスを開始する仮想アドレスを指定する。
    • ファイルにエントリポイントが関連付けられていない場合、このメンバには 0 が入る。
 Elf32_Off	e_phoff;
  • プログラムヘッダテーブルのファイルオフセット (バイト単位) を保持する。
    • ファイルにプログラムヘッダテーブルがない場合、このメンバには 0 が入る。
 Elf32_Off	e_shoff;
  • セクションヘッダテーブルのファイルオフセット (バイト単位) を保持する。
    • ファイルにセクションヘッダテーブルがない場合、このメンバには 0 が入る。
 Elf32_Word	e_flags;
  • ファイルに関連付けられたプロセッサ固有のフラグを保持する。
    • フラグの名前は EF_machine_”flag”という形式である。この構成要素は、現在 x86 に対しては 0 です。
 Elf32_Half	e_ehsize;
  • ELF ヘッダサイズ (バイト単位) を保持する
 Elf32_Half	e_phentsize;
  • このファイルのプログラムヘッダテーブルの 1 エントリあたりのサイズ (バイト単位) を保持する
    • 全てのエントリは同じサイズである。
 Elf32_Half	e_phnum;
  • プログラムヘッダテーブルにあるエントリの数を保持する。よって e_phentsize と e_phnum の積がテーブルサイズ (バイト単位) になる。
    • ファイルにプログラムヘッダがない場合、 e_phnum は値 0 を保持する。
 Elf32_Half	e_shentsize;
  • セクションヘッダのサイズ (バイト単位) を保持する。
    • セクションヘッダはセクションヘッダテーブルの 1 つのエントリである
    • 全てのエントリは同じサイズである。
 Elf32_Half	e_shnum;
  • セクションヘッダテーブルにあるエントリの数を保持する。よって e_shentsize と e_shnum の積はセクションヘッダテーブルのサイズ (バイト単位) になる。
    • ファイルにセクションヘッダテーブルがない場合、 e_shnum は値 0 を保持する。
 Elf32_Half	e_shstrndx;
  • セクション名文字列テーブルに関連付けられたエントリのセクションヘッダテーブルインデックスを保持する。
    • ファイルにセクション名文字列テーブルがない場合、このメンバは値 SHN_UNDEF を保持する。
      マクロ名説明
      SHN_UNDEF0この値は未定義・存在しない・無関係その他、意味のないセクションの参照であることを表す。例えば、セクション番号 SHN_UNDEF に関連づけて「定義」されたシンボルは、「未定義」なシンボルである。
      SHN_LORESERVE0xff00この値は予約済みのインデックス範囲の下限を指定する。
      SHN_LOPROC0xff00この値以上で SHN_HIPROC 以下の値は、プロセッサ固有の意味に予約されている。
      SHN_HIPROC0xff1fこの値以下で SHN_LOPROC 以上の値は、プロセッサ固有の意味に予約されている。
      SHN_ABS0xfff1この値は対応する参照の絶対値を指定する。例えば、セクション番号 SHN_ABS に関連づけられたシンボルは絶対値を保持し、再配置に影響されない。
      SHN_COMMON0xfff2このセクションに関連して定義されたシンボルは、 Fortran の COMMON や C の未割り当て external 変数のような、共通シンボルである。
      SHN_HIRESERVE0xffffこの値は予約されたインデックスの範囲の上限を指定する。 SHN_LORESERVE と SHN_HIRESERVE は含まれる。この値はセクションヘッダテーブルを参照しない。つまり、セクションヘッダテーブルは予約されたインデックスのエントリを 含まない 。

} Elf32_Ehdr;

履歴

  • 作者:ひら
  • 日付:2007/3/2
  • 対象:2.6.10
    更新日更新者更新内容

コメント



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-11-24 (火) 07:09:01 (3129d)