1.got表简介
GOT表其实包含了导入表和导出表,导出表指将当前动态库的一些函数符号保留,供外部调用,导入表中的函数实际是在该动态库中调用外部的导出函数
2.区段详细解释
.got节区用来保存全局变量的地址值
.got.plt用来保存导入函数的地址值
.rel.dyn存放对全局变量的修正信息
.rel.plt存放对导入函数的修正信息
.txt 代码段
.data 数据段
.radata记录常量数据
.symtab记录符号表(相当于PE文件的导出表)的数据
.strtab 串表段
.shstrtab 有段表 字符串表段
.rel .plt记录某个区段的重定位内容(相当于PE文件的导入表)
.rel.plt:重定位的地方在.got.plt段内(注意也是.got内,具体区分而已)。
主要是针对外部函数符号。一般是函数首次被调用时候重定位。首次调用时会重定位函数地址,把最终函数地址放到.got内,
以后读取该.got就直接得到最终函数地址。我个人理解这个Section的作用是,在重定位过程中,
动态链接器根据r_offset找到.got对应表项,来完成对.got表项值的修改。
“.rel.dyn”和“.rel.plt”两个段中分别保存了该模块所需要导入的变量、函数符号以及其所在模块等信息
ELF文件中的符号表有说明该符号为导入符号还是导出符号
动态链接器,延迟绑定
.got:全局偏移表.
.plt:也是我们常说的PLT, 即Procedure Linkage Table, 进程链接表.