2014-10-28 41 views
0

阅读Ulrich Dreppers "Shared Lib Howto"我遇到了奇怪的(我的理解)事实是,使用共享库的应用程序分两步加载。首先内核加载应用程序映像,然后将动态链接器加载器二进制文件添加到地址空间并将控制权交给它。动态链接器加载器在用户空间中运行,应该在应用程序的时间片内运行,并引入其余代码或将引用链接到已加载的共享对象。这是否是这个想法(即限制运行时消耗)为什么选择这样一个复杂的方案?Linux上的共享库:为什么动态链接器在用户上下文中运行?

+0

它会在哪里运行?在内核中?考虑到在内核中运行会带来更多的安全隐患,这会带来什么好处。 – 2014-10-28 10:29:30

+0

那么为什么让内核首先加载主映像?是的,会有好处和坏处 - 我问为什么这样,而不是你可以提出哪些问题的额外的问题;) – Vroomfondel 2014-10-28 10:49:50

回答

0

为什么选择这样复杂的方案?

因为它比替代品简单。特别是,它允许开发GLIBC和动态加载程序而无需重新引导,它允许多个版本的GLIBC加载程序在同一个系统上共存,并且允许GLIBC与其他libc实现共存(它们将拥有自己的动态装载机)。

为什么让内核首先加载主映像?

内核发现,为了从中提取PT_INTERP阅读的主要形象。我猜测把它留在记忆里比卸载工作要少,让翻译重新做这项工作,而且显然也更快。

相关问题