我试图理解非托pipe用户模式Windows进程可能“崩溃”(这实际上是一个全面的术语)的方式。
以下是我所知道的方法:
- 未处理的结构化exception
- 默认UnhandledExceptionFilter:在Vista之前的postmortemdebugging器; WerFault在Vista +
- 自定义UnhandledExceptionFilter:可以做任何喜欢的事情,包括安静地退出?
- “硬”崩溃(不知道是否有这个技术术语)
- 例如,在处理堆栈溢出时碰到堆栈溢出保护页面:操作系统只是简单地使进程消失而不留痕迹?
- “正常”退出:
- 例如,语言提供了自己的error handling机制,使应用程序正常closures时致命的崩溃。
这大致是正确的吗? 用户模式的Windows进程有没有其他的方法去死?
- 未处理的异常 – 这通常是人们称之为“崩溃”
- 损坏堆栈的异常 – 如果堆栈损坏,异常链不能被执行,则进程将被无声地终止。
- 显式终止
- 从另一个进程(例如TaskManager,kill.exe)调用TerminateProcess ,
- C / C ++运行时间致命错误,/ GS栈cookie损坏等
- 附加调试器并退出调试器而不分离
- 控制台应用程序将终止,如果你杀死相应的conhost.exe进程