首页
社区
课程
招聘
android 与 linux的动态链接
发表于: 2014-2-22 16:36 5990

android 与 linux的动态链接

2014-2-22 16:36
5990
近期,在做关于hook类的东西,从linux转向android的过程中,发现它们的链接机制有所不同,
android上的dlopen这个函数时在linker链接器中的,所以利用这个dlopen来加载自己的so库就相对简单了,但是发现在linux上,dlopen这个函数是在libdl.so中的,而不在ld.so链接器中,那么就有一个问题,我自己写的一个HelloWorld的程序,解析了这个程序的加载时的内存映射,发现内存中只有两个库,就是ld.so和libc.so,一个是动态链接库,另一个是c运行时库,那我就想这个c运行时库肯定是由动态链接器加载的吧,而且动态链接器加载libc.so的时候并没有用到dlopen这个函数,不然的话内存中一定会存在libdl.so这个库才对啊,大家说,我的这点猜想是不是正确呢?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 0
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
有可能libdl.so是被其他库已经加载了呢
2014-2-28 22:50
0
雪    币: 3818
活跃值: (4233)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
3
没有使用到dlopen, linker是使用mmap把so加载进来的。
2014-3-3 13:21
0
雪    币: 47
活跃值: (43)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
那这样的话,是不是先用mmap将so文件加载进内存,那符号解析之类的呢,还是由动态链接器做的,符号解析这块应该和调用dlopen来进行符号解析是一样的,我想,那我自己直接调用mmap来把so文件注入一个进程的地址空间,然后访问so文件中的一个函数,应该还不能执行吧,必须要把符号解析好才行???
2014-3-3 17:42
0
雪    币: 146
活跃值: (33)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
跟你这个so有关。如果这个so没有引用到外部符号,你只要需要知道目标函数地址就行。你可以在目标进程里面找dlopen,然后用它加载so。
2014-3-6 17:07
0
游客
登录 | 注册 方可回帖
返回
//