【发布时间】:2016-02-18 16:31:59
【问题描述】:
我很好奇动态链接在 Windows 上的工作原理。由于我们不能直接链接到一个,Windows 通常将您的可执行文件链接到一个 LIB 文件,该文件包含由 DLL 导出的函数的存根。这种类型的链接是否会在运行时产生LoadLibrary 和GetProcAddress?如果没有,链接如何在内部工作?
【问题讨论】:
-
您可以拥有多个版本的 DLL,这意味着它包含的函数可能位于不同的地址,所以是的,操作系统需要调用
LoadLibrary和GetProcAddress。但是,它很可能使用这些功能的内部版本,而不是公开可见的。 -
函数的地址是动态的吧?由于每次加载时 dll 的地址都会发生变化。 @CareyGregory
-
间接,是的。它由操作系统加载器完成,它使用可执行文件中的导入表来知道DLL名称和需要查找的函数名称。使用 Dumpbin.exe /imports 查看该表的外观。