Пути сбоя неуправляемого процесса Windows?
Я пытаюсь понять, каким образом неуправляемый процесс Windows в пользовательском режиме может "аварийно завершить работу" (что на самом деле слишком сложный термин).
Вот способы, которые я знаю до сих пор:
- Необработанное структурированное исключение
- Unhandled ExceptionFilter по умолчанию: отладчик после смерти в пред-Vista; WerFault в Vista+
- Пользовательский UnhandledExceptionFilter: может делать все, что угодно, включая тихий выход?
- "Тяжелый" сбой (не уверен, что для этого есть технический термин)
- Например, попадание на страницу защиты переполнения стека при обработке переполнения стека: ОС просто заставляет процесс исчезнуть без следа?
- "Нормальный" выход:
- Например, когда язык предоставляет свой собственный механизм обработки ошибок, который приводит к фатальному сбою в работе ОС, как если бы приложение нормально выключалось.
Это примерно правильно? Существуют ли другие способы смерти процесса в пользовательском режиме Windows?
1 ответ
Решение
- Необработанное исключение - это обычно то, что люди называют "сбой"
- Исключение с поврежденным стеком - если стек поврежден и цепочка исключений не может быть пройдена, процесс молча уничтожается.
- Явное прекращение
- Из другого процесса (например, TaskManager, kill.exe), вызывающего TerminateProcess,
- Неустранимая ошибка времени выполнения C/C++, повреждение файла cookie стека /GS и т. Д.
- Присоединение отладчика и выход из него без отсоединения
- Консольное приложение прекратит работу, если вы убьете соответствующий процесс conhost.exe