49{
   55    UINT32                             ActionBreakToDebuggerLength = 0;
 
   56    UINT32                             ActionCustomCodeLength      = 0;
 
   57    UINT32                             ActionScriptLength          = 0;
 
   58    vector<string>                     SplitCommandCaseSensitive {
Split(Command, 
' ')};
 
   62 
   63    
   64    
   65    
   66    
   68            &SplitCommand,
   69            &SplitCommandCaseSensitive,
   71            &Event,
   72            &EventLength,
   73            &ActionBreakToDebugger,
   74            &ActionBreakToDebuggerLength,
   75            &ActionCustomCode,
   76            &ActionCustomCodeLength,
   77            &ActionScript,
   78            &ActionScriptLength,
   79            &EventParsingErrorCause))
   80    {
   81        return;
   82    }
   83 
   84    
   85    
   86    
   88    {
   89        ShowMessages(
"the utilization of 'post' or 'all' event calling stages is not meaningful " 
   90                     "for the mode (user-mode/kernel-mode) change traps; therefore, this command does not support them\n");
   91 
   93        return;
   94    }
   95 
   96    
   97    
   98    
   99    if (SplitCommand.size() > 2)
  100    {
  103 
  105        return;
  106    }
  107 
  108    
  109    
  110    
  111    for (auto Section : SplitCommand)
  112    {
  113        if (!Section.compare("!mode"))
  114        {
  115            continue;
  116        }
  117        else if (!Section.compare("u") && !SetMode)
  118        {
  121        }
  122        else if (!Section.compare("k") && !SetMode)
  123        {
  126        }
  127        else if ((!Section.compare("uk") || !Section.compare("ku")) && !SetMode)
  128        {
  131        }
  132        else
  133        {
  134            
  135            
  136            
  138                         Section.c_str());
  139 
  141 
  143        }
  144    }
  145 
  146    
  147    
  148    
  149    if (!SetMode)
  150    {
  151        ShowMessages(
"please specify the mode(s) that you want to intercept their execution (u, k, ku)\n");
 
  152 
  154        return;
  155    }
  156 
  157    
  158    
  159    
  161    {
  162        ShowMessages(
"this event only applies to the selected process(es). please specify " 
  163                     "the 'pid' or the process id of the target process that you want to trap its execution\n");
  164 
  166        return;
  167    }
  168 
  169    
  170    
  171    
  173 
  174    
  175    
  176    
  178    {
  179        
  180        
  181        
  182        
  183        
  184 
  186        return;
  187    }
  188 
  189    
  190    
  191    
  193                               ActionBreakToDebugger,
  194                               ActionBreakToDebuggerLength,
  195                               ActionCustomCode,
  196                               ActionCustomCodeLength,
  197                               ActionScript,
  198                               ActionScriptLength))
  199    {
  200        
  201        
  202        
  203 
  205        return;
  206    }
  207}
UCHAR BOOLEAN
Definition BasicTypes.h:39
#define TRUE
Definition BasicTypes.h:55
#define FALSE
Definition BasicTypes.h:54
unsigned __int64 UINT64
Definition BasicTypes.h:21
unsigned int UINT32
Definition BasicTypes.h:48
#define DEBUGGER_EVENT_APPLY_TO_ALL_PROCESSES
Apply the event to all the processes.
Definition Constants.h:617
@ VMM_CALLBACK_CALLING_STAGE_PRE_EVENT_EMULATION
Definition DataTypes.h:93
const vector< string > Split(const string &s, const char &c)
general split command
Definition common.cpp:117
VOID FreeEventsAndActionsMemory(PDEBUGGER_GENERAL_EVENT_DETAIL Event, PDEBUGGER_GENERAL_ACTION ActionBreakToDebugger, PDEBUGGER_GENERAL_ACTION ActionCustomCode, PDEBUGGER_GENERAL_ACTION ActionScript)
Deallocate buffers relating to events and actions.
Definition debugger.cpp:2292
BOOLEAN InterpretGeneralEventAndActionsFields(vector< string > *SplitCommand, vector< string > *SplitCommandCaseSensitive, VMM_EVENT_TYPE_ENUM EventType, PDEBUGGER_GENERAL_EVENT_DETAIL *EventDetailsToFill, PUINT32 EventBufferLength, PDEBUGGER_GENERAL_ACTION *ActionDetailsToFillBreakToDebugger, PUINT32 ActionBufferLengthBreakToDebugger, PDEBUGGER_GENERAL_ACTION *ActionDetailsToFillCustomCode, PUINT32 ActionBufferLengthCustomCode, PDEBUGGER_GENERAL_ACTION *ActionDetailsToFillScript, PUINT32 ActionBufferLengthScript, PDEBUGGER_EVENT_PARSING_ERROR_CAUSE ReasonForErrorInParsing)
Interpret general event fields.
Definition debugger.cpp:2342
BOOLEAN SendEventToKernel(PDEBUGGER_GENERAL_EVENT_DETAIL Event, UINT32 EventBufferLength)
Register the event to the kernel.
Definition debugger.cpp:1969
BOOLEAN RegisterActionToEvent(PDEBUGGER_GENERAL_EVENT_DETAIL Event, PDEBUGGER_GENERAL_ACTION ActionBreakToDebugger, UINT32 ActionBreakToDebuggerLength, PDEBUGGER_GENERAL_ACTION ActionCustomCode, UINT32 ActionCustomCodeLength, PDEBUGGER_GENERAL_ACTION ActionScript, UINT32 ActionScriptLength)
Register the action to the event.
Definition debugger.cpp:2086
VOID ShowMessages(const char *Fmt,...)
Show messages.
Definition libhyperdbg.cpp:96
VOID CommandModeHelp()
help of the !mode command
Definition mode.cpp:20
NULL()
Definition test-case-generator.py:530
UINT64 OptionalParam1
Definition Events.h:272
Each event can have multiple actions.
Definition Events.h:406
Each command is like the following struct, it also used for tracing works in user mode and sending it...
Definition Events.h:350
DEBUGGER_EVENT_OPTIONS Options
Definition Events.h:391
VMM_CALLBACK_EVENT_CALLING_STAGE_TYPE EventStage
Definition Events.h:369
UINT32 ProcessId
Definition Events.h:360