add aborting mechanism in downloading symbols

This commit is contained in:
SinaKarvandi 2021-09-01 16:01:45 +04:30
parent c2c317de41
commit bf7ac5daef
15 changed files with 260 additions and 190 deletions

View file

@ -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

View file

@ -44,6 +44,9 @@ ScriptEngineSymbolInitLoadWrapper(PMODULE_SYMBOL_DETAIL BufferToStoreDetails,
const char * SymbolPath,
BOOLEAN IsSilentLoad);
VOID
ScriptEngineSymbolAbortLoadingWrapper();
//////////////////////////////////////////////////
// Script Engine Wrapper //
//////////////////////////////////////////////////

View file

@ -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

View file

@ -131,7 +131,7 @@
<ClCompile Include="be.cpp" />
<ClCompile Include="bl.cpp" />
<ClCompile Include="bp.cpp" />
<ClCompile Include="breakcontrol.cpp" />
<ClCompile Include="break-control.cpp" />
<ClCompile Include="cls.cpp" />
<ClCompile Include="connect.cpp" />
<ClCompile Include="cpuid.cpp" />
@ -181,7 +181,7 @@
<ClCompile Include="r.cpp" />
<ClCompile Include="rdmsr.cpp" />
<ClCompile Include="readmem.cpp" />
<ClCompile Include="remoteconnection.cpp" />
<ClCompile Include="remote-connection.cpp" />
<ClCompile Include="s.cpp" />
<ClCompile Include="script.cpp" />
<ClCompile Include="settings.cpp" />

View file

@ -248,9 +248,6 @@
<ClCompile Include="events.cpp">
<Filter>Resource Files\Source Files\Debugger\Commands\Debugging Commands</Filter>
</ClCompile>
<ClCompile Include="breakcontrol.cpp">
<Filter>Resource Files\Source Files\Debugger\Essentials</Filter>
</ClCompile>
<ClCompile Include="g.cpp">
<Filter>Resource Files\Source Files\Debugger\Commands\Debugging Commands</Filter>
</ClCompile>
@ -293,9 +290,6 @@
<ClCompile Include="listen.cpp">
<Filter>Resource Files\Source Files\Debugger\Commands\Meta Commands</Filter>
</ClCompile>
<ClCompile Include="remoteconnection.cpp">
<Filter>Resource Files\Source Files\Debugger\Communication</Filter>
</ClCompile>
<ClCompile Include="status.cpp">
<Filter>Resource Files\Source Files\Debugger\Commands\Meta Commands</Filter>
</ClCompile>
@ -386,6 +380,12 @@
<ClCompile Include="x.cpp">
<Filter>Resource Files\Source Files\Debugger\Commands\Debugging Commands</Filter>
</ClCompile>
<ClCompile Include="break-control.cpp">
<Filter>Resource Files\Source Files\Debugger\Essentials</Filter>
</ClCompile>
<ClCompile Include="remote-connection.cpp">
<Filter>Resource Files\Source Files\Debugger\Communication</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<MASM Include="AsmVmxChecks.asm">

View file

@ -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};
}

View file

@ -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.
//

View file

@ -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<char> 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;
}
/**

View file

@ -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("") &&

View file

@ -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:

View file

@ -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;
}
/**

View file

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

View file

@ -17,6 +17,7 @@
//
std::vector<PSYMBOL_LOADED_MODULE_DETAILS> 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");
}
}

View file

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