查找访问地址的内容

时间:2018-04-02 21:51:16

标签: c++ memory exception-handling

它应该做什么:让我们说某人想要编辑程序中的变量。好吧,您将能够看到篡改该变量的地址(例如,可能是mov指令)。

我是怎么想的:我得到了该变量的地址,我使用VirtualProtect对其进行PAGE_GUARD保护,并创建了一个矢量异常处理程序检查EXCEPTION_GUARD_PAGE并检查所访问的地址是否受保护,如果是,则保存最后访问该地址的地址(来自上下文)。

现在,我开始只是尝试创建一个简单的处理程序,看看它是否可以在进行更改时通知我,但它不起作用。首先,每当我尝试printf变量上有PAGE_GUARD的地址时,我就会得到一个访问异常,或者如果我在Visual Studio之外启动它就会崩溃。

我还尝试设置PAGE_NOACCESS并处理向量处理程序中的EXCEPTION_ACCESS_VIOLATION,但之后没有任何反应。

long __stdcall handler(EXCEPTION_POINTERS* pExceptInfo) {
    if (EXCEPTION_GUARD_PAGE == pExceptInfo->ExceptionRecord->ExceptionCode)
        printf("accessed by 0x%p\m", pExceptInfo->ContextRecord->Esp);

    return EXCEPTION_CONTINUE_EXECUTION;
}

int main() {
    int32_t nNumber         = 555111222;
    UINT_PTR uiNumberAddr   = ReCa<UINT_PTR>(&nNumber);

    DWORD dwOld(0);
    VirtualProtect(reintepret_cast<void*>(uiNumberAddr), sizeof(uiNumberAddr), PAGE_GUARD, &dwOld);
    AddVectoredExceptionHandler(1, handler);

    for (;;) {};

    getchar();

    return 0;
}

对我的想法有什么想法以及它为什么不起作用?

0 个答案:

没有答案