DLL that was not present in memory despite not being formally unloaded
15 days ago
- #Debugging
- #Stack Overflow
- #Memory Corruption
- 一个bug报告称shell32.dll导致第三方程序崩溃,但调查发现shell32是受害者。
- 崩溃转储显示由于递归异常处理死亡螺旋导致的堆栈溢出,始于combase!CoTaskMemFree中的访问冲突。
- 分析发现combase.dll被强制从内存卸载(可能是通过VirtualFree),而非通过FreeLibrary,导致后续调用失败。
- Shell32受到指责,因为它在进程终止期间是第一个调用已卸载combase.dll的组件,从而触发了崩溃循环。
- 审查最近100次崩溃显示,46%是由于类似的恶意DLL强制卸载导致,受影响的DLL各不相同,表明存在bucket spray问题。
- 根本原因未知,但理论指向第三方程序或其他组件中的内存损坏或未初始化变量。
- Wil评论建议在关机期间避免静态对象销毁,并指出微软代码中已存在有关关机的类型。