2014-10-28 46 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閱讀的主要形象。我猜測把它留在記憶裏比卸載工作要少,讓翻譯重新做這項工作,而且顯然也更快。

相關問題