ELF executable and linking format
Linux可执行文件格式
Elf 也就是 “Executable and Linking Format.”
Elf 起源于Unix,经改进应用于FreeBSD和Linux等现有类Unix操作系统。 微软的PE格式也学习了ELF格式的优点。
ELF文档服务于在不同的操作系统上目标文件的创建或者执行文件的开发。它分以下三个部分:
“目标文件”描述了ELF目标文件格式三种主要的类型。
“程序装载和动态连接”描述了目标文件的信息和系统在创建运行时程序的行为。
“C 语言库”列出了所有包含在libsys中的符号、标准的ANSIC和libc的运行程序,还有libc运行程序所需的全局的数据符号。
三种主要类型:
一个可重定位文件(relocatable file)保存着代码和适当的数据,用来和其他的目标文件一起来创建一个可执行文件或者是一个共享文件。
一个可执行文件(executable file)保存着一个用来执行的程序,该文件指出了exec(BA_OS)如何来创建程序进程映象。
一个共享目标文件(shared object file)保存着代码和合适的数据,用来被下面的两个链接器链接。第一个是链接编辑器,可以和其他的重定位和共享目标文件来创建另一个目标文件。第二个是动态链接器,联合一个可执行文件和其他的共享目标文件来创建一个进程映象。
ELF头
#define EI_NIDENT 16
typedef struct {
e_ident[EI_NIDENT]; e_type;
unsigned char Elf32_Half