mirror of
https://github.com/HyperDbg/HyperDbg.git
synced 2026-07-10 01:29:59 +00:00
add aborting mechanism in downloading symbols
This commit is contained in:
parent
c2c317de41
commit
bf7ac5daef
15 changed files with 260 additions and 190 deletions
|
|
@ -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
|
||||
|
|
@ -44,6 +44,9 @@ ScriptEngineSymbolInitLoadWrapper(PMODULE_SYMBOL_DETAIL BufferToStoreDetails,
|
|||
const char * SymbolPath,
|
||||
BOOLEAN IsSilentLoad);
|
||||
|
||||
VOID
|
||||
ScriptEngineSymbolAbortLoadingWrapper();
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
// Script Engine Wrapper //
|
||||
//////////////////////////////////////////////////
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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" />
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
|
|
|||
|
|
@ -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};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
//
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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("") &&
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue