一文带你了解android的so区段信息

1,718 阅读1分钟

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, 进程链接表. 这