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

実行可能およびリンク可能な形式
ファイル名拡張子
なし、.axf.bin.elf.o.out.prx.puff.ko.mod.so
魔法の数字0x7F 'E' 'L' 'F'
開発者Unixシステム研究所[1] : 3 
初回リリース1998年5月14日; 27年前 (1998-05-14)
最新リリース
4.2 [2]
2025 ; 0年前 (2025)
フォーマットの種類バイナリ実行可能オブジェクト共有ライブラリコアダンプ
コンテナ用多くの実行可能バイナリ形式
標準gabi.xinuos.com
Webサイト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を識別します。
価値アビ
0x00システムV
0x01HP-UX
0x02ネットBSD
0x03リナックス
0x04GNUハード
0x06ソラリス
0x07AIX(モントレー)
0x08アイリックス
0x09フリーBSD
0x0Aトゥルー64
0x0Bノベル・モデスト
0x0CオープンBSD
0x0DオープンVMS
0x0Eノンストップカーネル
0x0Fアロス
0x10フェニックスOS
0x11NuxiクラウドABI
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_なし未知。
0x01ET_REL再配置可能なファイル。
0x02ET_EXEC実行可能ファイル。
0x03ET_DYN共有オブジェクト。
0x04ET_COREコアファイル。
0xFE00ET_LOOS予約済みの包含範囲。オペレーティング システム固有。
0xFEFFET_HIOS
0xFF00ET_LOPROC予約済みの包含範囲。プロセッサ固有。
0xFFFFET_HIPROC
0x122電子マシンターゲット命令セットアーキテクチャを指定します。以下に例を示します。
価値ISA
0x00特定の命令セットなし
0x01AT&T WE 32100
0x02SPARC
0x03x86
0x04モトローラ 68000 (M68k)
0x05モトローラ 88000 (M88k)
0x06インテルMCU
0x07インテル 80860
0x08ミップス
0x09IBM システム/370
0x0AMIPS RS3000 リトルエンディアン
0x0B – 0x0E将来の使用のために予約されています
0x0Fヒューレット・パッカード PA-RISC
0x13インテル 80960
0x14パワーPC
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マイクロプロセッサ
0x3AMotorola Star*Coreプロセッサ
0x3Bトヨタ ME16 プロセッサ
0x3CSTマイクロエレクトロニクス ST100プロセッサ
0x3DAdvanced Logic Corp. 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
0x4CAxis Communications 32ビット組み込みプロセッサ
0x4Dインフィニオンテクノロジーズ 32ビット組み込みプロセッサ
0x4EElement 14 64ビットDSPプロセッサ
0x4FLSIロジック16ビットDSPプロセッサ
0x8CTMS320C6000ファミリー
0xAFMCST エルブルス e2k
0xB7Arm 64 ビット(Armv8/AArch64)
0xDCザイログ Z80
0xF3RISC-V
0xF7バークレーパケットフィルタ
0x101WDC 65C816
0x102ロンアーチ
0x144e_バージョン1ELF のオリジナルバージョンの場合はに設定します。
0x1848電子エントリこれは、プロセスの実行開始点となるエントリポイントのメモリアドレスです。このフィールドは、前述のフォーマット(バイト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_ダイナミック動的リンク情報。
0x00000003PT_INTERP通訳情報。
0x00000004PT_NOTE補助情報。
0x00000005PT_SHLIB予約済み。
0x00000006PT_PHDRプログラム ヘッダー テーブル自体を含むセグメント。
0x00000007PT_TLSスレッドローカル ストレージ テンプレート。
0x60000000PT_LOOS予約済みの包含範囲。オペレーティング システム固有。
0x6FFFFFFFPT_HIOS
0x70000000PT_LOPROC予約済みの包含範囲。プロセッサ固有。
0x7FFFFFFFPT_HIPROC
0x044p_フラグセグメント依存フラグ (64 ビット構造の位置)。
価値名前意味
0x1PF_X実行可能セグメント。
0x2PF_W書き込み可能なセグメント。
0x4PF_R読み取り可能なセグメント。
0x040x0848p_オフセットファイル イメージ内のセグメントのオフセット。
0x080x1048p_vaddrメモリ内のセグメントの仮想アドレス。
0x0C0x1848p_paddr物理アドレスが関連するシステムでは、セグメントの物理アドレス用に予約されています。
0x100x2048p_fileszファイルイメージ内のセグメントのサイズ(バイト単位)。0 の場合もあります。
0x140x2848p_memszメモリ内のセグメントのサイズ(バイト単位)。0の場合もあります。
0x184p_フラグセグメント依存フラグ(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_ハッシュシンボルハッシュテーブル
0x6SHT_ダイナミック動的リンク情報
0x7SHT_NOTE注記
0x8SHT_NOBITSデータのないプログラム空間(bss)
0x9SHT_REL移転エントリ、追加なし
0x0ASHT_SHLIB予約済み
0x0BSHT_DYNSYMダイナミックリンカーシンボルテーブル
0x0ESHT_INIT_ARRAYコンストラクタの配列
0x0FSHT_FINI_配列デストラクタの配列
0x10SHT_PREINIT_ARRAYプレコンストラクタの配列
0x11SHT_グループセクショングループ
0x12SHT_SYMTAB_SHNDX拡張セクションインデックス
0x13SHT_NUM定義されたタイプの数。
0x60000000SHT_LOOSOS 固有の起動。
.........
0x0848sh_フラグセクションの属性を識別します。
価値名前意味
0x1SHF_WRITE書き込み可能
0x2SHF_ALLOC実行中にメモリを占有する
0x4SHF_EXECINSTR実行可能
0x10SHF_MERGE統合される可能性がある
0x20SHF_文字列ヌル終端文字列を含む
0x40SHF_INFO_LINK'sh_info'にはSHTインデックスが含まれています
0x80SHF_LINK_ORDER結合後の順序を維持する
0x100SHF_OS_非準拠非標準のOS固有の処理が必要
0x200SHF_グループセクションはグループのメンバーです
0x400SHF_TLSセクションはスレッドローカルデータを保持します
0x0FF00000SHF_マスクOS固有
0xF0000000SHF_MASKPROCプロセッサ固有
0x4000000SHF_ORDERED特別注文要件 (Solaris)
0x8000000SHF_除外セクションは参照または割り当てられない限り除外されます (Solaris)
0x0C0x1048sh_addrロードされるセクションの、メモリ内のセクションの仮想アドレス。
0x100x1848sh_オフセットファイル イメージ内のセクションのオフセット。
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
  • WiiU

パワーPC

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]

86開く

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 オブジェクト ファイル形式の進化 (Fangrui Song 著)。
  • 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"