不应使用 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”的新标签?
答案 0 :(得分:0)
问题的答案“在DllMain中是否安全”始终默认为“否”。在这种情况下,调用LoadLibrary
永远不会好。
一般来说,即使是安全的地方,也不建议在ntdll.dll
中调用任何内容。