Windows 当可执行文件试图访问非';未加载

Windows 当可执行文件试图访问非';未加载,windows,dll,Windows,Dll,当可执行文件试图访问未加载的.DLL时会发生什么情况 它是否尝试在system32文件夹中查找并加载它或其他内容 还有谁能告诉我在ram.DLL中保存和引用的位置,我试着在网上搜索,但没有找到很多好的答案 提前感谢我在MSDN的文档中找到了对搜索过程的最佳描述。该文档的备注部分摘录: 如果未指定路径,则函数将搜索基名称与要加载模块的基名称匹配的加载模块。如果名称匹配,则加载成功。否则,函数将搜索该文件 搜索的第一个目录是包含用于创建调用进程的映像文件的目录(有关更多信息,请参阅CreatePro

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

它是否尝试在system32文件夹中查找并加载它或其他内容

还有谁能告诉我在ram.DLL中保存和引用的位置,我试着在网上搜索,但没有找到很多好的答案


提前感谢

我在MSDN的文档中找到了对搜索过程的最佳描述。该文档的备注部分摘录:

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

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

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

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

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

对于第二个问题(这应该是一篇单独的帖子-这是一个问答网站,而不是问答):操作系统在加载时决定DLL将加载到RAM中的哪个位置。没有特定的物理内存位置;有些东西是基于逻辑起始位置的,但操作系统可以自由地将它们移动到需要加载的位置。你说的“访问未加载的.dll”是什么意思?您指的是哪种访问方式?另外,是什么编程问题导致您提出这个问题?StackOverflow专注于解决编程问题,所以分享这个问题,我们可以尝试解决它。