可執行與可鏈接格式

所需的“段”,而段首地址表记载了二进制文件中“段”的首地址]]
可执行与可链接格式(,缩写 ,此前的写法是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 文件运行时执行所需的信息,而片段中包含了用于链接和重定位的重要数据。整个文件中的任何一个字节至多只能属于一个片段,也就是说可能存在不属于任何片段的孤立字节。
ELF 文件首部的 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@.....|

技术规范

  • 通用:

** System V Application Binary Interface4.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 Supplement1.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-RISC1.43版(1997年10月6日)

  • PowerPC:

** System V ABI, PPC Supplement
** PowerPC Embedded Application Binary Interface32-Bit Implementation(1995年10月1日)
** 64-bit PowerPC ELF Application Binary Interface Supplement1.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文件中变量名和地址

引用

评论 (0)

  • 还没有评论,来抢沙发吧。