作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的一个分析例程中,我收到了一个 void*
指针作为输入,它可能是也可能不是指向字符串的“好”指针。
为了检查错误指针的情况,我使用此处提出的 IsBadPointer 变体 Most efficient replacement for IsBadReadPtr?
然而,这并不完全可靠。因此,我想捕获在尝试引用错误指针时引发的 RECEIVED_ACCESS_FAULT 异常,将指针的值更改为正确的值,然后继续执行。
因此,为了尝试这个,我在我的分析例程中引用了一个全局 NULL 指针 (string_pointer
),并且我将异常处理程序设置如下:
EXCEPT_HANDLING_RESULT ExceptionHandler(THREADID tid, EXCEPTION_INFO *pExceptInfo, PHYSICAL_CONTEXT *pPhysCtxt, VOID *v)
{
EXCEPTION_CODE c = PIN_GetExceptionCode(pExceptInfo);
EXCEPTION_CLASS cl = PIN_GetExceptionClass(c);
std::cerr << "Exception class " << cl << endl;
std::cerr << PIN_ExceptionToString(pExceptInfo) << endl;
//Change string_pointer contents from NULL
string_pointer = "<Invalid Memory>";
return EHR_HANDLED;
}
不幸的是,这不起作用,因为固定工具卡在了异常处理程序中。有什么解决这个问题的建议吗?
最佳答案
您应该始终使用 PIN_SafeCopy() 从您的分析例程访问应用程序内存,即 declared如下:
size_t LEVEL_PINCLIENT::PIN_SafeCopy(VOID* dst, const VOID* src, size_t size)
该函数返回从源缓冲区成功复制的字节数。因此,您可以将它与 size
进行比较,以确定它是否完全成功。 PIN_SafeCopyEx()
是一个类似的函数,可在出现故障时提供额外信息。
关于c++ - 英特尔引脚 : correctly continuing execution after RECEIVED_ACCESS_FAULT exception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50633331/
在我的一个分析例程中,我收到了一个 void* 指针作为输入,它可能是也可能不是指向字符串的“好”指针。 为了检查错误指针的情况,我使用此处提出的 IsBadPointer 变体 Most effic
我是一名优秀的程序员,十分优秀!