Я реализую функцию обработки исключений, используя Pin. В моем коде обработки исключений я особенно искал ошибку доступа к памяти, скажем, ошибку чтения памяти и ошибку записи в память. Я написал код ниже:Тип доступа к памяти PIN-кода в обработке исключений
BOOL catchSignalTest(THREADID tid, INT32 sig, CONTEXT *ctx, BOOL hasHandler, const EXCEPTION_INFO *pExceptInfo, VOID *v)
{
ADDRINT exptAddr = PIN_GetExceptionAddress(pExceptInfo);
ADDRINT exptAddr = PIN_GetExceptionAddress(pExceptInfo);
FAULTY_ACCESS_TYPE ty = PIN_GetFaultyAccessType(pExceptInfo); <----- ty is unknown type!!!
}
.....
PIN_InterceptSignal(SIGSEGV, catchSignalTest, 0);
Что действительно меня смущает то, что, даже для типичной памяти ошибка чтения доступа ниже:
mov eax, [ebx] <--- ebx = 0x01, which makes the read operation failed
The FAULTY_ACCESS_TYPE
моего кода выше еще UNKNOWN
. Обратите внимание, что согласно его definition, тип доступа должен быть FAULTY_ACCESS_READ
.
Неужели я ничего не нахожу здесь?
Здравствуйте, большое вам спасибо за ваш ответ! Я попробовал API-интерфейс «PIN_GetExceptionClass» и получил возвращаемое значение «EXCEPTCLASS_ACCESS_FAULT». Таким образом, кажется, что Pin способен выяснить правильную причину исключения ... – computereasy
Добро пожаловать! Как указано в ваших связанных документах API, 'EXCEPTCODE_ACCESS_MISALIGNED' _is_ часть' EXCEPTCLASS_ACCESS_FAULT' [но не указала, какой код типа доступа будет]. Всякий раз, когда мне приходилось сталкиваться с таким «кодом ошибки» -> «API-класс с ошибкой», мне обычно было полезно печатать/обрабатывать оба. –