- added a debug callback reason for plugins -> UE_PLUGIN_CALL_REASON_UNHANDLEDEXCEPTION

- now plugins are actually registered
- fixed OUTPUT_DEBUG_STRING_EVENT (DBGCode should be set before the callback, so plugins & custom handlers can change it)
This commit is contained in:
Mr. eXoDia 2014-03-11 16:14:49 +01:00
parent 8adda5ee1e
commit 3675215bf3
6 changed files with 22 additions and 6 deletions

View File

@ -23,6 +23,7 @@
#define UE_PLUGIN_CALL_REASON_PREDEBUG 1
#define UE_PLUGIN_CALL_REASON_EXCEPTION 2
#define UE_PLUGIN_CALL_REASON_POSTDEBUG 3
#define UE_PLUGIN_CALL_REASON_UNHANDLEDEXCEPTION 4
#define TEE_HOOK_NRM_JUMP 1
#define TEE_HOOK_NRM_CALL 3

View File

@ -23,6 +23,7 @@ const BYTE UE_HIDE_BASIC = 1;
const BYTE UE_PLUGIN_CALL_REASON_PREDEBUG = 1;
const BYTE UE_PLUGIN_CALL_REASON_EXCEPTION = 2;
const BYTE UE_PLUGIN_CALL_REASON_POSTDEBUG = 3;
const BYTE UE_PLUGIN_CALL_REASON_UNHANDLEDEXCEPTION = 4;
const BYTE TEE_HOOK_NRM_JUMP = 1;
const BYTE TEE_HOOK_NRM_CALL = 3;

View File

@ -33,7 +33,8 @@ enum ePluginCallReason : int
{
UE_PLUGIN_CALL_REASON_PREDEBUG = UE::UE_PLUGIN_CALL_REASON_PREDEBUG,
UE_PLUGIN_CALL_REASON_EXCEPTION = UE::UE_PLUGIN_CALL_REASON_EXCEPTION,
UE_PLUGIN_CALL_REASON_POSTDEBUG = UE::UE_PLUGIN_CALL_REASON_POSTDEBUG
UE_PLUGIN_CALL_REASON_POSTDEBUG = UE::UE_PLUGIN_CALL_REASON_POSTDEBUG,
UE_PLUGIN_CALL_REASON_UNHANDLEDEXCEPTION = UE::UE_PLUGIN_CALL_REASON_UNHANDLEDEXCEPTION
};
enum eHookType : int

View File

@ -96,7 +96,7 @@ void EngineInitPlugins(wchar_t* szEngineFolder)
myPluginInfo.TitanReleasePlugin = (fPluginReleaseExec)GetProcAddress(myPluginInfo.PluginBaseAddress, "TitanReleasePlugin");
myPluginInfo.TitanRegisterPlugin = (fPluginRegister)GetProcAddress(myPluginInfo.PluginBaseAddress, "TitanRegisterPlugin");
myPluginInfo.TitanDebuggingCallBack = (fPluginDebugExec)GetProcAddress(myPluginInfo.PluginBaseAddress, "TitanDebuggingCallBack");
myPluginRegister = (fPluginRegister)myPluginInfo.TitanRegisterPlugin;
myPluginRegister = myPluginInfo.TitanRegisterPlugin;
if(myPluginRegister != NULL)
{
__try
@ -113,7 +113,7 @@ void EngineInitPlugins(wchar_t* szEngineFolder)
NameHasBeenRegistered = true;
}
}
if(NameHasBeenRegistered)
if(!NameHasBeenRegistered)
{
Plugin.push_back(myPluginInfo);
}

View File

@ -427,6 +427,12 @@ __declspec(dllexport) void TITCALL DebugLoop()
case OUTPUT_DEBUG_STRING_EVENT:
{
//http://maximumcrack.wordpress.com/2009/06/22/outputdebugstring-awesomeness/ (the final advice is incorrect, but still helpful)
DBGCode = DBG_EXCEPTION_NOT_HANDLED; //pass exception to debuggee
if(engineExecutePluginCallBack)
{
ExtensionManagerPluginDebugCallBack(&DBGEvent, UE_PLUGIN_CALL_REASON_UNHANDLEDEXCEPTION);
}
//debug string callback
if(DBGCustomHandler->chOutputDebugString != NULL)
{
@ -440,8 +446,6 @@ __declspec(dllexport) void TITCALL DebugLoop()
DBGCustomHandler->chOutputDebugString = NULL;
}
}
//http://maximumcrack.wordpress.com/2009/06/22/outputdebugstring-awesomeness/ (the final advice is incorrect, but still helpful)
DBGCode = DBG_EXCEPTION_NOT_HANDLED; //pass exception to debuggee
}
break;
@ -1289,6 +1293,10 @@ __declspec(dllexport) void TITCALL DebugLoop()
//general unhandled exception callback
if(DBGCode==DBG_EXCEPTION_NOT_HANDLED)
{
if(engineExecutePluginCallBack)
{
ExtensionManagerPluginDebugCallBack(&DBGEvent, UE_PLUGIN_CALL_REASON_UNHANDLEDEXCEPTION);
}
if(DBGCustomHandler->chUnhandledException != NULL)
{
myCustomHandler = (fCustomHandler)((LPVOID)DBGCustomHandler->chUnhandledException);
@ -1322,7 +1330,11 @@ __declspec(dllexport) void TITCALL DebugLoop()
case RIP_EVENT:
{
DBGCode = DBG_EXCEPTION_NOT_HANDLED; //fix an anti-debug trick
//system breakpoint callback
if(engineExecutePluginCallBack)
{
ExtensionManagerPluginDebugCallBack(&DBGEvent, UE_PLUGIN_CALL_REASON_UNHANDLEDEXCEPTION);
}
//rip event callback
if(DBGCustomHandler->chRipEvent != NULL)
{
myCustomHandler = (fCustomHandler)((LPVOID)DBGCustomHandler->chRipEvent);

View File

@ -309,6 +309,7 @@ typedef struct HOOK_ENTRY
#define UE_PLUGIN_CALL_REASON_PREDEBUG 1
#define UE_PLUGIN_CALL_REASON_EXCEPTION 2
#define UE_PLUGIN_CALL_REASON_POSTDEBUG 3
#define UE_PLUGIN_CALL_REASON_UNHANDLEDEXCEPTION 4
#define UE_ENGINE_ALOW_MODULE_LOADING 1
#define UE_ENGINE_AUTOFIX_FORWARDERS 2