45 HMODULE hKernel32 = LoadLibrary(_T(
"kernel32.dll"));
46 if (hKernel32 == NULL)
48 void *pOrgEntry = GetProcAddress(hKernel32,
"SetUnhandledExceptionFilter");
52 DWORD dwOldProtect = 0;
57 BOOL bProt = VirtualProtect(pOrgEntry, jmpSize, PAGE_EXECUTE_READWRITE, &dwOldProtect);
61 DWORD dwOrgEntryAddr = (DWORD) pOrgEntry;
62 dwOrgEntryAddr += jmpSize;
63 DWORD dwNewEntryAddr = (DWORD) pNewFunc;
64 DWORD dwRelativeAddr = dwNewEntryAddr - dwOrgEntryAddr;
67 memcpy(&newJump[1], &dwRelativeAddr,
sizeof(pNewFunc));
71 memcpy(&newJump[2], &pNewFunc,
sizeof(pNewFunc));
78 BOOL bRet = WriteProcessMemory(GetCurrentProcess(), pOrgEntry, newJump, jmpSize, &bytesWritten);
83 VirtualProtect(pOrgEntry, jmpSize, dwOldProtect, &dwBuf);
93 if (pExPtrs->ExceptionRecord->ExceptionCode == EXCEPTION_STACK_OVERFLOW)
95 static char MyStack[1024*128];
100 __asm mov eax,offset MyStack[1024*128];
107 twindow->SetTitle(wxT(
"Simulator Crash Report"));
117 "*** Unhandled Exception\n"
118 " ExpCode: 0x%8.8X\n"
120 " ExpAddress: 0x%8.8X\n\n",
121 pExPtrs->ExceptionRecord->ExceptionCode,
122 pExPtrs->ExceptionRecord->ExceptionFlags,
123 pExPtrs->ExceptionRecord->ExceptionAddress);
128 sw.
ShowCallstack(GetCurrentThread(), pExPtrs->ContextRecord);
132 twindow->
tMain->WriteText(wxT(
"\nSimulator State Dump\n--------------------------\n"));
151 twindow->
tMain->WriteText(wxT(
"\n--------------------------\n"));
152 twindow->
tMain->WriteText(wxString(
"Copy and paste the above information (select it and press CTRL-C)\nand either post it to the Skyscraper forum at http://forum.skyscrapersim.net\nor email to ryan@skyscrapersim.net\n\nPress OK to close Skyscraper\n"));
161 return EXCEPTION_CONTINUE_SEARCH;
ScriptProcessor * GetScriptProcessor()