0

不应使用DllMain中kernel32.dll中的函数以外的函数:

来自 MS 文档:

因为当调用入口点函数时,Kernel32.dll 保证被加载到进程地址空间中,所以在 Kernel32.dll 中调用函数不会导致 DLL 在其初始化代码执行之前被使用。因此,入口点函数可以调用 Kernel32.dll 中不加载其他 DLL 的函数。例如,DllMain 可以创建临界区和互斥锁等同步对象,并使用 TLS。不幸的是,Kernel32.dll 中没有安全函数的完整列表。
...
调用需要除 Kernel32.dll 之外的 DLL 的函数可能会导致难以诊断的问题。例如,调用 User、Shell 和 COM 函数可能会导致访问冲突错误,因为某些函数会加载其他系统组件。相反,在终止期间调用诸如此类的函数可能会导致访问冲突错误,因为相应的组件可能已经被卸载或未初始化。

我的问题:
但是文档没有提到ntdll.dll。- 我可以为“ntdll”调用LoadLibrary并在DllMain中使用ntdll中的函数: 1) 在DLL_PROCESS_ATTACH期间(加载和使用 ntdll 的函数)? 2) 在DLL_PROCESS_DETACH期间(使用之前加载的 ntdll 的函数)?


另外,请拥有 1500+ 声誉的人愿意创建一个名为“dllmain”的新标签吗?

4

1 回答 1

0

“在 DllMain 中是否安全”问题的答案始终默认为“否”。在这种情况下,打电话LoadLibrary永远不会好。

一般来说,ntdll.dll即使在安全的地方,也不建议调用任何东西。

于 2013-06-24T23:48:50.983 回答