Я создал менеджер памяти, который выделяет память в окружении двух страниц с защитой PAGE_NOACCESS.
Я вызываю функцию, которая использует эту память в блоке SEH, и ловлю исключения ACCESS_VIOLATION (если таковые имеются), которые происходят в этом блоке. Теперь, в моем обработчике исключений, возможно ли получить адрес, к которому у программы не было прав доступа? Я знаю, что вы можете получить указатель на ошибочную инструкцию, но тогда вам придется фактически разобрать сборку?
Это так, я знаю, было ли нарушение вызвано в моей защищенной памяти (из которой я могу продолжить выполнение; это может быть ожидаемое поведение), или если это было другое (неизвестное) место, из которого мне, вероятно, пришлось бы прекратить процесс.
Вместо этого я подумал об использовании защиты PAGE_GUARD, которая помогла бы мне определить, что доступ к памяти мог быть получен из моей защищенной памяти, но это не точно (т. Е. Память после стека защищена с помощью PAGE_GUARD afaik).
Любая помощь приветствуется 🙂
Попытка адреса сохраняется в ExceptionInformation[1]
, согласно EXCEPTION_RECORD
документация.
Других решений пока нет …