非托管Windows进程崩溃的方法?

时间:2010-08-31 20:47:22

标签: windows crash structured-exception

我试图理解非托管用户模式Windows进程可以“崩溃”的方式(这实际上是一个无所不在的术语)。

以下是我目前所知道的方式:

  • 未处理的结构化异常
    • 默认UnhandledExceptionFilter:Vista之前的postmortem调试器; Vista +中的WerFault
    • 自定义UnhandledExceptionFilter:可以做任何喜欢的事情,包括安静地退出?
  • “硬”崩溃(不确定是否有技术术语)
    • E.g。在处理堆栈溢出时访问堆栈溢出防护页面:操作系统只是让进程消失而没有跟踪?
  • “正常”退出:
    • E.g。语言提供了自己的错误处理机制,使得操作系统发生致命的崩溃,就像应用程序正常关闭一样。

这大致是对的吗?有没有其他方法可以让用户模式的Windows进程死掉?

1 个答案:

答案 0 :(得分:2)

  • 未处理的异常 - 这通常是人们称之为“崩溃”的
  • 堆栈损坏的异常 - 如果堆栈已损坏且无法遍历异常链,则会以静默方式终止该进程。
  • 明确终止
    • 从另一个进程(例如TaskManager,kill.exe)调用TerminateProcess
    • C / C ++运行时致命错误,/ GS堆栈cookie损坏等
  • 附加调试器并退出调试器而不分离
  • 如果您终止相应的conhost.exe进程,控制台应用程序将终止