ELF 格式详解(一)(elf文件的作用)
ELF 全称 “Executable and Linkable Format”,即可执行可链接文件格式,目前常见的Linux、 Android可执行文件、共享库(.so)、目标文件( .o)以及Core 文件(吐核)均为此格式。
文件布局常见的ELF文件大致结构如下:

常见的ELF格式如上图所示,左边为链接视图,右边为执行视图链接视图:静态链接器(即编译后参与生成最终ELF过程的链接器,如ld )会以链接视图解析ELF编译时生成的 .o(目标文件)以及链接后的 .so (共享库)均可通过链接视图解析,链接视图可以没有段表(如目标文件不会有段表)。
执行视图:动态链接器(即加载器,如x86架构 linux下的 /lib/ld-linux.so.2或者安卓系统下的 /system/linker均为动态链接器)会以执行视图解析ELF并动态链接,执行视图可以没有节表。
文件头ELF的结构声明位于系统头文件 elf.h 中,ELF格式分为32位与64位两种,除了重定位类型稍有区别,其它大致相同,为了简化描述,后续说明将省略32/64字样ELF Header的声明如下 :。
#define EI_NIDENT (16) typedef struct { unsigned char e_ident[EI_NIDENT]; /* Magic number and other info */ Elf_Half e_type; /* Object file type */ Elf_Half e_machine; /* Architecture */ Elf_Word e_version; /* Object file version */ Elf_Addr e_entry; /* Entry point virtual address */ Elf_Off e_phoff; /* Program header table file offset */ Elf_Off e_shoff; /* Section header table file offset */ Elf_Word e_flags; /* Processor-specific flags */ Elf_Half e_ehsize; /* ELF header size in bytes */ Elf_Half e_phentsize; /* Program header table entry size */ Elf_Half e_phnum; /* Program header table entry count */ Elf_Half e_shentsize; /* Section header table entry size */ Elf_Half e_shnum; /* Section header table entry count */ Elf_Half e_shstrndx; /* Section header string table index */ } Elf_Ehdr;
e_ident包含了Maigc Number和其它信息,共16字节 0~3:前4字节为Magic Number,固定为ELFMAG 4(EI_CLASS):ELFCLASS32代表是32位ELF,ELFCLASS64 代表64位ELF。
5(EI_DATA):ELFDATA2LSB代表小端,ELFDATA2MSB代表大端 6(EI_VERSION):固定为EV_CURRENT(1) 7(EI_OSABI):操作系统ABI标识(实际未使用)。
8(EI_ABIVERSION):ABI版本(实际 未使用) 9~15:对齐填充,无实际意义e_typeELF的文件类型,定义如下: ET_REL 可重定位文 件(如目标文件) ET_EXEC 可执行文件(可直接执行的文件) DT_DYN 共享目标文件(如SO库) DT_CORE Core文件(吐核文件) 注:GCC使用编译选项 -pie 编译的可执行文件实际 也是DT_DYN类型。
e_machinee_verison 文件版本,目前常见的ELF 文件版本均为EV_CURRENT(1)e_entry 入口虚拟地址e_phoff
段表文件偏移e_shoff 节表文件偏移e_flags 处理器特定的标志,一般为0e_ehsize。
Elf_Header的大小(字节)e_phentsize 段头(Program Header)的大小(字节)e_phnum 段的数量。
e_shentsize 节头(Section Header)的大小(字节)e_shnum 字的数量e_shstrndx 节字符串表的节索引。
更多技术相关文章:Virbox技术博客
以上就是关于《ELF 格式详解(一)(elf文件的作用)》的全部内容,本文网址:https://www.7ca.cn/baike/6866.shtml,如对您有帮助可以分享给好友,谢谢。