HyperDbg Debugger
Loading...
Searching...
No Matches
readmem.cpp File Reference

HyperDbg command for u and d*. More...

#include "pch.h"

Functions

BOOLEAN HyperDbgReadMemory (UINT64 TargetAddress, DEBUGGER_READ_MEMORY_TYPE MemoryType, DEBUGGER_READ_READING_TYPE ReadingType, UINT32 Pid, UINT32 Size, BOOLEAN GetAddressMode, DEBUGGER_READ_MEMORY_ADDRESS_MODE *AddressMode, BYTE *TargetBufferToStore, UINT32 *ReturnLength)
 Read memory and disassembler.
 
VOID HyperDbgShowMemoryOrDisassemble (DEBUGGER_SHOW_MEMORY_STYLE Style, UINT64 Address, DEBUGGER_READ_MEMORY_TYPE MemoryType, DEBUGGER_READ_READING_TYPE ReadingType, UINT32 Pid, UINT32 Size, PDEBUGGER_DT_COMMAND_OPTIONS DtDetails)
 Show memory or disassembler.
 
void ShowMemoryCommandDB (unsigned char *OutputBuffer, UINT32 Size, UINT64 Address, DEBUGGER_READ_MEMORY_TYPE MemoryType, UINT64 Length)
 Show memory in bytes (DB)
 
void ShowMemoryCommandDC (unsigned char *OutputBuffer, UINT32 Size, UINT64 Address, DEBUGGER_READ_MEMORY_TYPE MemoryType, UINT64 Length)
 Show memory in dword format (DC)
 
void ShowMemoryCommandDD (unsigned char *OutputBuffer, UINT32 Size, UINT64 Address, DEBUGGER_READ_MEMORY_TYPE MemoryType, UINT64 Length)
 Show memory in dword format (DD)
 
void ShowMemoryCommandDQ (unsigned char *OutputBuffer, UINT32 Size, UINT64 Address, DEBUGGER_READ_MEMORY_TYPE MemoryType, UINT64 Length)
 Show memory in qword format (DQ)
 

Variables

BOOLEAN g_IsSerialConnectedToRemoteDebuggee
 Shows if the debugger was connected to remote debuggee over (A remote guest)
 

Detailed Description

HyperDbg command for u and d*.

Author
Sina Karvandi (sina@.nosp@m.hype.nosp@m.rdbg..nosp@m.org)
Alee Amini (aleea.nosp@m.mini.nosp@m.@gmai.nosp@m.l.co.nosp@m.m)
Version
0.1
Date
2020-05-27

Function Documentation

◆ HyperDbgReadMemory()

BOOLEAN HyperDbgReadMemory ( UINT64 TargetAddress,
DEBUGGER_READ_MEMORY_TYPE MemoryType,
DEBUGGER_READ_READING_TYPE ReadingType,
UINT32 Pid,
UINT32 Size,
BOOLEAN GetAddressMode,
DEBUGGER_READ_MEMORY_ADDRESS_MODE * AddressMode,
BYTE * TargetBufferToStore,
UINT32 * ReturnLength )

Read memory and disassembler.

Parameters
TargetAddresslocation of where to read the memory
MemoryTypetype of memory (phyical or virtual)
ReadingTyperead from kernel or vmx-root
PidThe target process id
Sizesize of memory to read
GetAddressModecheck for address mode
AddressModeAddress mode (32 or 64)
TargetBufferToStoreThe buffer to store the read memory
ReturnLengthThe length of the read memory
Returns
BOOLEAN TRUE if the operation was successful, otherwise FALSE
45{
46 BOOL Status;
47 ULONG ReturnedLength;
48 DEBUGGER_READ_MEMORY ReadMem = {0};
49 UINT32 SizeOfTargetBuffer;
50
51 //
52 // Check if driver is loaded if it's in VMI mode
53 //
55 {
57 }
58
59 //
60 // Fill the read memory structure
61 //
62 ReadMem.Address = TargetAddress;
63 ReadMem.Pid = Pid;
64 ReadMem.Size = Size;
65 ReadMem.MemoryType = MemoryType;
66 ReadMem.ReadingType = ReadingType;
67 ReadMem.GetAddressMode = GetAddressMode;
68
69 //
70 // allocate buffer for transferring messages
71 //
72 SizeOfTargetBuffer = sizeof(DEBUGGER_READ_MEMORY) + (Size * sizeof(CHAR));
73 DEBUGGER_READ_MEMORY * MemReadRequest = (DEBUGGER_READ_MEMORY *)malloc(SizeOfTargetBuffer);
74
75 //
76 // Check if the buffer is allocated successfully
77 //
78 if (MemReadRequest == NULL)
79 {
80 return FALSE;
81 }
82
83 ZeroMemory(MemReadRequest, SizeOfTargetBuffer);
84
85 //
86 // Copy the buffer to send
87 //
88 memcpy(MemReadRequest, &ReadMem, sizeof(DEBUGGER_READ_MEMORY));
89
90 //
91 // Check if this is used for Debugger Mode or VMI mode
92 //
94 {
95 //
96 // It's on Debugger mode
97 //
98 if (!KdSendReadMemoryPacketToDebuggee(MemReadRequest, SizeOfTargetBuffer))
99 {
100 std::free(MemReadRequest);
101 return FALSE;
102 }
103 }
104 else
105 {
106 //
107 // It's on VMI mode
108 //
109
110 Status = DeviceIoControl(g_DeviceHandle, // Handle to device
111 IOCTL_DEBUGGER_READ_MEMORY, // IO Control Code (IOCTL)
112 MemReadRequest, // Input Buffer to driver.
113 SIZEOF_DEBUGGER_READ_MEMORY, // Input buffer length
114 MemReadRequest, // Output Buffer from driver.
115 SizeOfTargetBuffer, // Length of output buffer in bytes.
116 &ReturnedLength, // Bytes placed in buffer.
117 NULL // synchronous call
118 );
119
120 if (!Status)
121 {
122 ShowMessages("ioctl failed with code 0x%x\n", GetLastError());
123 std::free(MemReadRequest);
124 return FALSE;
125 }
126 }
127
128 //
129 // Check if reading memory was successful or not
130 //
131 if (MemReadRequest->KernelStatus != DEBUGGER_OPERATION_WAS_SUCCESSFUL)
132 {
133 ShowErrorMessage(MemReadRequest->KernelStatus);
134 std::free(MemReadRequest);
135 return FALSE;
136 }
137 else
138 {
140 {
141 //
142 // Change the ReturnedLength as it contains the headers
143 //
144 *ReturnLength = MemReadRequest->ReturnLength;
145 }
146 else
147 {
148 //
149 // Change the ReturnedLength as it contains the headers
150 //
151 ReturnedLength -= SIZEOF_DEBUGGER_READ_MEMORY;
152 *ReturnLength = ReturnedLength;
153 }
154
155 //
156 // Set address mode (if requested)
157 //
158 if (GetAddressMode)
159 {
160 *AddressMode = MemReadRequest->AddressMode;
161 }
162
163 //
164 // Copy the buffer
165 //
166 memcpy(TargetBufferToStore,
167 ((unsigned char *)MemReadRequest) + sizeof(DEBUGGER_READ_MEMORY),
168 *ReturnLength);
169
170 //
171 // free the buffer
172 //
173 std::free(MemReadRequest);
174
175 return TRUE;
176 }
177}
int BOOL
Definition BasicTypes.h:23
#define TRUE
Definition BasicTypes.h:55
#define FALSE
Definition BasicTypes.h:54
unsigned int UINT32
Definition BasicTypes.h:48
char CHAR
Definition BasicTypes.h:31
unsigned long ULONG
Definition BasicTypes.h:37
#define DEBUGGER_OPERATION_WAS_SUCCESSFUL
General value to indicate that the operation or request was successful.
Definition ErrorCodes.h:23
#define IOCTL_DEBUGGER_READ_MEMORY
ioctl, request to read memory
Definition Ioctls.h:85
struct _DEBUGGER_READ_MEMORY DEBUGGER_READ_MEMORY
request for reading virtual and physical memory
#define SIZEOF_DEBUGGER_READ_MEMORY
Definition RequestStructures.h:211
BOOLEAN ShowErrorMessage(UINT32 Error)
shows the error message
Definition debugger.cpp:38
BOOLEAN KdSendReadMemoryPacketToDebuggee(PDEBUGGER_READ_MEMORY ReadMem, UINT32 RequestSize)
Send a Read memory packet to the debuggee.
Definition kd.cpp:597
#define AssertShowMessageReturnStmt(expr, message, rc)
Definition common.h:51
#define ASSERT_MESSAGE_DRIVER_NOT_LOADED
Definition common.h:25
#define AssertReturnFalse
Definition common.h:21
HANDLE g_DeviceHandle
Holds the global handle of device which is used to send the request to the kernel by IOCTL,...
Definition globals.h:471
VOID ShowMessages(const char *Fmt,...)
Show messages.
Definition libhyperdbg.cpp:96
BOOLEAN g_IsSerialConnectedToRemoteDebuggee
Shows if the debugger was connected to remote debuggee over (A remote guest)
Definition globals.h:231
request for reading virtual and physical memory
Definition RequestStructures.h:266
UINT32 KernelStatus
Definition RequestStructures.h:275
UINT32 Size
Definition RequestStructures.h:269
UINT32 Pid
Definition RequestStructures.h:267
DEBUGGER_READ_MEMORY_ADDRESS_MODE AddressMode
Definition RequestStructures.h:271
UINT32 ReturnLength
Definition RequestStructures.h:274
BOOLEAN GetAddressMode
Definition RequestStructures.h:270
DEBUGGER_READ_READING_TYPE ReadingType
Definition RequestStructures.h:273
DEBUGGER_READ_MEMORY_TYPE MemoryType
Definition RequestStructures.h:272
UINT64 Address
Definition RequestStructures.h:268

◆ HyperDbgShowMemoryOrDisassemble()

VOID HyperDbgShowMemoryOrDisassemble ( DEBUGGER_SHOW_MEMORY_STYLE Style,
UINT64 Address,
DEBUGGER_READ_MEMORY_TYPE MemoryType,
DEBUGGER_READ_READING_TYPE ReadingType,
UINT32 Pid,
UINT32 Size,
PDEBUGGER_DT_COMMAND_OPTIONS DtDetails )

Show memory or disassembler.

Parameters
Stylestyle of show memory (as byte, dwrod, qword)
Addresslocation of where to read the memory
MemoryTypetype of memory (phyical or virtual)
ReadingTyperead from kernel or vmx-root
PidThe target process id
Sizesize of memory to read
DtDetailsOptions for dt structure show details
Returns
VOID
200{
201 UINT32 ReturnedLength;
202 UCHAR * Buffer;
204 BOOLEAN CheckForAddressMode = FALSE;
205 BOOLEAN Status = FALSE;
206
207 //
208 // Check if this is used for disassembler or not
209 //
212 {
213 CheckForAddressMode = TRUE;
214 }
215 else
216 {
217 CheckForAddressMode = FALSE;
218 }
219
220 //
221 // Allocate buffer for output
222 //
223 Buffer = (UCHAR *)malloc(Size);
224
225 //
226 // Perform reading memory
227 //
229 MemoryType,
230 ReadingType,
231 Pid,
232 Size,
233 CheckForAddressMode,
234 &AddressMode,
235 (BYTE *)Buffer,
236 &ReturnedLength);
237
238 //
239 // Check if reading memory was successful or not
240 //
241 if (!Status)
242 {
243 //
244 // Check for extra message for the dump command
245 //
246 if (Style == DEBUGGER_SHOW_COMMAND_DUMP)
247 {
248 ShowMessages("HyperDbg attempted to access an invalid target address: 0x%llx\n"
249 "if you are confident that the address is valid, it may be paged out "
250 "or not yet available in the current CR3 page table\n"
251 "you can use the '.pagein' command to load this page table into memory and "
252 "trigger a page fault (#PF), please refer to the documentation for further details\n\n",
253 Address);
254 }
255
256 //
257 // free the buffer
258 //
259 std::free(Buffer);
260 return;
261 }
262
263 switch (Style)
264 {
266
267 //
268 // Show the 'dt' command view
269 //
270 if (Size == ReturnedLength)
271 {
273 Address,
274 FALSE,
275 Buffer,
276 DtDetails->AdditionalParameters);
277 }
278 else if (ReturnedLength == 0)
279 {
280 ShowMessages("err, invalid address");
281 }
282 else
283 {
284 ShowMessages("err, invalid address or memory is smaller than the structure size");
285 }
286
287 break;
288
290
292 Buffer,
293 Size,
294 Address,
295 MemoryType,
296 ReturnedLength);
297
298 break;
299
301
303 Buffer,
304 Size,
305 Address,
306 MemoryType,
307 ReturnedLength);
308
309 break;
310
312
314 Buffer,
315 Size,
316 Address,
317 MemoryType,
318 ReturnedLength);
319
320 break;
321
323
325 Buffer,
326 Size,
327 Address,
328 MemoryType,
329 ReturnedLength);
330
331 break;
332
334
335 CommandDumpSaveIntoFile(Buffer, Size);
336
337 break;
338
340
341 //
342 // Check if assembly mismatch occurred with the target address
343 //
344 if (AddressMode == DEBUGGER_READ_ADDRESS_MODE_32_BIT && MemoryType == DEBUGGER_READ_VIRTUAL_ADDRESS)
345 {
346 ShowMessages("the target address seems to be located in a 32-bit program, if so, "
347 "please consider using the 'u32' instead to utilize the 32-bit disassembler\n");
348 }
349
350 //
351 // Show diassembles
352 //
353 if (ReturnedLength != 0)
354 {
356 Buffer,
357 Address,
358 ReturnedLength,
359 0,
360 FALSE,
361 NULL);
362 }
363 else
364 {
365 ShowMessages("err, invalid address\n");
366 }
367
368 break;
369
371
372 //
373 // Check if assembly mismatch occurred with the target address
374 //
375 if (AddressMode == DEBUGGER_READ_ADDRESS_MODE_64_BIT && MemoryType == DEBUGGER_READ_VIRTUAL_ADDRESS)
376 {
377 ShowMessages("the target address seems to be located in a 64-bit program, if so, "
378 "please consider using the 'u' instead to utilize the 64-bit disassembler\n");
379 }
380
381 //
382 // Show diassembles
383 //
384 if (ReturnedLength != 0)
385 {
387 Buffer,
388 Address,
389 ReturnedLength,
390 0,
391 FALSE,
392 NULL);
393 }
394 else
395 {
396 ShowMessages("err, invalid address\n");
397 }
398
399 break;
400 }
401
402 //
403 // free the buffer
404 //
405 std::free(Buffer);
406}
UCHAR BOOLEAN
Definition BasicTypes.h:39
unsigned char BYTE
Definition BasicTypes.h:24
unsigned char UCHAR
Definition BasicTypes.h:35
UINT64 Address
Definition HyperDbgScriptImports.h:67
@ DEBUGGER_READ_ADDRESS_MODE_32_BIT
Definition RequestStructures.h:239
@ DEBUGGER_READ_ADDRESS_MODE_64_BIT
Definition RequestStructures.h:240
enum _DEBUGGER_READ_MEMORY_ADDRESS_MODE DEBUGGER_READ_MEMORY_ADDRESS_MODE
different address mode
@ DEBUGGER_SHOW_COMMAND_DT
Definition RequestStructures.h:251
@ DEBUGGER_SHOW_COMMAND_DC
Definition RequestStructures.h:255
@ DEBUGGER_SHOW_COMMAND_DISASSEMBLE32
Definition RequestStructures.h:253
@ DEBUGGER_SHOW_COMMAND_DD
Definition RequestStructures.h:257
@ DEBUGGER_SHOW_COMMAND_DQ
Definition RequestStructures.h:256
@ DEBUGGER_SHOW_COMMAND_DB
Definition RequestStructures.h:254
@ DEBUGGER_SHOW_COMMAND_DUMP
Definition RequestStructures.h:258
@ DEBUGGER_SHOW_COMMAND_DISASSEMBLE64
Definition RequestStructures.h:252
@ DEBUGGER_READ_VIRTUAL_ADDRESS
Definition RequestStructures.h:230
int HyperDbgDisassembler32(unsigned char *BufferToDisassemble, UINT64 BaseAddress, UINT64 Size, UINT32 MaximumInstrDecoded, BOOLEAN ShowBranchIsTakenOrNot, PRFLAGS Rflags)
Disassemble 32 bit assemblies.
Definition disassembler.cpp:373
int HyperDbgDisassembler64(unsigned char *BufferToDisassemble, UINT64 BaseAddress, UINT64 Size, UINT32 MaximumInstrDecoded, BOOLEAN ShowBranchIsTakenOrNot, PRFLAGS Rflags)
Disassemble x64 assemblies.
Definition disassembler.cpp:333
VOID CommandDumpSaveIntoFile(PVOID Buffer, UINT32 Length)
Saves the received buffers into the files.
Definition dump.cpp:301
void ShowMemoryCommandDD(unsigned char *OutputBuffer, UINT32 Size, UINT64 Address, DEBUGGER_READ_MEMORY_TYPE MemoryType, UINT64 Length)
Show memory in dword format (DD)
Definition readmem.cpp:555
void ShowMemoryCommandDQ(unsigned char *OutputBuffer, UINT32 Size, UINT64 Address, DEBUGGER_READ_MEMORY_TYPE MemoryType, UINT64 Length)
Show memory in qword format (DQ)
Definition readmem.cpp:604
void ShowMemoryCommandDB(unsigned char *OutputBuffer, UINT32 Size, UINT64 Address, DEBUGGER_READ_MEMORY_TYPE MemoryType, UINT64 Length)
Show memory in bytes (DB)
Definition readmem.cpp:418
BOOLEAN HyperDbgReadMemory(UINT64 TargetAddress, DEBUGGER_READ_MEMORY_TYPE MemoryType, DEBUGGER_READ_READING_TYPE ReadingType, UINT32 Pid, UINT32 Size, BOOLEAN GetAddressMode, DEBUGGER_READ_MEMORY_ADDRESS_MODE *AddressMode, BYTE *TargetBufferToStore, UINT32 *ReturnLength)
Read memory and disassembler.
Definition readmem.cpp:36
void ShowMemoryCommandDC(unsigned char *OutputBuffer, UINT32 Size, UINT64 Address, DEBUGGER_READ_MEMORY_TYPE MemoryType, UINT64 Length)
Show memory in dword format (DC)
Definition readmem.cpp:486
BOOLEAN ScriptEngineShowDataBasedOnSymbolTypesWrapper(const char *TypeName, UINT64 Address, BOOLEAN IsStruct, PVOID BufferAddress, const char *AdditionalParameters)
ScriptEngineShowDataBasedOnSymbolTypes wrapper.
Definition script-engine-wrapper.cpp:212
const char * TypeName
Definition RequestStructures.h:136
const char * AdditionalParameters
Definition RequestStructures.h:142

◆ ShowMemoryCommandDB()

void ShowMemoryCommandDB ( unsigned char * OutputBuffer,
UINT32 Size,
UINT64 Address,
DEBUGGER_READ_MEMORY_TYPE MemoryType,
UINT64 Length )

Show memory in bytes (DB)

Parameters
OutputBufferthe buffer to show
Sizesize of memory to read
Addresslocation of where to read the memory
MemoryTypetype of memory (phyical or virtual)
LengthLength of memory to show
419{
420 unsigned int Character;
421
422 for (UINT32 i = 0; i < Size; i += 16)
423 {
424 if (MemoryType == DEBUGGER_READ_PHYSICAL_ADDRESS)
425 {
426 ShowMessages("#\t");
427 }
428
429 //
430 // Print address
431 //
432 ShowMessages("%s ", SeparateTo64BitValue((UINT64)(Address + i)).c_str());
433
434 //
435 // Print the hex code
436 //
437 for (size_t j = 0; j < 16; j++)
438 {
439 //
440 // check to see if the address is valid or not
441 //
442 if (i + j >= Length)
443 {
444 ShowMessages("?? ");
445 }
446 else
447 {
448 ShowMessages("%02X ", OutputBuffer[i + j]);
449 }
450 }
451
452 //
453 // Print the character
454 //
455 ShowMessages(" ");
456 for (size_t j = 0; j < 16; j++)
457 {
458 Character = (OutputBuffer[i + j]);
459 if (isprint(Character))
460 {
461 ShowMessages("%c", Character);
462 }
463 else
464 {
465 ShowMessages(".");
466 }
467 }
468
469 //
470 // Go to new line
471 //
472 ShowMessages("\n");
473 }
474}
unsigned __int64 UINT64
Definition BasicTypes.h:21
@ DEBUGGER_READ_PHYSICAL_ADDRESS
Definition RequestStructures.h:229
string SeparateTo64BitValue(UINT64 Value)
add ` between 64 bit values and convert them to string
Definition common.cpp:27

◆ ShowMemoryCommandDC()

void ShowMemoryCommandDC ( unsigned char * OutputBuffer,
UINT32 Size,
UINT64 Address,
DEBUGGER_READ_MEMORY_TYPE MemoryType,
UINT64 Length )

Show memory in dword format (DC)

Parameters
OutputBufferthe buffer to show
Sizesize of memory to read
Addresslocation of where to read the memory
MemoryTypetype of memory (phyical or virtual)
LengthLength of memory to show
487{
488 unsigned int Character;
489 for (UINT32 i = 0; i < Size; i += 16)
490 {
491 if (MemoryType == DEBUGGER_READ_PHYSICAL_ADDRESS)
492 {
493 ShowMessages("#\t");
494 }
495
496 //
497 // Print address
498 //
499 ShowMessages("%s ", SeparateTo64BitValue((UINT64)(Address + i)).c_str());
500
501 //
502 // Print the hex code
503 //
504 for (size_t j = 0; j < 16; j += 4)
505 {
506 //
507 // check to see if the address is valid or not
508 //
509 if (i + j >= Length)
510 {
511 ShowMessages("???????? ");
512 }
513 else
514 {
515 UINT32 OutputBufferVar = *((UINT32 *)&OutputBuffer[i + j]);
516 ShowMessages("%08X ", OutputBufferVar);
517 }
518 }
519
520 //
521 // Print the character
522 //
523
524 ShowMessages(" ");
525 for (size_t j = 0; j < 16; j++)
526 {
527 Character = (OutputBuffer[i + j]);
528 if (isprint(Character))
529 {
530 ShowMessages("%c", Character);
531 }
532 else
533 {
534 ShowMessages(".");
535 }
536 }
537
538 //
539 // Go to new line
540 //
541 ShowMessages("\n");
542 }
543}

◆ ShowMemoryCommandDD()

void ShowMemoryCommandDD ( unsigned char * OutputBuffer,
UINT32 Size,
UINT64 Address,
DEBUGGER_READ_MEMORY_TYPE MemoryType,
UINT64 Length )

Show memory in dword format (DD)

Parameters
OutputBufferthe buffer to show
Sizesize of memory to read
Addresslocation of where to read the memory
MemoryTypetype of memory (phyical or virtual)
LengthLength of memory to show
556{
557 for (UINT32 i = 0; i < Size; i += 16)
558 {
559 if (MemoryType == DEBUGGER_READ_PHYSICAL_ADDRESS)
560 {
561 ShowMessages("#\t");
562 }
563
564 //
565 // Print address
566 //
567 ShowMessages("%s ", SeparateTo64BitValue((UINT64)(Address + i)).c_str());
568
569 //
570 // Print the hex code
571 //
572 for (size_t j = 0; j < 16; j += 4)
573 {
574 //
575 // check to see if the address is valid or not
576 //
577 if (i + j >= Length)
578 {
579 ShowMessages("???????? ");
580 }
581 else
582 {
583 UINT32 OutputBufferVar = *((UINT32 *)&OutputBuffer[i + j]);
584 ShowMessages("%08X ", OutputBufferVar);
585 }
586 }
587 //
588 // Go to new line
589 //
590 ShowMessages("\n");
591 }
592}

◆ ShowMemoryCommandDQ()

void ShowMemoryCommandDQ ( unsigned char * OutputBuffer,
UINT32 Size,
UINT64 Address,
DEBUGGER_READ_MEMORY_TYPE MemoryType,
UINT64 Length )

Show memory in qword format (DQ)

Parameters
OutputBufferthe buffer to show
Sizesize of memory to read
Addresslocation of where to read the memory
MemoryTypetype of memory (phyical or virtual)
LengthLength of memory to show
605{
606 for (UINT32 i = 0; i < Size; i += 16)
607 {
608 if (MemoryType == DEBUGGER_READ_PHYSICAL_ADDRESS)
609 {
610 ShowMessages("#\t");
611 }
612
613 //
614 // Print address
615 //
616 ShowMessages("%s ", SeparateTo64BitValue((UINT64)(Address + i)).c_str());
617
618 //
619 // Print the hex code
620 //
621 for (size_t j = 0; j < 16; j += 8)
622 {
623 //
624 // check to see if the address is valid or not
625 //
626 if (i + j >= Length)
627 {
628 ShowMessages("???????? ");
629 }
630 else
631 {
632 UINT32 OutputBufferVar = *((UINT32 *)&OutputBuffer[i + j + 4]);
633 ShowMessages("%08X`", OutputBufferVar);
634
635 OutputBufferVar = *((UINT32 *)&OutputBuffer[i + j]);
636 ShowMessages("%08X ", OutputBufferVar);
637 }
638 }
639
640 //
641 // Go to new line
642 //
643 ShowMessages("\n");
644 }
645}

Variable Documentation

◆ g_IsSerialConnectedToRemoteDebuggee

BOOLEAN g_IsSerialConnectedToRemoteDebuggee
extern

Shows if the debugger was connected to remote debuggee over (A remote guest)