-->

从DllMain中加载/调用NTDLL(Loading/calling ntdll from Dll

2019-11-02 06:07发布

一个人不应该使用比在kernel32.dll中DllMain的其他功能:

从MS文档:

因为Kernel32.dll中保证在当入口点函数被调用进程的地址空间被加载,调用Kernel32.dll中的功能不会导致DLL已执行的初始化代码之前使用。 因此,入口点函数可以调用函数中的Kernel32.dll不加载其他DLL。 例如,DllMain中可以创建同步对象如临界区和互斥,并且使用TLS。 不幸的是,不是在Kernel32.dll中安全功能的完整列表。
...
调用需要的DLL比其他的​​Kernel32.dll可能导致难以诊断的问题的功能。 例如,主叫用户,壳牌和COM功能可能会导致访问冲突错误,因为某些功能加载其他系统组件。 相反,因为相应的组件可能已被卸载或初始化终止时调用,例如,这些功能可能会导致访问冲突错误。

我的问题:
但文件没有提及ntdll.dll中 。 -我可以调用LoadLibraryDllMain的 “NTDLL”和使用功能NTDLL:
1)期间的NTDLL DLL_PROCESS_ATTACH(负载和使用函数)?
2)在先前装入NTDLL的DLL_PROCESS_DETACH(使用函数)?


另外,请,会有人与1500+的声誉要创建名为“DllMain的”新标签?

Answer 1:

回答这个问题:“这是在DllMain中的安全”总是默认为“否”。 在这种情况下,调用LoadLibrary是永远不会好起来的。

一般来说,任何调用ntdll.dll ,不建议甚至地方,它是安全的这样做。



文章来源: Loading/calling ntdll from DllMain