ELF文件总体结构可以用图1表示,图左为"SimpleSection.o"文件的前一部分以十六进制表示的内容,图中间一层层的字段(定义:每种字段存储不同类型的内容)就是ELF结构的内容层次了,在目标文件的开头为一个长度为64(0x40)字节的ELF头,只要分析ELF表头内存储的信息,可以得出段表"Section Header table"(在图的最顶层的那个段)在
因为它是没有程序头表,Program Headers,Elf64_Phdr的;而在可执行ELF文件中,Start of program headers 是有值的,为64,也就是说,在可执行ELF文件中程序头表会紧接着ELF头(因为ELF头的大小即为64字节)。
虽然它们三个都是ELF文件格式但都各有不同。以下文件的格式信息可以通过 file 命令来查看。 1.可重定位(relocatable)目标文件:通常是.o文件。包含二进制代码和数据,其形式可以再编译时与其他可重定位目标文件合并起来,创建一个可执行目标文件。 2.可执行(executable)目标文件:是完全链接的可执行文件,即静态链接的...
elf32_word sh_name; /* Section name (string tbl index) */ elf32_word sh_type; /* Section type */ elf32_word sh_flags; /* Section flags */ elf32_addr sh_addr; /* Section virtual addr at execution */ elf32_off sh_offset; /* Section file offset */ elf32_word sh_size; /*...
Linux ELF(Executable and Linkable Format)文件是Linux操作系统中常见的可执行文件格式。其运行机制是通过可执行文件中存储的元信息与系统内核进行交互,从而执行用户程序。 从系统调用的角度来看,Linux ELF文件的运行可以分为三个主要阶段:加载阶段、解析阶段和执行阶段。
ELF文件可以是可执行文件、目标文件、共享库文件或核心转储文件,其主要结构包括 ELF 头、程序头表、节区头表、段和节区等。在 ELF文件的加载过程中,操作系统的加载器负责将文件中的各个段加载到内存,并设置程序的入口点。在进程执行期间,动态链接器负责加载和链接动态库,使用全局偏移量表(GOT) 实现延迟符号解析和...
ELF文件的加载与执行其实是个复杂的过程,涉及用户空间与内核空间之间的运作。以下以在bash下运行hello程序的实际案例来详细解析这个过程。启动bash进程 在执行命令时,shell会进行几项关键操作。首先,它解析输入的命令和随附的参数。接下来,shell将在文件系统中指定路径下查找相关程序文件,完毕后再检查程序文件的执行...
然后识别文件是否为可执行文件或动态链接文件,ELF文件当前主要有4种格式,分别为可重定位文件(ET_REL)、可执行文件(ET_EXEC)、共享目标文件(ET_DYN)和core文件(ET_CORE)。load_elf_binary函数只负责解析exec和dyn文件。 最后还解析了文件依赖的系统架构等必要项。
如果看过之前的文章ELF文件之动手写ELF Head解析器、ELF文件之动手写Section Head解析器、ELF文件之动手写ELF Program Head解析器,应该就可以很好的理解这个函数,主要就是加载elf文件,然后解析Program Head,找到类型为PT_LOAD的Segment加载到内存中,加载之前需要调用elf_map函数做内存映射。下面看看这个函数具体实现情况。