阅读Ulrich Dreppers "Shared Lib Howto"我遇到了一个奇怪的(我的理解)事实,即使用共享库的应用程序分两步加载。首先,内核加载应用程序映像,然后将动态链接器加载器二进制文件添加到地址空间并将控制权传递给它。动态链接器加载器在用户空间中运行,应该在应用程序的时间片内,并拉入其余代码或链接对已加载的共享对象的引用。这是一个想法(即限制运行时消耗)为什么选择这样一个复杂的方案?
答案 0 :(得分:0)
为什么选择这么复杂的方案呢?
因为它没有其他选择那么复杂。
特别是,它允许开发GLIBC和动态加载器而无需重新启动,它允许GLIBC加载器的多个版本在同一系统上共存,并且它允许GLIBC与其他libc实现共存(它们将拥有自己的动态加载器) )。
为什么让内核首先加载主映像?
内核必须查找并读取主映像才能从中提取PT_INTERP
。我猜测将它留在内存中的工作少于卸载并让解释器重新完成工作,显然也更快。