SetUnhandledExceptionFilter x64?

时间:2013-08-31 09:00:35

标签: c++

我尝试使用SetUnhandledExceptionFilter来处理我的进程中的异常。

  1. SetUnhandledExceptionFilter设置为内存中的函数alloc(带有PAGE_EXECUTE_READWRITE的VirtualAlloc)。
  2. 其他内存崩溃的其他功能,我希望Windows在内存中调用我的异常句柄。
  3. 它在Win32中的工作属性,但是当我在Win64中构建它时崩溃但是没有使用SetUnhandledExceptionFilter设置调用函数

    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    LONG WINAPI OurSetUnhandledExceptionFilter(EXCEPTION_POINTERS * ExceptionInfo)
    {
        cout << "Gotcha!" << endl;
        Sleep(-1);
        return EXCEPTION_CONTINUE_EXECUTION;
    }
    
    void Exception()
    {
        SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)OurSetUnhandledExceptionFilter);
        MessageBox(0, TEXT("Exception"), 0, 0);
    }
    
    typedef void (*fException)(void);
    
    DWORD WINAPI xf(LPVOID x)
    {
        fException a = (fException)x;
        a();//Call fException
    
        //Crash
        char *p = 0;
        p[1] = 0;//<-
    
        return 0;
    }
    
    int main()
    {
        LPVOID nef = VirtualAlloc(0, (INT64)main - (INT64)xf, MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE);
        memcpy(nef, xf, (INT64)main - (INT64)xf);
        CreateThread(0, 0, (LPTHREAD_START_ROUTINE)nef, Exception, 0, 0);
        Sleep(-1);
        return 0;
    }
    

0 个答案:

没有答案