首页
社区
课程
招聘
[原创]【ARM】安卓SO中GOT REL PLT 作用与关系
发表于: 2017-10-15 23:44 14798

[原创]【ARM】安卓SO中GOT REL PLT 作用与关系

2017-10-15 23:44
14798

之前写的太混乱,修改了一下~

clock()和optopt这两个符号不在本模块内。
由于这种依赖的外部SO库可能存在进程内存的任何地址,
所以程序编译完成后,程序并不知道这些函数和变量的内存地址的。
只有程序跑起来时,找到了依赖的SO模块加载地址,通过一系列结构的配合,
才能确定它们的地址以访问执行。


·
·

·
·
BTW:
(1)程序从磁盘文件复制到进程内存中,叫装载
(2)在进程内存中,找到上面说的那些函数/变量地址,叫重定位.(可能在本模块 也可能在外部SO模块)
(3)装载 + 重定位的整个过程,叫链接。
(4)负责完成这件事的,叫链接器。
·
·
·
·

·
·
·
·

本程序装载进内存时,通过自己的rel表项告诉链接器,哪些地方需要重定位。
本程序装载进内存时,通过自己的rel表项告诉链接器,哪些地方需要重定位。
本程序装载进内存时,通过自己的rel表项告诉链接器,哪些地方需要重定位。
·
·

用来存放链接器找到的 函数/变量地址。
用来存放链接器找到的 函数/变量地址。
用来存放链接器找到的 函数/变量地址。
·
·

就去访问got表项找这个地址。
就去访问got表项找这个地址。
就去访问got表项找这个地址。
·
·

ELF中每一个这样不确定地址的地方,都会生成一个rel表项。
每个rel表项,都对应一个需要修正地址的地方。
·
每个rel表项,都对应指出一个got表项地址。
·
每个got表项用来存放找到的地址。
·
链接器将本模块装载进入进程内存时,
会遍历本模块的rel表项,得知谁需要修正,将修正的地址填入对应got项。
·
做这件事的时机是,链接器将本模块装载进入内存时,本模块init段代码运行前。
(android arm elf情况下,这种叫装载时重定位)
·
·

REL项 ---> 需要修正地址的符号 / GOT项 ---> 最终的地址
REL项 ---> 需要修正地址的符号 / GOT项 ---> 最终的地址
REL项 ---> 需要修正地址的符号 / GOT项 ---> 最终的地址
·
·
·
·

readelf -r xxx.so

IDA下的rel表

IDA下的got表

·
·
·
·

·


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2019-6-12 11:04 被爱吃菠菜编辑 ,原因:
上传的附件:
收藏
免费 6
支持
分享
最新回复 (19)
雪    币: 7012
活跃值: (4222)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2017-10-16 00:17
0
雪    币: 241
活跃值: (231)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
干货  感谢分享
2017-10-16 00:34
0
雪    币: 562
活跃值: (4347)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
顶,不错啊
2017-10-16 10:16
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
干货   感谢分享 
2017-10-17 21:38
0
雪    币: 2141
活跃值: (7226)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
6
之前写的太混乱,更新了一下~
2017-10-27 13:14
0
雪    币: 41
活跃值: (823)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
感谢分享
2017-11-14 08:45
0
雪    币: 57
活跃值: (386)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
收藏
2018-7-24 00:10
0
雪    币: 1260
活跃值: (2168)
能力值: ( LV5,RANK:75 )
在线值:
发帖
回帖
粉丝
9
好文!!!感谢分享
2018-7-24 09:37
0
雪    币: 249
活跃值: (72)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
mark
2018-8-23 11:59
0
雪    币: 2462
活跃值: (5038)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
精髓
2019-12-26 14:45
0
雪    币: 162
活跃值: (170)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
12
好资料 收藏了
2020-5-13 08:42
0
雪    币: 614
活跃值: (883)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
13
不错,讲得很明白。
2020-5-13 10:46
0
雪    币: 758
活跃值: (78)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
学习资料
2020-5-13 16:52
0
雪    币: 68
活跃值: (101)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
感谢分享,这属于动态链接的内容吧?
2020-5-14 09:53
0
雪    币: 443
活跃值: (1157)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
18
感谢分享,我通过R2分析了一波/
2020-12-5 22:38
0
雪    币: 582
活跃值: (317)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
ding feichangbang
2020-12-8 10:28
0
雪    币: 6890
活跃值: (3171)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
好资料 收藏! 谢谢楼主。
2020-12-8 11:41
0
游客
登录 | 注册 方可回帖
返回
//