我尝试使用SetUnhandledExceptionFilter来处理我的进程中的异常。
它在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;
}