免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: jeanlove

[讨论一下!]我发现动态库并不是只存在一份内存拷贝 [复制链接]

论坛徽章:
0
发表于 2008-09-28 15:19 |显示全部楼层
原帖由 jeanlove 于 2008-9-28 15:16 发表


这样的话,如果动态库里面有数据段,它被拷贝了一份,那么它怎么处理两份数据段的实例? 它处理的数据只能指向一个地址吧!因为代码段只有一份拷贝呀!

不,当发生了拷贝后,不同进程的数据位于不同的物理页面,有不同的物理地址。这时动态库通过同样的虚拟地址访问到的实际是不同的物理地址,也就是不同的数据。该虚拟地址对应哪个物理地址取决于当前是哪个进程在运行

论坛徽章:
0
发表于 2008-09-28 15:23 |显示全部楼层
原帖由 zx_wing 于 2008-9-28 15:17 发表

算了,我不打算浪费我的时间了。你不用质疑我是否明白问题所在,我可以非常明确的告诉从程序调用一个动态库函数,该函数访问了一个数据之间所有过程,包括在内核里执行的路径我都清清楚楚。是你没明白什么是虚 ...


这只是单个进程的情况,当然很好理解了,学过计算机原理的都知道
我不明白的是怎么处理多个进程的不同的虚拟逻辑地址。目前最靠谱的答案是.got.plt,但是.got.plt本身的地址怎么处理?

论坛徽章:
0
发表于 2008-09-28 15:26 |显示全部楼层
原帖由 zx_wing 于 2008-9-28 15:19 发表

这时动态库通过同样的虚拟地址访问到的实际是不同的物理地址,也就是不同的数据。该虚拟地址对应哪个物理地址取决于当前是哪个进程 ...


真是浪费时间,还在认为”通过同样的虚拟地址访问“。如果虚拟地址能作到都是一样的,那还说什么啊

[ 本帖最后由 ytl 于 2008-9-28 15:27 编辑 ]

论坛徽章:
0
发表于 2008-09-28 15:27 |显示全部楼层
原帖由 bobozhang 于 2008-9-28 15:16 发表
动态库的代码在内存中是只有一份;数据可能有多份。代码是被编译器编译成了位置无关代码,其实就是用相对寻址来解决动态库被映射到不同进程中逻辑地址可能不一样的问题;
动态库是可以导出全局变量的,但是这个 ...


这个不是问题吧,可以有两个同名全局变量,也可以有同名函数

论坛徽章:
0
发表于 2008-09-28 15:35 |显示全部楼层
原帖由 zx_wing 于 2008-9-28 15:19 发表

不,当发生了拷贝后,不同进程的数据位于不同的物理页面,有不同的物理地址。这时动态库通过同样的虚拟地址访问到的实际是不同的物理地址,也就是不同的数据。该虚拟地址对应哪个物理地址取决于当前是哪个进程 ...


豁然开朗了!!!!!!!!!!

分送出!!!!!!!!!!!!

论坛徽章:
0
发表于 2008-09-28 15:38 |显示全部楼层
原帖由 zx_wing 于 2008-9-28 15:32 发表

哈哈,要放假了,心情好。
兄弟你继续happy吧,搞不懂GOT PLT可以搜搜俺以前发的帖子讲这个的。
前面的兄弟已经告诉你答案了,知道什么是PIC代码吗?我建议你info gcc搜搜-fPIC、-shared了解一下。
你以为 ...


你终于知道问题所在了!
我没必要去搜,看看linker and loader就可以了。只是想看看这里有没有内行人能简短的说明白的, 总比自己探索效率高

[ 本帖最后由 ytl 于 2008-9-28 15:40 编辑 ]

论坛徽章:
0
发表于 2008-09-28 15:41 |显示全部楼层
原帖由 ytl 于 2008-9-28 15:38 发表


你终于知道问题所在了!
我没必要去搜,看看boot and loader就可以了。只是想看看这里有没有内行人能简短的说明白的

哦,敢情你是来看CU上有没有人懂了?
这种问题说了无数次高手都不会来浪费时间的,我是比较肤浅而且等下班无聊得很。
好,下班时间到了。

论坛徽章:
0
发表于 2008-09-28 15:42 |显示全部楼层
我哪个非常嚣张的回复怎么找不到了?被和谐了?

论坛徽章:
0
发表于 2008-09-28 15:45 |显示全部楼层
原帖由 deadlylight 于 2008-9-28 15:27 发表


这个不是问题吧,可以有两个同名全局变量,也可以有同名函数


这个应该是问题吧,在VC上面根本编译不过去,gcc如果不加特殊选项的话是可以编译过去的,但是程序跑起来后却是一个bug

论坛徽章:
0
发表于 2008-09-28 15:47 |显示全部楼层
哈哈,楼主原来是在考我们啊,以后回帖要更加小心了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP