Способы сбоя неуправляемого процесса Windows? - PullRequest
2 голосов
/ 01 сентября 2010

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

Вот способы, которые мне известныдо сих пор:

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

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

1 Ответ

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