added UE_CH_DEBUGEVENT custom handler, removed UE_CH_ALLEVENTS (since it's not usable anyway)

This commit is contained in:
Mr. eXoDia 2014-04-22 19:32:58 +02:00
parent c6d15d788e
commit 3c8b51aa52
10 changed files with 28 additions and 23 deletions

View File

@ -136,10 +136,10 @@
#define UE_CH_UNLOADDLL 19 #define UE_CH_UNLOADDLL 19
#define UE_CH_OUTPUTDEBUGSTRING 20 #define UE_CH_OUTPUTDEBUGSTRING 20
#define UE_CH_AFTEREXCEPTIONPROCESSING 21 #define UE_CH_AFTEREXCEPTIONPROCESSING 21
#define UE_CH_ALLEVENTS 22
#define UE_CH_SYSTEMBREAKPOINT 23 #define UE_CH_SYSTEMBREAKPOINT 23
#define UE_CH_UNHANDLEDEXCEPTION 24 #define UE_CH_UNHANDLEDEXCEPTION 24
#define UE_CH_RIPEVENT 25 #define UE_CH_RIPEVENT 25
#define UE_CH_DEBUGEVENT 26
#define UE_OPTION_HANDLER_RETURN_HANDLECOUNT 1 #define UE_OPTION_HANDLER_RETURN_HANDLECOUNT 1
#define UE_OPTION_HANDLER_RETURN_ACCESS 2 #define UE_OPTION_HANDLER_RETURN_ACCESS 2

View File

@ -136,10 +136,10 @@ const BYTE UE_CH_LOADDLL = 18;
const BYTE UE_CH_UNLOADDLL = 19; const BYTE UE_CH_UNLOADDLL = 19;
const BYTE UE_CH_OUTPUTDEBUGSTRING = 20; const BYTE UE_CH_OUTPUTDEBUGSTRING = 20;
const BYTE UE_CH_AFTEREXCEPTIONPROCESSING = 21; const BYTE UE_CH_AFTEREXCEPTIONPROCESSING = 21;
const BYTE UE_CH_ALLEVENTS = 22;
const BYTE UE_CH_SYSTEMBREAKPOINT = 23; const BYTE UE_CH_SYSTEMBREAKPOINT = 23;
const BYTE UE_CH_UNHANDLEDEXCEPTION = 24; const BYTE UE_CH_UNHANDLEDEXCEPTION = 24;
const BYTE UE_CH_RIPEVENT = 25; 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_HANDLECOUNT = 1;
const BYTE UE_OPTION_HANDLER_RETURN_ACCESS = 2; const BYTE UE_OPTION_HANDLER_RETURN_ACCESS = 2;

View File

@ -186,10 +186,10 @@ enum eCustomException : DWORD
UE_CH_UNLOADDLL = UE::UE_CH_UNLOADDLL, UE_CH_UNLOADDLL = UE::UE_CH_UNLOADDLL,
UE_CH_OUTPUTDEBUGSTRING = UE::UE_CH_OUTPUTDEBUGSTRING, UE_CH_OUTPUTDEBUGSTRING = UE::UE_CH_OUTPUTDEBUGSTRING,
UE_CH_AFTEREXCEPTIONPROCESSING = UE::UE_CH_AFTEREXCEPTIONPROCESSING, UE_CH_AFTEREXCEPTIONPROCESSING = UE::UE_CH_AFTEREXCEPTIONPROCESSING,
UE_CH_ALLEVENTS = UE::UE_CH_ALLEVENTS,
UE_CH_SYSTEMBREAKPOINT = UE::UE_CH_SYSTEMBREAKPOINT, UE_CH_SYSTEMBREAKPOINT = UE::UE_CH_SYSTEMBREAKPOINT,
UE_CH_UNHANDLEDEXCEPTION = UE::UE_CH_UNHANDLEDEXCEPTION, 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 enum eHandlerReturnType : DWORD

View File

@ -259,10 +259,10 @@ const
UE_CH_UNLOADDLL = 19; UE_CH_UNLOADDLL = 19;
UE_CH_OUTPUTDEBUGSTRING = 20; UE_CH_OUTPUTDEBUGSTRING = 20;
UE_CH_AFTEREXCEPTIONPROCESSING = 21; UE_CH_AFTEREXCEPTIONPROCESSING = 21;
UE_CH_ALLEVENTS = 22;
UE_CH_SYSTEMBREAKPOINT = 23; UE_CH_SYSTEMBREAKPOINT = 23;
UE_CH_UNHANDLEDEXCEPTION = 24; UE_CH_UNHANDLEDEXCEPTION = 24;
UE_CH_RIPEVENT = 25 UE_CH_RIPEVENT = 25;
UE_CH_DEBUGEVENT = 26;
UE_FUNCTION_STDCALL = 1; UE_FUNCTION_STDCALL = 1;
UE_FUNCTION_CCALL = 2; UE_FUNCTION_CCALL = 2;

View File

@ -116,10 +116,10 @@ UE_CH_LOADDLL = 18
UE_CH_UNLOADDLL = 19 UE_CH_UNLOADDLL = 19
UE_CH_OUTPUTDEBUGSTRING = 20 UE_CH_OUTPUTDEBUGSTRING = 20
UE_CH_AFTEREXCEPTIONPROCESSING = 21 UE_CH_AFTEREXCEPTIONPROCESSING = 21
UE_CH_ALLEVENTS = 22
UE_CH_SYSTEMBREAKPOINT = 23 UE_CH_SYSTEMBREAKPOINT = 23
UE_CH_UNHANDLEDEXCEPTION = 24 UE_CH_UNHANDLEDEXCEPTION = 24
UE_CH_RIPEVENT = 25 UE_CH_RIPEVENT = 25
UE_CH_DEBUGEVENT = 26
UE_OPTION_HANDLER_RETURN_HANDLECOUNT = 1 UE_OPTION_HANDLER_RETURN_HANDLECOUNT = 1
UE_OPTION_HANDLER_RETURN_ACCESS = 2 UE_OPTION_HANDLER_RETURN_ACCESS = 2

View File

@ -94,10 +94,10 @@ UE_CH_LOADDLL EQU 18
UE_CH_UNLOADDLL EQU 19 UE_CH_UNLOADDLL EQU 19
UE_CH_OUTPUTDEBUGSTRING EQU 20 UE_CH_OUTPUTDEBUGSTRING EQU 20
UE_CH_AFTEREXCEPTIONPROCESSING EQU 21 UE_CH_AFTEREXCEPTIONPROCESSING EQU 21
UE_CH_ALLEVENTS EQU 22
UE_CH_SYSTEMBREAKPOINT EQU 23 UE_CH_SYSTEMBREAKPOINT EQU 23
UE_CH_UNHANDLEDEXCEPTION EQU 24 UE_CH_UNHANDLEDEXCEPTION EQU 24
UE_CH_RIPEVENT EQU 25 UE_CH_RIPEVENT EQU 25
UE_CH_DEBUGEVENT EQU 26
UE_OPTION_HANDLER_RETURN_HANDLECOUNT EQU 1 UE_OPTION_HANDLER_RETURN_HANDLECOUNT EQU 1
UE_OPTION_HANDLER_RETURN_ACCESS EQU 2 UE_OPTION_HANDLER_RETURN_ACCESS EQU 2

View File

@ -107,10 +107,10 @@ UE_CH_LOADDLL = 18
UE_CH_UNLOADDLL = 19 UE_CH_UNLOADDLL = 19
UE_CH_OUTPUTDEBUGSTRING = 20 UE_CH_OUTPUTDEBUGSTRING = 20
UE_CH_AFTEREXCEPTIONPROCESSING = 21 UE_CH_AFTEREXCEPTIONPROCESSING = 21
UE_CH_ALLEVENTS = 22
UE_CH_SYSTEMBREAKPOINT = 23 UE_CH_SYSTEMBREAKPOINT = 23
UE_CH_UNHANDLEDEXCEPTION = 24 UE_CH_UNHANDLEDEXCEPTION = 24
UE_CH_RIPEVENT = 25 UE_CH_RIPEVENT = 25
UE_CH_DEBUGEVENT = 26
UE_OPTION_HANDLER_RETURN_HANDLECOUNT = 1 UE_OPTION_HANDLER_RETURN_HANDLECOUNT = 1
UE_OPTION_HANDLER_RETURN_ACCESS = 2 UE_OPTION_HANDLER_RETURN_ACCESS = 2

View File

@ -42,7 +42,6 @@ __declspec(dllexport) ULONG_PTR TITCALL GetDebuggedFileBaseAddress()
__declspec(dllexport) void TITCALL SetCustomHandler(DWORD ExceptionId, LPVOID CallBack) __declspec(dllexport) void TITCALL SetCustomHandler(DWORD ExceptionId, LPVOID CallBack)
{ {
if(ExceptionId == UE_CH_BREAKPOINT) if(ExceptionId == UE_CH_BREAKPOINT)
{ {
DBGCustomHandler->chBreakPoint = (ULONG_PTR)CallBack; DBGCustomHandler->chBreakPoint = (ULONG_PTR)CallBack;
@ -139,18 +138,9 @@ __declspec(dllexport) void TITCALL SetCustomHandler(DWORD ExceptionId, LPVOID Ca
{ {
DBGCustomHandler->chRipEvent = (ULONG_PTR)CallBack; DBGCustomHandler->chRipEvent = (ULONG_PTR)CallBack;
} }
else if(ExceptionId == UE_CH_ALLEVENTS) else if(ExceptionId == UE_CH_DEBUGEVENT)
{ {
DBGCustomHandler->chEverythingElse = (ULONG_PTR)CallBack; DBGCustomHandler->chDebugEvent = (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;
} }
} }

View File

@ -84,6 +84,20 @@ __declspec(dllexport) void TITCALL DebugLoop()
ExtensionManagerPluginDebugCallBack(&DBGEvent, UE_PLUGIN_CALL_REASON_EXCEPTION); 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 //Debug event
switch(DBGEvent.dwDebugEventCode) switch(DBGEvent.dwDebugEventCode)
{ {
@ -1349,7 +1363,7 @@ __declspec(dllexport) void TITCALL DebugLoop()
} }
__except(EXCEPTION_EXECUTE_HANDLER) __except(EXCEPTION_EXECUTE_HANDLER)
{ {
DBGCustomHandler->chSystemBreakpoint = NULL; DBGCustomHandler->chRipEvent = NULL;
} }
} }
} }

View File

@ -212,6 +212,7 @@ typedef struct
ULONG_PTR chSystemBreakpoint; ULONG_PTR chSystemBreakpoint;
ULONG_PTR chUnhandledException; ULONG_PTR chUnhandledException;
ULONG_PTR chRipEvent; ULONG_PTR chRipEvent;
ULONG_PTR chDebugEvent;
} CustomHandler, *PCustomHandler; } CustomHandler, *PCustomHandler;
typedef struct typedef struct
@ -445,10 +446,10 @@ typedef struct HOOK_ENTRY
#define UE_CH_UNLOADDLL 19 #define UE_CH_UNLOADDLL 19
#define UE_CH_OUTPUTDEBUGSTRING 20 #define UE_CH_OUTPUTDEBUGSTRING 20
#define UE_CH_AFTEREXCEPTIONPROCESSING 21 #define UE_CH_AFTEREXCEPTIONPROCESSING 21
#define UE_CH_ALLEVENTS 22
#define UE_CH_SYSTEMBREAKPOINT 23 #define UE_CH_SYSTEMBREAKPOINT 23
#define UE_CH_UNHANDLEDEXCEPTION 24 #define UE_CH_UNHANDLEDEXCEPTION 24
#define UE_CH_RIPEVENT 25 #define UE_CH_RIPEVENT 25
#define UE_CH_DEBUGEVENT 26
#define UE_OPTION_HANDLER_RETURN_HANDLECOUNT 1 #define UE_OPTION_HANDLER_RETURN_HANDLECOUNT 1
#define UE_OPTION_HANDLER_RETURN_ACCESS 2 #define UE_OPTION_HANDLER_RETURN_ACCESS 2