Linux可执行文件格式(ELF) Ff也就是“ Executable and Linking Format Ef起源于Unix,经改进应用于 FreeBsD和 linux等现有类Unⅸ操作系统。 微软的PE格式也学习了ELF格式的优点
Linux可执行文件格式(ELF) • Elf 也就是 “Executable and Linking Format.” • Elf 起源于Unix,经改进应用于FreeBSD和 Linux等现有类Unix操作系统。 • 微软的PE格式也学习了ELF格式的优点
ELF文档服务于在不同的操作系统上目标 文件的创建或者执行文件的开发。它分 以下三个部分: “目标文件”描述了ELF目标文件格式三种 主要的类型 “程序装载和动态连接”描述了目标文件的 信息和系统在创建运行时程序的行为。 “C语言库”列出了所有包含在 libsys中的符 号、标准的 ANSIC和ibc的运行程序,还有 lbc运行程序所需的全局的数据符号
• ELF文档服务于在不同的操作系统上目标 文件的创建或者执行文件的开发。它分 以下三个部分: – “目标文件”描述了ELF目标文件格式三种 主要的类型。 – “程序装载和动态连接”描述了目标文件的 信息和系统在创建运行时程序的行为。 – “C 语言库”列出了所有包含在libsys中的符 号、标准的ANSIC和libc的运行程序,还有 libc运行程序所需的全局的数据符号
三种主要类型: 个可重定位文件 (relocatable file)保存着代码和适当 的数据,用来和其他的目标文件一起来创建一个可 执行文件或者是一个共掌文。 个可执行文件( executable efle)保存着一个用来执行 的程序,该文件指出了exe(BAOS)如何来创建程序 进程映象 个共享目标文件( shared object file)保存着代码和 合适的数据,用来被下面的两个链接器链接。第 个是链接编辑器,可以和其他的重定位和共享目标 文件来创建另一个目标文件。第二个是动态链接器 联合一个可执行文件和其他的共享目标文件来创建 个进程映象
三种主要类型: • 一个可重定位文件(relocatable file)保存着代码和适当 的数据,用来和其他的目标文件一起来创建一个可 执行文件或者是一个共享文件。 • 一个可执行文件(executable file)保存着一个用来执行 的程序,该文件指出了exec(BA_OS)如何来创建程序 进程映象。 • 一个共享目标文件(shared object file)保存着代码和 合适的数据,用来被下面的两个链接器链接。第一 个是链接编辑器,可以和其他的重定位和共享目标 文件来创建另一个目标文件。第二个是动态链接器, 联合一个可执行文件和其他的共享目标文件来创建 一个进程映象
ELF的结构 elf header elf heade Program header table(optional) Program header table Section 1 Segment I Segment 2 Section n Section header table Section header table(optional)
ELF的结构 ELF header ELF header Program header table (optional) Program header table Section 1 Segment 1 … Segment 2 Section n … … … … … Section header table Section header table (optional)
ELF 头 define el ident 16 typedef struct i e ident(El IDENt] Elf32 Half El32 half e machine El32 Word e version Elf32 Addr Elf32 off e_ hoff ElB32 off e sho f Elf32 Word Elt32 half ehsize Elf32 half e_phentsize Elf32 Half e phnum ElB32 half e sheets ize If32 half e shum Elf32 Half e shstrndx 3 Elf32 Hdr
ELF头 • #define EI_NIDENT 16 • typedef struct { • unsigned char e_ident[EI_NIDENT]; • Elf32_Half e_type; • Elf32_Half e_machine; • Elf32_Word e_version; • Elf32_Addr e_entry; • Elf32_Off e_phoff; • Elf32_Off e_shoff; • Elf32_Word e_flags; • Elf32_Half e_ehsize; • Elf32_Half e_phentsize; • Elf32_Half e_phnum; • Elf32_Half e_shentsize; • Elf32_Half e_shnum; • Elf32_Half e_shstrndx; • } Elf32_Ehdr;