其中比较重要的就是它记录了Program Header Table以及Section Header Table的起始位置、数量和大小,还有Section Header String Table的index,这个Section Header String Table马上就会讲到,详情见Section Header Table,这几个可能在逆向和防护上用得上,其他的用处不大。 所以综上所述,整个SO文件的大小= e_shoff + e_...
2.1 ELF Header 2.2 Program Header 2.3 Section Header 2.4 Section 3 总结 4 参考文献 ELF(Executable and Linkable Format)文件是一种标准文件格式,用于在类Unix操作系统中表示可执行文件、可重定位文件、共享库和核心转储。 1 ELF文件的种类 ELF文件主要有以下几种类型: 可重定位文件(Relocatable File):这类文...
ELF 二进制文件中的代码和数据在逻辑上被分为连续的非重叠块,称为节(section)。而节头(Section Header)描述了文件中的各个节与链接和重定位相关的信息、调试信息和其他数据。每个ELF文件可以有多个节,每个节在节头表中都有一个对应的条目。节头表包含了所有节头的列表。 节只不过是代码或者数据的非结构化 blob。
program header和文件中的segment一一对应,因为目标代码文件中没有segment,program header也就没有必要了。 可执行文件的内容组织成segment,因此program header table是必须的。 section header不是必须的,但没有strip过的二进制文件中都含有此信息。 对本地可执行文件sleep执行readelf -l sleep,输出如下: Elf file typ...
section header用于描述section的特性,而program header用于描述segment的特性,目标文件(也就是文件名以.o结尾的文件)不存在program header,因为它不能运行。一个segment包含一个或多个现有的section,相当于从程序执行的角度来看待这些section。 其和段表一样,都在elf头中便设好了其的位置以及大小。所以还是先把它读...
下图展示了上篇文章中可执行文件 main 的 Section Header 结构: 3.3. Program Header 的结构 Program Header Table 中的条目 Program Header 是与程序执行直接相关的,他描述了一个即将被载入内存的段在文件中的位置、大小以及它被载入内存后所在的位置和大小。 一个段包含一个或多个节。 Program Header 结构如下:...
Elf32_Word sh_size;//所指向Section的size Elf32_Word sh_link;//和其关联的Section头的下标索引 Elf32_Word sh_info; Elf32_Word sh_addralign;//字节对齐 Elf32_Word sh_entsize; }; 3)Program头 structElf32_phdr//32个字节 //phdr表示Program header ...
1.通过Section Header或者Program Header加载需要的镜像数据 和WINDOWS PE加载机制不同,ELF有些文件数据是不会加载到内存镜像中。 2.加载SO NEED LIB和SYM 类似PE的Import_table 3.执行重定位(如果有) 类似PE的Reloc_table 4.执行INIT_ARRAY段或者INIT段(如果有,数组中的地址不等于0xffffffff,0表示结束) ...
ELF是一种用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件,它由4部分组成,分别是ELF头(ELF header)、程序头表(Program header table)、节(Section)和节头表(Section header table)。实际上,一个文件中不一定包含全部内容,而且它们的位置也未...
ELF 文件头(File Header):位于文件最开始,包含了整个文件的结构信息,例如是ELF 幻数,是哪种 ELF 文件,程序头表、节头表的地址等。 程序头表(Program Header Table):描述了所有段的信息 节头表(Section Header Table):描述了所有节的信息 本文不会解释结构体每个元素,而是利用 readelf 工具解读。如果需要详细到...