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();