entercriticalsection md mt(entercriticalsection)

2023-08-09 18:07:56 来源:互联网

1、边肖在这里给你一些如何处理这个问题的统计数据,让我们一起来了解一下。


(资料图)

2、先抛个结论,再给出分析结果,说明(本文中的dllMIN对应的是DLL入口点,模块入口点的函数名不一定是DLLMIN)

3、结论:

4、Dwm.exe进程初始化LdrInitializeThunk的内部映射dll,并一起调用这些dll的dllmain。当调用用户32的dllmain时,

5、加载NVIDIA的nvinitx.dll的模块使用SHGetShellFolder,它使用了rpcrt4.dll的一些数据。

6、但是,与锁相关的数据在初始化之前就被使用了(因为在调用顺序中它还没有被调用到rpcrt4.dl its dllmain),这会导致异常和死锁。最终导致黑屏或者卡在系统欢迎界面。

7、分析的简要过程:

8、1.从卡时获得的转储可以看出,explorer卡是从ConnectPort到dwm.exe的一个港口。

9、2.查看dwm.exe中的线程,发现其中一个线程在调用SHGetShellFolder函数时卡住了。这张卡导致explorer.exe此后工作不正常,一直卡在链接dwm.exe的端口上。

10、3.检查锁秒主机!SddlSidLookupCritical状态,发现此锁被dwm.exe主线程占用,未被释放。仔细分析后发现,正常情况下主线程应该不会无法释放这个临界段。

11、4.猜猜是什么唯一可能导致这个关键区域不被释放。

12、(上位机调试)调试发现dwm.exe的主线程中英大卫和nvinitx.dll的dllmain会调用SHGetFoldPathW函数。当这个函数被调用时,

13、SddlSidLookupCritical锁已被占用。这时,RPCRT4.dll中的相关函数被调用。

14、但是在调用EnterCriticalSection获取rpcrt4的临界区时,GlobalMutex发生了异常,并跳转到shell32中的异常处理函数function _GSHandlerCheck_EH。

15、此时SddlSidLookupCritical锁没有释放,SHGetFoldPathW返回。看下面的异常,发现rpcrt4中的临界区GlobalMutex没有初始化。

16、dllmain内部很多其他变量值都没有初始化,所以可以确定dllmain没有被调用。

17、5.ida分析表明GlobalMutex的初始化在rpcrt4.dll的dllmain内部。所以我们可以知道问题的原因是rpcrt4.dll的dllmain没有被调用。

18、那么为什么这个dllmain没有被调用呢?

19、6.发现SHGetFoldPathW的调用在nvinitx.dll的dllmain。

20、ntdll!LdrpInitializeProcess函数先映射导入表中的dll在调用这些dll中的dllmain函数。

21、这个出问题环境调试发现rpcr4.dll中dllmain并没有调用到,这个时候gdi32的dllmain函数内部调用loadlibrary加载nvinitx.dll,

22、并调用nvinitx.dll的dllmain函数,但是这个时候调用LdrpLoadDll加载rpcr4.dll的时候,(之前刚映射,这个时候LdrpLoadDll发现rpcr4.dll已经被映射了,

23、所以就不会调用这个rpcr4.dll的dllmain函数)

24、Loadlibrary调用LdrpLoadDll(这个函数先检查模块rpcr4.dll是否映射,发现已经映射就不会调用这个的dllmain,

25、接下来调用其它函数使用临界区GlobalMutex就出现异常崩溃)这个rpcr4.dll的dllmain会在接下来的ntdll!LdrpRunInitalizeroutines函数内部调用。

26、7.更新了英伟达显卡驱动372.54及372.70版本后,开机启动过程中,经过上面一系列的异常调用,最终系统会被卡在欢迎界面或个别电脑出现黑屏的情况。

本文到此结束,希望对大家有所帮助。

上一篇:

普京向俄杜马提交法律草案,提议进入战时状态无需再向欧洲委员会通报

下一篇:

普京向俄杜马提交法律草案,提议进入战时状态无需再向欧洲委员会通报

推荐阅读