section header用于描述section的特性,而program header用于描述segment的特性,目标文件(也就是文件名以.o结尾的文件)不存在program header,因为它不能运行。一个segment包含一个或多个现有的section,相当于从程序执行的角度来看待这些section。 1.查看命令:readelf-Stest 2.数据结构定义定义: section header用来描述每个...
program header和文件中的segment一一对应,因为目标代码文件中没有segment,program header也就没有必要了。 可执行文件的内容组织成segment,因此program header table是必须的。 section header不是必须的,但没有strip过的二进制文件中都含有此信息。 对本地可执行文件sleep执行readelf -l sleep,输出如下: Elf file typ...
区段(section)是从链接器的视角来看ELF文件,对应段表 Section Headers,而段(segment)是从执行的视角来看ELF文件,也就是它会被映射到内存中,对应程序头表 Program Headers。 我们用命令readelf -a [fileName] 中的Section to Segment mapping部分来看一下可执行文件中段的映射关系。 可执行文件的程序头表 我们用r...
它是一个section header的集合,每个section header是一个描述section的结构体。在同一个ELF文件中,每个section header大小是相同的。(其实看了源码就知道,32位ELF文件中的section header都是一样的大小,64位ELF文件中的section header也是一样的大小) 每个section都有一个section header描述它,但是一个section header可...
* 程序头表中保存的是segment的相关信息,segment的信息是提供给 *程序加载器在加载可执行程序所需的信息,当前程序是REL类型, * 不存在可执行数据,因此,program header table = 0; */ Size of program headers: 0 (bytes) Number of program headers: 0 ...
也就是说,链接器只关心ELF header, Sections 以及 Section header table这 3 部分内容。 加载器在看我的时候,它的眼睛里是另外的 3 部分内容: 加载器只关心ELF header, Program header table 和 Segment这 3 部分内容。 对了,从加载器的角度看,对于中间部分的 Sections , 它改了个名字,叫做 Segments (段)...
最终search_binary_handler函数将在1374行调用./linux-3.18.6/fs/binfmt_elf.c文件中571行的load_elf_binary函数,load_elf_binary函数将对ELF文件进行装载。 load_elf_binary函数主要做的事情包括: 检查ELF可执行文件格式的有效性,比如魔数、程序头表中段(Segment)的数量。
ELF目标文件格式最前部是ELF文件头(ELF Header),文件头描述了整个文件的基本属性,包括ELF文件版本、目标机器信息和程序入口等。在Linux中,使用readelf工具的-h选项详细查看 ELF文件头: 各个信息的意义标注如下: 这里对ELF魔数做一个简要说明,在Magic一栏中,这16个字节被规定用来标识ELF文件的平台属性:最开始的前4个...
program header和文件中的segment一一对应,因为目标代码文件中没有segment,program header也就没有必要了。 可执行文件的内容组织成segment,因此program header table是必须的。 section header不是必须的,但没有strip过的二进制文件中都含有此信息。 对本地可执行文件sleep执行readelf -l sleep,输出如下: ...
也就是说,链接器只关心 ELF header, Sections 以及 Section header table 这 3 部分内容。 加载器在看我的时候,它的眼睛里是另外的 3 部分内容: 加载器只关心 ELF header, Program header table 和 Segment 这 3 部分内容。 对了,从加载器的角度看,对于中间部分的Sections, 它改了个名字,叫做Segments(段)...