diff --git a/hyperdbg/hprdbgctrl/breakcontrol.cpp b/hyperdbg/hprdbgctrl/break-control.cpp similarity index 87% rename from hyperdbg/hprdbgctrl/breakcontrol.cpp rename to hyperdbg/hprdbgctrl/break-control.cpp index a24486c4..5aa26fb2 100644 --- a/hyperdbg/hprdbgctrl/breakcontrol.cpp +++ b/hyperdbg/hprdbgctrl/break-control.cpp @@ -21,6 +21,7 @@ extern BOOLEAN g_IsConnectedToRemoteDebuggee; extern BOOLEAN g_IsConnectedToRemoteDebugger; extern BOOLEAN g_IsSerialConnectedToRemoteDebuggee; extern BOOLEAN g_IsSerialConnectedToRemoteDebugger; +extern BOOLEAN g_IsExecutingSymbolLoadingRoutines; /** * @brief handle CTRL+C and CTRL+Break events @@ -50,6 +51,22 @@ BreakController(DWORD CtrlType) return TRUE; } + // + // Check for aborting symbol loading routines + // + if (g_IsExecutingSymbolLoadingRoutines) + { + // + // Avoid to calling it again + // + g_IsExecutingSymbolLoadingRoutines = FALSE; + + // + // Abort the execution + // + ScriptEngineSymbolAbortLoadingWrapper(); + } + // // Check if the debuggee is running because of pausing or not // @@ -60,7 +77,7 @@ BreakController(DWORD CtrlType) else if (!g_IsDebuggerModulesLoaded) { // - // vmm module is not loaded here, just ignore + // vmm module is not loaded here // } else diff --git a/hyperdbg/hprdbgctrl/debugger.h b/hyperdbg/hprdbgctrl/debugger.h index 43035f86..b271440d 100644 --- a/hyperdbg/hprdbgctrl/debugger.h +++ b/hyperdbg/hprdbgctrl/debugger.h @@ -44,6 +44,9 @@ ScriptEngineSymbolInitLoadWrapper(PMODULE_SYMBOL_DETAIL BufferToStoreDetails, const char * SymbolPath, BOOLEAN IsSilentLoad); +VOID +ScriptEngineSymbolAbortLoadingWrapper(); + ////////////////////////////////////////////////// // Script Engine Wrapper // ////////////////////////////////////////////////// diff --git a/hyperdbg/hprdbgctrl/globals.h b/hyperdbg/hprdbgctrl/globals.h index 9a9a0140..22e9299a 100644 --- a/hyperdbg/hprdbgctrl/globals.h +++ b/hyperdbg/hprdbgctrl/globals.h @@ -253,7 +253,7 @@ BOOLEAN g_ShouldPreviousCommandBeContinued; * @brief List of command and attributes * */ -CommandType g_CommandList; +CommandType g_CommandsList; /** * @brief Holder of global variables for script engine @@ -393,6 +393,13 @@ BOOLEAN g_ExecutingScript = FALSE; */ BOOLEAN g_BreakPrintingOutput = FALSE; +/** + * @brief Executing symbol reloading or downloading + * routines + * + */ +BOOLEAN g_IsExecutingSymbolLoadingRoutines = FALSE; + /** * @brief Shows whether the user executed and mesaured '!measure' * command or not, it is because we want to use these measurements diff --git a/hyperdbg/hprdbgctrl/hprdbgctrl.vcxproj b/hyperdbg/hprdbgctrl/hprdbgctrl.vcxproj index cdb5462d..5db403b1 100644 --- a/hyperdbg/hprdbgctrl/hprdbgctrl.vcxproj +++ b/hyperdbg/hprdbgctrl/hprdbgctrl.vcxproj @@ -131,7 +131,7 @@ - + @@ -181,7 +181,7 @@ - + diff --git a/hyperdbg/hprdbgctrl/hprdbgctrl.vcxproj.filters b/hyperdbg/hprdbgctrl/hprdbgctrl.vcxproj.filters index ee82af57..ef80686c 100644 --- a/hyperdbg/hprdbgctrl/hprdbgctrl.vcxproj.filters +++ b/hyperdbg/hprdbgctrl/hprdbgctrl.vcxproj.filters @@ -248,9 +248,6 @@ Resource Files\Source Files\Debugger\Commands\Debugging Commands - - Resource Files\Source Files\Debugger\Essentials - Resource Files\Source Files\Debugger\Commands\Debugging Commands @@ -293,9 +290,6 @@ Resource Files\Source Files\Debugger\Commands\Meta Commands - - Resource Files\Source Files\Debugger\Communication - Resource Files\Source Files\Debugger\Commands\Meta Commands @@ -386,6 +380,12 @@ Resource Files\Source Files\Debugger\Commands\Debugging Commands + + Resource Files\Source Files\Debugger\Essentials + + + Resource Files\Source Files\Debugger\Communication + diff --git a/hyperdbg/hprdbgctrl/interpreter.cpp b/hyperdbg/hprdbgctrl/interpreter.cpp index 9b0f0f39..d99a253f 100644 --- a/hyperdbg/hprdbgctrl/interpreter.cpp +++ b/hyperdbg/hprdbgctrl/interpreter.cpp @@ -17,7 +17,7 @@ using namespace std; // Global Variables // extern DEBUGGING_STATE g_DebuggingState; -extern CommandType g_CommandList; +extern CommandType g_CommandsList; extern BOOLEAN g_ShouldPreviousCommandBeContinued; extern BOOLEAN g_IsCommandListInitialized; @@ -191,9 +191,9 @@ HyperdbgInterpreter(const char * Command) // // Start parsing commands // - Iterator = g_CommandList.find(FirstCommand); + Iterator = g_CommandsList.find(FirstCommand); - if (Iterator == g_CommandList.end()) + if (Iterator == g_CommandsList.end()) { // // Command doesn't exist @@ -318,9 +318,9 @@ GetCommandAttributes(string FirstCommand) // and instead should be handled in the current debugger // - Iterator = g_CommandList.find(FirstCommand); + Iterator = g_CommandsList.find(FirstCommand); - if (Iterator == g_CommandList.end()) + if (Iterator == g_CommandsList.end()) { // // Command doesn't exist, if it's not exists then it's better to handle @@ -344,211 +344,211 @@ GetCommandAttributes(string FirstCommand) VOID InitializeCommandsDictionary() { - g_CommandList[".help"] = {NULL, &CommandHelpHelp, DEBUGGER_COMMAND_HELP_ATTRIBUTES}; - g_CommandList[".hh"] = {NULL, &CommandHelpHelp, DEBUGGER_COMMAND_HELP_ATTRIBUTES}; - g_CommandList["help"] = {NULL, &CommandHelpHelp, DEBUGGER_COMMAND_HELP_ATTRIBUTES}; + g_CommandsList[".help"] = {NULL, &CommandHelpHelp, DEBUGGER_COMMAND_HELP_ATTRIBUTES}; + g_CommandsList[".hh"] = {NULL, &CommandHelpHelp, DEBUGGER_COMMAND_HELP_ATTRIBUTES}; + g_CommandsList["help"] = {NULL, &CommandHelpHelp, DEBUGGER_COMMAND_HELP_ATTRIBUTES}; - g_CommandList["clear"] = {&CommandClearScreen, &CommandClearScreenHelp, DEBUGGER_COMMAND_CLEAR_ATTRIBUTES}; - g_CommandList[".cls"] = {&CommandClearScreen, &CommandClearScreenHelp, DEBUGGER_COMMAND_CLEAR_ATTRIBUTES}; - g_CommandList["cls"] = {&CommandClearScreen, &CommandClearScreenHelp, DEBUGGER_COMMAND_CLEAR_ATTRIBUTES}; + g_CommandsList["clear"] = {&CommandClearScreen, &CommandClearScreenHelp, DEBUGGER_COMMAND_CLEAR_ATTRIBUTES}; + g_CommandsList[".cls"] = {&CommandClearScreen, &CommandClearScreenHelp, DEBUGGER_COMMAND_CLEAR_ATTRIBUTES}; + g_CommandsList["cls"] = {&CommandClearScreen, &CommandClearScreenHelp, DEBUGGER_COMMAND_CLEAR_ATTRIBUTES}; - g_CommandList[".connect"] = {&CommandConnect, &CommandConnectHelp, DEBUGGER_COMMAND_CONNECT_ATTRIBUTES}; - g_CommandList["connect"] = {&CommandConnect, &CommandConnectHelp, DEBUGGER_COMMAND_CONNECT_ATTRIBUTES}; + g_CommandsList[".connect"] = {&CommandConnect, &CommandConnectHelp, DEBUGGER_COMMAND_CONNECT_ATTRIBUTES}; + g_CommandsList["connect"] = {&CommandConnect, &CommandConnectHelp, DEBUGGER_COMMAND_CONNECT_ATTRIBUTES}; - g_CommandList[".listen"] = {&CommandListen, &CommandListenHelp, DEBUGGER_COMMAND_LISTEN_ATTRIBUTES}; - g_CommandList["listen"] = {&CommandListen, &CommandListenHelp, DEBUGGER_COMMAND_LISTEN_ATTRIBUTES}; + g_CommandsList[".listen"] = {&CommandListen, &CommandListenHelp, DEBUGGER_COMMAND_LISTEN_ATTRIBUTES}; + g_CommandsList["listen"] = {&CommandListen, &CommandListenHelp, DEBUGGER_COMMAND_LISTEN_ATTRIBUTES}; - g_CommandList["g"] = {&CommandG, &CommandGHelp, DEBUGGER_COMMAND_G_ATTRIBUTES}; - g_CommandList["go"] = {&CommandG, &CommandGHelp, DEBUGGER_COMMAND_G_ATTRIBUTES}; + g_CommandsList["g"] = {&CommandG, &CommandGHelp, DEBUGGER_COMMAND_G_ATTRIBUTES}; + g_CommandsList["go"] = {&CommandG, &CommandGHelp, DEBUGGER_COMMAND_G_ATTRIBUTES}; - g_CommandList[".attach"] = {&CommandAttach, &CommandAttachHelp, DEBUGGER_COMMAND_ATTACH_ATTRIBUTES}; - g_CommandList["attach"] = {&CommandAttach, &CommandAttachHelp, DEBUGGER_COMMAND_ATTACH_ATTRIBUTES}; + g_CommandsList[".attach"] = {&CommandAttach, &CommandAttachHelp, DEBUGGER_COMMAND_ATTACH_ATTRIBUTES}; + g_CommandsList["attach"] = {&CommandAttach, &CommandAttachHelp, DEBUGGER_COMMAND_ATTACH_ATTRIBUTES}; - g_CommandList[".detach"] = {&CommandDetach, &CommandDetachHelp, DEBUGGER_COMMAND_DETACH_ATTRIBUTES}; - g_CommandList["detach"] = {&CommandDetach, &CommandDetachHelp, DEBUGGER_COMMAND_DETACH_ATTRIBUTES}; + g_CommandsList[".detach"] = {&CommandDetach, &CommandDetachHelp, DEBUGGER_COMMAND_DETACH_ATTRIBUTES}; + g_CommandsList["detach"] = {&CommandDetach, &CommandDetachHelp, DEBUGGER_COMMAND_DETACH_ATTRIBUTES}; - g_CommandList[".process"] = {&CommandProcess, &CommandProcessHelp, DEBUGGER_COMMAND_PROCESS_ATTRIBUTES}; + g_CommandsList[".process"] = {&CommandProcess, &CommandProcessHelp, DEBUGGER_COMMAND_PROCESS_ATTRIBUTES}; - g_CommandList["sleep"] = {&CommandSleep, &CommandSleepHelp, DEBUGGER_COMMAND_SLEEP_ATTRIBUTES}; + g_CommandsList["sleep"] = {&CommandSleep, &CommandSleepHelp, DEBUGGER_COMMAND_SLEEP_ATTRIBUTES}; - g_CommandList["event"] = {&CommandEvents, &CommandEventsHelp, DEBUGGER_COMMAND_EVENTS_ATTRIBUTES}; - g_CommandList["events"] = {&CommandEvents, &CommandEventsHelp, DEBUGGER_COMMAND_EVENTS_ATTRIBUTES}; + g_CommandsList["event"] = {&CommandEvents, &CommandEventsHelp, DEBUGGER_COMMAND_EVENTS_ATTRIBUTES}; + g_CommandsList["events"] = {&CommandEvents, &CommandEventsHelp, DEBUGGER_COMMAND_EVENTS_ATTRIBUTES}; - g_CommandList["setting"] = {&CommandSettings, &CommandSettingsHelp, DEBUGGER_COMMAND_SETTINGS_ATTRIBUTES}; - g_CommandList["settings"] = {&CommandSettings, &CommandSettingsHelp, DEBUGGER_COMMAND_SETTINGS_ATTRIBUTES}; + g_CommandsList["setting"] = {&CommandSettings, &CommandSettingsHelp, DEBUGGER_COMMAND_SETTINGS_ATTRIBUTES}; + g_CommandsList["settings"] = {&CommandSettings, &CommandSettingsHelp, DEBUGGER_COMMAND_SETTINGS_ATTRIBUTES}; - g_CommandList[".disconnect"] = {&CommandDisconnect, &CommandDisconnectHelp, DEBUGGER_COMMAND_DISCONNECT_ATTRIBUTES}; - g_CommandList["disconnect"] = {&CommandDisconnect, &CommandDisconnectHelp, DEBUGGER_COMMAND_DISCONNECT_ATTRIBUTES}; + g_CommandsList[".disconnect"] = {&CommandDisconnect, &CommandDisconnectHelp, DEBUGGER_COMMAND_DISCONNECT_ATTRIBUTES}; + g_CommandsList["disconnect"] = {&CommandDisconnect, &CommandDisconnectHelp, DEBUGGER_COMMAND_DISCONNECT_ATTRIBUTES}; - g_CommandList[".debug"] = {&CommandDebug, &CommandDebugHelp, DEBUGGER_COMMAND_DEBUG_ATTRIBUTES}; - g_CommandList["debug"] = {&CommandDebug, &CommandDebugHelp, DEBUGGER_COMMAND_DEBUG_ATTRIBUTES}; + g_CommandsList[".debug"] = {&CommandDebug, &CommandDebugHelp, DEBUGGER_COMMAND_DEBUG_ATTRIBUTES}; + g_CommandsList["debug"] = {&CommandDebug, &CommandDebugHelp, DEBUGGER_COMMAND_DEBUG_ATTRIBUTES}; - g_CommandList[".status"] = {&CommandStatus, &CommandStatusHelp, DEBUGGER_COMMAND_DOT_STATUS_ATTRIBUTES}; - g_CommandList["status"] = {&CommandStatus, &CommandStatusHelp, DEBUGGER_COMMAND_STATUS_ATTRIBUTES}; + g_CommandsList[".status"] = {&CommandStatus, &CommandStatusHelp, DEBUGGER_COMMAND_DOT_STATUS_ATTRIBUTES}; + g_CommandsList["status"] = {&CommandStatus, &CommandStatusHelp, DEBUGGER_COMMAND_STATUS_ATTRIBUTES}; - g_CommandList["load"] = {&CommandLoad, &CommandLoadHelp, DEBUGGER_COMMAND_LOAD_ATTRIBUTES}; + g_CommandsList["load"] = {&CommandLoad, &CommandLoadHelp, DEBUGGER_COMMAND_LOAD_ATTRIBUTES}; - g_CommandList["exit"] = {&CommandExit, &CommandExitHelp, DEBUGGER_COMMAND_EXIT_ATTRIBUTES}; - g_CommandList[".exit"] = {&CommandExit, &CommandExitHelp, DEBUGGER_COMMAND_EXIT_ATTRIBUTES}; + g_CommandsList["exit"] = {&CommandExit, &CommandExitHelp, DEBUGGER_COMMAND_EXIT_ATTRIBUTES}; + g_CommandsList[".exit"] = {&CommandExit, &CommandExitHelp, DEBUGGER_COMMAND_EXIT_ATTRIBUTES}; - g_CommandList["flush"] = {&CommandFlush, &CommandFlushHelp, DEBUGGER_COMMAND_FLUSH_ATTRIBUTES}; + g_CommandsList["flush"] = {&CommandFlush, &CommandFlushHelp, DEBUGGER_COMMAND_FLUSH_ATTRIBUTES}; - g_CommandList["pause"] = {&CommandPause, &CommandPauseHelp, DEBUGGER_COMMAND_PAUSE_ATTRIBUTES}; + g_CommandsList["pause"] = {&CommandPause, &CommandPauseHelp, DEBUGGER_COMMAND_PAUSE_ATTRIBUTES}; - g_CommandList["unload"] = {&CommandUnload, &CommandUnloadHelp, DEBUGGER_COMMAND_UNLOAD_ATTRIBUTES}; + g_CommandsList["unload"] = {&CommandUnload, &CommandUnloadHelp, DEBUGGER_COMMAND_UNLOAD_ATTRIBUTES}; - g_CommandList[".script"] = {&CommandScript, &CommandScriptHelp, DEBUGGER_COMMAND_SCRIPT_ATTRIBUTES}; + g_CommandsList[".script"] = {&CommandScript, &CommandScriptHelp, DEBUGGER_COMMAND_SCRIPT_ATTRIBUTES}; - g_CommandList["output"] = {&CommandOutput, &CommandOutputHelp, DEBUGGER_COMMAND_OUTPUT_ATTRIBUTES}; + g_CommandsList["output"] = {&CommandOutput, &CommandOutputHelp, DEBUGGER_COMMAND_OUTPUT_ATTRIBUTES}; - g_CommandList["print"] = {&CommandPrint, &CommandPrintHelp, DEBUGGER_COMMAND_PRINT_ATTRIBUTES}; + g_CommandsList["print"] = {&CommandPrint, &CommandPrintHelp, DEBUGGER_COMMAND_PRINT_ATTRIBUTES}; - g_CommandList["?"] = {&CommandEval, &CommandEvalHelp, DEBUGGER_COMMAND_EVAL_ATTRIBUTES}; - g_CommandList["eval"] = {&CommandEval, &CommandEvalHelp, DEBUGGER_COMMAND_EVAL_ATTRIBUTES}; - g_CommandList["evaluate"] = {&CommandEval, &CommandEvalHelp, DEBUGGER_COMMAND_EVAL_ATTRIBUTES}; + g_CommandsList["?"] = {&CommandEval, &CommandEvalHelp, DEBUGGER_COMMAND_EVAL_ATTRIBUTES}; + g_CommandsList["eval"] = {&CommandEval, &CommandEvalHelp, DEBUGGER_COMMAND_EVAL_ATTRIBUTES}; + g_CommandsList["evaluate"] = {&CommandEval, &CommandEvalHelp, DEBUGGER_COMMAND_EVAL_ATTRIBUTES}; - g_CommandList[".logopen"] = {&CommandLogopen, &CommandLogopenHelp, DEBUGGER_COMMAND_LOGOPEN_ATTRIBUTES}; + g_CommandsList[".logopen"] = {&CommandLogopen, &CommandLogopenHelp, DEBUGGER_COMMAND_LOGOPEN_ATTRIBUTES}; - g_CommandList[".logclose"] = {&CommandLogclose, &CommandLogcloseHelp, DEBUGGER_COMMAND_LOGCLOSE_ATTRIBUTES}; + g_CommandsList[".logclose"] = {&CommandLogclose, &CommandLogcloseHelp, DEBUGGER_COMMAND_LOGCLOSE_ATTRIBUTES}; - g_CommandList["test"] = {&CommandTest, &CommandTestHelp, DEBUGGER_COMMAND_TEST_ATTRIBUTES}; + g_CommandsList["test"] = {&CommandTest, &CommandTestHelp, DEBUGGER_COMMAND_TEST_ATTRIBUTES}; - g_CommandList["cpu"] = {&CommandCpu, &CommandCpuHelp, DEBUGGER_COMMAND_CPU_ATTRIBUTES}; + g_CommandsList["cpu"] = {&CommandCpu, &CommandCpuHelp, DEBUGGER_COMMAND_CPU_ATTRIBUTES}; - g_CommandList["wrmsr"] = {&CommandWrmsr, &CommandWrmsrHelp, DEBUGGER_COMMAND_WRMSR_ATTRIBUTES}; + g_CommandsList["wrmsr"] = {&CommandWrmsr, &CommandWrmsrHelp, DEBUGGER_COMMAND_WRMSR_ATTRIBUTES}; - g_CommandList["rdmsr"] = {&CommandRdmsr, &CommandRdmsrHelp, DEBUGGER_COMMAND_RDMSR_ATTRIBUTES}; + g_CommandsList["rdmsr"] = {&CommandRdmsr, &CommandRdmsrHelp, DEBUGGER_COMMAND_RDMSR_ATTRIBUTES}; - g_CommandList["!va2pa"] = {&CommandVa2pa, &CommandVa2paHelp, DEBUGGER_COMMAND_VA2PA_ATTRIBUTES}; + g_CommandsList["!va2pa"] = {&CommandVa2pa, &CommandVa2paHelp, DEBUGGER_COMMAND_VA2PA_ATTRIBUTES}; - g_CommandList["!pa2va"] = {&CommandPa2va, &CommandPa2vaHelp, DEBUGGER_COMMAND_PA2VA_ATTRIBUTES}; + g_CommandsList["!pa2va"] = {&CommandPa2va, &CommandPa2vaHelp, DEBUGGER_COMMAND_PA2VA_ATTRIBUTES}; - g_CommandList[".formats"] = {&CommandFormats, &CommandFormatsHelp, DEBUGGER_COMMAND_FORMATS_ATTRIBUTES}; - g_CommandList[".format"] = {&CommandFormats, &CommandFormatsHelp, DEBUGGER_COMMAND_FORMATS_ATTRIBUTES}; + g_CommandsList[".formats"] = {&CommandFormats, &CommandFormatsHelp, DEBUGGER_COMMAND_FORMATS_ATTRIBUTES}; + g_CommandsList[".format"] = {&CommandFormats, &CommandFormatsHelp, DEBUGGER_COMMAND_FORMATS_ATTRIBUTES}; - g_CommandList["!pte"] = {&CommandPte, &CommandPteHelp, DEBUGGER_COMMAND_PTE_ATTRIBUTES}; + g_CommandsList["!pte"] = {&CommandPte, &CommandPteHelp, DEBUGGER_COMMAND_PTE_ATTRIBUTES}; - g_CommandList["~"] = {&CommandCore, &CommandCoreHelp, DEBUGGER_COMMAND_CORE_ATTRIBUTES}; - g_CommandList["core"] = {&CommandCore, &CommandCoreHelp, DEBUGGER_COMMAND_CORE_ATTRIBUTES}; + g_CommandsList["~"] = {&CommandCore, &CommandCoreHelp, DEBUGGER_COMMAND_CORE_ATTRIBUTES}; + g_CommandsList["core"] = {&CommandCore, &CommandCoreHelp, DEBUGGER_COMMAND_CORE_ATTRIBUTES}; - g_CommandList["!monitor"] = {&CommandMonitor, &CommandMonitorHelp, DEBUGGER_COMMAND_MONITOR_ATTRIBUTES}; + g_CommandsList["!monitor"] = {&CommandMonitor, &CommandMonitorHelp, DEBUGGER_COMMAND_MONITOR_ATTRIBUTES}; - g_CommandList["!vmcall"] = {&CommandVmcall, &CommandVmcallHelp, DEBUGGER_COMMAND_VMCALL_ATTRIBUTES}; + g_CommandsList["!vmcall"] = {&CommandVmcall, &CommandVmcallHelp, DEBUGGER_COMMAND_VMCALL_ATTRIBUTES}; - g_CommandList["!epthook"] = {&CommandEptHook, &CommandEptHookHelp, DEBUGGER_COMMAND_EPTHOOK_ATTRIBUTES}; - g_CommandList["bh"] = {&CommandEptHook, &CommandEptHookHelp, DEBUGGER_COMMAND_EPTHOOK_ATTRIBUTES}; + g_CommandsList["!epthook"] = {&CommandEptHook, &CommandEptHookHelp, DEBUGGER_COMMAND_EPTHOOK_ATTRIBUTES}; + g_CommandsList["bh"] = {&CommandEptHook, &CommandEptHookHelp, DEBUGGER_COMMAND_EPTHOOK_ATTRIBUTES}; - g_CommandList["bp"] = {&CommandBp, &CommandBpHelp, DEBUGGER_COMMAND_BP_ATTRIBUTES}; + g_CommandsList["bp"] = {&CommandBp, &CommandBpHelp, DEBUGGER_COMMAND_BP_ATTRIBUTES}; - g_CommandList["bl"] = {&CommandBl, &CommandBlHelp, DEBUGGER_COMMAND_BD_ATTRIBUTES}; + g_CommandsList["bl"] = {&CommandBl, &CommandBlHelp, DEBUGGER_COMMAND_BD_ATTRIBUTES}; - g_CommandList["be"] = {&CommandBe, &CommandBeHelp, DEBUGGER_COMMAND_BD_ATTRIBUTES}; + g_CommandsList["be"] = {&CommandBe, &CommandBeHelp, DEBUGGER_COMMAND_BD_ATTRIBUTES}; - g_CommandList["bd"] = {&CommandBd, &CommandBdHelp, DEBUGGER_COMMAND_BD_ATTRIBUTES}; + g_CommandsList["bd"] = {&CommandBd, &CommandBdHelp, DEBUGGER_COMMAND_BD_ATTRIBUTES}; - g_CommandList["bc"] = {&CommandBc, &CommandBcHelp, DEBUGGER_COMMAND_BD_ATTRIBUTES}; + g_CommandsList["bc"] = {&CommandBc, &CommandBcHelp, DEBUGGER_COMMAND_BD_ATTRIBUTES}; - g_CommandList["!epthook2"] = {&CommandEptHook2, &CommandEptHook2Help, DEBUGGER_COMMAND_EPTHOOK2_ATTRIBUTES}; + g_CommandsList["!epthook2"] = {&CommandEptHook2, &CommandEptHook2Help, DEBUGGER_COMMAND_EPTHOOK2_ATTRIBUTES}; - g_CommandList["!cpuid"] = {&CommandCpuid, &CommandCpuidHelp, DEBUGGER_COMMAND_CPUID_ATTRIBUTES}; + g_CommandsList["!cpuid"] = {&CommandCpuid, &CommandCpuidHelp, DEBUGGER_COMMAND_CPUID_ATTRIBUTES}; - g_CommandList["!msrread"] = {&CommandMsrread, &CommandMsrreadHelp, DEBUGGER_COMMAND_MSRREAD_ATTRIBUTES}; + g_CommandsList["!msrread"] = {&CommandMsrread, &CommandMsrreadHelp, DEBUGGER_COMMAND_MSRREAD_ATTRIBUTES}; - g_CommandList["!msrwrite"] = {&CommandMsrwrite, &CommandMsrwriteHelp, DEBUGGER_COMMAND_MSRWRITE_ATTRIBUTES}; + g_CommandsList["!msrwrite"] = {&CommandMsrwrite, &CommandMsrwriteHelp, DEBUGGER_COMMAND_MSRWRITE_ATTRIBUTES}; - g_CommandList["!tsc"] = {&CommandTsc, &CommandTscHelp, DEBUGGER_COMMAND_TSC_ATTRIBUTES}; + g_CommandsList["!tsc"] = {&CommandTsc, &CommandTscHelp, DEBUGGER_COMMAND_TSC_ATTRIBUTES}; - g_CommandList["!pmc"] = {&CommandPmc, &CommandPmcHelp, DEBUGGER_COMMAND_PMC_ATTRIBUTES}; + g_CommandsList["!pmc"] = {&CommandPmc, &CommandPmcHelp, DEBUGGER_COMMAND_PMC_ATTRIBUTES}; - g_CommandList["!dr"] = {&CommandDr, &CommandDrHelp, DEBUGGER_COMMAND_DR_ATTRIBUTES}; + g_CommandsList["!dr"] = {&CommandDr, &CommandDrHelp, DEBUGGER_COMMAND_DR_ATTRIBUTES}; - g_CommandList["!ioin"] = {&CommandIoin, &CommandIoinHelp, DEBUGGER_COMMAND_IOIN_ATTRIBUTES}; + g_CommandsList["!ioin"] = {&CommandIoin, &CommandIoinHelp, DEBUGGER_COMMAND_IOIN_ATTRIBUTES}; - g_CommandList["!ioout"] = {&CommandIoout, &CommandIooutHelp, DEBUGGER_COMMAND_IOOUT_ATTRIBUTES}; + g_CommandsList["!ioout"] = {&CommandIoout, &CommandIooutHelp, DEBUGGER_COMMAND_IOOUT_ATTRIBUTES}; - g_CommandList["!exception"] = {&CommandException, &CommandExceptionHelp, DEBUGGER_COMMAND_EXCEPTION_ATTRIBUTES}; + g_CommandsList["!exception"] = {&CommandException, &CommandExceptionHelp, DEBUGGER_COMMAND_EXCEPTION_ATTRIBUTES}; - g_CommandList["!interrupt"] = {&CommandInterrupt, &CommandInterruptHelp, DEBUGGER_COMMAND_INTERRUPT_ATTRIBUTES}; + g_CommandsList["!interrupt"] = {&CommandInterrupt, &CommandInterruptHelp, DEBUGGER_COMMAND_INTERRUPT_ATTRIBUTES}; - g_CommandList["!syscall"] = {&CommandSyscallAndSysret, &CommandSyscallHelp, DEBUGGER_COMMAND_SYSCALL_ATTRIBUTES}; - g_CommandList["!syscall2"] = {&CommandSyscallAndSysret, &CommandSyscallHelp, DEBUGGER_COMMAND_SYSCALL_ATTRIBUTES}; + g_CommandsList["!syscall"] = {&CommandSyscallAndSysret, &CommandSyscallHelp, DEBUGGER_COMMAND_SYSCALL_ATTRIBUTES}; + g_CommandsList["!syscall2"] = {&CommandSyscallAndSysret, &CommandSyscallHelp, DEBUGGER_COMMAND_SYSCALL_ATTRIBUTES}; - g_CommandList["!sysret"] = {&CommandSyscallAndSysret, &CommandSysretHelp, DEBUGGER_COMMAND_SYSRET_ATTRIBUTES}; - g_CommandList["!sysret2"] = {&CommandSyscallAndSysret, &CommandSysretHelp, DEBUGGER_COMMAND_SYSRET_ATTRIBUTES}; + g_CommandsList["!sysret"] = {&CommandSyscallAndSysret, &CommandSysretHelp, DEBUGGER_COMMAND_SYSRET_ATTRIBUTES}; + g_CommandsList["!sysret2"] = {&CommandSyscallAndSysret, &CommandSysretHelp, DEBUGGER_COMMAND_SYSRET_ATTRIBUTES}; - g_CommandList["!hide"] = {&CommandHide, &CommandHideHelp, DEBUGGER_COMMAND_HIDE_ATTRIBUTES}; + g_CommandsList["!hide"] = {&CommandHide, &CommandHideHelp, DEBUGGER_COMMAND_HIDE_ATTRIBUTES}; - g_CommandList["!unhide"] = {&CommandUnhide, &CommandUnhideHelp, DEBUGGER_COMMAND_UNHIDE_ATTRIBUTES}; + g_CommandsList["!unhide"] = {&CommandUnhide, &CommandUnhideHelp, DEBUGGER_COMMAND_UNHIDE_ATTRIBUTES}; - g_CommandList["!measure"] = {&CommandMeasure, &CommandMeasureHelp, DEBUGGER_COMMAND_MEASURE_ATTRIBUTES}; + g_CommandsList["!measure"] = {&CommandMeasure, &CommandMeasureHelp, DEBUGGER_COMMAND_MEASURE_ATTRIBUTES}; - g_CommandList["lm"] = {&CommandLm, &CommandLmHelp, DEBUGGER_COMMAND_LM_ATTRIBUTES}; + g_CommandsList["lm"] = {&CommandLm, &CommandLmHelp, DEBUGGER_COMMAND_LM_ATTRIBUTES}; - g_CommandList["p"] = {&CommandP, &CommandPHelp, DEBUGGER_COMMAND_P_ATTRIBUTES}; - g_CommandList["pr"] = {&CommandP, &CommandPHelp, DEBUGGER_COMMAND_P_ATTRIBUTES}; + g_CommandsList["p"] = {&CommandP, &CommandPHelp, DEBUGGER_COMMAND_P_ATTRIBUTES}; + g_CommandsList["pr"] = {&CommandP, &CommandPHelp, DEBUGGER_COMMAND_P_ATTRIBUTES}; - g_CommandList["t"] = {&CommandT, &CommandTHelp, DEBUGGER_COMMAND_T_ATTRIBUTES}; - g_CommandList["tr"] = {&CommandT, &CommandTHelp, DEBUGGER_COMMAND_T_ATTRIBUTES}; + g_CommandsList["t"] = {&CommandT, &CommandTHelp, DEBUGGER_COMMAND_T_ATTRIBUTES}; + g_CommandsList["tr"] = {&CommandT, &CommandTHelp, DEBUGGER_COMMAND_T_ATTRIBUTES}; - g_CommandList["i"] = {&CommandI, &CommandIHelp, DEBUGGER_COMMAND_I_ATTRIBUTES}; - g_CommandList["ir"] = {&CommandI, &CommandIHelp, DEBUGGER_COMMAND_I_ATTRIBUTES}; + g_CommandsList["i"] = {&CommandI, &CommandIHelp, DEBUGGER_COMMAND_I_ATTRIBUTES}; + g_CommandsList["ir"] = {&CommandI, &CommandIHelp, DEBUGGER_COMMAND_I_ATTRIBUTES}; - g_CommandList["db"] = {&CommandReadMemoryAndDisassembler, + g_CommandsList["db"] = {&CommandReadMemoryAndDisassembler, &CommandReadMemoryAndDisassemblerHelp, DEBUGGER_COMMAND_D_AND_U_ATTRIBUTES}; - g_CommandList["dc"] = {&CommandReadMemoryAndDisassembler, + g_CommandsList["dc"] = {&CommandReadMemoryAndDisassembler, &CommandReadMemoryAndDisassemblerHelp, DEBUGGER_COMMAND_D_AND_U_ATTRIBUTES}; - g_CommandList["dd"] = {&CommandReadMemoryAndDisassembler, + g_CommandsList["dd"] = {&CommandReadMemoryAndDisassembler, &CommandReadMemoryAndDisassemblerHelp, DEBUGGER_COMMAND_D_AND_U_ATTRIBUTES}; - g_CommandList["dq"] = {&CommandReadMemoryAndDisassembler, + g_CommandsList["dq"] = {&CommandReadMemoryAndDisassembler, &CommandReadMemoryAndDisassemblerHelp, DEBUGGER_COMMAND_D_AND_U_ATTRIBUTES}; - g_CommandList["!db"] = {&CommandReadMemoryAndDisassembler, + g_CommandsList["!db"] = {&CommandReadMemoryAndDisassembler, &CommandReadMemoryAndDisassemblerHelp, DEBUGGER_COMMAND_D_AND_U_ATTRIBUTES}; - g_CommandList["!dc"] = {&CommandReadMemoryAndDisassembler, + g_CommandsList["!dc"] = {&CommandReadMemoryAndDisassembler, &CommandReadMemoryAndDisassemblerHelp, DEBUGGER_COMMAND_D_AND_U_ATTRIBUTES}; - g_CommandList["!dd"] = {&CommandReadMemoryAndDisassembler, + g_CommandsList["!dd"] = {&CommandReadMemoryAndDisassembler, &CommandReadMemoryAndDisassemblerHelp, DEBUGGER_COMMAND_D_AND_U_ATTRIBUTES}; - g_CommandList["!dq"] = {&CommandReadMemoryAndDisassembler, + g_CommandsList["!dq"] = {&CommandReadMemoryAndDisassembler, &CommandReadMemoryAndDisassemblerHelp, DEBUGGER_COMMAND_D_AND_U_ATTRIBUTES}; - g_CommandList["!u"] = {&CommandReadMemoryAndDisassembler, + g_CommandsList["!u"] = {&CommandReadMemoryAndDisassembler, &CommandReadMemoryAndDisassemblerHelp, DEBUGGER_COMMAND_D_AND_U_ATTRIBUTES}; - g_CommandList["u"] = {&CommandReadMemoryAndDisassembler, + g_CommandsList["u"] = {&CommandReadMemoryAndDisassembler, &CommandReadMemoryAndDisassemblerHelp, DEBUGGER_COMMAND_D_AND_U_ATTRIBUTES}; - g_CommandList["!u2"] = {&CommandReadMemoryAndDisassembler, + g_CommandsList["!u2"] = {&CommandReadMemoryAndDisassembler, &CommandReadMemoryAndDisassemblerHelp, DEBUGGER_COMMAND_D_AND_U_ATTRIBUTES}; - g_CommandList["u2"] = {&CommandReadMemoryAndDisassembler, + g_CommandsList["u2"] = {&CommandReadMemoryAndDisassembler, &CommandReadMemoryAndDisassemblerHelp, DEBUGGER_COMMAND_D_AND_U_ATTRIBUTES}; - g_CommandList["eb"] = {&CommandEditMemory, &CommandEditMemoryHelp, DEBUGGER_COMMAND_E_ATTRIBUTES}; - g_CommandList["ed"] = {&CommandEditMemory, &CommandEditMemoryHelp, DEBUGGER_COMMAND_E_ATTRIBUTES}; - g_CommandList["eq"] = {&CommandEditMemory, &CommandEditMemoryHelp, DEBUGGER_COMMAND_E_ATTRIBUTES}; - g_CommandList["!eb"] = {&CommandEditMemory, &CommandEditMemoryHelp, DEBUGGER_COMMAND_E_ATTRIBUTES}; - g_CommandList["!ed"] = {&CommandEditMemory, &CommandEditMemoryHelp, DEBUGGER_COMMAND_E_ATTRIBUTES}; - g_CommandList["!eq"] = {&CommandEditMemory, &CommandEditMemoryHelp, DEBUGGER_COMMAND_E_ATTRIBUTES}; + g_CommandsList["eb"] = {&CommandEditMemory, &CommandEditMemoryHelp, DEBUGGER_COMMAND_E_ATTRIBUTES}; + g_CommandsList["ed"] = {&CommandEditMemory, &CommandEditMemoryHelp, DEBUGGER_COMMAND_E_ATTRIBUTES}; + g_CommandsList["eq"] = {&CommandEditMemory, &CommandEditMemoryHelp, DEBUGGER_COMMAND_E_ATTRIBUTES}; + g_CommandsList["!eb"] = {&CommandEditMemory, &CommandEditMemoryHelp, DEBUGGER_COMMAND_E_ATTRIBUTES}; + g_CommandsList["!ed"] = {&CommandEditMemory, &CommandEditMemoryHelp, DEBUGGER_COMMAND_E_ATTRIBUTES}; + g_CommandsList["!eq"] = {&CommandEditMemory, &CommandEditMemoryHelp, DEBUGGER_COMMAND_E_ATTRIBUTES}; - g_CommandList["sb"] = {&CommandSearchMemory, &CommandSearchMemoryHelp, DEBUGGER_COMMAND_S_ATTRIBUTES}; - g_CommandList["sd"] = {&CommandSearchMemory, &CommandSearchMemoryHelp, DEBUGGER_COMMAND_S_ATTRIBUTES}; - g_CommandList["sq"] = {&CommandSearchMemory, &CommandSearchMemoryHelp, DEBUGGER_COMMAND_S_ATTRIBUTES}; - g_CommandList["!sb"] = {&CommandSearchMemory, &CommandSearchMemoryHelp, DEBUGGER_COMMAND_S_ATTRIBUTES}; - g_CommandList["!sd"] = {&CommandSearchMemory, &CommandSearchMemoryHelp, DEBUGGER_COMMAND_S_ATTRIBUTES}; - g_CommandList["!sq"] = {&CommandSearchMemory, &CommandSearchMemoryHelp, DEBUGGER_COMMAND_S_ATTRIBUTES}; + g_CommandsList["sb"] = {&CommandSearchMemory, &CommandSearchMemoryHelp, DEBUGGER_COMMAND_S_ATTRIBUTES}; + g_CommandsList["sd"] = {&CommandSearchMemory, &CommandSearchMemoryHelp, DEBUGGER_COMMAND_S_ATTRIBUTES}; + g_CommandsList["sq"] = {&CommandSearchMemory, &CommandSearchMemoryHelp, DEBUGGER_COMMAND_S_ATTRIBUTES}; + g_CommandsList["!sb"] = {&CommandSearchMemory, &CommandSearchMemoryHelp, DEBUGGER_COMMAND_S_ATTRIBUTES}; + g_CommandsList["!sd"] = {&CommandSearchMemory, &CommandSearchMemoryHelp, DEBUGGER_COMMAND_S_ATTRIBUTES}; + g_CommandsList["!sq"] = {&CommandSearchMemory, &CommandSearchMemoryHelp, DEBUGGER_COMMAND_S_ATTRIBUTES}; - g_CommandList["r"] = {&CommandR, &CommandRHelp, DEBUGGER_COMMAND_R_ATTRIBUTES}; + g_CommandsList["r"] = {&CommandR, &CommandRHelp, DEBUGGER_COMMAND_R_ATTRIBUTES}; - g_CommandList[".sympath"] = {&CommandSympath, &CommandSympathHelp, DEBUGGER_COMMAND_SYMPATH_ATTRIBUTES}; + g_CommandsList[".sympath"] = {&CommandSympath, &CommandSympathHelp, DEBUGGER_COMMAND_SYMPATH_ATTRIBUTES}; - g_CommandList[".sym"] = {&CommandSym, &CommandSymHelp, DEBUGGER_COMMAND_SYM_ATTRIBUTES}; + g_CommandsList[".sym"] = {&CommandSym, &CommandSymHelp, DEBUGGER_COMMAND_SYM_ATTRIBUTES}; - g_CommandList["x"] = {&CommandX, &CommandXHelp, DEBUGGER_COMMAND_X_ATTRIBUTES}; + g_CommandsList["x"] = {&CommandX, &CommandXHelp, DEBUGGER_COMMAND_X_ATTRIBUTES}; } diff --git a/hyperdbg/hprdbgctrl/remoteconnection.cpp b/hyperdbg/hprdbgctrl/remote-connection.cpp similarity index 100% rename from hyperdbg/hprdbgctrl/remoteconnection.cpp rename to hyperdbg/hprdbgctrl/remote-connection.cpp diff --git a/hyperdbg/hprdbgctrl/script-engine-wrapper.cpp b/hyperdbg/hprdbgctrl/script-engine-wrapper.cpp index 779a0290..9fb30e7b 100644 --- a/hyperdbg/hprdbgctrl/script-engine-wrapper.cpp +++ b/hyperdbg/hprdbgctrl/script-engine-wrapper.cpp @@ -128,6 +128,18 @@ ScriptEngineSymbolInitLoadWrapper(PMODULE_SYMBOL_DETAIL BufferToStoreDetails, return ScriptEngineSymbolInitLoad(BufferToStoreDetails, StoredLength, DownloadIfAvailable, SymbolPath, IsSilentLoad); } +/** + * @brief SymbolAbortLoading wrapper + * + * @return VOID + */ +VOID +ScriptEngineSymbolAbortLoadingWrapper() + +{ + return ScriptEngineSymbolAbortLoading(); +} + /** * @brief ScriptEngineConvertFileToPdbFileAndGuidAndAgeDetails wrapper * @@ -232,7 +244,6 @@ ScriptEngineWrapperTestPerformAction(PGUEST_REGS GuestRegs, ActionBuffer.ImmediatelySendTheResults = FALSE; ActionBuffer.Tag = NULL; - // // If has error, show error message and abort. // diff --git a/hyperdbg/hprdbgctrl/symbol.cpp b/hyperdbg/hprdbgctrl/symbol.cpp index 429f79f8..b84b73bb 100644 --- a/hyperdbg/hprdbgctrl/symbol.cpp +++ b/hyperdbg/hprdbgctrl/symbol.cpp @@ -17,6 +17,7 @@ // extern PMODULE_SYMBOL_DETAIL g_SymbolTable; extern UINT32 g_SymbolTableSize; +extern BOOLEAN g_IsExecutingSymbolLoadingRoutines; /** * @brief Initial reload of symbols (for previously download symbols) @@ -74,6 +75,7 @@ SymbolReloadOrDownloadSymbols(BOOLEAN IsDownload, BOOLEAN SilentLoad) WCHAR ConfigPath[MAX_PATH] = {0}; inipp::Ini Ini; string SymbolServer = ""; + BOOLEAN Result = FALSE; // // Build the symbol table @@ -118,13 +120,25 @@ SymbolReloadOrDownloadSymbols(BOOLEAN IsDownload, BOOLEAN SilentLoad) } // - // Load or download available symbols + // *** Load or download available symbols ** // - return ScriptEngineSymbolInitLoadWrapper(g_SymbolTable, - g_SymbolTableSize, - IsDownload, - SymbolServer.c_str(), - SilentLoad); + + // + // Indicate that we're in loading routines + // + g_IsExecutingSymbolLoadingRoutines = TRUE; + Result = ScriptEngineSymbolInitLoadWrapper(g_SymbolTable, + g_SymbolTableSize, + IsDownload, + SymbolServer.c_str(), + SilentLoad); + + // + // Not in loading routines anymore + // + g_IsExecutingSymbolLoadingRoutines = FALSE; + + return Result; } /** diff --git a/hyperdbg/hyperdbg-cli/hyperdbg-cli.cpp b/hyperdbg/hyperdbg-cli/hyperdbg-cli.cpp index 81b05c5d..d6530152 100644 --- a/hyperdbg/hyperdbg-cli/hyperdbg-cli.cpp +++ b/hyperdbg/hyperdbg-cli/hyperdbg-cli.cpp @@ -88,6 +88,12 @@ main(int argc, char * argv[]) if (cin.fail() || cin.eof()) { cin.clear(); // reset cin state + printf("\n\n"); + + // + // probably sth like CTRL+C pressed + // + continue; } if (!CurrentCommand.compare("") && diff --git a/hyperdbg/include/ScriptEngineCommon.h b/hyperdbg/include/ScriptEngineCommon.h index dd037bbc..154464a5 100644 --- a/hyperdbg/include/ScriptEngineCommon.h +++ b/hyperdbg/include/ScriptEngineCommon.h @@ -164,6 +164,8 @@ __declspec(dllimport) BOOLEAN ScriptEngineConvertFileToPdbFileAndGuidAndAgeDetails(const char * LocalFilePath, char * PdbFilePath, char * GuidAndAgeDetails); __declspec(dllimport) BOOLEAN ScriptEngineSymbolInitLoad(PVOID BufferToStoreDetails, UINT32 StoredLength, BOOLEAN DownloadIfAvailable, const char * SymbolPath, BOOLEAN IsSilentLoad); +__declspec(dllimport) VOID + ScriptEngineSymbolAbortLoading(); } #endif // SCRIPT_ENGINE_USER_MODE @@ -745,7 +747,7 @@ ScriptEngineFunctionPrint(UINT64 Tag, BOOLEAN ImmediateMessagePassing, UINT64 Va VOID ScriptEngineFunctionTestStatement(UINT64 Tag, BOOLEAN ImmediateMessagePassing, UINT64 Value) { - g_CurrentTestResult = Value; + g_CurrentTestResult = Value; g_CurrentTestResultHasError = FALSE; } @@ -1412,7 +1414,7 @@ GetRegValue(PGUEST_REGS GuestRegs, REGS_ENUM RegId) break; case REGISTER_AH: - return (GuestRegs->rax & 0x000000000000ff00)>> 8; + return (GuestRegs->rax & 0x000000000000ff00) >> 8; break; @@ -1449,7 +1451,7 @@ GetRegValue(PGUEST_REGS GuestRegs, REGS_ENUM RegId) return GuestRegs->rdx; break; - + case REGISTER_EDX: return (GuestRegs->rdx & 0x00000000ffffffff); @@ -1475,7 +1477,7 @@ GetRegValue(PGUEST_REGS GuestRegs, REGS_ENUM RegId) break; - case REGISTER_EBX: + case REGISTER_EBX: return (GuestRegs->rbx & 0x00000000ffffffff); break; @@ -2209,7 +2211,7 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, ACTION_BUFFER ActionDetail, UINT64 * SetValue(GuestRegs, g_TempList, g_VariableList, Des, DesVal); return HasError; - + case FUNC_EQ: Src0 = (PSYMBOL)((unsigned long long)CodeBuffer->Head + (unsigned long long)(*Indx * sizeof(SYMBOL))); @@ -2234,7 +2236,6 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, ACTION_BUFFER ActionDetail, UINT64 * return HasError; - case FUNC_PAUSE: ScriptEngineFunctionPause(ActionDetail.Tag, ActionDetail.ImmediatelySendTheResults, @@ -2475,7 +2476,6 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, ACTION_BUFFER ActionDetail, UINT64 * } DesVal = SrcVal1 / SrcVal0; - SetValue(GuestRegs, g_TempList, g_VariableList, Des, DesVal); @@ -2848,8 +2848,8 @@ ScriptEngineExecute(PGUEST_REGS GuestRegs, ACTION_BUFFER ActionDetail, UINT64 * // Call the target function // ScriptEngineFunctionTestStatement(ActionDetail.Tag, - ActionDetail.ImmediatelySendTheResults, - SrcVal0); + ActionDetail.ImmediatelySendTheResults, + SrcVal0); return HasError; case FUNC_DISABLE_EVENT: diff --git a/hyperdbg/script-engine/script-engine.c b/hyperdbg/script-engine/script-engine.c index 4cd43d97..8154369c 100644 --- a/hyperdbg/script-engine/script-engine.c +++ b/hyperdbg/script-engine/script-engine.c @@ -33,7 +33,6 @@ ScriptEngineConvertNameToAddress(const char * FunctionOrVariableName, PBOOLEAN W * * */ - UINT32 ScriptEngineLoadFileSymbol(UINT64 BaseAddress, const char * PdbFileName) { @@ -92,6 +91,15 @@ ScriptEngineSymbolInitLoad(PVOID BufferToStoreDetails, return SymbolInitLoad(BufferToStoreDetails, StoredLength, DownloadIfAvailable, SymbolPath, IsSilentLoad); } +VOID +ScriptEngineSymbolAbortLoading() +{ + // + // A wrapper for aborting download and reload + // + return SymbolAbortLoading(); +} + BOOLEAN ScriptEngineConvertFileToPdbFileAndGuidAndAgeDetails(const char * LocalFilePath, char * PdbFilePath, char * GuidAndAgeDetails) { @@ -190,9 +198,6 @@ ScriptEngineParse(char * str) { UINT64 BooleanExpressionSize = BooleanExpressionExtractEnd(str, &WaitForWaitStatementBooleanExpression); - - - ErrorMessage = ScriptEngineBooleanExpresssionParse(BooleanExpressionSize, CurrentIn, MatchedStack, CodeBuffer, str, &c, &Error); if (Error != SCRIPT_ENGINE_ERROR_FREE) { @@ -264,20 +269,14 @@ ScriptEngineParse(char * str) RemoveToken(TopToken); TopToken = Pop(Stack); - - Push(MatchedStack, CurrentIn); - - CurrentIn = Scan(str, &c); if (CurrentIn->Type == UNKNOWN) { Error = SCRIPT_ENGINE_ERROR_SYNTAX; break; } - - } else @@ -304,7 +303,6 @@ ScriptEngineParse(char * str) { RemoveToken(CurrentIn); CurrentIn = Scan(str, &c); - if (CurrentIn->Type == UNKNOWN) { @@ -330,7 +328,7 @@ ScriptEngineParse(char * str) CodeBuffer->Message = ErrorMessage; - if (Stack) + if (Stack) RemoveTokenList(Stack); if (MatchedStack) @@ -349,12 +347,10 @@ void CodeGen(TOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, TOKEN Operator, PSCRIPT_ENGINE_ERROR_TYPE Error) { static BOOL IgnoreLvalue = FALSE; - TOKEN Op0 = NULL; - TOKEN Op1 = NULL; - TOKEN Op2 = NULL; - TOKEN Temp = NULL; - - + TOKEN Op0 = NULL; + TOKEN Op1 = NULL; + TOKEN Op2 = NULL; + TOKEN Temp = NULL; PSYMBOL OperatorSymbol = NULL; PSYMBOL Op0Symbol = NULL; @@ -392,7 +388,7 @@ CodeGen(TOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, TOKEN Operator, PSCR Op1 = Pop(MatchedStack); if (Op1->Type == UNRESOLVED_ID) { - Op1Symbol = NewSymbol(); + Op1Symbol = NewSymbol(); free(Op1Symbol->Value); Op1Symbol->Value = NewIdentifire(Op1); SetType(&Op1Symbol->Type, SYMBOL_ID_TYPE); @@ -515,8 +511,6 @@ CodeGen(TOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, TOKEN Operator, PSCR Op1 = Pop(MatchedStack); Op1Symbol = ToSymbol(Op1, Error); - - if (*Error != SCRIPT_ENGINE_ERROR_FREE) { break; @@ -524,7 +518,6 @@ CodeGen(TOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, TOKEN Operator, PSCR PushSymbol(CodeBuffer, Op0Symbol); PushSymbol(CodeBuffer, Op1Symbol); - Temp = NewTemp(); Push(MatchedStack, Temp); TempSymbol = ToSymbol(Temp, Error); @@ -645,8 +638,6 @@ CodeGen(TOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, TOKEN Operator, PSCR JumpAddressSymbol->Value = CurrentPointer + 2; RemoveToken(JumpSemanticAddressToken); - - // // Add jmp instruction to Code Buffer // @@ -689,7 +680,6 @@ CodeGen(TOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, TOKEN Operator, PSCR JumpAddressSymbol = (PSYMBOL)(CodeBuffer->Head + JumpSemanticAddress + 1); JumpAddressSymbol->Value = CurrentPointer; - RemoveToken(JumpSemanticAddressToken); JumpSemanticAddressToken = Pop(MatchedStack); } @@ -862,7 +852,6 @@ CodeGen(TOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, TOKEN Operator, PSCR PushSymbol(CodeBuffer, Op0Symbol); RemoveSymbol(JumpAddressSymbol); - FreeTemp(Op0); @@ -1100,7 +1089,6 @@ CodeGen(TOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, TOKEN Operator, PSCR } JumpAddressToken = Pop(MatchedStack); - // // Set jumps addresses @@ -1119,7 +1107,7 @@ CodeGen(TOKEN_LIST MatchedStack, PSYMBOL_BUFFER CodeBuffer, TOKEN Operator, PSCR else { JumpAddress = DecimalToInt(JumpAddressToken->Value); - + JumpAddressSymbol = (PSYMBOL)(CodeBuffer->Head + JumpAddress); JumpAddressSymbol->Value = CurrentPointer; } @@ -1438,7 +1426,6 @@ ScriptEngineBooleanExpresssionParse( StateId = Action; Push(Stack, CurrentIn); - State = NewToken(); State->Type = STATE_ID; free(State->Value); @@ -1472,8 +1459,6 @@ ScriptEngineBooleanExpresssionParse( RhsSize = LalrGetRhsSize(StateId - 1); SemanticRule = &LalrSemanticRules[StateId - 1]; - - for (int i = 0; i < 2 * RhsSize; i++) { Temp = Pop(Stack); @@ -1491,15 +1476,13 @@ ScriptEngineBooleanExpresssionParse( } else { - RemoveToken(Temp); + RemoveToken(Temp); } } if (SemanticRule->Type == SEMANTIC_RULE) { if (!strcmp(SemanticRule->Value, "@PUSH")) { - - } else { @@ -1548,15 +1531,12 @@ ScriptEngineBooleanExpresssionParse( if (EndToken) RemoveToken(EndToken); - if (Stack) RemoveTokenList(Stack); if (CurrentIn) RemoveToken(CurrentIn); - - return Message; } /** diff --git a/hyperdbg/script-engine/script-engine.h b/hyperdbg/script-engine/script-engine.h index 609cae88..113e5c2f 100644 --- a/hyperdbg/script-engine/script-engine.h +++ b/hyperdbg/script-engine/script-engine.h @@ -45,6 +45,8 @@ __declspec(dllexport) BOOLEAN ScriptEngineConvertFileToPdbFileAndGuidAndAgeDetails(const char * LocalFilePath, char * PdbFilePath, char * GuidAndAgeDetails); __declspec(dllexport) BOOLEAN ScriptEngineSymbolInitLoad(PVOID BufferToStoreDetails, UINT32 StoredLength, BOOLEAN DownloadIfAvailable, const char * SymbolPath, BOOLEAN IsSilentLoad); +__declspec(dllexport) VOID + ScriptEngineSymbolAbortLoading(); typedef enum _SCRIPT_ENGINE_ERROR_TYPE { @@ -87,13 +89,13 @@ __declspec(dllexport) PSYMBOL_BUFFER ScriptEngineParse(char * str); char * ScriptEngineBooleanExpresssionParse( - UINT64 BooleanExpressionSize, - TOKEN FirstToken, - TOKEN_LIST MatchedStack, - PSYMBOL_BUFFER CodeBuffer, - char * str, - char * c, - PSCRIPT_ENGINE_ERROR_TYPE Error); + UINT64 BooleanExpressionSize, + TOKEN FirstToken, + TOKEN_LIST MatchedStack, + PSYMBOL_BUFFER CodeBuffer, + char * str, + char * c, + PSCRIPT_ENGINE_ERROR_TYPE Error); UINT64 BooleanExpressionExtractEnd(char * str, BOOL * WaitForWaitStatementBooleanExpression); diff --git a/hyperdbg/symbol-parser/symbol-parser.cpp b/hyperdbg/symbol-parser/symbol-parser.cpp index b3de0b80..0e8222d1 100644 --- a/hyperdbg/symbol-parser/symbol-parser.cpp +++ b/hyperdbg/symbol-parser/symbol-parser.cpp @@ -17,6 +17,7 @@ // std::vector g_LoadedModules; BOOLEAN g_IsLoadedModulesInitialized = FALSE; +BOOLEAN g_AbortLoadingExecution = FALSE; CHAR * g_CurrentModuleName = NULL; CHAR g_NtModuleName[_MAX_FNAME] = {0}; @@ -1147,6 +1148,14 @@ SymbolInitLoad(PVOID BufferToStoreDetails, // for (size_t i = 0; i < StoredLength / sizeof(MODULE_SYMBOL_DETAIL); i++) { + // + // Check for abort + // + if (g_AbortLoadingExecution) + { + g_AbortLoadingExecution = FALSE; + return FALSE; + } // // Check if symbol pdb detail is available in the module // @@ -1295,6 +1304,7 @@ SymbolPDBDownload(std::string SymName, std::string GUID, std::string SymPath, BO } HRESULT Result = URLDownloadToFileA(NULL, DownloadURL.c_str(), (SymFullDir + "\\" + SymName).c_str(), 0, NULL); + if (Result == S_OK) { if (!IsSilentLoad) @@ -1313,3 +1323,19 @@ SymbolPDBDownload(std::string SymName, std::string GUID, std::string SymPath, BO return FALSE; } + +/** + * @brief In the case of pressing CTRL+C, it sets a flag + * to abort the execution of 'reload'ing and 'download'ing + * + * return VOID + */ +VOID +SymbolAbortLoading() +{ + if (!g_AbortLoadingExecution) + { + g_AbortLoadingExecution = TRUE; + printf("\naborting, please wait...\n"); + } +} diff --git a/hyperdbg/symbol-parser/symbol-parser.h b/hyperdbg/symbol-parser/symbol-parser.h index 87c9869d..c51893b2 100644 --- a/hyperdbg/symbol-parser/symbol-parser.h +++ b/hyperdbg/symbol-parser/symbol-parser.h @@ -45,6 +45,7 @@ __declspec(dllexport) UINT64 SymConvertNameToAddress(const char * FunctionOrVari __declspec(dllexport) BOOLEAN SymConvertFileToPdbPath(const char * LocalFilePath, char * ResultPath); __declspec(dllexport) BOOLEAN SymConvertFileToPdbFileAndGuidAndAgeDetails(const char * LocalFilePath, char * PdbFilePath, char * GuidAndAgeDetails); __declspec(dllexport) BOOLEAN SymbolInitLoad(PVOID BufferToStoreDetails, UINT32 StoredLength, BOOLEAN DownloadIfAvailable, const char * SymbolPath, BOOLEAN IsSilentLoad); +__declspec(dllexport) VOID SymbolAbortLoading(); } ////////////////////////////////////////////////// @@ -71,3 +72,6 @@ SymTagStr(ULONG Tag); BOOLEAN SymbolPDBDownload(std::string SymName, std::string GUID, std::string SymPath, BOOLEAN IsSilentLoad); + +VOID +SymbolAbortLoading();