08.init_array.fini_array.data.rel.ro.dynamic.got 总的来说,段是没有名字的,但我们往往把包含text节的段叫做代码(text)段,把含有data节的段叫做数据(data)段。一定程度上在口述时习惯也可以理解为 "段 = 节",例如bss段,rodata段,实际他们指bss节,rodata节。甚至有时候我们说text段就狭义的指text节,完...
.data:保存已初始化的全局变量和局部静态变量,可读可写 .bss:保存未初始化的全局变量和局部静态变量。初始化为0的变量也会保存在.bss段。可读可写。 4.elf文件结构 --- 程序头 在ELF中把权限相同、又连在一起的段(section)叫做segment,操作系统正是按照“segment”来映射可执行文件的。 描述这些“segment”的...
/* Legal values for sh_type (section type). */#defineSHT_NULL0/* Section header table entry unused */#defineSHT_PROGBITS1/* Program data */#defineSHT_SYMTAB2/* Symbol table */#defineSHT_STRTAB3/* String table */#defineSHT_RELA4/* Relocation entries with addends */#defineSHT_HASH5/...
可以看到,除了我们熟悉的.text, .data, .bss,还有其它Section,这等我们以后展开讲Section的时候还会专门讲到。 看每个Section的Flags我们也可以得到一些信息,比如.text section的Flags是AX,表示要分配内存,并且是可执行的,这一节是代码无疑了。 .data 和 .bss的Flags的Flags都是WA,表示可写,需分配内存,这都是数...
从ELF的头信息,获取到了段表的信息,因此下一步,就是要分析section段。 2、section段表 section header的数据结构如下所示: 在这个结构体中,我们关心如下的一些成员: sh_name:section的名字,.shstrtab段中的偏移 sh_type:section的类型 sh_addr:section的VMA地址 ...
ELF文件格式是一个开放标准,各种 UNIX系统的可执行文件都采用ELF格式,它有三种不同的类型: 可重定位的目标文件(Relocatable,或者Object File)可执行文件...些Section(比如符号表)。 3、然后链接器把目标文件中的Section合并成几个Segment,生成可执行文件max。 4、最后加载器(Loader)根据可执行文件中的Segment信息加载...
-代码段(Code Section):存放源代码编译后的机器指令 代码段常见的名字:".code" ".text" -数据段(Data Section) :存放全局变量和局部静态变量 -数据段常见的名字:“.data”,".rodata",".comment",".bss" - 未初始化的全部变量和局部变量放在“.bss”里,仅仅作为预留位置, 没有内容在文件中也不占据空间 ...
.rodata和.rodata1。类型SHT_PROGBITS, 包含只读数据,组成不可写的段。标志SHF_ALLOC。 .shstrtab,类型SHT_STRTAB,包含section的名字。有读者可能会问:section header中不是已经包含名字了吗,为什么把名字集中存放在这里?sh_name包含的是.shstrtab 中的索引,真正的字符串存储在.shstrtab中。那么section names为什么...
接下来就是执行视图:其主要不同点就在于没有了section,而有了多个segment。其实这里的segment大都是来源于链接视图中的section 数据形式:ELF文件格式支持8位/32位体系结构。当然,这种格式是可以扩展的,也可以支持更小或者更大位数的处理器架构,因此,目标文件还应该包含一些控制数据,这部分数据表明了目标文件所使用的架...
.text section的内容会组装到代码段中,.data, .bss等节的内容会包含在数据段中。 在目标文件中,program header不是必须的,我们用gcc生成的目标文件也不包含program header。 一个好用的解析ELF文件的工具是readelf。对我本机上的一个目标代码文件sleep.o执行readelf -S sleep.o,输出如下: ...