ELF文件格式

Linux下ELF文件的格式(3)

假装没事ソ 提交于 2021-02-18 04:28:44
【说明】本文章从本人的CSDN博客搬过来的,因个人感觉CSDN的博客系统太差,so,搬到这里。 在上一篇文章中,主要介绍了几个重要的段以及这几个段中存放的信息。这里将重点介绍目标文件中的 ELF文件头 和 段表(Section Header Table)。 关于ELF文件头,它主要包含了描述整个文件的基本属性,比如ELF文件版本,目标机器型号,程序入口地址等。 关于段表,它描述了ELF文件包含的所有段的信息,比如每个段的段名,长度,在文件中的偏移,读写权限以及其他的属性。 1.再看文件头 再来看整个头文件结构 那么对于系统来讲,这个结构是怎么存储的,按什么格式存储呢? 在 /user/include/elf.h 中,可以找到描述这个头文件的结构体,如下所示: 对比实际的内容跟这个结构体,发现从Type (e_type)开始往下是一一对应的,而前面几条信息就对应于 e_ident[16],即e_ident中存放着前几条的信息。 现在将几个重要的字段解释一下: e_type : ELF文件类型,主要有3种,ET_REL 可重定位,ET_EXEC可执行,ET_DYN共享目标文件,一般为.so文件 e_machine : 机器类型,如EM_386,intel的x86架构,EM_68K摩托罗拉的68000系列等 e_entry : 入口地址,可执行文件被加载后,会从这个虚拟地址开始执行指令