Отладчик не может перехватывать определенные исключения, когда ошибка исправлена до 0

#debugging #winapi

Вопрос:

Я написал небольшой инструмент отладчика Win32 для тестирования анти-отладочных трюков. Это хорошо работает, за исключением определенных сценариев:

В моем тестовом приложении я вызываю NtCloseHandle внутри try except блока / с недопустимым значением дескриптора. Я заметил, что в этом случае мой отладчик не получает EXCEPTION_INVALID_HANDLE исключение, однако другие исключения (например, точки останова) работают нормально.

Дальнейшее расследование показало, что это происходит только тогда, когда _PROCESS_ENVIRONMENT_BLOCK исправлено так, PEB-gt;BeingDebugged как есть 0 (что я делаю, чтобы сделать IsDebuggerPresent возврат ложным). Это часть тестирования на отладку.

Когда я отключаю эту операцию исправления, мой отладчик действительно получает EXCEPTION_INVALID_HANDLE , поэтому мой вопрос: как я могу получить это исключение даже с PEB-gt;BeingDebugged исправлением до 0 ?

Комментарии:

1. Ты не можешь. Вы не думаете, что исключение не возникло в данном случае ?

2. @RbMm Я думаю, может быть, есть способ обойти это. ОК, единственный способ-это исправить NtCloseHandle. Спасибо.