从DllMain加载/调用ntdll

时间:2013-06-23 10:15:47

标签: windows loadlibrary ntdll dllmain

不应使用 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”的新标签?

1 个答案:

答案 0 :(得分:0)

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

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

相关问题