Получить информацию от EXCEPTION_RECORD - PullRequest
1 голос
/ 04 ноября 2011

Если я уловил нарушение прав доступа с помощью SEH, как я могу получить адрес нарушения? GetExceptionInformation дает мне LPEXCEPTION_POINTERS , который содержит

  • ExceptionRecord - указатель на структуру EXCEPTION_RECORD, которая содержит машинно-независимое описание исключения.
  • ContextRecord - указатель на структуру CONTEXT, которая содержит Специфичное для процессора описание состояния процессора на момент исключения.

Как я могу получить эту информацию, не записывая дамп?

Ответы [ 2 ]

2 голосов
/ 04 ноября 2011

Адрес памяти, а также тип операции содержатся в поле ExceptionInformation внутри структуры ExceptionRecord. От MSDN :

ExceptionInformation
Массив дополнительных аргументов, которые описывают исключение. Функция RaiseException может указывать этот массив аргументов. Для большинства кодов исключений элементы массива не определены. В следующей таблице описаны коды исключений, элементы массива которых определены.

Код исключения Значение
EXCEPTION_ACCESS_VIOLATION
Первый элемент массива содержит флаг чтения-записи, который указывает тип операции, вызвавшей нарушение прав доступа. Если это значение равно нулю, поток попытался прочитать недоступные данные. Если это значение равно 1, поток попытался выполнить запись по недоступному адресу. Если это значение равно 8, поток вызывает нарушение предотвращения выполнения данных в режиме пользователя (DEP).

Второй элемент массива указывает виртуальный адрес недоступных данных.

2 голосов
/ 04 ноября 2011

Структура EXCEPTION_RECORD имеет поле ExceptionAddress.

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