摘要
本文描述了Linux系统的ELF文件格式。
ELF文件格式简介
ELF(Executable and Linkable Format)是一种常用的二进制文件格式,用于存储可执行文件、共享库和核心转储文件。它是由Linux操作系统所采用和支持的标准格式。
ELF文件共有四种形式:
1. 可执行文件(Executable file):是一种包含可直接执行程序的ELF文件,可以直接在操作系统上运行。
2. 共享目标文件(Shared object file):是一种包含函数和变量等可被多个可执行程序同时调用的ELF文件,通常被称为动态链接库或共享库(Shared Library)。多个程序可以共享同一份共享库,这样可以减少系统资源的浪费并提高程序的运行效率。
3. 目标文件(Object file):是一种包含已编译的代码和数据但还未被链接成可执行文件或共享库的ELF文件。目标文件通常会被多次编译和链接,直到最终生成可执行文件或共享库。
4. 崩溃转储文件(Core file):Core文件是在Linux和其他UNIX系统中生成的一种特殊文件,它记录了进程在崩溃或异常终止时的内部状态,包括进程的内存映像、寄存器状态、堆栈跟踪信息以及其他调试信息。Core文件通常用于调试崩溃或异常终止的程序。
ELF目标文件结构图
下图左侧是ELF的目标文件结构,右侧是ELF可执行文件结构。
ELF文件结构图
ELF文件结构定义
ELF文件结构的定义在头文件elf.h中,其典型路径为:
/usr/include/elf.h
ELF文件类型
ELF文件的四种类型定义如下:
#define ET_NONE 0 /* No file type */
#define ET_REL 1 /* Relocatable file type */
#define ET_EXEC 2 /* Executable file type */
#define ET_DYN 3 /* Shared object file type */
#define