如果我在ASLR打开时使用LoadLibraryExW()加载相同的.dll twitce会发生什么?

时间:2017-02-14 06:54:30

标签: visual-studio winapi visual-c++ dll

如果我使用以下方法加载相同的.dll两次或更多次会发生什么:

handle = ::LoadLibraryExW(dllpath, NULL, LOAD_WITH_ALTERED_SEARCH_PATH)

当ASLR(DYNAMICBASE)打开时,它是否返回相同的地址?

2 个答案:

答案 0 :(得分:1)

没有ASLR没什么不同。第二个LoadLibraryEx调用将返回与第一个调用相同的句柄,并且DLL的使用计数递增。

因此DLL未加载“两次”。是在第一次通话时加载。

除了搜索路径的不同使用外,行为与LoadLibrary相同。

答案 1 :(得分:0)

来自MSDN

部分:备注[第三段]

  

如果指定的模块是尚未加载的   在调用进程中,系统调用DLL的DllMain函数   DLL_PROCESS_ATTACH值。

[第11段]

  

系统维护所有已加载的每进程引用计数   模块。调用LoadLibrary会增加引用计数。调用   FreeLibrary或FreeLibraryAndExitThread函数递减   引用计数。系统在引用计数时卸载模块   达到零或过程终止时(无论如何)   参考计数)。

如果模块已经加载到进程内存中,它将返回相同的HMODULE句柄,并增加引用计数。此外,它不会在后续调用中调用DLL_PROCESS_ATTACH