-
Notifications
You must be signed in to change notification settings - Fork 66
Expand file tree
/
Copy pathSample2
More file actions
1138 lines (943 loc) · 63.7 KB
/
Sample2
File metadata and controls
1138 lines (943 loc) · 63.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
static string TaskString =
"Your current task is to: Find the command to load the application located at 'D:\\SteamLibrary\\steamapps\\common\\10 Miles To Safety\\TenMilesToSafety\\Binaries\\Win64\\TenMilesToSafety-Win64-Shipping.exe', " +
"then find which method is best to create a Speedhack for the video game. You may label and comment the binary, " +
"but do not write any memory to the binary. Once done, state the exact steps required for the least amount of resistant to pull off the speed hack.";
static string initialPrompt = $@"You are an AI assistant with access to an MCP (Model Context Protocol) server for x64dbg Debugger. Your goal is to complete tasks by calling the available commands on this server.
When you need to execute a command, output ONLY the command on a line, followed by the command name and parameters in the format: paramName=""value"".
Example:
my_command input_path=""C:\\path\\file.txt"", verbose=""true""
Wait for the result of the command before deciding your next step. I will provide the result of each command you issue. Before you start you should also call Help to see the latest function, then find the command to show you how to load the application.
While reviewing the Debugger commands you'll have to review the ""DebugControl"" area of the documentation.
Once you have tha Application loaded in the debugger, use 'Refresh' to see new available commands as well and 'Help' again to see their updated documentation. If the command returns ""True"", then the command was successfully executed and you may move to the next step.
{TaskString}
To get the Modules EntryPoint use the command: DbgValFromString value=""?entry""
To get the base address of a module use the command: DbgValFromString value=""ModuleName.exe""
To get the result of the last command executed use: DbgValFromString value=""$VariableName"" Example: DbgValFromString value=""$result""
To get address results from findallmem scans: DbgValFromString value=ref.addr(zeroBasedIndex) Example: DbgValFromString value=ref.addr(0)
Start by determining the first command you need to issue to begin this task. Remember to not use any prefix when you want to execute a command, just the command and the arguments itself.
# MCP Integration Guide for AI Assistants
## Overview
You are connected to a Model Context Protocol(MCP) server that provides dynamic capabilities through various tools and commands.These tools are not fixed but can change over time as the server evolves, requiring you to adapt to new capabilities.
This guide will help you understand how to discover and interact with the available tools correctly.
## Tool Discovery
When interacting with users, you will receive information about available tools from the MCP server. Each tool has the following properties:
- `name`: The unique identifier of the tool
- `description`: A human-readable description of what the tool does
- `inputSchema`: A schema describing the parameters the tool accepts
## Command Execution
### Basic Command Structure
When a user asks you to perform a task that requires using a server tool, follow this pattern:
1. Determine which tool is appropriate for the task
2. Format the parameters according to the tool's inputSchema
3. Call the tool with properly formatted parameters
### Parameter Types
Tools may require different parameter types:
- **Strings**: Simple text values (`""example""`)
- **Numbers**: Integer or decimal values (`42`, `3.14`)
- **Booleans**: True/false values (`true`, `false`)
- **Arrays**: Collections of values, which must be properly formatted
### Working with Commands with multiple arguments or parameters
When executing a command with multiple arguments or parameters, ensure each argument is separated by a Comma "","" followed by the variable=value. DO NOT ESCAPE SPECIAL CHARATERS!
1. **Multiple arguments / parameters** use Commas to separate each parameter=value from the next.
```
Command Param1=Value1, Param2=Value2, Param3=Value3
Command Param1=C:\\Path To\Program.exe, Param2=ArgumentValue2, Param3=ArgVal3
```
### Working with Arrays
Many tools accept array parameters. When passing arrays, format them as follows:
1. **String Arrays**: Use the pipe (`|`) separator between elements
```
Command arrayParam=value1|value2|value3
```
2. **Nested Arrays**: For more complex nested arrays, follow the specific format required by the tool's schema
## Example Scenarios
Here are examples showing how to interact with various tools:
### Example 1: Simple String Parameter
If a tool named ""Echo"" requires a ""message"" parameter:
```
Echo message=Hello world
```
### Example 2: Multiple Parameters
If a tool named ""GetWeather"" requires ""latitude"" and ""longitude"" parameters separate each parameters by a comma "","":
```
GetWeather latitude=40.7128, longitude=-74.0060
```
If command fails, return message will be -> Missing required parameter...
### Example 3: Array Parameter
If a tool named ""ProcessItems"" requires an array of strings:
```
ProcessItems items=apple|banana|orange
```
### Example 4: Complex Parameters
If a tool has multiple parameter types, ensure to separate each Param by a comma "","":
```
AnalyzeData values=10|20|30,threshold=5.5,enableFiltering=true
```
### Example 5: Batching multiple commands
Always batch commands when possible.
```
I will attempt to batch these three commands
AnalyzeData values=10|20|30,threshold=5.5,enableFiltering=true
GetWeather latitude=40.7128, longitude=-74.0060
Echo message=Hello world
```
## Best Practices
1. **Always check available tools first** before attempting to use them
2. **Review parameter requirements** in the tool's inputSchema
3. **Format parameters correctly** according to their expected types
4. **Handle errors gracefully** if a tool is unavailable or parameters are invalid
5. **Use command aliases** when appropriate (some commands may have shorthand aliases)
6. **Do not escape out quotes or symbols within the command line arguments, especially when using ExecuteDebuggerCommand.
## Parameter Validation
Before calling a tool, ensure:
1. All required parameters are provided
2. Parameter values match the expected types
3. Array parameters are properly formatted with the pipe separator
## Handling Tool Updates
Since the server capabilities can change, periodically check for updated tools during long conversations. If a user reports a tool isn't working as expected, recommend refreshing the available tools list.
## Common Errors and Solutions
- **""Unknown command""**: The tool name may have changed or been removed. Check available tools.
- **""Missing required parameter""**: Ensure all required parameters are provided.
- **""Cannot convert parameter""**: Ensure parameter types match what the tool expects.
Remember, the MCP server's capabilities are dynamic. Always adapt to the current set of available tools rather than assuming specific tools will be available.
Once all task are completed type: exit
";
Registering tool: StartMCPServer
Registering tool: StopMCPServer
Registering tool: ExecuteDebuggerCommand
Registering tool: ListDebuggerCommands
Registering tool: DbgValFromString
Registering tool: ExecuteDebuggerCommandDirect
Registering tool: Echo
Registered 7 commands from the server.
MCP Client Started!
Enter a command (or exit to quit or help for available commands):
> Okay, I understand the task. I need to load the specified game executable into x64dbg via the MCP server, then investigate potential speedhack methods, and finally report the steps for the most straightforward approach.
First, I need to see the available commands.
Help
Help Menu and Available commands:
- StartMCPServer: Command: StartMCPServer
Required parameters: args
Parameters:
args (array): Parameter for StartMCPServer
- StopMCPServer: Command: StopMCPServer
Required parameters: args
Parameters:
args (array): Parameter for StopMCPServer
- ExecuteDebuggerCommand: Example: ExecuteDebuggerCommand command=init c:\Path\To\Program.exe
Note: See ListDebuggerCommands for list of applicable commands.
Required parameters: command
Parameters:
command (string): Parameter for ExecuteDebuggerCommand
- ListDebuggerCommands: Example: ListDebuggerCommands
Parameters:
subject (string): Parameter for ListDebuggerCommands
- DbgValFromString: Example: DbgValFromString value=$pid
Required parameters: value
Parameters:
value (string): value to pass to command (Example format: 100)
- ExecuteDebuggerCommandDirect: Command: ExecuteDebuggerCommandDirect
Required parameters: args
Parameters:
args (array): Parameter for ExecuteDebuggerCommandDirect
- Echo: Echoes the input back to the client.
Required parameters: message
Parameters:
message (string):
Special commands:
- help: Display this help information
- refresh: Refresh the list of available commands from the server
- exit: Exit the application
Enter a command (or exit to quit or help for available commands):
> Okay, let's start by listing the available debugger commands, specifically focusing on the "DebugControl" area as suggested.
ListDebuggerCommands subject="DebugControl"
Invoking command from line 'ListDebuggerCommands subject="DebugControl"'...
Response:
Debugger Command Help Manual
InitDebug
ExecuteDebuggerCommand command = InitDebug executable_path [command_line] [current_folder]
[string]executable_path = Path to the executable file to debug. If a full path is not provided, the current directory is used. Enclose paths with spaces in quotation marks.
[optional string]command_line = Command line arguments to pass to the process.
[optional string]current_folder = Working directory for the process.
Description: Initializes the debugger by loading the specified executable, performing basic checks, setting breakpoints on TLS callbacks (if present), and at the process entry point. It breaks at the system breakpoint before returning control to the user. Aliases: initdbg, init.
Result: Sets the process ID ($pid) and process handle ($hp, $hProcess) variables.
Example:
ExecuteDebuggerCommand command = InitDebug "D:\My Path with a space in it\MyProgram.exe" //Folder with spaces in the path
ExecuteDebuggerCommand command = "init notepad.exe,C:\MyLog.txt,C:\Temp" //With Arguments
Return: True/False
Note: If the return value is True, then the command executed successfully, however, a subsequent check for the processes PID will need to be ran to confirm if a valid process has executed. To confirm, check if the return value of 'DbgValFromString value=$pid' is greater than zero.
Note: Do not escape out special characters when executing Init/InitDebug
StopDebug
ExecuteDebuggerCommand command = StopDebug
Description: Stops the current debugging session and detaches from the debuggee. Aliases: stop, dbgstop.
Result: Clears the process ID ($pid) and process handle ($hp, $hProcess) variables.
Example:
ExecuteDebuggerCommand command = "stop"
AttachDebugger
ExecuteDebuggerCommand command = AttachDebugger pid [event_handle] [tid]
[integer]pid = Process Identifier (PID) of the running process.
[optional handle]event_handle = Handle to an event object to signal (for internal use).
[optional integer]tid = Thread Identifier (TID) of the thread to resume after attaching (for internal use).
Description: Attaches the debugger to a running process. Alias: attach.
Result: Sets the process ID ($pid) and process handle ($hp, $hProcess) variables.
Example:
ExecuteDebuggerCommand command = "attach 1234"
DetachDebugger
ExecuteDebuggerCommand command = DetachDebugger
Description: Detaches the debugger from the debuggee, allowing it to continue running independently. Alias: detach.
Result: Clears the process ID ($pid) and process handle ($hp, $hProcess) variables.
Example:
ExecuteDebuggerCommand command = "detach"
run
ExecuteDebuggerCommand command = run
Description: Resumes execution of the debuggee from the current position. Aliases: go, r, g.
Example:
ExecuteDebuggerCommand command = "go"
erun
ExecuteDebuggerCommand command = erun
Description: Resumes execution of the debuggee and ignores any exceptions that occur. Aliases: ego, er, eg.
Example:
ExecuteDebuggerCommand command = "erun"
serun
ExecuteDebuggerCommand command = serun
Description: Resumes execution of the debuggee, ignoring the current exception and any new exceptions that occur. Aliases: sego.
Example:
ExecuteDebuggerCommand command = "sego"
pause
ExecuteDebuggerCommand command = pause
Description: Pauses the execution of the debuggee.
Example:
ExecuteDebuggerCommand command = "pause"
DebugContinue
ExecuteDebuggerCommand command = DebugContinue
Description: Continues execution of the debuggee after handling an exception. Alias: con.
Example:
ExecuteDebuggerCommand command = "con"
StepInto
ExecuteDebuggerCommand command = StepInto
Description: Executes the next instruction, stepping into function calls. Alias: sti.
Example:
ExecuteDebuggerCommand command = "sti"
eStepInto
ExecuteDebuggerCommand command = eStepInto
Description: Executes the next instruction, stepping into function calls, and ignores any exceptions. Alias: esti.
Example:
ExecuteDebuggerCommand command = "esti"
seStepInto
ExecuteDebuggerCommand command = seStepInto
Description: Executes the next instruction, stepping into function calls, and ignores the current and any new exceptions. Alias: sesti.
Example:
ExecuteDebuggerCommand command = "sesti"
StepOver
ExecuteDebuggerCommand command = StepOver
Description: Executes the next instruction, stepping over function calls. Aliases: step, sto, st.
Example:
ExecuteDebuggerCommand command = "step"
eStepOver
ExecuteDebuggerCommand command = eStepOver
Description: Executes the next instruction, stepping over function calls, and ignores any exceptions. Aliases: estep, esto, est.
Example:
ExecuteDebuggerCommand command = "estep"
seStepOver
ExecuteDebuggerCommand command = seStepOver
Description: Executes the next instruction, stepping over function calls, and ignores the current and any new exceptions. Aliases: sestep, sesto, sest.
Example:
ExecuteDebuggerCommand command = "sestep"
StepOut
ExecuteDebuggerCommand command = StepOut
Description: Runs until the current function returns. Alias: rtr.
Example:
ExecuteDebuggerCommand command = "rtr"
eStepOut
ExecuteDebuggerCommand command = eStepOut
Description: Runs until the current function returns, ignoring any exceptions. Alias: ertr.
Example:
ExecuteDebuggerCommand command = "ertr"
skip
ExecuteDebuggerCommand command = skip [count]
[optional integer]count = Number of instructions to skip. Defaults to 1 if not specified.
Description: Skips the next instruction, swallowing the current exception if present. Useful for continuing after an INT3 instruction.
Example:
ExecuteDebuggerCommand command = "skip"
ExecuteDebuggerCommand command = "skip 3"
InstrUndo
ExecuteDebuggerCommand command = InstrUndo
Description: Undoes the last instruction executed.
Example:
ExecuteDebuggerCommand command = "InstrUndo"
StepUser
ExecuteDebuggerCommand command = StepUser
Description: Steps into user code, skipping system and library calls. Alias: StepUserInto.
Example:
ExecuteDebuggerCommand command = "StepUser"
StepSystem
ExecuteDebuggerCommand command = StepSystem
Description: Steps into system code, used when skipping over user-mode instructions is desired. Alias: StepSystemInto.
Example:
ExecuteDebuggerCommand command = "StepSystem"
DebugBreak
ExecuteDebuggerCommand command = DebugBreak
Description: Inserts a software breakpoint at the current instruction pointer. Execution will break when this point is reached again. Alias: int3.
Example:
ExecuteDebuggerCommand command = "int3"
StopTracking
ExecuteDebuggerCommand command = StopTracking
Description: Stops instruction tracking and clears the instruction history buffer.
Example:
ExecuteDebuggerCommand command = "StopTracking"
TraceInto
ExecuteDebuggerCommand command = TraceInto
Description: Begins tracing into instructions until a return is hit or user interrupts it. Alias: ti.
Example:
ExecuteDebuggerCommand command = "ti"
TraceOver
ExecuteDebuggerCommand command = TraceOver
Description: Begins tracing over function calls instead of stepping into them. Alias: to.
Example:
ExecuteDebuggerCommand command = "to"
RunTo
ExecuteDebuggerCommand command = RunTo address
[integer or label]address = The address or label to run to.
Description: Runs execution until the specified address is reached. Alias: rt.
Example:
ExecuteDebuggerCommand command = "RunTo 0x00401050"
ExecuteDebuggerCommand command = "rt MyLabel"
SetEntryBreak
ExecuteDebuggerCommand command = SetEntryBreak enable
[boolean]enable = Set to 1 to enable, 0 to disable the entry point breakpoint.
Description: Enables or disables a breakpoint at the program entry point.
Example:
ExecuteDebuggerCommand command = "SetEntryBreak 1"
ExecuteDebuggerCommand command = "SetEntryBreak 0"
SetTlsBreak
ExecuteDebuggerCommand command = SetTlsBreak enable
[boolean]enable = Set to 1 to enable, 0 to disable TLS callback breakpoints.
Description: Enables or disables breakpoints on TLS callback functions.
Example:
ExecuteDebuggerCommand command = "SetTlsBreak 1"
ExecuteDebuggerCommand command = "SetTlsBreak 0"
Enter a command (or exit to quit or help for available commands):
> Okay, I see the `InitDebug` command is used to load an executable. I will now load the specified application.
ExecuteDebuggerCommand command=InitDebug "D:\SteamLibrary\steamapps\common\10 Miles To Safety\TenMilesToSafety\Binaries\Win64\TenMilesToSafety-Win64-Shipping.exe"
Invoking command from line 'ExecuteDebuggerCommand command=InitDebug "D:\SteamLibrary\steamapps\common\10 Miles To Safety\TenMilesToSafety\Binaries\Win64\TenMilesToSafety-Win64-Shipping.exe"'...
Response:
True
Enter a command (or exit to quit or help for available commands):
> Great, the application is loaded. Now I need to refresh the available commands and check the help again to see what new commands are available now that the debugger is active.
Refresh
Registering tool: StartMCPServer
Registering tool: StopMCPServer
Registering tool: ExecuteDebuggerCommand
Registering tool: ListDebuggerCommands
Registering tool: DbgValFromString
Registering tool: ExecuteDebuggerCommandDirect
Registering tool: WriteMemToAddress
Registering tool: CommentOrLabelAtAddress
Registering tool: GetLabel
Registering tool: GetAllModulesFromMemMap
Registering tool: GetCallStack
Registering tool: GetAllActiveThreads
Registering tool: GetAllRegisters
Registering tool: ReadDismAtAddress
Registering tool: DumpModuleToFile
Registering tool: Echo
Registered 16 commands from the server.
Enter a command (or exit to quit or help for available commands):
> Okay, the command list has been refreshed. Let's see the updated help documentation to understand the new commands, especially those related to memory, symbols, searching, and disassembly.
Help
Help Menu and Available commands:
- StartMCPServer: Command: StartMCPServer
Required parameters: args
Parameters:
args (array): Parameter for StartMCPServer
- StopMCPServer: Command: StopMCPServer
Required parameters: args
Parameters:
args (array): Parameter for StopMCPServer
- ExecuteDebuggerCommand: Example: ExecuteDebuggerCommand command=init c:\Path\To\Program.exe
Note: See ListDebuggerCommands for list of applicable commands.
Required parameters: command
Parameters:
command (string): Parameter for ExecuteDebuggerCommand
- ListDebuggerCommands: Example: ListDebuggerCommands
Parameters:
subject (string): Parameter for ListDebuggerCommands
- DbgValFromString: Example: DbgValFromString value=$pid
Required parameters: value
Parameters:
value (string): value to pass to command (Example format: 100)
- ExecuteDebuggerCommandDirect: Command: ExecuteDebuggerCommandDirect
Required parameters: args
Parameters:
args (array): Parameter for ExecuteDebuggerCommandDirect
- WriteMemToAddress: Example: WriteMemToAddress address=0x12345678, byteString=0F FF 90
Required parameters: address, byteString
Parameters:
address (string): Address to target with function (Example format: 0x12345678)
byteString (string): Writes the provided Hex bytes .. .. (Example format: byteString=00 90 0F)
- CommentOrLabelAtAddress: Example: CommentOrLabelAtAddress address=0x12345678, value=LabelTextGoeshere, mode=Label
Example: CommentOrLabelAtAddress address=0x12345678, value=LabelTextGoeshere, mode=Comment
Required parameters: address, value
Parameters:
address (string): Address to target with function (Example format: 0x12345678)
value (string): value to pass to command (Example format: 100)
mode (string): mode=[Comment | Label] (Example format: mode=Comment)
- GetLabel: Example: GetLabel addressStr=0x12345678
Required parameters: addressStr
Parameters:
addressStr (string): Parameter for GetLabel
- GetAllModulesFromMemMap: Example: GetAllModulesFromMemMap
- GetCallStack: Example: GetCallStack
Example: GetCallStack, maxFrames=32
Parameters:
maxFrames (integer): Parameter for GetCallStack
- GetAllActiveThreads: Example: GetAllActiveThreads
- GetAllRegisters: Example: GetAllRegisters
- ReadDismAtAddress: Example: ReadDismAtAddress address=0x12345678, byteCount=100
Required parameters: address, byteCount
Parameters:
address (string): Address to target with function (Example format: 0x12345678)
byteCount (integer): Count of how many bytes to request for (Example format: 100)
- DumpModuleToFile: Example: DumpModuleToFile pfilepath=C:\Output.txt
Required parameters: pfilepath
Parameters:
pfilepath (array): File path (Example format: C:\output.txt)
- Echo: Echoes the input back to the client.
Required parameters: message
Parameters:
message (string):
Special commands:
- help: Display this help information
- refresh: Refresh the list of available commands from the server
- exit: Exit the application
Enter a command (or exit to quit or help for available commands):
> Okay, I understand the process. To find the best method for a speedhack without modifying memory, I need to investigate how the game handles timing. Common functions used for this are `GetTickCount64` and `QueryPerformanceCounter`. I'll focus on `QueryPerformanceCounter` as it's frequently used in games for higher precision timing.
My plan is:
1. Find the address of `QueryPerformanceCounter`.
2. Find where the game code calls this function.
3. Examine the code immediately following the call to understand how the time value is processed.
4. Identify the ideal point to conceptually modify the time delta for the speedhack.
5. Describe the steps required to implement the speedhack at that point.
First, let's list the debugger commands related to searching to see how I can find references or patterns.
ListDebuggerCommands subject="Searching"
Invoking command from line 'ListDebuggerCommands subject="Searching"'...
Response:
Unknown subject group. Try one of:
- DebugControl
- GUI
- Search
- ThreadControl
Enter a command (or exit to quit or help for available commands):
> My mistake. Let's try the correct subject name.
ListDebuggerCommands subject="Search"
Invoking command from line 'ListDebuggerCommands subject="Search"'...
Response:
find
ExecuteDebuggerCommand command = find start_address pattern [size]
[integer]start_address = The address to start searching from. The search stops at the end of the memory page.
[string]pattern = The byte pattern to search for, which can include wildcards (e.g., 'EB0?90??8D').
[optional integer]size = The size of the data to search in. Defaults to the size of the memory region.
Description: Find a pattern in a memory page.
Result: $result (integer) = The virtual address where the pattern is found, or 0 if not found.
Example:
ExecuteDebuggerCommand command = "find 0x00401000 EB0?90??8D"
ExecuteDebuggerCommand command = "find $csp 558BEC5??"
findall
ExecuteDebuggerCommand command = findall start_address pattern [size]
[integer]start_address = The address to start searching from. The search stops at the end of the memory page.
[string]pattern = The byte pattern to search for, which can include wildcards (e.g., 'EB0?90??8D').
[optional integer]size = The size of the data to search in. Defaults to the size of the memory region.
Description: Find all occurrences of a pattern in a memory page.
Result: $result (integer) = The number of occurrences found.
Example:
ExecuteDebuggerCommand command = "findall 0x00401000 558BEC"
ExecuteDebuggerCommand command = "findall MyFuncStart 90 0x100"
findallmem
ExecuteDebuggerCommand command = findallmem start_address pattern [size] [region]
[integer]start_address = The address to start searching from.
[string]pattern = The byte pattern to search for, which can include wildcards (e.g., 'EB0?90??8D').
[optional integer]size = The size of the data to search in. Defaults to the entire memory map (-1).
[optional string]region = Set to 'user', 'system', or 'module' to only include user modules, system modules, or a specific module in the search.
Description: Find all occurrences of a pattern in the entire memory map. Aliases: findmemall.
Result: $result (integer) = The number of occurrences found.
Example:
ExecuteDebuggerCommand command = "findallmem 0, 540065006e00" // Searching for the Unicode string "Ten" from the start of the application
ExecuteDebuggerCommand command = "findmemall 0x00400000, C3909090, -1, user"
findasm
ExecuteDebuggerCommand command = findasm instruction [address] [size]
[string]instruction = The instruction to look for (e.g., 'mov eax, ebx'). Ensure the instruction is quoted.
[optional integer]address = Address of or inside a memory page to look in. Defaults to the current instruction pointer (CIP) if not specified.
[optional integer]size = The size of the data to search in. Defaults to the size of the memory region.
Description: Find assembled instruction. Aliases: asmfind.
Result: $result (integer) = The number of references found.
Example:
ExecuteDebuggerCommand command = "findasm call eax"
ExecuteDebuggerCommand command = "asmfind push ebp, MyModuleBase, MyModuleSize"
findguid
ExecuteDebuggerCommand command = findguid [base_address] [size] [region]
[optional integer]base_address = The base of the memory range. Defaults to RIP or EIP if not specified.
[optional integer]size = The size of the memory range.
[optional integer]region = The region to search: 0 for current region, 1 for current module, 2 for all modules.
Description: Find references to a GUID. The referenced GUID must be registered in the system. Aliases: guidfind.
Result: $result (integer) = Set to 1 if any GUID is found, 0 otherwise.
Example:
ExecuteDebuggerCommand command = "findguid 0 0 2"
ExecuteDebuggerCommand command = "guidfind MyModuleBase 0x10000 1"
reffind
ExecuteDebuggerCommand command = reffind value [address] [size]
[integer]value = The value to look for.
[optional integer]address = Address of or inside a memory page to look in. Defaults to CIP if not specified.
[optional integer]size = The size of the data to search in.
Description: Find references to a certain value. Aliases: findref, ref.
Result: $result (integer) = The number of references found.
Example:
ExecuteDebuggerCommand command = "reffind 0x00402010"
ExecuteDebuggerCommand command = "ref MyDataPtr MyModuleBase MyModuleSize"
reffindrange
ExecuteDebuggerCommand command = reffindrange start_range [end_range] [address] [size]
[integer]start_range = Start of the range (inclusive).
[optional integer]end_range = End of the range (inclusive). Defaults to start_range if not specified.
[optional integer]address = Address of or inside a memory page to look in. Defaults to CIP if not specified.
[optional integer]size = The size of the data to search in.
Description: Find references to a certain range of values. Aliases: findrefrange, refrange.
Result: $result (integer) = The number of references found.
Example:
ExecuteDebuggerCommand command = "reffindrange 0x00401000 0x0040FFFF"
ExecuteDebuggerCommand command = "refrange $csp $csp+0x100 MyStackRegion MyStackSize"
refstr
ExecuteDebuggerCommand command = refstr [address] [size]
[optional integer]address = Address of or inside a memory page to find referenced text strings in. Defaults to the current instruction pointer (CIP) if not specified.
[optional integer]size = The size of the data to search in. Defaults to the size of the memory region containing the 'address'.
Description: Finds instructions/data within the specified memory range that reference (point to) potential text strings (ASCII/Unicode). Adds the addresses containing these references to the References view.
Result: $result (integer) = The number of potential string references found.
Aliases: strref
Example:
ExecuteDebuggerCommand command = "refstr" // Search the current page from CIP for string references
ExecuteDebuggerCommand command = "refstr MyModuleBase MyModuleSize" // Search within a module's range
ExecuteDebuggerCommand command = "strref $csp 0x1000" // Search 0x1000 bytes from current stack pointer
Enter a command (or exit to quit or help for available commands):
> Okay, let's start by finding the address of the `QueryPerformanceCounter` function. I'll try checking `kernelbase.dll` first.
DbgValFromString value="kernelbase.QueryPerformanceCounter"
Invoking command from line 'DbgValFromString value="kernelbase.QueryPerformanceCounter"'...
Response:
0x7FFD22EA3730
Enter a command (or exit to quit or help for available commands):
> Okay, I have the address of `QueryPerformanceCounter` (`0x7FFD22EA3730`). Now, I need to find where the main game executable (`TenMilesToSafety-Win64-Shipping.exe`) calls this function. To do that effectively, I first need the base address and size of the main game module.
Let's get the base address first.
DbgValFromString value="TenMilesToSafety-Win64-Shipping.exe"
Invoking command from line 'DbgValFromString value="TenMilesToSafety-Win64-Shipping.exe"'...
Response:
0x0
Enter a command (or exit to quit or help for available commands):
> That's unexpected. A base address of `0x0` usually means the module isn't loaded or the name is incorrect. However, `InitDebug` succeeded.
Let's try listing all loaded modules to find the correct base address and name for the main game executable.
GetAllModulesFromMemMap
Invoking command from line 'GetAllModulesFromMemMap'...
Response:
[GetAllModulesFromMemMap] Found 55 image modules:
Name Path Base Address End Address Size
------------------------------------------------------------------------------------------------------------------------------------------------------
xinput1_3.dll xinput1_3.dll 0x16515072 0x16637952 0x122880
x3daudio1_7.dll x3daudio1_7.dll 0x1673920512 0x1673957376 0x36864
tenmilestosafety-win64-shipping.exe tenmilestosafety-win64-shipping.exe 0x140697651249152 0x140697723518976 0x72269824
opengl32.dll opengl32.dll 0x140721476337664 0x140721477447680 0x1110016
resampledmo.dll resampledmo.dll 0x140723839303680 0x140723840040960 0x737280
dsound.dll dsound.dll 0x140723846905856 0x140723847524352 0x618496
winmmbase.dll winmmbase.dll 0x140723872399360 0x140723872612352 0x212992
msdmo.dll msdmo.dll 0x140723907526656 0x140723907596288 0x69632
d3d9.dll d3d9.dll 0x140723942981632 0x140723944747008 0x1765376
glu32.dll glu32.dll 0x140724054851584 0x140724055048192 0x196608
uiautomationcore.dll uiautomationcore.dll 0x140724448395264 0x140724452814848 0x4419584
xapofx1_5.dll xapofx1_5.dll 0x140724545191936 0x140724545277952 0x86016
vcruntime140_1.dll vcruntime140_1.dll 0x140724727316480 0x140724727365632 0x49152
msvcp140.dll msvcp140.dll 0x140724732231680 0x140724732809216 0x577536
vcruntime140.dll vcruntime140.dll 0x140724733018112 0x140724733140992 0x122880
winmm.dll winmm.dll 0x140724938801152 0x140724939034624 0x233472
winhttp.dll winhttp.dll 0x140725010563072 0x140725011742720 0x1179648
version.dll version.dll 0x140725025964032 0x140725026021376 0x57344
d3d11.dll d3d11.dll 0x140725079965696 0x140725082492928 0x2527232
apphelp.dll apphelp.dll 0x140725092220928 0x140725092872192 0x651264
directxdatabasehelper.dll directxdatabasehelper.dll 0x140725094318080 0x140725094715392 0x397312
dxgi.dll dxgi.dll 0x140725094907904 0x140725096157184 0x1249280
dwmapi.dll dwmapi.dll 0x140725096349696 0x140725096583168 0x233472
dxcore.dll dxcore.dll 0x140725097070592 0x140725097373696 0x303104
iphlpapi.dll iphlpapi.dll 0x140725116534784 0x140725116755968 0x221184
umpdc.dll umpdc.dll 0x140725120335872 0x140725120430080 0x94208
powrprof.dll powrprof.dll 0x140725120466944 0x140725120864256 0x397312
kernel.appcore.dll kernel.appcore.dll 0x140725123219456 0x140725123338240 0x118784
cfgmgr32.dll cfgmgr32.dll 0x140725137047552 0x140725137448960 0x401408
bcrypt.dll bcrypt.dll 0x140725139668992 0x140725139836928 0x167936
win32u.dll win32u.dll 0x140725141635072 0x140725141807104 0x172032
kernelbase.dll kernelbase.dll 0x140725141831680 0x140725145817088 0x3985408
wintypes.dll wintypes.dll 0x140725145829376 0x140725147316224 0x1486848
gdi32full.dll gdi32full.dll 0x140725147336704 0x140725148598272 0x1261568
bcryptprimitives.dll bcryptprimitives.dll 0x140725148647424 0x140725149286400 0x638976
msvcp_win.dll msvcp_win.dll 0x140725149302784 0x140725149982720 0x679936
ucrtbase.dll ucrtbase.dll 0x140725150023680 0x140725151391744 0x1368064
crypt32.dll crypt32.dll 0x140725151399936 0x140725152948224 0x1548288
advapi32.dll advapi32.dll 0x140725153562624 0x140725154304000 0x741376
wldap32.dll wldap32.dll 0x140725154349056 0x140725154836480 0x487424
msvcrt.dll msvcrt.dll 0x140725154873344 0x140725155577856 0x704512
shell32.dll shell32.dll 0x140725155987456 0x140725163507712 0x7520256
gdi32.dll gdi32.dll 0x140725164638208 0x140725164822528 0x184320
imm32.dll imm32.dll 0x140725168242688 0x140725168447488 0x204800
rpcrt4.dll rpcrt4.dll 0x140725168504832 0x140725169655808 0x1150976
ws2_32.dll ws2_32.dll 0x140725169750016 0x140725170237440 0x487424
normaliz.dll normaliz.dll 0x140725170274304 0x140725170319360 0x45056
kernel32.dll kernel32.dll 0x140725170733056 0x140725171560448 0x827392
ole32.dll ole32.dll 0x140725171585024 0x140725173260288 0x1675264
setupapi.dll setupapi.dll 0x140725173288960 0x140725178044416 0x4755456
combase.dll combase.dll 0x140725181677568 0x140725185368064 0x3690496
user32.dll user32.dll 0x140725185413120 0x140725187309568 0x1896448
sechost.dll sechost.dll 0x140725187313664 0x140725188005888 0x692224
oleaut32.dll oleaut32.dll 0x140725188034560 0x140725188923392 0x888832
ntdll.dll ntdll.dll 0x140725189214208 0x140725191716864 0x2502656
Enter a command (or exit to quit or help for available commands):
> Ah, it seems my attempt to get the base address using the full name failed. The `GetAllModulesFromMemMap` output shows the module name is indeed `tenmilestosafety-win64-shipping.exe`, but the base address listed (`0x140697651249152`) appears unusually large, likely a display issue or misinterpretation (perhaps decimal instead of hex). Converting `140697651249152` to hexadecimal gives `0x7FFA75F00000`. This seems like a more plausible base address for a 64-bit executable. The size is `0x72269824`.
Let's retry getting the base address using the name displayed in the list, just to be sure.
DbgValFromString value="tenmilestosafety-win64-shipping.exe"
Invoking command from line 'DbgValFromString value="tenmilestosafety-win64-shipping.exe"'...
Response:
0x0
Enter a command (or exit to quit or help for available commands):
> Okay, it seems `DbgValFromString` is not resolving the module name correctly. I'll use the base address provided by `GetAllModulesFromMemMap`. The base address is `0x140697651249152`, which translates to `0x7FFA75F00000` in hexadecimal. The size is `0x72269824`.
I previously found the address of `QueryPerformanceCounter` to be `0x7FFD22EA3730`.
Now, I will search for references to this address within the main game module's memory range using the `reffind` command.
ExecuteDebuggerCommand command=reffind 0x7FFD22EA3730 0x7FFA75F00000 0x72269824
Invoking command from line 'ExecuteDebuggerCommand command=reffind 0x7FFD22EA3730 0x7FFA75F00000 0x72269824'...
Response:
True
Enter a command (or exit to quit or help for available commands):
> The `reffind` command completed, but it doesn't directly return the list of found addresses; it populates the references view in the debugger GUI. To proceed, I need to find *how* the game calls `QueryPerformanceCounter`. Often, this is done indirectly via the Import Address Table (IAT).
The typical x64 instruction for an indirect call looks like `CALL QWORD PTR [address]`. In machine code, this is often `FF 15` followed by a RIP-relative offset to the pointer in the IAT, or sometimes `FF 25` for a JMP.
So, the strategy is:
1. Find the address in the IAT of `tenmilestosafety-win64-shipping.exe` that holds the pointer to `kernelbase.QueryPerformanceCounter` (`0x7FFD22EA3730`).
2. Search for `CALL` instructions (`FF 15` or similar) within the game's code that reference this IAT entry.
Let's first find where the address `0x7FFD22EA3730` is stored within the main module. This address, as an 8-byte QWORD in little-endian format, is `30 37 EA 22 FD 7F 00 00`. I will search for this byte pattern within the main module's memory range (`0x7FFA75F00000` to `0x7FFA75F00000 + 0x72269824`).
ExecuteDebuggerCommand command=findallmem 0x7FFA75F00000 "3037EA22FD7F0000" 0x72269824
Invoking command from line 'ExecuteDebuggerCommand command=findallmem 0x7FFA75F00000 "3037EA22FD7F0000" 0x72269824'...
Response:
True
Enter a command (or exit to quit or help for available commands):
> Okay, the `findallmem` command succeeded. Now I need to check how many times it found the pattern.
DbgValFromString value="$result"
Invoking command from line 'DbgValFromString value="$result"'...
Response:
0x0
Enter a command (or exit to quit or help for available commands):
> That's unexpected. The search for the byte pattern of the `QueryPerformanceCounter` address (`30 37 EA 22 FD 7F 00 00`) within the main module yielded zero results. This suggests that the game might not be calling `kernelbase.QueryPerformanceCounter` directly via its IAT, or perhaps it's using a different timing function altogether.
Let's try a different approach:
1. Search for assembly instructions that typically *call* `QueryPerformanceCounter`. The common pattern is `CALL QWORD PTR [rip+offset]` which corresponds to the bytes `FF 15` followed by a 4-byte relative offset.
2. Since the exact offset is unknown, I'll search for the `FF 15` pattern within the executable code sections of the main module.
3. Once I find potential `CALL` instructions, I'll need to examine the target address they are calling to see if it eventually leads to `QueryPerformanceCounter`.
First, I need to identify the executable sections of the main module. The `GetAllModulesFromMemMap` gave the base `0x7FFA75F00000` and size `0x72269824`. This covers the whole module image, including data. A more precise search would target only the `.text` section(s), but I don't have a direct command to get section info. I'll search the entire module for now.
Let's search for the `FF 15` pattern.
ExecuteDebuggerCommand command=findallmem 0x7FFA75F00000 "FF15" 0x72269824
Invoking command from line 'ExecuteDebuggerCommand command=findallmem 0x7FFA75F00000 "FF15" 0x72269824'...
Response:
True
Enter a command (or exit to quit or help for available commands):
> Okay, the search for the `FF 15` opcode pattern completed. Let's see how many potential indirect CALL instructions were found in the main module.
DbgValFromString value="$result"
Invoking command from line 'DbgValFromString value="$result"'...
Response:
0x0
Enter a command (or exit to quit or help for available commands):
> Zero results for both the direct address bytes and the `FF 15` CALL pattern within the main module is quite strange. This implies that either:
1. The game uses a different timing mechanism (e.g., `GetTickCount64`, `timeGetTime`, or a custom timer).
2. The call to `QueryPerformanceCounter` happens in a different module loaded by the game.
3. The call instruction uses a different pattern (e.g., `CALL RAX` after `MOV RAX, [address]`).
4. The search commands are not working as expected or the module range is incorrect.
The most reliable way to find where `QueryPerformanceCounter` is called is often to set a breakpoint directly on the function itself and see where the execution stops.
Let's list the commands related to breakpoints. I'll try "Breakpoints" as the subject.
ListDebuggerCommands subject="Breakpoints"
Invoking command from line 'ListDebuggerCommands subject="Breakpoints"'...
Response:
Unknown subject group. Try one of:
- DebugControl
- GUI
- Search
- ThreadControl
Enter a command (or exit to quit or help for available commands):
> Okay, it seems "Breakpoints" isn't a recognized subject either. Let's list all available debugger commands to find the correct one for setting a breakpoint.
ListDebuggerCommands
Invoking command from line 'ListDebuggerCommands'...
Response:
Available options:
- debugcontrol
- gui
- search
- threadcontrol
Example:
ListDebuggerCommands subject=gui
Enter a command (or exit to quit or help for available commands):
> Okay, my apologies. It seems `ListDebuggerCommands` only lists command *groups*. Let's try listing the commands within the `DebugControl` group again, as breakpoint management logically falls under controlling the debugging process.
ListDebuggerCommands subject="DebugControl"
Invoking command from line 'ListDebuggerCommands subject="DebugControl"'...
Response:
Debugger Command Help Manual
InitDebug
ExecuteDebuggerCommand command = InitDebug executable_path [command_line] [current_folder]
[string]executable_path = Path to the executable file to debug. If a full path is not provided, the current directory is used. Enclose paths with spaces in quotation marks.
[optional string]command_line = Command line arguments to pass to the process.
[optional string]current_folder = Working directory for the process.
Description: Initializes the debugger by loading the specified executable, performing basic checks, setting breakpoints on TLS callbacks (if present), and at the process entry point. It breaks at the system breakpoint before returning control to the user. Aliases: initdbg, init.
Result: Sets the process ID ($pid) and process handle ($hp, $hProcess) variables.
Example:
ExecuteDebuggerCommand command = InitDebug "D:\My Path with a space in it\MyProgram.exe" //Folder with spaces in the path
ExecuteDebuggerCommand command = "init notepad.exe,C:\MyLog.txt,C:\Temp" //With Arguments
Return: True/False
Note: If the return value is True, then the command executed successfully, however, a subsequent check for the processes PID will need to be ran to confirm if a valid process has executed. To confirm, check if the return value of 'DbgValFromString value=$pid' is greater than zero.
Note: Do not escape out special characters when executing Init/InitDebug
StopDebug
ExecuteDebuggerCommand command = StopDebug
Description: Stops the current debugging session and detaches from the debuggee. Aliases: stop, dbgstop.
Result: Clears the process ID ($pid) and process handle ($hp, $hProcess) variables.
Example:
ExecuteDebuggerCommand command = "stop"
AttachDebugger
ExecuteDebuggerCommand command = AttachDebugger pid [event_handle] [tid]
[integer]pid = Process Identifier (PID) of the running process.
[optional handle]event_handle = Handle to an event object to signal (for internal use).
[optional integer]tid = Thread Identifier (TID) of the thread to resume after attaching (for internal use).
Description: Attaches the debugger to a running process. Alias: attach.
Result: Sets the process ID ($pid) and process handle ($hp, $hProcess) variables.
Example:
ExecuteDebuggerCommand command = "attach 1234"
DetachDebugger
ExecuteDebuggerCommand command = DetachDebugger
Description: Detaches the debugger from the debuggee, allowing it to continue running independently. Alias: detach.
Result: Clears the process ID ($pid) and process handle ($hp, $hProcess) variables.
Example:
ExecuteDebuggerCommand command = "detach"
run
ExecuteDebuggerCommand command = run
Description: Resumes execution of the debuggee from the current position. Aliases: go, r, g.
Example:
ExecuteDebuggerCommand command = "go"
erun
ExecuteDebuggerCommand command = erun
Description: Resumes execution of the debuggee and ignores any exceptions that occur. Aliases: ego, er, eg.
Example:
ExecuteDebuggerCommand command = "erun"
serun
ExecuteDebuggerCommand command = serun
Description: Resumes execution of the debuggee, ignoring the current exception and any new exceptions that occur. Aliases: sego.
Example:
ExecuteDebuggerCommand command = "sego"
pause
ExecuteDebuggerCommand command = pause
Description: Pauses the execution of the debuggee.
Example:
ExecuteDebuggerCommand command = "pause"
DebugContinue
ExecuteDebuggerCommand command = DebugContinue
Description: Continues execution of the debuggee after handling an exception. Alias: con.
Example:
ExecuteDebuggerCommand command = "con"
StepInto
ExecuteDebuggerCommand command = StepInto
Description: Executes the next instruction, stepping into function calls. Alias: sti.
Example:
ExecuteDebuggerCommand command = "sti"
eStepInto
ExecuteDebuggerCommand command = eStepInto
Description: Executes the next instruction, stepping into function calls, and ignores any exceptions. Alias: esti.
Example:
ExecuteDebuggerCommand command = "esti"
seStepInto
ExecuteDebuggerCommand command = seStepInto
Description: Executes the next instruction, stepping into function calls, and ignores the current and any new exceptions. Alias: sesti.
Example:
ExecuteDebuggerCommand command = "sesti"
StepOver
ExecuteDebuggerCommand command = StepOver
Description: Executes the next instruction, stepping over function calls. Aliases: step, sto, st.
Example:
ExecuteDebuggerCommand command = "step"
eStepOver
ExecuteDebuggerCommand command = eStepOver
Description: Executes the next instruction, stepping over function calls, and ignores any exceptions. Aliases: estep, esto, est.
Example:
ExecuteDebuggerCommand command = "estep"
seStepOver
ExecuteDebuggerCommand command = seStepOver
Description: Executes the next instruction, stepping over function calls, and ignores the current and any new exceptions. Aliases: sestep, sesto, sest.
Example:
ExecuteDebuggerCommand command = "sestep"
StepOut
ExecuteDebuggerCommand command = StepOut
Description: Runs until the current function returns. Alias: rtr.
Example:
ExecuteDebuggerCommand command = "rtr"
eStepOut
ExecuteDebuggerCommand command = eStepOut
Description: Runs until the current function returns, ignoring any exceptions. Alias: ertr.
Example:
ExecuteDebuggerCommand command = "ertr"
skip
ExecuteDebuggerCommand command = skip [count]
[optional integer]count = Number of instructions to skip. Defaults to 1 if not specified.
Description: Skips the next instruction, swallowing the current exception if present. Useful for continuing after an INT3 instruction.
Example:
ExecuteDebuggerCommand command = "skip"
ExecuteDebuggerCommand command = "skip 3"
InstrUndo
ExecuteDebuggerCommand command = InstrUndo
Description: Undoes the last instruction executed.
Example:
ExecuteDebuggerCommand command = "InstrUndo"
StepUser
ExecuteDebuggerCommand command = StepUser
Description: Steps into user code, skipping system and library calls. Alias: StepUserInto.
Example:
ExecuteDebuggerCommand command = "StepUser"
StepSystem
ExecuteDebuggerCommand command = StepSystem
Description: Steps into system code, used when skipping over user-mode instructions is desired. Alias: StepSystemInto.
Example:
ExecuteDebuggerCommand command = "StepSystem"
DebugBreak
ExecuteDebuggerCommand command = DebugBreak
Description: Inserts a software breakpoint at the current instruction pointer. Execution will break when this point is reached again. Alias: int3.
Example:
ExecuteDebuggerCommand command = "int3"
StopTracking
ExecuteDebuggerCommand command = StopTracking
Description: Stops instruction tracking and clears the instruction history buffer.
Example:
ExecuteDebuggerCommand command = "StopTracking"
TraceInto
ExecuteDebuggerCommand command = TraceInto
Description: Begins tracing into instructions until a return is hit or user interrupts it. Alias: ti.
Example:
ExecuteDebuggerCommand command = "ti"
TraceOver
ExecuteDebuggerCommand command = TraceOver
Description: Begins tracing over function calls instead of stepping into them. Alias: to.
Example:
ExecuteDebuggerCommand command = "to"
RunTo
ExecuteDebuggerCommand command = RunTo address
[integer or label]address = The address or label to run to.
Description: Runs execution until the specified address is reached. Alias: rt.
Example:
ExecuteDebuggerCommand command = "RunTo 0x00401050"
ExecuteDebuggerCommand command = "rt MyLabel"
SetEntryBreak
ExecuteDebuggerCommand command = SetEntryBreak enable
[boolean]enable = Set to 1 to enable, 0 to disable the entry point breakpoint.
Description: Enables or disables a breakpoint at the program entry point.
Example:
ExecuteDebuggerCommand command = "SetEntryBreak 1"
ExecuteDebuggerCommand command = "SetEntryBreak 0"
SetTlsBreak
ExecuteDebuggerCommand command = SetTlsBreak enable
[boolean]enable = Set to 1 to enable, 0 to disable TLS callback breakpoints.
Description: Enables or disables breakpoints on TLS callback functions.
Example:
ExecuteDebuggerCommand command = "SetTlsBreak 1"
ExecuteDebuggerCommand command = "SetTlsBreak 0"