我正在使用 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
我上面的FAULTY_ACCESS_TYPE
代码仍然是UNKNOWN
. 请注意,根据它的定义,我想访问类型应该是FAULTY_ACCESS_READ
.
我在这里做错了吗?