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_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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue