【发布时间】:2023-03-29 07:12:01
【问题描述】:
我试图了解非托管用户模式 Windows 进程可能“崩溃”的方式(这实在是一个笼统的术语)。
目前我知道的方法如下:
- 未处理的结构化异常
- 默认 UnhandledExceptionFilter:Vista 之前的事后调试器; Vista+ 中的 WerFault
- 自定义 UnhandledExceptionFilter:可以为所欲为,包括安静退出?
- “硬”崩溃(不确定是否有相关的技术术语)
- 例如在处理堆栈溢出时点击堆栈溢出保护页面:操作系统只是让进程消失得无影无踪?
- “正常”退出:
- 例如其中语言提供了自己的错误处理机制,使操作系统看起来像应用程序正常关闭一样致命崩溃。
这大致正确吗?用户模式 Windows 进程是否有任何其他方式死亡?
【问题讨论】:
-
我不确定您所说的“崩溃”是什么意思,但外力也可以杀死您的进程(即 TerminateProcess)。这与人们通常所说的“崩溃”不同,因为您的进程没有任何机会处理它。
-
@Luke 同意了。为了让您更好地理解我的意思,当我在 experimenting with Windows Error Reporting 时出现提示,发现即使 WER 被禁用,程序仍然可以通过 UnhandledExceptionFilter->NtRaiseHardError 崩溃并显示不同的错误消息,显示类似这个:i.imgur.com/fBsTI.png
标签: windows crash structured-exception