免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2029 | 回复: 5
打印 上一主题 下一主题

[其他] 请教几个动态库装载的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-05-30 17:32 |只看该作者 |倒序浏览
1、内核怎么知道某个进程调用了哪个动态库?是不是程序在编译链接的时候,将动态库的名称保存在程序的某个段中,是哪个段?

2、内核如何管理已经加载的动态库?假设程序A和B都使用了动态库lib.so,程序A运行时内核将动态库lib.so加载到了内存中,程序B运行时,内核怎么判断lib.so是否已经被加载,怎么知道lib.so被加载到哪个物理地址?

坐等大神指点。

论坛徽章:
1
15-16赛季CBA联赛之新疆
日期:2017-03-09 12:33:45
2 [报告]
发表于 2013-05-30 17:59 |只看该作者
回复 1# frank529


    1,你说的没有错,是有地方写了这个要依赖的库,这个在ELF文件的 .dynamic section中,这个要和readelf来看。
    2, 加载的方式,在是的时候用的是mmap,这个是操作系统作文件缓冲,而且对代码段是只读,所以,一个系统,一个文件只有一份了。对于其中的地址,是被映射的,至于你说的物理地址,这个是被映射到进程中,有一个页表转换。而物理地址是操作系统分配,具体的内容,你要学习体系架构与操作系统的内容。不是一句话讲的清楚。

论坛徽章:
0
3 [报告]
发表于 2013-05-30 19:22 |只看该作者
我知道是用mmap,关键是CPU是怎么管理装载到内存的DLL的物理地址的,没有物理地址怎么MMAP?

论坛徽章:
0
4 [报告]
发表于 2013-05-31 14:11 |只看该作者
在kernel中有3个函数,fs/binfmt_elf.c : load_elf_binary load_elf_library elf_map

我印象中的程序执行顺序是这样的

execve() -> do_execve() -> search_binary_handler() ->  load_elf_binary(如果是elf格式) -> load_elf_interp(如果是shared) -> 返回 ld.so 首地址 -> 执行 ld.so -> 遇到extern函数ld.so 解析-> load_elf_library加载所需要的library -> 指令回填 -> 解析extern函数完成

论坛徽章:
0
5 [报告]
发表于 2013-05-31 14:12 |只看该作者
cuibixiong_cu 发表于 2013-05-31 14:11
在kernel中有3个函数,fs/binfmt_elf.c : load_elf_binary load_elf_library elf_map

我印象中的程序执行 ...


印象中的,如果不对,多多指正

论坛徽章:
0
6 [报告]
发表于 2013-05-31 17:17 |只看该作者
回复 4# cuibixiong_cu


    多谢指点
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP