gpt4 book ai didi

c++ - 英特尔引脚 : correctly continuing execution after RECEIVED_ACCESS_FAULT exception

转载 作者:行者123 更新时间:2023-11-30 05:00:42 25 4
gpt4 key购买 nike

在我的一个分析例程中,我收到了一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com