x86 反汇编/Linux 可执行文件
X86 反汇编 维基教科书的 Linux 可执行文件页面是一个存根。您可以通过扩展本节来提供帮助。
ELF 文件格式(Executable and Linking Format 的简称)由 Unix System Laboratories 开发,作为 COFF 和 a.out 等先前文件格式的继任者。在许多方面,ELF 格式比以前的格式更强大、更通用,并且已广泛成为 Linux、Solaris、IRIX 和 FreeBSD 上的标准(尽管 FreeBSD 派生的 Mac OS X 使用 Mach-O 格式)。ELF 也已被 OpenVMS 用于 Itanium,以及 BeOS 用于 x86。
从历史上看,Linux 并不总是使用 ELF;Red Hat Linux 4 是该发行版首次使用 ELF;以前的版本使用 a.out 格式。
ELF 对象被分解为不同的段和/或节。可以使用位于对象第一个字节的 ELF 头来定位这些段和/或节。ELF 头提供了程序头和节头的地址。使用这些数据结构可以找到 ELF 对象其余部分的内容,包括包含代码和数据的 .text 和 .data 段。
来自 binutils 包的 GNU readelf 实用程序是解析 ELF 对象的常用工具。
每个 ELF 文件由一个 ELF 头和随后的文件数据组成。文件数据可以包括
- 程序头表,描述零个或多个段
- 节头表,描述零个或多个节
- 程序或节头表条目引用的数据
段包含运行文件执行所需的信息,而节包含链接和重定位的重要数据。整个文件中的每个字节都只被一个节占用,但可能存在孤儿字节,这些字节不被任何节覆盖。在 Unix 可执行文件的正常情况下,一个或多个节被封闭在一个段中。
可重定位 ELF 文件由编译器创建。在运行之前需要链接它们。
这些文件通常在 .a
归档文件中找到,扩展名为 .o
。
a.out 是一种非常简单的格式,它包含一个头(位于偏移量 0),该头包含 3 个可执行节(代码、数据、bss)的大小,以及指向其他信息的指针,例如重定位(对于 .o 文件)、符号和符号字符串。实际的节内容位于头之后。不同节的偏移量从先前节的大小计算得出。
a.out 格式现在很少使用。