动态链接器/加载器如何解析符号?

时间:2020-04-11 05:41:42

标签: linker dynamic-linking

我是一名CS学生,并且正在做一个关于共享库和动态链接/加载的项目。我要回答的问题之一是如何通过动态链接/加载来解析符号。我搜寻了互联网,却找不到任何结论性的东西。我了解不同的链接器可能会在不同的操作系统中以不同的方式解析符号。我只是在寻找基于Windows的通用答案;动态链接中的符号如何解析?

谢谢!

1 个答案:

答案 0 :(得分:0)

好吧,让我们继续使用Windows。我将用几句话回答,然后投票赞成将该问题移至CS站点而不是主要SO。

首先,动态链接可以在程序开始时(预链接的变体)以及当程序代码明确要求某些库加载时进行。虽然在那里使用相同的DLL,但细节有所不同。

预链接变体将与所谓的导入库一起使用,该导入库是静态的,但包含特殊的thunk(又称蹦床),当动态加载程序附加了真实的库(DLL文件)时,将替换为跳转到真实的代码。对于不知道动态加载的链接器,导入库足以提供动态链接-就像它在DOS / Windows中一样。如果代码是由静态或动态库提供的,则调用代码可能会忽略细节。

动态加载是使用诸如LoadLibrary之类的方法来加载库(并激活它),并使用GetProcAddress来获取实函数实现的指针。在这种情况下,应用程序(或另一个库)会知道此机制的详细信息。

我希望这份简介足以为您提供足够的词汇以供进一步研究。