. interp段中只是储存这一个ASCII的字符串,它就是动态连接器的名字(路径)。.hash, .dynsym, .dynstr这三个段是用于动态连接器执行relocation时的符号表。.hash是一个哈希表,可以让我们很快的从.dynsym中找到所需的符号。 .plt段中储存着我们调用动态连接库中的函数入口地址,在默认状态下,程序初始化时,.plt中的...
.dynsym段包含了动态链接库有关的符号信息;.rel.*段包含的信息用于告诉系统将如何变换某些段的虚拟空间地址;.hash段包含一个哈希表,用来加速对符号的查找,所谓符号是编译器设置的用于记录代码中变量类型,取值等信息的数据结构,它属于编译原理的内容,有了符号,我们才能使用调试器对程序进行调试。.symtab对应符号表,它...
sh_type: 段的类型. 参考: refspecs.linuxfoundation.org NameValue SHT_NULL 0 SHT_PROGBITS : 程序/数据/ 1 SHT_SYMTAB : 符号表 2 SHT_STRTAB : 字符串表 3 SHT_RELA : 重定位表 4 SHT_HASH: HASH 表 5 SHT_DYNAMIC: 动态链接 6 SHT_NOTE : 注释 7 SHT_NOBITS: 不存在于文件中 8 SHT_RE...
1、readelf –r test.o,打印出所有需要重定位的段 1).rela.text:其类型为 RELA,也叫作重定位段,用于链接器在处理目标文件时,重定位代码段中那些对绝对地址的引用的位置。比如 .text 段中对外部 printf() 函数的调用; 2).rela.eh_frame :记录了需要进行地址重定位的异常处理框架(exception handling frame)信...
text段是程序代码段,在AT91库中是表示程序段的大小,它是由编译器在编译连接时自动计算的,当你在链接定位文件中将该符号放置在代码段后,那么该符号表示的值就是代码段大小,编译连接时,该符号所代表的值会自动代入到源程序中。 3、data(可读可写) data包含静态初始化的数据,所以有初值的全局变量和static变量在data...
●.hash:这个节中保存的是符号表的哈希表,用来加快符号查找速度。 ●.init:这个节中保存了程序执行前的初始化代码,这些代码早于main函数被执行。 ●.fini:这个节中保存了程序退出时执行的代码,这些代码晚于main函数被执行。 ●.shstrtab:这个节中保存了一个字符串,里边全是节的名称。
在文件的尾部的一些段的Addr值是00000000,因为这些都是符号表,动态连接器并不把这些段的内容加载到内存中。. interp段中只是储存这一个ASCII的字符串,它就是动态连接器的名字(路径)。.hash, .dynsym, .dynstr这三个段是用于动态连接器执行relocation时的符号表。.hash是一个哈希表,可以让我们很快的从.dynsym中找...
这些数据包含在可加载段中,在执行过程中可用。如:� 类型为SHT_DYNAMIC的.dynamic 节区包含很多数据。位于节区头部的结构保存 了其他动态链接信息的地址。� 类型为SHT_HASH的.hash 节区包含符号哈希表。� 类型为SHT_PROGBITS的.got 和.plt 节区包含两个不同的表:全局偏移表和过 ...
.rela节//SHT_HASH,值为5,.hash节//SHT_DYNAMIC,值为6,.dynamic节//SHT_NOTE,值为7,此节包含一些注释信息//SHT_NOBITS,值为8,此节不在ELF文件中,而是在程序执行期间分配内存空间,比如.bss//SHT_REL,值为9,.rel节//SHT_SHLIB,值为10,保留节,具体含义未定义//SHT_DYNSYM,值为11,.dynsym节u64 sh...
第一步 空间与地址分配 扫描所有的输入目标文件,并且获得它们的各个段的长度、属性和位置,并且将输入目标文件中的符号表中所有的符号定义和符号引用收集起来,统一放到一个全局符号表中。 第二步 符号解析与重定位 使用第一步中收集到的信息,读取输入文件中段的数据、重定位信息,并且进行符号解析与重定位、调整代码中...