Возможно ли, что процесс может перехватить необработанное исключение другого процесса в Windows? - PullRequest
0 голосов
/ 05 марта 2010

Возможно ли, что процесс может перехватить необработанное исключение другого процесса в системе?

Если возможно, при каких обстоятельствах это возможно? Например, возможно ли, если второй процесс не запущен первым?

В основном я ищу ответ относительно нативного c ++.

Ответы [ 3 ]

3 голосов
/ 05 марта 2010

Исключения Windows: Структурная обработка исключений (SEH) для каждого потока. Другой поток в этом процессе мог бы манипулировать стеком целевого потока, чтобы вставить свой собственный обработчик, но это будет трудно сделать правильно (особенно из-за отсутствия согласованного соглашения о вызовах в x86). Другой процесс может внедрить dll & thread в процесс, чтобы сделать это. Это будет трудно понять правильно, особенно без тесной связи с деталями целевого процесса (какие функции называются и как).

Если подумать, отладчики могут сделать это, поэтому API отладчика Win32 должны иметь эту возможность. Процесс может отлаживать другие процессы в том же сеансе (с более низким или равным уровнем целостности) или, если у пользователя есть «процесс отладки», привилегированный для любого процесса.

3 голосов
/ 05 марта 2010

Native (стандарт AKA) C ++ не имеет реальной концепции множественных процессов и не имеет средств для перехвата исключений, выбрасываемых через границы процессов. И никакие способы выбрасывать исключения через такие границы не приходят.

1 голос
/ 05 марта 2010

Да. Мэтт Пьетрек объясняет, как .Прокрутите вниз до раздела «VectoredExceptionHandling - это чистый, легко расширяемый способ просмотра всех исключений».Также есть пример кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...