mirror of https://github.com/x64dbg/TitanEngine
- 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:
parent
8adda5ee1e
commit
3675215bf3
|
|
@ -23,6 +23,7 @@
|
||||||
#define UE_PLUGIN_CALL_REASON_PREDEBUG 1
|
#define UE_PLUGIN_CALL_REASON_PREDEBUG 1
|
||||||
#define UE_PLUGIN_CALL_REASON_EXCEPTION 2
|
#define UE_PLUGIN_CALL_REASON_EXCEPTION 2
|
||||||
#define UE_PLUGIN_CALL_REASON_POSTDEBUG 3
|
#define UE_PLUGIN_CALL_REASON_POSTDEBUG 3
|
||||||
|
#define UE_PLUGIN_CALL_REASON_UNHANDLEDEXCEPTION 4
|
||||||
|
|
||||||
#define TEE_HOOK_NRM_JUMP 1
|
#define TEE_HOOK_NRM_JUMP 1
|
||||||
#define TEE_HOOK_NRM_CALL 3
|
#define TEE_HOOK_NRM_CALL 3
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ const BYTE UE_HIDE_BASIC = 1;
|
||||||
const BYTE UE_PLUGIN_CALL_REASON_PREDEBUG = 1;
|
const BYTE UE_PLUGIN_CALL_REASON_PREDEBUG = 1;
|
||||||
const BYTE UE_PLUGIN_CALL_REASON_EXCEPTION = 2;
|
const BYTE UE_PLUGIN_CALL_REASON_EXCEPTION = 2;
|
||||||
const BYTE UE_PLUGIN_CALL_REASON_POSTDEBUG = 3;
|
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_JUMP = 1;
|
||||||
const BYTE TEE_HOOK_NRM_CALL = 3;
|
const BYTE TEE_HOOK_NRM_CALL = 3;
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,8 @@ enum ePluginCallReason : int
|
||||||
{
|
{
|
||||||
UE_PLUGIN_CALL_REASON_PREDEBUG = UE::UE_PLUGIN_CALL_REASON_PREDEBUG,
|
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_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
|
enum eHookType : int
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@ void EngineInitPlugins(wchar_t* szEngineFolder)
|
||||||
myPluginInfo.TitanReleasePlugin = (fPluginReleaseExec)GetProcAddress(myPluginInfo.PluginBaseAddress, "TitanReleasePlugin");
|
myPluginInfo.TitanReleasePlugin = (fPluginReleaseExec)GetProcAddress(myPluginInfo.PluginBaseAddress, "TitanReleasePlugin");
|
||||||
myPluginInfo.TitanRegisterPlugin = (fPluginRegister)GetProcAddress(myPluginInfo.PluginBaseAddress, "TitanRegisterPlugin");
|
myPluginInfo.TitanRegisterPlugin = (fPluginRegister)GetProcAddress(myPluginInfo.PluginBaseAddress, "TitanRegisterPlugin");
|
||||||
myPluginInfo.TitanDebuggingCallBack = (fPluginDebugExec)GetProcAddress(myPluginInfo.PluginBaseAddress, "TitanDebuggingCallBack");
|
myPluginInfo.TitanDebuggingCallBack = (fPluginDebugExec)GetProcAddress(myPluginInfo.PluginBaseAddress, "TitanDebuggingCallBack");
|
||||||
myPluginRegister = (fPluginRegister)myPluginInfo.TitanRegisterPlugin;
|
myPluginRegister = myPluginInfo.TitanRegisterPlugin;
|
||||||
if(myPluginRegister != NULL)
|
if(myPluginRegister != NULL)
|
||||||
{
|
{
|
||||||
__try
|
__try
|
||||||
|
|
@ -113,7 +113,7 @@ void EngineInitPlugins(wchar_t* szEngineFolder)
|
||||||
NameHasBeenRegistered = true;
|
NameHasBeenRegistered = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(NameHasBeenRegistered)
|
if(!NameHasBeenRegistered)
|
||||||
{
|
{
|
||||||
Plugin.push_back(myPluginInfo);
|
Plugin.push_back(myPluginInfo);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -427,6 +427,12 @@ __declspec(dllexport) void TITCALL DebugLoop()
|
||||||
|
|
||||||
case OUTPUT_DEBUG_STRING_EVENT:
|
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
|
//debug string callback
|
||||||
if(DBGCustomHandler->chOutputDebugString != NULL)
|
if(DBGCustomHandler->chOutputDebugString != NULL)
|
||||||
{
|
{
|
||||||
|
|
@ -440,8 +446,6 @@ __declspec(dllexport) void TITCALL DebugLoop()
|
||||||
DBGCustomHandler->chOutputDebugString = NULL;
|
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;
|
break;
|
||||||
|
|
||||||
|
|
@ -1289,6 +1293,10 @@ __declspec(dllexport) void TITCALL DebugLoop()
|
||||||
//general unhandled exception callback
|
//general unhandled exception callback
|
||||||
if(DBGCode==DBG_EXCEPTION_NOT_HANDLED)
|
if(DBGCode==DBG_EXCEPTION_NOT_HANDLED)
|
||||||
{
|
{
|
||||||
|
if(engineExecutePluginCallBack)
|
||||||
|
{
|
||||||
|
ExtensionManagerPluginDebugCallBack(&DBGEvent, UE_PLUGIN_CALL_REASON_UNHANDLEDEXCEPTION);
|
||||||
|
}
|
||||||
if(DBGCustomHandler->chUnhandledException != NULL)
|
if(DBGCustomHandler->chUnhandledException != NULL)
|
||||||
{
|
{
|
||||||
myCustomHandler = (fCustomHandler)((LPVOID)DBGCustomHandler->chUnhandledException);
|
myCustomHandler = (fCustomHandler)((LPVOID)DBGCustomHandler->chUnhandledException);
|
||||||
|
|
@ -1322,7 +1330,11 @@ __declspec(dllexport) void TITCALL DebugLoop()
|
||||||
case RIP_EVENT:
|
case RIP_EVENT:
|
||||||
{
|
{
|
||||||
DBGCode = DBG_EXCEPTION_NOT_HANDLED; //fix an anti-debug trick
|
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)
|
if(DBGCustomHandler->chRipEvent != NULL)
|
||||||
{
|
{
|
||||||
myCustomHandler = (fCustomHandler)((LPVOID)DBGCustomHandler->chRipEvent);
|
myCustomHandler = (fCustomHandler)((LPVOID)DBGCustomHandler->chRipEvent);
|
||||||
|
|
|
||||||
|
|
@ -309,6 +309,7 @@ typedef struct HOOK_ENTRY
|
||||||
#define UE_PLUGIN_CALL_REASON_PREDEBUG 1
|
#define UE_PLUGIN_CALL_REASON_PREDEBUG 1
|
||||||
#define UE_PLUGIN_CALL_REASON_EXCEPTION 2
|
#define UE_PLUGIN_CALL_REASON_EXCEPTION 2
|
||||||
#define UE_PLUGIN_CALL_REASON_POSTDEBUG 3
|
#define UE_PLUGIN_CALL_REASON_POSTDEBUG 3
|
||||||
|
#define UE_PLUGIN_CALL_REASON_UNHANDLEDEXCEPTION 4
|
||||||
|
|
||||||
#define UE_ENGINE_ALOW_MODULE_LOADING 1
|
#define UE_ENGINE_ALOW_MODULE_LOADING 1
|
||||||
#define UE_ENGINE_AUTOFIX_FORWARDERS 2
|
#define UE_ENGINE_AUTOFIX_FORWARDERS 2
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue