Пути сбоя неуправляемого процесса Windows?

Я пытаюсь понять, каким образом неуправляемый процесс Windows в пользовательском режиме может "аварийно завершить работу" (что на самом деле слишком сложный термин).

Вот способы, которые я знаю до сих пор:

  • Необработанное структурированное исключение
    • Unhandled ExceptionFilter по умолчанию: отладчик после смерти в пред-Vista; WerFault в Vista+
    • Пользовательский UnhandledExceptionFilter: может делать все, что угодно, включая тихий выход?
  • "Тяжелый" сбой (не уверен, что для этого есть технический термин)
    • Например, попадание на страницу защиты переполнения стека при обработке переполнения стека: ОС просто заставляет процесс исчезнуть без следа?
  • "Нормальный" выход:
    • Например, когда язык предоставляет свой собственный механизм обработки ошибок, который приводит к фатальному сбою в работе ОС, как если бы приложение нормально выключалось.

Это примерно правильно? Существуют ли другие способы смерти процесса в пользовательском режиме Windows?

1 ответ

Решение
  • Необработанное исключение - это обычно то, что люди называют "сбой"
  • Исключение с поврежденным стеком - если стек поврежден и цепочка исключений не может быть пройдена, процесс молча уничтожается.
  • Явное прекращение
    • Из другого процесса (например, TaskManager, kill.exe), вызывающего TerminateProcess,
    • Неустранимая ошибка времени выполнения C/C++, повреждение файла cookie стека /GS и т. Д.
  • Присоединение отладчика и выход из него без отсоединения
  • Консольное приложение прекратит работу, если вы убьете соответствующий процесс conhost.exe
Другие вопросы по тегам