可執行與可鏈接格式

可执行与可链接格式（英語：Executable and Linkable Format，缩写 ELF，此前的写法是Extensible Linking Format），常被称为ELF格式，在计算中，是一种用于可执行文件、目标代码、共享库和核心转储（core dump）的标准文件格式。首次发布于一个名为System V Release 4（SVR4）的Unix操作系统版本中关于应用二进制接口（ABI）的规范中，并且此后不久发布于工具接口标准（Tool Interface Standard），随后很快被不同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@.....| ELF 文件首部的 16 进制内容举例 通用： System V Application Binary Interface 4.1版​（1997年3月18日） System V ABI Update​（2009年10月） AMD64： System V ABI, AMD64 Supplement Arm: ELF for the ARM Architecture IA-32： System V ABI, Intel386 Architecture Processor Supplement IA-64： Itanium Software Conventions and Runtime Guide​（2000年9月） M32R： M32R ELF ABI Supplement 1.2版​（2004年8月26日） MIPS： System V ABI, MIPS RISC Processor Supplement MIPS EABI documentation​（2003年6月11日） Motorola 6800： Motorola 8- and 16- bit Embedded ABI PA-RISC： ELF Supplement for PA-RISC 1.43版​（1997年10月6日） PowerPC： System V ABI, PPC Supplement PowerPC Embedded Application Binary Interface 32-Bit Implementation​（1995年10月1日） 64-bit PowerPC ELF Application Binary Interface Supplement 1.9版​（2004年） RISC-V： RISC-V ELF Specification SPARC： System V ABI, SPARC Supplement S/390： S/390 32bit ELF ABI Supplement zSeries： zSeries 64bit ELF ABI Supplement Symbian OS 9： E32Image file format on Symbian OS 9 Linux标准规范（LSB）增修了上述一些规格中所指定的架构中相关的部分。例如关于System V ABI、AMD64 Supplement的案例。 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）.