実行可能およびリンク可能な形式

実行可能およびリンク可能な形式
ファイル名拡張子
なし、.axf.bin.elf.o.out.prx.puff.ko.mod.so
マジックナンバー0x7F 'E' 'L' 'F'
開発者Unix System Laboratories [1] : 3 
初回リリース1998年5月14日; 27年前 (1998-05-14)
最新リリース
4.2 [2]
2025 ; 0年前 (2025)
フォーマットの種類バイナリ実行可能オブジェクト共有ライブラリコアダンプ
コンテナ多くの
標準gabi.xinuos.com
ウェブサイトgithub.com/xinuos/gabi
ELFファイルには2つのビューがあります。プログラムヘッダーは実行時に使用されるセグメントを示し、セクションヘッダーはセクションのセットをリストします

コンピューティングにおいて実行可能およびリンク可能フォーマット[3]ELF、以前は拡張リンクフォーマットと呼ばれていました)は、実行可能ファイル、オブジェクトコード共有ライブラリデバイスドライバコアダンプ共通の標準ファイルフォーマットです。最初にUnixオペレーティングシステムのバージョンSystem V Release 4(SVR4)のアプリケーションバイナリインタフェース(ABI)の仕様で公開され、 [4]にツールインタフェース標準で公開され、Unixシステムのさまざまなベンダーの間ですぐに受け入れられました。1999年に、 86openプロジェクトによってx86プロセッサ上のUnixおよびUnix系システムの標準バイナリファイルフォーマットとして選ばれました。

ELFフォーマットは、設計上、柔軟性、拡張性、そしてクロスプラットフォーム性を備えています。例えば、様々なエンディアンやアドレスサイズをサポートしているため、特定のCPU命令セットアーキテクチャを排除することはありません。これにより、様々なハードウェアプラットフォーム上の様々なオペレーティングシステムで採用されています

ファイルレイアウト

各ELFファイルは、1つのELFヘッダーとそれに続くファイルデータで構成されています。データには以下が含まれます

  • 0個以上のメモリセグメントを記述するプログラムヘッダーテーブル
  • 0個以上のセクションを記述するセクションヘッダーテーブル
  • プログラムヘッダーテーブルまたはセクションヘッダーテーブルのエントリによって参照されるデータ
キーエントリが強調表示された ELF ファイルの構造

セグメントにはファイルの実行に必要な情報が含まれており、セクションにはリンクと再配置に必要な重要なデータが含まれています。ファイル全体のどのバイト最大1つのセクションによって所有され、どのセクションにも所有されない孤立バイトが発生する場合があります。

ELFヘッダー

ELFヘッダーは、32ビットアドレスと64ビットアドレスのどちらを使用するかを定義します。ヘッダーには、この設定の影響を受ける3つのフィールドと、それに続く他のフィールドのオフセットが含まれます。ELFヘッダーの長さは、32ビットバイナリの場合は52バイト、64ビットバイナリの場合は64バイトです

ELFヘッダー[5]
オフセットサイズ(バイト)フィールド目的
32ビット64ビット32ビット64ビット
0x004e_ident[EI_MAG0]からe_ident[EI_MAG3]0x7FASCIIELFでは( 45 4c 46)が続きます。この 4 つのバイトがマジック ナンバーを構成します。
0x041e_ident[EI_CLASS]このバイトは、それぞれ32ビット形式または64ビット形式を示すため に1またはに設定されます2
0x051e_ident[EI_DATA]このバイトは、それぞれリトルエンディアンまたはビッグエンディアン1を示すためにまたはに設定されます。これはオフセット から始まるマルチバイトフィールドの解釈に影響します20x10
0x061e_ident[EI_VERSION]1ELFのオリジナルバージョンと現在のバージョンを設定します
0x071e_ident[EI_OSABI]ターゲットオペレーティングシステムのABIを識別します
ABI
0x00システムV
0x01HP-UX
0x02NetBSD
0x03Linux
0x04GNU Hard
0x06Solaris
0x07AIX (モントレー)
0x08IRIX
0x09FreeBSD
0x0ATru64
0x0Bノベル モデスト
0x0COpenBSD
0x0DOpenVMS
0x0Eノンストップカーネル
0x0Fアロス
0x10FenixOS
0x11Nuxi CloudABI
0x12ストラタス・テクノロジーズ OpenVOS
0x081e_ident[EI_ABIVERSION]さらにABIバージョンを指定します。その解釈はターゲットABIに依存します。Linuxカーネル(少なくとも2.6以降)には定義がないため、[6]静的にリンクされた実行ファイルでは無視されます。その場合、EI_PADのオフセットとサイズは8です

glibc 2.12+では、e_ident[EI_OSABI] == 3の場合、このフィールドを動的リンカーのABIバージョンとして扱います。[7]動的リンカーの機能のリストを定義します。[8] e_ident[EI_ABIVERSION]を共有オブジェクト(実行ファイルまたは動的ライブラリ)によって要求された機能レベルとして扱い、不明な機能が要求された場合、つまりe_ident[EI_ABIVERSION]が既知の最大機能よりも大きい場合は、それをロードすることを拒否します[9]

0x097e_ident[EI_PAD]予約済みのパディングバイト。現在未使用。読み取り時はゼロで埋められ、無視されます
0x102e_typeオブジェクトファイルのタイプを識別します
意味
0x00ET_NONE不明。
0x01ET_REL再配置可能ファイル。
0x02ET_EXEC実行ファイル
0x03ET_DYN共有オブジェクト
0x04ET_COREコアファイル
0xFE00ET_LOOS予約済みの包含範囲。オペレーティング システム固有。
0xFEFFET_HIOS
0xFF00ET_LOPROC予約済みの範囲(両端を含む)。プロセッサ固有
0xFFFFET_HIPROC
0x122e_machineターゲット命令セットアーキテクチャを指定します。例:
ISA
0x00特定の命令セットなし
0x01AT&T WE 32100
0x02SPARC
0x03x86
0x04モトローラ 68000 (M68k)
0x05モトローラ 88000 (M88k)
0x06インテルMCU
0x07インテル80860
0x08MIPS
0x09IBM System/370
0x0AMIPS RS3000 リトルエンディアン
0x0B – 0x0E将来の使用のために予約済み
0x0Fヒューレット・パッカード PA-RISC
0x13インテル 80960
0x14PowerPC
0x15PowerPC(64ビット)
0x16S390 ( S390xを含む)
0x17IBM SPU/SPC
0x18 – 0x23将来の使用のために予約済み
0x24NEC V800
0x25富士通 FR20
0x26TRW RH-32
0x27モトローラ RCE
0x28Arm(Armv7/AArch32まで)
0x29デジタルアルファ
0x2AスーパーH
0x2BSPARCバージョン9
0x2CシーメンスTriCore組み込みプロセッサ
0x2DアルゴノートRISCコア
0x2E日立H8/300
0x2F日立 H8/300H
0x30日立 H8S
0x31日立 H8/500
0x32IA-64
0x33スタンフォードMIPS-X
0x34モトローラ コールドファイア
0x35モトローラ M68HC12
0x36富士通MMAマルチメディアアクセラレータ
0x37シーメンス PCP
0x38ソニー nCPU 組み込みRISCプロセッサ
0x39デンソーNDR1マイクロプロセッサ
0x3AモトローラStar*Coreプロセッサ
0x3Bトヨタ ME16 プロセッサ
0x3CSTマイクロエレクトロニクス ST100 プロセッサ
0x3Dアドバンスト・ロジック社 TinyJ組み込みプロセッサフ​​ァミリー
0x3EAMD x86-64
0x3FソニーDSPプロセッサー
0x40デジタル・イクイップメント社 PDP-10
0x41デジタル・イクイップメント社 PDP-11
0x42シーメンス FX66 マイクロコントローラ
0x43STマイクロエレクトロニクス ST9+ 8/16ビットマイクロコントローラ
0x44STマイクロエレクトロニクス ST7 8ビットマイクロコントローラ
0x45モトローラ MC68HC16 マイクロコントローラ
0x46モトローラ MC68HC11 マイクロコントローラ
0x47モトローラ MC68HC08 マイクロコントローラ
0x48モトローラ MC68HC05 マイクロコントローラ
0x49シリコングラフィックス SVx
0x4ASTマイクロエレクトロニクス ST19 8ビットマイクロコントローラ
0x4BデジタルVAX
0x4Cアクシスコミュニケーションズ 32ビット組み込みプロセッサ
0x4Dインフィニオンテクノロジーズ 32ビット組み込みプロセッサ
0x4Eエレメント14 64ビットDSPプロセッサ
0x4FLSIロジック 16ビットDSPプロセッサ
0x8CTMS320C6000ファミリ
0xAFMCST Elbrus e2k
0xB7Arm 64ビット(Armv8/AArch64)
0xDCザイログ Z80
0xF3RISC-V
0xF7バークレーパケットフィルタ
0x101WDC 65C816
0x102LoongArch
0x144e_version1ELFのオリジナルバージョンを設定します
0x1848e_entryこれは、プロセスの実行を開始するエントリポイントのメモリアドレスです。このフィールドは、前述のフォーマット(バイト0x04)に応じて、32ビットまたは64ビットの長さになります。ファイルに関連付けられたエントリポイントがない場合、この値は0になります
0x1C0x2048e_phoffプログラムヘッダーテーブルの開始を指します。通常、このヘッダーの直後のファイルヘッダーに続くため、32ビットおよび64ビットのELF実行ファイルの場合はそれぞれ オフセット0x34またはになります0x40
0x200x2848e_shoffセクションヘッダーテーブルの先頭を指します
0x240x304e_flagsこのフィールドの解釈はターゲットアーキテクチャによって異なります
0x280x342e_ehsizeこのヘッダーのサイズが含まれます。通常、64ビット形式の場合は64バイト、32ビット形式の場合は52バイトです
0x2A0x362e_phentsizeプログラムヘッダーテーブルエントリのサイズが含まれます。後述のとおり、通常は0x20(32ビット)または0x38(64ビット)になります
0x2C0x382e_phnumプログラムヘッダーテーブル内のエントリ数が含まれます。
0x2E0x3A2e_shentsizeセクションヘッダーテーブルエントリのサイズが格納されます。後述のとおり、通常は0x28(32ビット)または0x40(64ビット)になります。
0x300x3C2e_shnumセクションヘッダーテーブル内のエントリ数が含まれます。
0x320x3E2e_shstrndxセクション名を含むセクション ヘッダー テーブル エントリのインデックスが含まれます。
0x340x40ELF ヘッダーの終わり (サイズ)。

16進ダンプの例

00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 | .ELF............ | 00000010 02 00 3e 00 01 00 00 00 c5 48 40 00 00 00 00 00 | ..>......H@..... |                                  

[10]

プログラムヘッダー

プログラムヘッダーテーブルは、システムにプロセスイメージの作成方法を指示します。ファイルオフセットe_phoffにありe_phnum個のエントリで構成され、各エントリのサイズはe_phentsizeです。32ビットELFと64ビットELFでは、アライメント上の理由からp_flagsが異なる構造体の位置にあるため、レイアウトが若干異なります。各エントリは次のように構造化されています

プログラムヘッダー[11]
オフセットサイズ(バイト)フィールド目的
32ビット64ビット32ビット64ビット
0x004p_typeセグメントのタイプを識別します
名前意味
0x00000000PT_NULLプログラム ヘッダー テーブル エントリは未使用です。
0x00000001PT_LOADロード可能なセグメント
0x00000002PT_DYNAMIC動的リンク情報
0x00000003PT_INTERP通訳情報
0x00000004PT_NOTE補助情報
0x00000005PT_SHLIB予約済み
0x00000006PT_PHDRプログラム ヘッダー テーブル自体を含むセグメント。
0x00000007PT_TLSスレッドローカルストレージテンプレート
0x60000000PT_LOOS予約済みの包含範囲。オペレーティング システム固有。
0x6FFFFFFFPT_HIOS
0x70000000PT_LOPROC予約済みの範囲(両端を含む)。プロセッサ固有
0x7FFFFFFFPT_HIPROC
0x044p_flagsセグメント依存フラグ (64 ビット構造の位置)。
名前意味
0x1PF_X実行可能セグメント
0x2PF_W書き込み可能セグメント
0x4PF_R読み取り可能なセグメント
0x040x0848p_offsetファイルイメージ内のセグメントのオフセット。
0x080x1048p_vaddrメモリ内のセグメントの仮想アドレス。
0x0C0x1848p_paddr物理アドレスが関連するシステムでは、セグメントの物理アドレス用に予約されています
0x100x2048p_fileszファイルイメージ内のセグメントのバイト単位のサイズ。0の場合もあります
0x140x2848p_memszメモリ内のセグメントのサイズ(バイト単位)。0の場合もあります
0x184p_flagsセグメント依存フラグ(32ビット構造体の位置)。p_flagsフラグの定義については上記のフィールドを参照してください。
0x1C0x3048p_align0アライメントを1指定しない場合は、2の正の整数乗で、p_vaddrはp_offsetを係数p_alignで割った値となります
0x200x38プログラム終了ヘッダー(サイズ)

セクションヘッダー

オフセットサイズ(バイト)フィールド目的
32ビット64ビット32ビット64ビット
0x004sh_nameこのセクションの名前を表す.shstrtabセクション内の文字列へのオフセット
0x044sh_typeこのヘッダーのタイプを識別します。
名前意味
0x0SHT_NULLセクションヘッダーテーブルエントリ未使用
0x1SHT_PROGBITSプログラムデータ
0x2SHT_SYMTABシンボルテーブル
0x3SHT_STRTAB文字列テーブル
0x4SHT_RELA加数付き再配置エントリ
0x5SHT_HASHシンボルハッシュテーブル
0x6SHT_DYNAMIC動的リンク情報
0x7SHT_NOTE注記
0x8SHT_NOBITSデータのないプログラム空間 (bss)
0x9SHT_REL再配置エントリ、加数なし
0x0ASHT_SHLIB予約済み
0x0BSHT_DYNSYM動的リンカーシンボルテーブル
0x0ESHT_INIT_ARRAYコンストラクタの配列
0x0FSHT_FINI_ARRAYデストラクタの配列
0x10SHT_PREINIT_ARRAYプレコンストラクタの配列
0x11SHT_GROUPセクショングループ
0x12SHT_SYMTAB_SHNDX拡張セクションインデックス
0x13SHT_NUM定義された型の数
0x60000000SHT_LOOSOS固有の起動方法
0x0848sh_flagsセクションの属性を識別します。
名前意味
0x1SHF_WRITE書き込み可能
0x2SHF_ALLOC実行中にメモリを占有します
0x4SHF_EXECINSTR実行可能
0x10SHF_MERGEマージされる可能性があります
0x20SHF_STRINGSヌル終端文字列を含みます
0x40SHF_INFO_LINK'sh_info'にはSHTインデックスが含まれています
0x80SHF_LINK_ORDER結合後の順序を維持する
0x100SHF_OS_NONCONFORMING非標準OS固有の処理が必要です
0x200SHF_GROUPセクションはグループのメンバーです
0x400SHF_TLSスレッドローカルデータを保持するセクション
0x0FF00000SHF_MASKOSOS固有
0xF0000000SHF_MASKPROCプロセッサ固有
0x4000000SHF_ORDERED特別な順序付け要件 (Solaris)
0x8000000SHF_EXCLUDEセクションは参照または割り当てられていない限り除外されます(Solaris)
0x0C0x1048sh_addrロードされたセクションのメモリ内のセクションの仮想アドレス。
0x100x1848sh_offsetファイルイメージ内のセクションのオフセット。
0x140x2048sh_sizeセクションのサイズ(バイト単位)。0 の場合もあります。
0x180x284sh_link関連付けられたセクションのセクションインデックスが含まれます。このフィールドは、セクションの種類に応じていくつかの目的で使用されます
0x1C0x2C4sh_infoセクションに関する追加情報が含まれます。このフィールドは、セクションの種類に応じて、いくつかの目的で使用されます
0x200x3048sh_addralignセクションに必要なアラインメントが含まれます。このフィールドは2の累乗でなければなりません
0x240x3848sh_entsize固定サイズのエントリを含むセクションの場合、各エントリのサイズ(バイト単位)が含まれます。それ以外の場合、このフィールドには0が含まれます
0x280x40セクション ヘッダーの終了 (サイズ)。

ツール

  • readelfは、1つまたは複数のELFファイルに関する情報を表示するUnixバイナリユーティリティです。フリーソフトウェア実装はGNU Binutilsによって提供されています
  • elfutilsLinux専用のGNU Binutilsの代替ツールを提供します。 [12]
  • elfdumpは、ELF ファイル内の ELF 情報を表示するためのコマンドであり、Solaris およびFreeBSDで使用できます。
  • objdumpELF ファイルやその他のオブジェクト形式に関する幅広い情報を提供します。ELFデータを構造化するために、バイナリ ファイル記述子ライブラリをバックエンドとしてobjdump使用します。
  • Unixfileユーティリティは、再配置可能、実行可能、または共有オブジェクト ファイル内のコードが対象としている命令セット アーキテクチャや、ELFコア ダンプが生成された命令セット アーキテクチャなど、ELF ファイルに関するいくつかの情報を表示できます。

アプリケーション

Unix系システム

ELF形式は、様々な環境で古い実行形式に取って代わりました。Unixオペレーティングシステム では、 a.out形式COFF形式に取って代わりました。

非Unixでの採用

ELFは、次のような非Unixオペレーティングシステムでも採用されています

Microsoft WindowsもELF形式を使用していますが、これはWindows Subsystem for Linux互換システムのみに使用されています。[18]

ゲーム機

一部のゲーム機でもELFが使用されています。

  • プレイステーション・ポータブル、[19]プレイステーション・ヴィータ、プレイステーション、プレイステーション2、プレイステーション3、プレイステーション4、プレイステーション5
  • GP2X
  • ドリームキャスト
  • ゲームキューブ
  • ニンテンドー64
  • Wii
  • Wii U

PowerPC

ELFを使用するPowerPC上で動作するその他の(オペレーティングシステム):

携帯電話

携帯電話やモバイルデバイスの一部のオペレーティング システムでは ELF が使用されています。

  • Symbian OS v9はELFファイル形式をベースにしたE32Image [20]形式を使用します。
  • Sony Ericsson、たとえば W800i、W610、W300 など。
  • Siemens、SGOLD および SGOLD2 プラットフォーム: Siemens C65 から S75 および BenQ-Siemens E71/EL71。
  • たとえば、Motorola の E398、SLVR L7、v360、v3i (およびパッチが適用されたすべての LTE2 電話)。
  • たとえば、Bada の Samsung Wave S8500 などです。
  • Maemo または Meego OS を実行する Nokia の携帯電話またはタブレット (例: Nokia N900)。
  • Androidは、Java Native InterfaceELF .so(共有オブジェクト[21] )ライブラリを使用します。[引用が必要] Android 5.0 "Lollipop"以降のデフォルトであるAndroid Runtime (ART)では、すべてのアプリケーションはインストール時にネイティブELFバイナリにコンパイルされます。[22]また、TermuxなどのパッケージマネージャーからネイティブLinuxソフトウェアを使用することも、リポジトリで利用可能なClangまたはGCCを介してソースからコンパイルすることもできます。

一部の携帯電話では、メインファームウェアにアセンブリコードを追加するパッチを使用することでELFファイルを実行できます。これは、アンダーグラウンドの改造文化ではELFPackとして知られる機能です。ELFファイル形式は、Atmel AVR(8ビット)、AVR32 [23] 、そしてTexas Instruments MSP430マイクロコントローラアーキテクチャでも使用されています。Open Firmwareの一部の実装もELFファイルを読み込むことができ、特にAppleの実装は同社が製造するほぼすべてのPowerPCマシンで使用されています。

ブロックチェーンプラットフォーム

  • Solanaは、オンチェーンプログラム(スマートコントラクト)にELF形式を使用しています。プラットフォームは、BPF(Berkeley Packet Filter)バイトコードにコンパイルされたELFファイルを処理し、それらは共有オブジェクトとして展開され、Solanaのランタイム環境で実行されます。BPFローダーは、プログラムの展開中にこれらのELFファイルを検証および処理します。[24]

86open

86openは、PC互換のx86アーキテクチャ上で動作するUnixおよびUnix系オペレーティングシステム用の共通バイナリファイル形式に関する合意形成を目的としたプロジェクトであり、ソフトウェア開発者によるx86アーキテクチャへの移植を促進することを目的としていました。[25]当初のアイデアは、Single UNIX Specの前身であるSpec 1170とGNU Cライブラリ(glibc)の小さなサブセットを標準化することで、変更されていないバイナリをx86 Unix系オペレーティングシステム上で実行できるようにすることでした。このプロジェクトは当初「Spec 150」と命名されていました。

最終的に選択されたフォーマットは ELF、具体的には Linux の ELF 実装であり、これは関係するすべてのベンダーとオペレーティング システムによってサポートされる事実上の標準であることが判明した後のことでした。

このグループは 1997 年に電子メールによる議論を開始し、1997 年 8 月 22 日にサンタクルーズ事業所のオフィスで初めて会合を開きました。

運営委員会は、Marc Ewing、Dion Johnson、Evan Leibovitch、Bruce Perens、Andrew Roach、Bryan Wayne Sparks、Linus Torvalds が務めました。プロジェクトのその他のメンバーは、Keith Bostic、Chuck Cranor、Michael Davidson、Chris G. Demetriou、Ulrich Drepper、Don Dugger、Steve Ginzburg、Jon "maddog" Hall、Ron Holt、Jordan Hubbard、Dave Jensen、Kean Johnston、Andrew Josey、Robert Lipe、Bela Lubkin、Tim Marsland、Greg Page、Ronald Joe Record、Tim Ruckle、Joel Silverstein、Chia-pi Tien、Erik Troan でした。参加したオペレーティングシステムと企業は、BeOS、BSDI、FreeBSD、Intel、Linux、NetBSD、SCO、SunSoft でした。

プロジェクトは進展し、1998年半ばにSCOはOpenServer、UnixWare、Solaris上でLinuxバイナリを実行できるオープンソースの互換性レイヤーであるlxrunの開発を開始しました。SCOは1999年3月のLinuxWorldでlxrunの公式サポートを発表しました。サン・マイクロシステムズは1999年初頭にSolaris向けのlxrunの公式サポートを開始し、[26]後にSolaris Containers for Linux Applicationsを通じてLinuxバイナリ形式の統合サポートに移行しました。

BSDは長らくLinuxバイナリをサポートしており(互換性レイヤーを通じて)、主要なx86 Unixベンダーもこのフォーマットのサポートを追加していたため、プロジェクトはLinux ELFが業界で選択されたフォーマットであると決定し、1999年7月25日に「解散を宣言」しました。[27]

FatELF: Linux 用ユニバーサルバイナリ

FatELFは、ファットバイナリ機能を追加するELFバイナリ形式拡張です[28] Linuxやその他のUnix系オペレーティングシステムを対象としています。CPUアーキテクチャの抽象化(バイトオーダー、ワードサイズ、CPU命令セットなど)に加えて、ソフトウェアプラットフォームの抽象化(例えば、複数のカーネルABIバージョンをサポートするバイナリなど)の利点も得られます。2021年現在、FatELFはメインラインLinuxカーネルに統合されていません。[29] [30] [31]

参照

参考文献

  1. ^ ab ツールインターフェース標準(TIS)実行可能およびリンク形式(ELF)仕様 バージョン1.2(1995年5月)
  2. ^ ELF オブジェクトファイル形式: 付録 C: 改訂履歴
  3. ^ ツールインターフェース標準(TIS)ポータブルフォーマット仕様バージョン1.1(1993年10月)
  4. ^ System V アプリケーションバイナリインタフェースエディション 4.1 (1997-03-18)
  5. ^ 「ELFヘッダー」Sco.com、2000年7月。 2014年2月7日閲覧
  6. ^ "LXR linux/include/linux/elf.h". linux.no . 2015年4月27日閲覧
  7. ^ 「glibc 2.12 の発表」。
  8. ^ 「sourceware.org Git - glibc.git/blob - libc-abis」。
  9. ^ “sourceware.org Git - glibc.git/blob - sysdeps/gnu/ldsodefs.h”. 2021年3月7日時点のオリジナルよりアーカイブ2019年10月28日閲覧。
  10. ^ 「利用可能なレクサー — Pygments」. pygments.org . 2024年12月19日閲覧
  11. ^ 「プログラムヘッダー」Sco.com、2000年7月。 2017年4月5日閲覧
  12. ^ "elfutils". sourceware.org . 2017年4月30日閲覧
  13. ^ “バイナリ形式”. 2019年3月31日時点のオリジナルよりアーカイブ2019年3月31日閲覧。
  14. ^ “MinixReleases – Minix Wiki”. Wiki.minix3.org. 2013年3月30日時点のオリジナルよりアーカイブ2014年1月19日閲覧。
  15. ^ 「アーカイブコピー」(PDF) 。 2020年9月15日時点のオリジナル(PDF)からアーカイブ。 2016年10月19日閲覧{{cite web}}: CS1 maint: archived copy as title (link)
  16. ^ "GCCSDK – RISC OS". Riscos.info. 2012年4月22日. 2014年2月19日時点のオリジナルよりアーカイブ2014年1月19日閲覧。
  17. ^ 「Guardianプログラマーズガイド」(PDF) . Hewlett Packard Enterprise. 2018年5月30日時点のオリジナル(PDF)からアーカイブ。 2018年5月30日閲覧p. 44 オリジナルからアーカイブ 2018年5月30日、Wayback Machineで 2018年5月30日にアーカイブ
  18. ^ Foley, Mary Jo. 「MicrosoftのLinux用Windowsサブシステムの内部」ZDNet . 2016年8月19日閲覧
  19. ^ PlayStation Portableは暗号化され再配置されたELFを使用:PSP
  20. ^ Symbian OS 実行ファイル形式
  21. ^ Rosen, Kenneth; Host, Douglas; Klee, Rachel; Rosinski, Richard (2007). UNIX: The Complete Reference (第2版). McGraw Hill Professional. p. 707. ISBN 9780071706988. 2017年6月8日閲覧。動的リンクライブラリは共有オブジェクト(.so)とも呼ばれます
  22. ^ Thomas, Romain. 「Android formats」. Quarks Lab . 2023年2月16日時点のオリジナルよりアーカイブ。 2023年1月17日閲覧
  23. ^ 「第4章 オブジェクトファイル」、System V アプリケーションバイナリインタフェース、2009年10月26日、e_machine
  24. ^ 「Solanaプログラム」. Solana Foundation. 2024年11月11日. 2024年11月11日閲覧. SolanaはLLVMコンパイラインフラストラクチャを活用して、プログラムを実行可能およびリンク可能形式(ELF)ファイルにコンパイルします。
  25. ^ Leibovitch, Evan (1997年12月23日). 「86Open よくある質問」. 2007年3月11日時点のオリジナルよりアーカイブ。 2007年6月6日閲覧
  26. ^ Record, Ronald (1998年5月21日). 「SCOにおける86openの現状に関する速報」. 2008年12月8日時点のオリジナルよりアーカイブ2008年5月6日閲覧。
  27. ^ Leibovitch, Evan (1999年7月25日). 「The86openプロジェクト – 最終更新」. 2007年2月27日時点のオリジナルよりアーカイブ2007年5月6日閲覧。
  28. ^ Gordon, Ryan. 「fatelf-specification v1」. icculus.org . 2010年7月25日閲覧
  29. ^ ゴードン、ライアン. 「FatELF:不確実性の方が良かったことが判明」. icculus.org . 2010年7月13日閲覧
  30. ^ ホルウェルダ、トム (2009-11-03)。 「ライアン・ゴードン、FatELFプロジェクトを停止」。 osnews.com 2010 年 7 月 5 日に取得
  31. ^ Brockmeier, Joe (2010年6月23日). 「SELF: (疑惑の)失敗の分析」. Linux Weekly News . 2011年2月6日閲覧。

参考文献

  • 宋芳瑞著『ELFオブジェクトファイル形式の進化』
  • Levine, John R. (2000) [1999年10月]. リンカーとローダー. モーガン・カウフマン・シリーズ ソフトウェア工学とプログラミング(第1版). サンフランシスコ、米国: Morgan Kaufmann . ISBN 1-55860-496-0 OCLC  42413382。2012年12月5日にオリジナルからアーカイブ2020年1月12日閲覧コード: [1] [1] [リンク切れ]エラッタ: [2]
  • Ulrich Drepper, How To Write Shared Libraries, Version 4.1.2 (2011). 著者のウェブページ https://www.akkadia.org/drepper で公開されています。
  • 知られざる英雄:勤勉なELF、ピーター・シーバッハ著、2005年12月20日、2007年2月24日時点のオリジナルよりアーカイブ
  • LibElf と GElf – Wayback Machineの ELf ファイルを操作するライブラリ(2004 年 2 月 25 日アーカイブ)
  • ELF オブジェクト ファイル形式: 入門 Dissection による ELF オブジェクト ファイル形式、 Eric Youngdale (1995-05-01)
  • Linux 用の非常に小さな ELF 実行ファイルを作成するための駆け足チュートリアル(Brian Raiter 著)
  • ELF の再配置を非再配置可能オブジェクトに行う (Julien Vanegue 著、2003-08-13)
  • ELFsh チームによる ptrace を使用しない組み込み ELF デバッグ (2005-08-01)
  • ELFローディングと再配置に関する研究(Pat Beirne著、1999年8月3日)
  • ELFオブジェクトファイルフォーマット仕様
  • GitHub上のELFオブジェクトファイル形式
  • System V アプリケーションバイナリインターフェースとインターフェース定義
  • FreeBSD ハンドブック: バイナリ形式 (アーカイブ版)
  • FreeBSD elf(5) マニュアルページ
  • NetBSD ELF FAQ
  • Linux elf(5) マニュアルページ
  • Oracle Solaris リンカーおよびライブラリガイド
  • ERESIプロジェクト:ELFベースのオペレーティングシステムのリバースエンジニアリング 2021年3月14日アーカイブ - Wayback Machine
  • Linux Todayの86openの記事は、Wayback Machineで2021年3月8日にアーカイブされています。 1999年7月26日
  • Debian Announce メーリングリストにおける 86open の発表 1997 年 10 月 10 日、Bruce Perens
  • SCOグループIBM訴訟におけるウルリッヒ・ドレッパーの陳述書(PDF)、2006年9月19日
  • 86openとELFに関するGroklawでの議論、2006年8月13日
  1. ^ https://archive.today/20200114225034/https://linker.iecc.com/code.html [ベアURL ]
Retrieved from "https://en.wikipedia.org/w/index.php?title=Executable_and_Linkable_Format&oldid=1323707112#86open"