首先明确Segment和section间的区别,Program Head中的内容叫做Segment,它是由多个Section组成;Program Head中描述的是程序运行起来后的内存视图,而ELF Head和Section Head是文件视图,一个是动态的,一个是静态的。 typedefstruct{Elf32_Wordp_type;/* Segment type */Elf32_Offp_offset;/* Segment file offset */El...
目标代码文件中的section和section header table中的条目是一一对应的。section的信息用于链接器对代码重定位。 而文件载入内存执行时,是以segment组织的,每个segment对应ELF文件中program header table中的一个条目,用来建立可执行文件的进程映像。 比如我们通常说的,代码段、数据段是segment,目标代码中的section会被链接...
ELF文件解析(一):Segment和Section【转】 转自:https://www.cnblogs.com/jiqingwu/p/elf_format_research_01.html ELF 是Executable and Linking Format的缩写,即可执行和可链接的格式,是Unix/Linux系统ABI (Application Binary Interface)规范的一部分。 Unix/Linux下的可执行二进制文件、目标代码文件、共享库文件...
load_elf_phdrs 加载程序头表 load_elf_phdrs函数就是通过kernel_read读入整个program header table 从函数代码中可以看到,一个可执行程序必须至少有一个段(segment), 而所有段的大小之和不能超过64K。 */ elf_phdata = load_elf_phdrs(&loc->elf_ex, bprm->file); if (!elf_phdata) goto out; /* ...
也就是说,链接器只关心ELF header, Sections 以及 Section header table这 3 部分内容。 加载器在看我的时候,它的眼睛里是另外的 3 部分内容: 加载器只关心ELF header, Program header table 和 Segment这 3 部分内容。 对了,从加载器的角度看,对于中间部分的 Sections , 它改了个名字,叫做 Segments (段)...
该图片使用的是Linux C编程作者 宋劲斌的图片 上图program header table 实际上就是我们说的segment table. segments 是从执行的角度来描写叙述elf文件, sections是从链接的角度来描写叙述elf文件的。 本节我们仅仅将elf文件的运行,所以我们仅仅讲segment相关的内容。
也就是说,链接器只关心 ELF header, Sections 以及 Section header table 这 3 部分内容。 加载器在看我的时候,它的眼睛里是另外的 3 部分内容: 加载器只关心 ELF header, Program header table 和 Segment 这 3 部分内容。 对了,从加载器的角度看,对于中间部分的Sections, 它改了个名字,叫做Segments(段)...
也就是说,链接器只关心 ELF header, Sections 以及Section header table这 3 部分内容。 加载器在看我的时候,它的眼睛里是另外的 3 部分内容: 加载器只关心 ELF header,Program header table和 Segment 这 3 部分内容。 对了,从加载器的角度看,对于中间部分的ode>Sections, 它改了个名字,叫做Segments(段)。
ELF文件由4部分组成,分别是ELF头(ELF header)、程序头表(Program header table)、节(Section)和节头表(Section header table)。实际上,一个文件中不一定包含全部内容,而且它们的位置也未必如同所示这样安排,只有ELF头的位置是固定的,其余各部分的位置、大小等信息由ELF头中的各项值来决定。
Linux 可执行文件 ELF结构 及程序载入执行 Linux下ELF文件类型分为以下几种: 1、可重定位文件,比如SimpleSection.o; 2、可运行文件,比如/bin/bash。 3、共享目标文件,比如/lib/libc.so。 在Linux 可重定位文件 ELF结构一文中,我们已经分析了可重定位文件ELF结构。