可執行與可連結格式
副檔名 |
無副檔名, .o, .so, .elf, .prx, .axf, .bin, .puff, .ko, .mod |
---|---|
開發者 | Unix系統實驗室 |
格式類型 | 二進制檔案、可執行檔案、目標碼、共用庫、核心轉儲 |
作為容器 | 多種二進制可執行檔案格式 |
可執行與可連結格式(英語:Executable and Linkable Format,縮寫 ELF,此前的寫法是Extensible Linking Format),常被稱為ELF格式,在計算中,是一種用於可執行檔案、目標碼、共用庫和核心轉儲(core dump)的標準檔案格式。首次發佈於一個名為System V Release 4(SVR4)的Unix作業系統版本中關於應用二進制介面(ABI)的規範中,並且此後不久發佈於工具介面標準(Tool Interface Standard)[1],隨後很快被不同Unix發行商所接受。1999年,這種格式被86open專案選為x86架構處理器上的Unix和類 Unix系統的標準二進制檔案格式。
按照設計,ELF格式靈活性高、可延伸,並且跨平台。比如它支援不同的位元組序和地址範圍,所以它不會不相容某一特別的CPU或指令架構。這也使得ELF格式能夠被執行於眾多不同平台的各種作業系統所廣泛採納。
檔案格式
每個 ELF 檔案都由一個 ELF 首部和緊跟其後的檔案數據部分組成。數據部分可以包含:
- 程式頭表(Program header table):描述 0 個或多個主記憶體段資訊。
- 分段頭表(Section header table):描述 0 段或多段連結與重定位需要的數據。
- 程式頭表與分段頭表參照的數據,比如 .text .data。
主記憶體段中包含了用於某個 ELF 檔案執行時執行所需的資訊,而片段中包含了用於連結和重定位的重要數據。整個檔案中的任何一個位元組至多只能屬於一個片段,也就是說可能存在不屬於任何片段的孤立位元組。
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@.....|
技術規範
- 通用:
- AMD64:
- System V ABI, AMD64 Supplement[4]
- Arm:
- ELF for the ARM Architecture[5]
- IA-32:
- System V ABI, Intel386 Architecture Processor Supplement[6]
- IA-64:
- Itanium Software Conventions and Runtime Guide[7](2000年9月)
- M32R:
- M32R ELF ABI Supplement[8] 1.2版(2004年8月26日)
- MIPS:
- Motorola 6800:
- Motorola 8- and 16- bit Embedded ABI[11]
- PA-RISC:
- ELF Supplement for PA-RISC[12] 1.43版(1997年10月6日)
- PowerPC:
- RISC-V:
- RISC-V ELF Specification[16]
- SPARC:
- System V ABI, SPARC Supplement[17]
- S/390:
- S/390 32bit ELF ABI Supplement[18]
- zSeries:
- zSeries 64bit ELF ABI Supplement[19]
- Symbian OS 9:
- E32Image file format on Symbian OS 9[20]
Linux標準規範(LSB)增修了上述一些規格中所指定的架構中相關的部分。[21]例如關於System V ABI、AMD64 Supplement的案例。[22][23]
工具
- GNU Binutils 是用來處理許多格式的目標文件(包括elf檔案)一整套的程式語言工具程式,包括readelf,objdump,objcopy, nm, strings, strip, as, ar。
readelf
顯示elf檔案objdump
顯示elf和object格式檔案,解碼elf檔案中高階語言陳述式所對應的機器語言陳述式段落,匯編語言陳述式段落。nm
顯示elf檔案中變數名和地址
參照
- ^ Tool Interface Standard (TIS) Executable and Linking FOrmat (ELF) SpecificationVersion 1.2 (May 1995)
- ^ System V Application Binary Interface (頁面存檔備份,存於互聯網檔案館)
- ^ System V ABI Update (頁面存檔備份,存於互聯網檔案館)
- ^ System V ABI, AMD64 Supplement
- ^ ELF for the ARM Architecture
- ^ System V ABI, Intel386 Architecture Processor Supplement (頁面存檔備份,存於互聯網檔案館)
- ^ Itanium Software Conventions and Runtime Guide (頁面存檔備份,存於互聯網檔案館)
- ^ M32R ELF ABI Supplement (頁面存檔備份,存於互聯網檔案館)
- ^ System V ABI, MIPS RISC Processor Supplement (頁面存檔備份,存於互聯網檔案館)
- ^ MIPS EABI documentation (頁面存檔備份,存於互聯網檔案館)
- ^ Motorola 8- and 16- bit Embedded ABI (頁面存檔備份,存於互聯網檔案館)
- ^ ELF Supplement for PA-RISC
- ^ System V ABI, PPC Supplement
- ^ PowerPC Embedded Application Binary Interface
- ^ 64-bit PowerPC ELF Application Binary Interface Supplement (頁面存檔備份,存於互聯網檔案館)
- ^ RISC-V ELF Specification (頁面存檔備份,存於互聯網檔案館)
- ^ System V ABI, SPARC Supplement
- ^ S/390 32bit ELF ABI Supplement
- ^ zSeries 64bit ELF ABI Supplement
- ^ E32Image file format on Symbian OS 9
- ^ LSB Referenced Specifications. linuxfoundation.org. [27 April 2015]. (原始內容存檔於2019-07-07).
- ^ Executable and Linking Format (ELF). linuxfoundation.org. [27 April 2015]. (原始內容存檔於2021-12-01).
- ^ Introduction. linuxfoundation.org. [27 April 2015]. (原始內容存檔於2022-03-24).