当可执行文件尝试访问未加载的.dll时会发生什么

时间:2017-06-16 20:38:23

标签: windows dll

当可执行文件尝试访问未加载的.DLL时会发生什么?

是否尝试在system32文件夹中找到它并加载它或其他东西?

也有人可以向我解释一下ram .DLL在哪里保存和引用,我尝试在线研究,但没有找到很多好的答案......

提前致谢

1 个答案:

答案 0 :(得分:0)

我已经能够找到的已使用的搜索处理的最佳描述位于MSDN的LoadLibrary文档中。摘自该文档的备注部分:

  

如果未指定路径,则该函数将搜索其基本名称与要加载的模块的基本名称匹配的已加载模块。如果名称匹配,则加载成功。否则,该函数将搜索该文件。

     

搜索到的第一个目录是包含用于创建调用进程的映像文件的目录(有关更多信息,请参阅CreateProcess函数)。这样做允许找到与进程相关联的私有动态链接库(DLL)文件,而无需将进程的已安装目录添加到PATH环境变量。如果指定了相对路径,则整个相对路径将附加到DLL搜索路径列表中的每个标记。要从相对路径加载模块而不搜索任何其他路径,请使用GetFullPathName获取非相对路径并使用非相对路径调用LoadLibrary。有关DLL搜索顺序的更多信息,请参阅动态链接库搜索顺序。

     

可以使用SetDllDirectory函数更改搜索路径。建议使用此解决方案,而不是使用SetCurrentDirectory或硬编码DLL的完整路径。

     

如果指定了路径并且应用程序有重定向文件,则该函数将在应用程序的目录中搜索该模块。如果模块存在于应用程序的目录中,LoadLibrary将忽略指定的路径并从应用程序的目录中加载模块。如果应用程序目录中不存在该模块,则LoadLibrary将从指定目录加载该模块。有关更多信息,请参阅动态链接库重定向。

     

如果使用没有路径规范的程序集名称调用LoadLibrary,并且程序集列在系统兼容清单中,则调用将自动重定向到并排程序集。