Приостановите процесс, если пишете по определенному адресу - PullRequest
2 голосов
/ 23 марта 2012

В Windows (предпочтительно XP) вообще возможно приостановить процесс, когда он пишет по определенному адресу (в его виртуальном адресном пространстве)?

Проблема осложняется тем, что загруженные библиотеки DLL выполняют операцию записи, а не код в (PE) образе самого процесса.

1 Ответ

4 голосов
/ 23 марта 2012

Вы можете защитить страницу, содержащую интересующий адрес, с помощью VirtualProtect и PAGE_GUARD или других опций и иметь исключение при записи адреса.Такое исключение может быть обработано с помощью фильтра необработанных исключений (это зависит от того, может ли приложение обрабатывать его само) или с помощью приложения отладчика вне процесса, такого как хорошо известный отладчик или процесс отладки пользовательского приложения через API.

Приложение-отладчик может при необходимости приостановить процесс или сделать мини-дамп со снимком.См. MSDN EXCEPTION_DEBUG_EVENT для получения подробной информации:

Генерируется всякий раз, когда возникает исключение в процессе отладки.Возможные исключения включают в себя попытку доступа к недоступной памяти, выполнение инструкций точки останова, попытку деления на ноль или любое другое исключение, указанное в Структурной обработке исключений.

Структура DEBUG_EVENT содержит структуру EXCEPTION_DEBUG_INFO.Эта структура описывает исключение, вызвавшее событие отладки.

...