From 3c8b51aa5214a023b92ee80b99951b3c2cae6732 Mon Sep 17 00:00:00 2001 From: "Mr. eXoDia" Date: Tue, 22 Apr 2014 19:32:58 +0200 Subject: [PATCH] added UE_CH_DEBUGEVENT custom handler, removed UE_CH_ALLEVENTS (since it's not usable anyway) --- SDK/C/TitanEngine.h | 2 +- SDK/CPP/TitanEngine.h | 2 +- SDK/CPP/TitanEngine.hpp | 4 ++-- SDK/Delphi/TitanEngine.pas | 4 ++-- SDK/LUA/TitanEngine.lua | 2 +- SDK/MASM/TitanEngine.INC | 2 +- SDK/Python/TitanEngine.py | 2 +- TitanEngine/TitanEngine.Debugger.Data.cpp | 14 ++------------ TitanEngine/TitanEngine.Debugger.DebugLoop.cpp | 16 +++++++++++++++- TitanEngine/stdafx.h | 3 ++- 10 files changed, 28 insertions(+), 23 deletions(-) diff --git a/SDK/C/TitanEngine.h b/SDK/C/TitanEngine.h index 02ef563..81c5428 100644 --- a/SDK/C/TitanEngine.h +++ b/SDK/C/TitanEngine.h @@ -136,10 +136,10 @@ #define UE_CH_UNLOADDLL 19 #define UE_CH_OUTPUTDEBUGSTRING 20 #define UE_CH_AFTEREXCEPTIONPROCESSING 21 -#define UE_CH_ALLEVENTS 22 #define UE_CH_SYSTEMBREAKPOINT 23 #define UE_CH_UNHANDLEDEXCEPTION 24 #define UE_CH_RIPEVENT 25 +#define UE_CH_DEBUGEVENT 26 #define UE_OPTION_HANDLER_RETURN_HANDLECOUNT 1 #define UE_OPTION_HANDLER_RETURN_ACCESS 2 diff --git a/SDK/CPP/TitanEngine.h b/SDK/CPP/TitanEngine.h index 7c5ca9b..920838c 100644 --- a/SDK/CPP/TitanEngine.h +++ b/SDK/CPP/TitanEngine.h @@ -136,10 +136,10 @@ const BYTE UE_CH_LOADDLL = 18; const BYTE UE_CH_UNLOADDLL = 19; const BYTE UE_CH_OUTPUTDEBUGSTRING = 20; const BYTE UE_CH_AFTEREXCEPTIONPROCESSING = 21; -const BYTE UE_CH_ALLEVENTS = 22; const BYTE UE_CH_SYSTEMBREAKPOINT = 23; const BYTE UE_CH_UNHANDLEDEXCEPTION = 24; const BYTE UE_CH_RIPEVENT = 25; +const BYTE UE_CH_DEBUGEVENT = 26; const BYTE UE_OPTION_HANDLER_RETURN_HANDLECOUNT = 1; const BYTE UE_OPTION_HANDLER_RETURN_ACCESS = 2; diff --git a/SDK/CPP/TitanEngine.hpp b/SDK/CPP/TitanEngine.hpp index 1b52f9a..8658694 100644 --- a/SDK/CPP/TitanEngine.hpp +++ b/SDK/CPP/TitanEngine.hpp @@ -186,10 +186,10 @@ enum eCustomException : DWORD UE_CH_UNLOADDLL = UE::UE_CH_UNLOADDLL, UE_CH_OUTPUTDEBUGSTRING = UE::UE_CH_OUTPUTDEBUGSTRING, UE_CH_AFTEREXCEPTIONPROCESSING = UE::UE_CH_AFTEREXCEPTIONPROCESSING, - UE_CH_ALLEVENTS = UE::UE_CH_ALLEVENTS, UE_CH_SYSTEMBREAKPOINT = UE::UE_CH_SYSTEMBREAKPOINT, UE_CH_UNHANDLEDEXCEPTION = UE::UE_CH_UNHANDLEDEXCEPTION, - UE_CH_RIPEVENT = UE::UE_CH_RIPEVENT + UE_CH_RIPEVENT = UE::UE_CH_RIPEVENT, + UE_CH_DEBUGEVENT = UE::UE_CH_DEBUGEVENT }; enum eHandlerReturnType : DWORD diff --git a/SDK/Delphi/TitanEngine.pas b/SDK/Delphi/TitanEngine.pas index 2455a56..736d162 100644 --- a/SDK/Delphi/TitanEngine.pas +++ b/SDK/Delphi/TitanEngine.pas @@ -259,10 +259,10 @@ const UE_CH_UNLOADDLL = 19; UE_CH_OUTPUTDEBUGSTRING = 20; UE_CH_AFTEREXCEPTIONPROCESSING = 21; - UE_CH_ALLEVENTS = 22; UE_CH_SYSTEMBREAKPOINT = 23; UE_CH_UNHANDLEDEXCEPTION = 24; - UE_CH_RIPEVENT = 25 + UE_CH_RIPEVENT = 25; + UE_CH_DEBUGEVENT = 26; UE_FUNCTION_STDCALL = 1; UE_FUNCTION_CCALL = 2; diff --git a/SDK/LUA/TitanEngine.lua b/SDK/LUA/TitanEngine.lua index 95dfda1..4850609 100644 --- a/SDK/LUA/TitanEngine.lua +++ b/SDK/LUA/TitanEngine.lua @@ -116,10 +116,10 @@ UE_CH_LOADDLL = 18 UE_CH_UNLOADDLL = 19 UE_CH_OUTPUTDEBUGSTRING = 20 UE_CH_AFTEREXCEPTIONPROCESSING = 21 -UE_CH_ALLEVENTS = 22 UE_CH_SYSTEMBREAKPOINT = 23 UE_CH_UNHANDLEDEXCEPTION = 24 UE_CH_RIPEVENT = 25 +UE_CH_DEBUGEVENT = 26 UE_OPTION_HANDLER_RETURN_HANDLECOUNT = 1 UE_OPTION_HANDLER_RETURN_ACCESS = 2 diff --git a/SDK/MASM/TitanEngine.INC b/SDK/MASM/TitanEngine.INC index c30e458..c624514 100644 --- a/SDK/MASM/TitanEngine.INC +++ b/SDK/MASM/TitanEngine.INC @@ -94,10 +94,10 @@ UE_CH_LOADDLL EQU 18 UE_CH_UNLOADDLL EQU 19 UE_CH_OUTPUTDEBUGSTRING EQU 20 UE_CH_AFTEREXCEPTIONPROCESSING EQU 21 -UE_CH_ALLEVENTS EQU 22 UE_CH_SYSTEMBREAKPOINT EQU 23 UE_CH_UNHANDLEDEXCEPTION EQU 24 UE_CH_RIPEVENT EQU 25 +UE_CH_DEBUGEVENT EQU 26 UE_OPTION_HANDLER_RETURN_HANDLECOUNT EQU 1 UE_OPTION_HANDLER_RETURN_ACCESS EQU 2 diff --git a/SDK/Python/TitanEngine.py b/SDK/Python/TitanEngine.py index 25ae8d3..7c1a744 100644 --- a/SDK/Python/TitanEngine.py +++ b/SDK/Python/TitanEngine.py @@ -107,10 +107,10 @@ UE_CH_LOADDLL = 18 UE_CH_UNLOADDLL = 19 UE_CH_OUTPUTDEBUGSTRING = 20 UE_CH_AFTEREXCEPTIONPROCESSING = 21 -UE_CH_ALLEVENTS = 22 UE_CH_SYSTEMBREAKPOINT = 23 UE_CH_UNHANDLEDEXCEPTION = 24 UE_CH_RIPEVENT = 25 +UE_CH_DEBUGEVENT = 26 UE_OPTION_HANDLER_RETURN_HANDLECOUNT = 1 UE_OPTION_HANDLER_RETURN_ACCESS = 2 diff --git a/TitanEngine/TitanEngine.Debugger.Data.cpp b/TitanEngine/TitanEngine.Debugger.Data.cpp index be64b6d..cd719cb 100644 --- a/TitanEngine/TitanEngine.Debugger.Data.cpp +++ b/TitanEngine/TitanEngine.Debugger.Data.cpp @@ -42,7 +42,6 @@ __declspec(dllexport) ULONG_PTR TITCALL GetDebuggedFileBaseAddress() __declspec(dllexport) void TITCALL SetCustomHandler(DWORD ExceptionId, LPVOID CallBack) { - if(ExceptionId == UE_CH_BREAKPOINT) { DBGCustomHandler->chBreakPoint = (ULONG_PTR)CallBack; @@ -139,18 +138,9 @@ __declspec(dllexport) void TITCALL SetCustomHandler(DWORD ExceptionId, LPVOID Ca { DBGCustomHandler->chRipEvent = (ULONG_PTR)CallBack; } - else if(ExceptionId == UE_CH_ALLEVENTS) + else if(ExceptionId == UE_CH_DEBUGEVENT) { - DBGCustomHandler->chEverythingElse = (ULONG_PTR)CallBack; - DBGCustomHandler->chCreateThread = (ULONG_PTR)CallBack; - DBGCustomHandler->chExitThread = (ULONG_PTR)CallBack; - DBGCustomHandler->chCreateProcess = (ULONG_PTR)CallBack; - DBGCustomHandler->chExitProcess = (ULONG_PTR)CallBack; - DBGCustomHandler->chLoadDll = (ULONG_PTR)CallBack; - DBGCustomHandler->chUnloadDll = (ULONG_PTR)CallBack; - DBGCustomHandler->chOutputDebugString = (ULONG_PTR)CallBack; - DBGCustomHandler->chSystemBreakpoint = (ULONG_PTR)CallBack; - DBGCustomHandler->chRipEvent = (ULONG_PTR)CallBack; + DBGCustomHandler->chDebugEvent = (ULONG_PTR)CallBack; } } diff --git a/TitanEngine/TitanEngine.Debugger.DebugLoop.cpp b/TitanEngine/TitanEngine.Debugger.DebugLoop.cpp index 8961cb6..58c5bd4 100644 --- a/TitanEngine/TitanEngine.Debugger.DebugLoop.cpp +++ b/TitanEngine/TitanEngine.Debugger.DebugLoop.cpp @@ -84,6 +84,20 @@ __declspec(dllexport) void TITCALL DebugLoop() ExtensionManagerPluginDebugCallBack(&DBGEvent, UE_PLUGIN_CALL_REASON_EXCEPTION); } + //Debug event custom handler + if(DBGCustomHandler->chDebugEvent != NULL) + { + myCustomHandler = (fCustomHandler)((LPVOID)DBGCustomHandler->chDebugEvent); + __try + { + myCustomHandler(&DBGEvent); + } + __except(EXCEPTION_EXECUTE_HANDLER) + { + DBGCustomHandler->chDebugEvent = NULL; + } + } + //Debug event switch(DBGEvent.dwDebugEventCode) { @@ -1349,7 +1363,7 @@ __declspec(dllexport) void TITCALL DebugLoop() } __except(EXCEPTION_EXECUTE_HANDLER) { - DBGCustomHandler->chSystemBreakpoint = NULL; + DBGCustomHandler->chRipEvent = NULL; } } } diff --git a/TitanEngine/stdafx.h b/TitanEngine/stdafx.h index e8f9a1f..d652225 100644 --- a/TitanEngine/stdafx.h +++ b/TitanEngine/stdafx.h @@ -212,6 +212,7 @@ typedef struct ULONG_PTR chSystemBreakpoint; ULONG_PTR chUnhandledException; ULONG_PTR chRipEvent; + ULONG_PTR chDebugEvent; } CustomHandler, *PCustomHandler; typedef struct @@ -445,10 +446,10 @@ typedef struct HOOK_ENTRY #define UE_CH_UNLOADDLL 19 #define UE_CH_OUTPUTDEBUGSTRING 20 #define UE_CH_AFTEREXCEPTIONPROCESSING 21 -#define UE_CH_ALLEVENTS 22 #define UE_CH_SYSTEMBREAKPOINT 23 #define UE_CH_UNHANDLEDEXCEPTION 24 #define UE_CH_RIPEVENT 25 +#define UE_CH_DEBUGEVENT 26 #define UE_OPTION_HANDLER_RETURN_HANDLECOUNT 1 #define UE_OPTION_HANDLER_RETURN_ACCESS 2