.bss节为未初始化的变量保留空间,最初.bss 节的名称 代表着“以符号开头的块”,是为(符号)变量保留内存块的意思。 与类型为 SHT_PROGBITS 的.rodata 节和.data 节不同,.bss 节的类型为 SHT_NOBITS,这是因为.bss 节不会像二进制文件一样占用磁盘上的字节,它只当二进制文件建立执行环境时为未初始化...
[7,7]字节为EI_PAD即e_ident[EI_PAD]表明e_ident中未使用的字节的起点(值是相对于e_ident[EI_PAD+1]的偏移),未使用的字节会被初始化为0,解析ELF文件时需要忽略对应的字段; EI_MAG0,EI_MAG1,EI_MAG2,EI_MAG3,EI_CLASS,EI_DATA,EI_VERSION,EI_OSABI,EI_PAD是linux源码中定义的宏,取值分别...
History 10 Commits lib .gitignore LICENSE Makefile README.md app.c ELF data embedder NOTE: This code should be considered experimental only, as I am not a C developer. Embeds files into 32/64bit ELF sections, and provides a simple C interface for the runtime toextract them. ...
链接视图由sections组成,而可执行的文件的内容由segment组成。 两者是有一些区别的,我们平时在进行程序构建的时候理解的.text、.bss、.data段,这些都是section,也就节区的概念。这些段通过section header table进行组织与重定位。 但是对于segment来说,程序代码段、数据段是Segment。代码段又可以分为.text,数据段又分...
ELFDATA2LSB - 小端法 ELFDATA2MSB - 大端法 EI_Version - e_ident[6] 标识ELF Version, 该值等于EV_CURRENT,目前为1 EI_OSABI - e_ident[7] 表示着该文件运行的操作系统 EI_ABIVERSION - e_ident[8] 标志着 ABI (应用二进制接口)的版本,ABI相当于硬件层级的API(见下图) ...
取值可为3种:ELFDATANONE(0)非法数据编码;ELFDATA2LSB(1)高位在前;ELFDATA2MSB(2)低位在前。 其它数组元素就不作介绍了。 2.2.2 e_type e_type表示elf文件的类型,如下定义: 名称 取值 含义 ET_NONE 0 未知目标文件格式 ET_REL 1 可重定位文件 ET_EXEC 2 可执行文件 ET_DYN 3 共享目标文件 ET_...
编码ELFDATA2MSB 指定2的补码值,最高有效字节占据最低地址。 Sections 对象文件的节头表可以定位文件的所有节。节头表是如下所述的 Elf32_Shdr 结构的阵列。节头表索引是此数组中的一个下标。ELF头的 e_shoff 成员给出了从文件开头到节头表的字节偏移量;e_shnum 告诉节标题表包含多少条目;e_shentsize 以字...
链接器在处理目标文件时,需要对目标文件中的某些部位进行重定位,即代码段和数据中中那些绝对地址引用的位置。对于每个需要重定位的代码段或数据段,都会有一个相应的重定位表。比如”.rel.text”就是针对”.text”的重定位表,”.rel.data”就是针对”.data”的重定位表。
程序编译后生成的目标文件至少含有三个段,分别为:.text、.data和.bss。这三个段的大致结构图如下所示: 其中.text即为代码段,为只读。.bss段包含程序中未初始化的全局变量和static变量。 data段包含三个部分:heap(堆)、stack(栈)和静态数据区。 当程序在执行时动态分配空间(C中的malloc函数),所分配的空间就属...
e_ident[EI_DATA]规定了对象文件中和处理器相关的数据的如何编码。更多的下面会详解。 ELFDATANONE 0 Invalid ELFDATA2LSB 1 See below ELFDATA2MSB 2 See below EI_VERSION e_ident[EI_DATA]指定了EFL header版本号。当前情况下,必须是EV_CURRENT,后面会详细解释。