HyperDbg Debugger
Loading...
Searching...
No Matches
Regs.c File Reference

Script engine registers implementations. More...

#include "pch.h"

Functions

UINT64 GetRegValueHwdbg (UINT64 *Regs, UINT32 RegId)
 Get the register value for hardware debugging.
UINT64 GetRegValue (PGUEST_REGS GuestRegs, REGS_ENUM RegId)
 Get the register value.
BOOLEAN SetRegValueHwdbg (UINT64 *Regs, UINT32 RegisterId, UINT64 Value)
 Set the register value for hardware debugging.
BOOLEAN SetRegValue (PGUEST_REGS GuestRegs, UINT32 RegisterId, UINT64 Value)
 Set the register value.
BOOLEAN SetRegValueUsingSymbol (PGUEST_REGS GuestRegs, PSYMBOL Symbol, UINT64 Value)
 Set the register value.

Detailed Description

Script engine registers implementations.

Author
Alee Amini (alee@.nosp@m.hype.nosp@m.rdbg..nosp@m.org)
Sina Karvandi (sina@.nosp@m.hype.nosp@m.rdbg..nosp@m.org)
Version
0.2
Date
2022-06-29

Function Documentation

◆ GetRegValue()

UINT64 GetRegValue ( PGUEST_REGS GuestRegs,
REGS_ENUM RegId )

Get the register value.

Parameters
GuestRegs
RegId
Returns
UINT64
41{
42#if defined(SCRIPT_ENGINE_USER_MODE) && defined(HYPERDBG_LIBHYPERDBG)
44 {
45 return GetRegValueHwdbg((UINT64 *)GuestRegs, RegId);
46 }
47#endif // defined(SCRIPT_ENGINE_USER_MODE) && defined(HYPERDBG_LIBHYPERDBG)
48
49 switch (RegId)
50 {
51 case REGISTER_RAX:
52 return GuestRegs->rax;
53
54 break;
55
56 case REGISTER_EAX:
57 return (GuestRegs->rax & LOWER_32_BITS);
58
59 break;
60
61 case REGISTER_AX:
62 return (GuestRegs->rax & LOWER_16_BITS);
63
64 break;
65
66 case REGISTER_AH:
67 return (GuestRegs->rax & SECOND_LOWER_8_BITS) >> 8;
68
69 break;
70
71 case REGISTER_AL:
72 return (GuestRegs->rax & LOWER_8_BITS);
73
74 break;
75
76 case REGISTER_RCX:
77 return GuestRegs->rcx;
78
79 break;
80
81 case REGISTER_ECX:
82 return (GuestRegs->rcx & LOWER_32_BITS);
83
84 break;
85
86 case REGISTER_CX:
87 return (GuestRegs->rcx & LOWER_16_BITS);
88
89 break;
90
91 case REGISTER_CH:
92 return (GuestRegs->rcx & SECOND_LOWER_8_BITS) >> 8;
93
94 break;
95
96 case REGISTER_CL:
97 return (GuestRegs->rcx & LOWER_8_BITS);
98
99 break;
100
101 case REGISTER_RDX:
102 return GuestRegs->rdx;
103
104 break;
105
106 case REGISTER_EDX:
107 return (GuestRegs->rdx & LOWER_32_BITS);
108
109 break;
110
111 case REGISTER_DX:
112 return (GuestRegs->rdx & LOWER_16_BITS);
113
114 break;
115
116 case REGISTER_DH:
117 return (GuestRegs->rdx & SECOND_LOWER_8_BITS) >> 8;
118
119 break;
120
121 case REGISTER_DL:
122 return (GuestRegs->rdx & LOWER_8_BITS);
123
124 break;
125
126 case REGISTER_RBX:
127 return GuestRegs->rbx;
128
129 break;
130
131 case REGISTER_EBX:
132 return (GuestRegs->rbx & LOWER_32_BITS);
133
134 break;
135
136 case REGISTER_BX:
137 return (GuestRegs->rbx & LOWER_16_BITS);
138
139 break;
140
141 case REGISTER_BH:
142 return (GuestRegs->rbx & SECOND_LOWER_8_BITS) >> 8;
143
144 break;
145
146 case REGISTER_BL:
147 return (GuestRegs->rbx & LOWER_8_BITS);
148
149 break;
150
151 case REGISTER_RSP:
152 return GuestRegs->rsp;
153
154 break;
155
156 case REGISTER_ESP:
157 return (GuestRegs->rsp & LOWER_32_BITS);
158
159 break;
160
161 case REGISTER_SP:
162 return (GuestRegs->rsp & LOWER_16_BITS);
163
164 break;
165
166 case REGISTER_SPL:
167 return (GuestRegs->rsp & LOWER_8_BITS);
168
169 break;
170
171 case REGISTER_RBP:
172 return GuestRegs->rbp;
173
174 break;
175
176 case REGISTER_EBP:
177 return (GuestRegs->rbp & LOWER_32_BITS);
178
179 break;
180
181 case REGISTER_BP:
182 return (GuestRegs->rbp & LOWER_16_BITS);
183
184 break;
185 case REGISTER_BPL:
186 return (GuestRegs->rbp & LOWER_8_BITS);
187
188 break;
189
190 case REGISTER_RSI:
191 return GuestRegs->rsi;
192
193 break;
194
195 case REGISTER_ESI:
196 return (GuestRegs->rsi & LOWER_32_BITS);
197
198 break;
199
200 case REGISTER_SI:
201 return (GuestRegs->rsi & LOWER_16_BITS);
202
203 break;
204
205 case REGISTER_SIL:
206 return (GuestRegs->rsi & LOWER_8_BITS);
207
208 break;
209
210 case REGISTER_RDI:
211 return GuestRegs->rdi;
212
213 break;
214
215 case REGISTER_EDI:
216 return (GuestRegs->rdi & LOWER_32_BITS);
217
218 break;
219
220 case REGISTER_DI:
221 return (GuestRegs->rdi & LOWER_16_BITS);
222
223 break;
224
225 case REGISTER_DIL:
226 return (GuestRegs->rdi & LOWER_8_BITS);
227
228 break;
229
230 case REGISTER_R8:
231 return GuestRegs->r8;
232
233 break;
234
235 case REGISTER_R8D:
236 return (GuestRegs->r8 & LOWER_32_BITS);
237
238 break;
239
240 case REGISTER_R8W:
241 return (GuestRegs->r8 & LOWER_16_BITS);
242
243 break;
244
245 case REGISTER_R8H:
246 return (GuestRegs->r8 & SECOND_LOWER_8_BITS) >> 8;
247
248 break;
249
250 case REGISTER_R8L:
251 return (GuestRegs->r8 & LOWER_8_BITS);
252
253 break;
254 case REGISTER_R9:
255 return GuestRegs->r9;
256
257 break;
258
259 case REGISTER_R9D:
260 return (GuestRegs->r9 & LOWER_32_BITS);
261
262 break;
263
264 case REGISTER_R9W:
265 return (GuestRegs->r9 & LOWER_16_BITS);
266
267 break;
268
269 case REGISTER_R9H:
270 return (GuestRegs->r9 & SECOND_LOWER_8_BITS) >> 8;
271
272 break;
273
274 case REGISTER_R9L:
275 return (GuestRegs->r9 & LOWER_8_BITS);
276
277 break;
278
279 case REGISTER_R10:
280 return GuestRegs->r10;
281
282 break;
283
284 case REGISTER_R10D:
285 return (GuestRegs->r10 & LOWER_32_BITS);
286
287 break;
288
289 case REGISTER_R10W:
290 return (GuestRegs->r10 & LOWER_16_BITS);
291
292 break;
293
294 case REGISTER_R10H:
295 return (GuestRegs->r10 & SECOND_LOWER_8_BITS) >> 8;
296
297 break;
298
299 case REGISTER_R10L:
300 return (GuestRegs->r10 & LOWER_8_BITS);
301
302 break;
303
304 case REGISTER_R11:
305 return GuestRegs->r11;
306
307 break;
308
309 case REGISTER_R11D:
310 return (GuestRegs->r11 & LOWER_32_BITS);
311
312 break;
313
314 case REGISTER_R11W:
315 return (GuestRegs->r11 & LOWER_16_BITS);
316
317 break;
318
319 case REGISTER_R11H:
320 return (GuestRegs->r11 & SECOND_LOWER_8_BITS) >> 8;
321
322 break;
323
324 case REGISTER_R11L:
325 return (GuestRegs->r11 & LOWER_8_BITS);
326
327 break;
328
329 case REGISTER_R12:
330 return GuestRegs->r12;
331
332 break;
333
334 case REGISTER_R12D:
335 return (GuestRegs->r12 & LOWER_32_BITS);
336
337 break;
338
339 case REGISTER_R12W:
340 return (GuestRegs->r12 & LOWER_16_BITS);
341
342 break;
343
344 case REGISTER_R12H:
345 return (GuestRegs->r12 & SECOND_LOWER_8_BITS) >> 8;
346
347 break;
348
349 case REGISTER_R12L:
350 return (GuestRegs->r12 & LOWER_8_BITS);
351
352 break;
353
354 case REGISTER_R13:
355 return GuestRegs->r13;
356
357 break;
358
359 case REGISTER_R13D:
360 return (GuestRegs->r13 & LOWER_32_BITS);
361
362 break;
363
364 case REGISTER_R13W:
365 return (GuestRegs->r13 & LOWER_16_BITS);
366
367 break;
368
369 case REGISTER_R13H:
370 return (GuestRegs->r13 & SECOND_LOWER_8_BITS) >> 8;
371
372 break;
373
374 case REGISTER_R13L:
375 return (GuestRegs->r13 & LOWER_8_BITS);
376
377 break;
378
379 case REGISTER_R14:
380 return GuestRegs->r14;
381
382 break;
383
384 case REGISTER_R14D:
385 return (GuestRegs->r14 & LOWER_32_BITS);
386
387 break;
388
389 case REGISTER_R14W:
390 return (GuestRegs->r14 & LOWER_16_BITS);
391
392 break;
393
394 case REGISTER_R14H:
395 return (GuestRegs->r14 & SECOND_LOWER_8_BITS) >> 8;
396
397 break;
398
399 case REGISTER_R14L:
400 return (GuestRegs->r14 & LOWER_8_BITS);
401
402 break;
403
404 case REGISTER_R15:
405 return GuestRegs->r15;
406
407 break;
408
409 case REGISTER_R15D:
410 return (GuestRegs->r15 & LOWER_32_BITS);
411
412 break;
413
414 case REGISTER_R15W:
415 return (GuestRegs->r15 & LOWER_16_BITS);
416
417 break;
418
419 case REGISTER_R15H:
420 return (GuestRegs->r15 & SECOND_LOWER_8_BITS) >> 8;
421
422 break;
423
424 case REGISTER_R15L:
425 return (GuestRegs->r15 & LOWER_8_BITS);
426
427 break;
428
429 case REGISTER_DS:
430
431#ifdef SCRIPT_ENGINE_USER_MODE
432 return NULL;
433#endif // SCRIPT_ENGINE_USER_MODE
434
435#ifdef SCRIPT_ENGINE_KERNEL_MODE
436 return GetGuestDs().Selector;
437#endif // SCRIPT_ENGINE_KERNEL_MODE
438
439 break;
440
441 case REGISTER_ES:
442
443#ifdef SCRIPT_ENGINE_USER_MODE
444 return NULL;
445#endif // SCRIPT_ENGINE_USER_MODE
446
447#ifdef SCRIPT_ENGINE_KERNEL_MODE
448 return GetGuestEs().Selector;
449#endif // SCRIPT_ENGINE_KERNEL_MODE
450
451 break;
452
453 case REGISTER_FS:
454
455#ifdef SCRIPT_ENGINE_USER_MODE
456 return NULL;
457#endif // SCRIPT_ENGINE_USER_MODE
458
459#ifdef SCRIPT_ENGINE_KERNEL_MODE
460 return GetGuestFs().Selector;
461#endif // SCRIPT_ENGINE_KERNEL_MODE
462
463 break;
464
465 case REGISTER_GS:
466
467#ifdef SCRIPT_ENGINE_USER_MODE
468 return NULL;
469#endif // SCRIPT_ENGINE_USER_MODE
470
471#ifdef SCRIPT_ENGINE_KERNEL_MODE
472 return GetGuestGs().Selector;
473#endif // SCRIPT_ENGINE_KERNEL_MODE
474
475 break;
476
477 case REGISTER_CS:
478
479#ifdef SCRIPT_ENGINE_USER_MODE
480 return NULL;
481#endif // SCRIPT_ENGINE_USER_MODE
482
483#ifdef SCRIPT_ENGINE_KERNEL_MODE
484 return GetGuestCs().Selector;
485#endif // SCRIPT_ENGINE_KERNEL_MODE
486
487 break;
488
489 case REGISTER_SS:
490
491#ifdef SCRIPT_ENGINE_USER_MODE
492 return NULL;
493#endif // SCRIPT_ENGINE_USER_MODE
494
495#ifdef SCRIPT_ENGINE_KERNEL_MODE
496 return GetGuestSs().Selector;
497#endif // SCRIPT_ENGINE_KERNEL_MODE
498
499 break;
500
501 case REGISTER_RFLAGS:
502
503#ifdef SCRIPT_ENGINE_USER_MODE
504 return NULL;
505#endif // SCRIPT_ENGINE_USER_MODE
506
507#ifdef SCRIPT_ENGINE_KERNEL_MODE
508 return GetGuestRFlags();
509#endif // SCRIPT_ENGINE_KERNEL_MODE
510
511 break;
512
513 case REGISTER_EFLAGS:
514
515#ifdef SCRIPT_ENGINE_USER_MODE
516 return NULL;
517#endif // SCRIPT_ENGINE_USER_MODE
518
519#ifdef SCRIPT_ENGINE_KERNEL_MODE
520 return (GetGuestRFlags() & LOWER_32_BITS);
521#endif // SCRIPT_ENGINE_KERNEL_MODE
522
523 break;
524
525 case REGISTER_FLAGS:
526
527#ifdef SCRIPT_ENGINE_USER_MODE
528 return NULL;
529#endif // SCRIPT_ENGINE_USER_MODE
530
531#ifdef SCRIPT_ENGINE_KERNEL_MODE
532 return (GetGuestRFlags() & LOWER_16_BITS);
533#endif // SCRIPT_ENGINE_KERNEL_MODE
534
535 break;
536
537 case REGISTER_CF:
538
539#ifdef SCRIPT_ENGINE_USER_MODE
540 return NULL;
541#endif // SCRIPT_ENGINE_USER_MODE
542
543#ifdef SCRIPT_ENGINE_KERNEL_MODE
544 return (GetGuestRFlags() & X86_FLAGS_CF) != (UINT64)NULL ? TRUE : FALSE;
545#endif // SCRIPT_ENGINE_KERNEL_MODE
546
547 break;
548
549 case REGISTER_PF:
550
551#ifdef SCRIPT_ENGINE_USER_MODE
552 return NULL;
553#endif // SCRIPT_ENGINE_USER_MODE
554
555#ifdef SCRIPT_ENGINE_KERNEL_MODE
556 return (GetGuestRFlags() & (X86_FLAGS_PF)) != (UINT64)NULL ? TRUE : FALSE;
557#endif // SCRIPT_ENGINE_KERNEL_MODE
558
559 break;
560
561 case REGISTER_AF:
562
563#ifdef SCRIPT_ENGINE_USER_MODE
564 return NULL;
565#endif // SCRIPT_ENGINE_USER_MODE
566
567#ifdef SCRIPT_ENGINE_KERNEL_MODE
568 return (GetGuestRFlags() & (X86_FLAGS_AF)) != (UINT64)NULL ? TRUE : FALSE;
569#endif // SCRIPT_ENGINE_KERNEL_MODE
570
571 break;
572
573 case REGISTER_ZF:
574
575#ifdef SCRIPT_ENGINE_USER_MODE
576 return NULL;
577#endif // SCRIPT_ENGINE_USER_MODE
578
579#ifdef SCRIPT_ENGINE_KERNEL_MODE
580 return (GetGuestRFlags() & (X86_FLAGS_ZF)) != (UINT64)NULL ? TRUE : FALSE;
581#endif // SCRIPT_ENGINE_KERNEL_MODE
582
583 break;
584
585 case REGISTER_SF:
586
587#ifdef SCRIPT_ENGINE_USER_MODE
588 return NULL;
589#endif // SCRIPT_ENGINE_USER_MODE
590
591#ifdef SCRIPT_ENGINE_KERNEL_MODE
592 return (GetGuestRFlags() & (X86_FLAGS_SF)) != (UINT64)NULL ? TRUE : FALSE;
593#endif // SCRIPT_ENGINE_KERNEL_MODE
594
595 break;
596
597 case REGISTER_TF:
598
599#ifdef SCRIPT_ENGINE_USER_MODE
600 return NULL;
601#endif // SCRIPT_ENGINE_USER_MODE
602
603#ifdef SCRIPT_ENGINE_KERNEL_MODE
604 return (GetGuestRFlags() & (X86_FLAGS_TF)) != (UINT64)NULL ? TRUE : FALSE;
605#endif // SCRIPT_ENGINE_KERNEL_MODE
606
607 break;
608
609 case REGISTER_IF:
610
611#ifdef SCRIPT_ENGINE_USER_MODE
612 return NULL;
613#endif // SCRIPT_ENGINE_USER_MODE
614
615#ifdef SCRIPT_ENGINE_KERNEL_MODE
616 return (GetGuestRFlags() & (X86_FLAGS_IF)) != (UINT64)NULL ? TRUE : FALSE;
617#endif // SCRIPT_ENGINE_KERNEL_MODE
618
619 break;
620
621 case REGISTER_DF:
622
623#ifdef SCRIPT_ENGINE_USER_MODE
624 return NULL;
625#endif // SCRIPT_ENGINE_USER_MODE
626
627#ifdef SCRIPT_ENGINE_KERNEL_MODE
628 return (GetGuestRFlags() & (X86_FLAGS_DF)) != (UINT64)NULL ? TRUE : FALSE;
629#endif // SCRIPT_ENGINE_KERNEL_MODE
630
631 break;
632
633 case REGISTER_OF:
634
635#ifdef SCRIPT_ENGINE_USER_MODE
636 return NULL;
637#endif // SCRIPT_ENGINE_USER_MODE
638
639#ifdef SCRIPT_ENGINE_KERNEL_MODE
640 return (GetGuestRFlags() & (X86_FLAGS_OF)) != (UINT64)NULL ? TRUE : FALSE;
641#endif // SCRIPT_ENGINE_KERNEL_MODE
642
643 break;
644
645 case REGISTER_IOPL:
646
647#ifdef SCRIPT_ENGINE_USER_MODE
648 return NULL;
649#endif // SCRIPT_ENGINE_USER_MODE
650
651#ifdef SCRIPT_ENGINE_KERNEL_MODE
652 return ((GetGuestRFlags() & (0b11 << X86_FLAGS_IOPL_SHIFT)) >> 12);
653#endif // SCRIPT_ENGINE_KERNEL_MODE
654
655 break;
656
657 case REGISTER_NT:
658
659#ifdef SCRIPT_ENGINE_USER_MODE
660 return NULL;
661#endif // SCRIPT_ENGINE_USER_MODE
662
663#ifdef SCRIPT_ENGINE_KERNEL_MODE
664 return (GetGuestRFlags() & (X86_FLAGS_NT)) != (UINT64)NULL ? TRUE : FALSE;
665#endif // SCRIPT_ENGINE_KERNEL_MODE
666
667 break;
668
669 case REGISTER_RF:
670
671#ifdef SCRIPT_ENGINE_USER_MODE
672 return NULL;
673#endif // SCRIPT_ENGINE_USER_MODE
674
675#ifdef SCRIPT_ENGINE_KERNEL_MODE
676 return (GetGuestRFlags() & (X86_FLAGS_RF)) != (UINT64)NULL ? TRUE : FALSE;
677#endif // SCRIPT_ENGINE_KERNEL_MODE
678
679 break;
680
681 case REGISTER_VM:
682
683#ifdef SCRIPT_ENGINE_USER_MODE
684 return NULL;
685#endif // SCRIPT_ENGINE_USER_MODE
686
687#ifdef SCRIPT_ENGINE_KERNEL_MODE
688 return (GetGuestRFlags() & (X86_FLAGS_VM)) != (UINT64)NULL ? TRUE : FALSE;
689#endif // SCRIPT_ENGINE_KERNEL_MODE
690
691 break;
692
693 case REGISTER_AC:
694
695#ifdef SCRIPT_ENGINE_USER_MODE
696 return NULL;
697#endif // SCRIPT_ENGINE_USER_MODE
698
699#ifdef SCRIPT_ENGINE_KERNEL_MODE
700 return (GetGuestRFlags() & (X86_FLAGS_AC)) != (UINT64)NULL ? TRUE : FALSE;
701#endif // SCRIPT_ENGINE_KERNEL_MODE
702
703 break;
704
705 case REGISTER_VIF:
706
707#ifdef SCRIPT_ENGINE_USER_MODE
708 return NULL;
709#endif // SCRIPT_ENGINE_USER_MODE
710
711#ifdef SCRIPT_ENGINE_KERNEL_MODE
712 return (GetGuestRFlags() & (X86_FLAGS_VIF)) != (UINT64)NULL ? TRUE : FALSE;
713#endif // SCRIPT_ENGINE_KERNEL_MODE
714
715 break;
716
717 case REGISTER_VIP:
718
719#ifdef SCRIPT_ENGINE_USER_MODE
720 return NULL;
721#endif // SCRIPT_ENGINE_USER_MODE
722
723#ifdef SCRIPT_ENGINE_KERNEL_MODE
724 return (GetGuestRFlags() & (X86_FLAGS_VIP)) != (UINT64)NULL ? TRUE : FALSE;
725#endif // SCRIPT_ENGINE_KERNEL_MODE
726
727 break;
728
729 case REGISTER_ID:
730
731#ifdef SCRIPT_ENGINE_USER_MODE
732 return NULL;
733#endif // SCRIPT_ENGINE_USER_MODE
734
735#ifdef SCRIPT_ENGINE_KERNEL_MODE
736 return (GetGuestRFlags() & (X86_FLAGS_ID)) != (UINT64)NULL ? TRUE : FALSE;
737#endif // SCRIPT_ENGINE_KERNEL_MODE
738
739 break;
740
741 case REGISTER_RIP:
742
743#ifdef SCRIPT_ENGINE_USER_MODE
744 return NULL;
745#endif // SCRIPT_ENGINE_USER_MODE
746
747#ifdef SCRIPT_ENGINE_KERNEL_MODE
748 return GetGuestRIP();
749#endif // SCRIPT_ENGINE_KERNEL_MODE
750
751 break;
752
753 case REGISTER_EIP:
754
755#ifdef SCRIPT_ENGINE_USER_MODE
756 return NULL;
757#endif // SCRIPT_ENGINE_USER_MODE
758
759#ifdef SCRIPT_ENGINE_KERNEL_MODE
760 return (GetGuestRIP() & LOWER_32_BITS);
761#endif // SCRIPT_ENGINE_KERNEL_MODE
762
763 break;
764
765 case REGISTER_IP:
766
767#ifdef SCRIPT_ENGINE_USER_MODE
768 return NULL;
769#endif // SCRIPT_ENGINE_USER_MODE
770
771#ifdef SCRIPT_ENGINE_KERNEL_MODE
772 return (GetGuestRIP() & LOWER_16_BITS);
773#endif // SCRIPT_ENGINE_KERNEL_MODE
774
775 break;
776
777 case REGISTER_IDTR:
778
779#ifdef SCRIPT_ENGINE_USER_MODE
780 return NULL;
781#endif // SCRIPT_ENGINE_USER_MODE
782
783#ifdef SCRIPT_ENGINE_KERNEL_MODE
784
785 return GetGuestIdtr();
786#endif // SCRIPT_ENGINE_KERNEL_MODE
787
788 break;
789
790 case REGISTER_LDTR:
791
792#ifdef SCRIPT_ENGINE_USER_MODE
793 return NULL;
794#endif // SCRIPT_ENGINE_USER_MODE
795
796#ifdef SCRIPT_ENGINE_KERNEL_MODE
797
798 return GetGuestLdtr();
799#endif // SCRIPT_ENGINE_KERNEL_MODE
800
801 break;
802
803 case REGISTER_TR:
804
805#ifdef SCRIPT_ENGINE_USER_MODE
806 return NULL;
807#endif // SCRIPT_ENGINE_USER_MODE
808
809#ifdef SCRIPT_ENGINE_KERNEL_MODE
810
811 return GetGuestTr();
812#endif // SCRIPT_ENGINE_KERNEL_MODE
813
814 break;
815
816 case REGISTER_GDTR:
817
818#ifdef SCRIPT_ENGINE_USER_MODE
819 return NULL;
820#endif // SCRIPT_ENGINE_USER_MODE
821
822#ifdef SCRIPT_ENGINE_KERNEL_MODE
823 return GetGuestGdtr();
824
825#endif // SCRIPT_ENGINE_KERNEL_MODE
826
827 break;
828
829 case REGISTER_CR0:
830
831#ifdef SCRIPT_ENGINE_USER_MODE
832 return NULL;
833#endif // SCRIPT_ENGINE_USER_MODE
834
835#ifdef SCRIPT_ENGINE_KERNEL_MODE
836 return GetGuestCr0();
837#endif // SCRIPT_ENGINE_KERNEL_MODE
838
839 break;
840
841 case REGISTER_CR2:
842
843#ifdef SCRIPT_ENGINE_USER_MODE
844 return NULL;
845#endif // SCRIPT_ENGINE_USER_MODE
846
847#ifdef SCRIPT_ENGINE_KERNEL_MODE
848 return GetGuestCr2();
849#endif // SCRIPT_ENGINE_KERNEL_MODE
850
851 break;
852
853 case REGISTER_CR3:
854
855#ifdef SCRIPT_ENGINE_USER_MODE
856 return NULL;
857#endif // SCRIPT_ENGINE_USER_MODE
858
859#ifdef SCRIPT_ENGINE_KERNEL_MODE
860 return GetGuestCr3();
861#endif // SCRIPT_ENGINE_KERNEL_MODE
862
863 break;
864
865 case REGISTER_CR4:
866
867#ifdef SCRIPT_ENGINE_USER_MODE
868 return NULL;
869#endif // SCRIPT_ENGINE_USER_MODE
870
871#ifdef SCRIPT_ENGINE_KERNEL_MODE
872 return GetGuestCr4();
873#endif // SCRIPT_ENGINE_KERNEL_MODE
874
875 break;
876
877 case REGISTER_CR8:
878
879#ifdef SCRIPT_ENGINE_USER_MODE
880 return NULL;
881#endif // SCRIPT_ENGINE_USER_MODE
882
883#ifdef SCRIPT_ENGINE_KERNEL_MODE
884 return GetGuestCr8();
885#endif // SCRIPT_ENGINE_KERNEL_MODE
886
887 break;
888
889 case REGISTER_DR0:
890
891#ifdef SCRIPT_ENGINE_USER_MODE
892 return NULL;
893#endif // SCRIPT_ENGINE_USER_MODE
894
895#ifdef SCRIPT_ENGINE_KERNEL_MODE
896 return GetGuestDr0();
897#endif // SCRIPT_ENGINE_KERNEL_MODE
898
899 break;
900
901 case REGISTER_DR1:
902
903#ifdef SCRIPT_ENGINE_USER_MODE
904 return NULL;
905#endif // SCRIPT_ENGINE_USER_MODE
906
907#ifdef SCRIPT_ENGINE_KERNEL_MODE
908 return GetGuestDr1();
909#endif // SCRIPT_ENGINE_KERNEL_MODE
910
911 break;
912
913 case REGISTER_DR2:
914
915#ifdef SCRIPT_ENGINE_USER_MODE
916 return NULL;
917#endif // SCRIPT_ENGINE_USER_MODE
918
919#ifdef SCRIPT_ENGINE_KERNEL_MODE
920 return GetGuestDr2();
921#endif // SCRIPT_ENGINE_KERNEL_MODE
922
923 break;
924
925 case REGISTER_DR3:
926
927#ifdef SCRIPT_ENGINE_USER_MODE
928 return NULL;
929#endif // SCRIPT_ENGINE_USER_MODE
930
931#ifdef SCRIPT_ENGINE_KERNEL_MODE
932 return GetGuestDr3();
933#endif // SCRIPT_ENGINE_KERNEL_MODE
934
935 break;
936
937 case REGISTER_DR6:
938
939#ifdef SCRIPT_ENGINE_USER_MODE
940 return NULL;
941#endif // SCRIPT_ENGINE_USER_MODE
942
943#ifdef SCRIPT_ENGINE_KERNEL_MODE
944 return GetGuestDr6();
945#endif // SCRIPT_ENGINE_KERNEL_MODE
946
947 break;
948
949 case REGISTER_DR7:
950
951#ifdef SCRIPT_ENGINE_USER_MODE
952 return NULL;
953#endif // SCRIPT_ENGINE_USER_MODE
954
955#ifdef SCRIPT_ENGINE_KERNEL_MODE
956 return GetGuestDr7();
957#endif // SCRIPT_ENGINE_KERNEL_MODE
958
959 break;
960
961 default:
962
963#ifdef SCRIPT_ENGINE_USER_MODE
964 ShowMessages("error in reading register");
965#endif // SCRIPT_ENGINE_USER_MODE
966
967#ifdef SCRIPT_ENGINE_KERNEL_MODE
968 LogInfo("Error in reading register");
969#endif // SCRIPT_ENGINE_KERNEL_MODE
970
971 return INVALID;
972
973 break;
974 }
975}
UINT64 GetRegValueHwdbg(UINT64 *Regs, UINT32 RegId)
Get the register value for hardware debugging.
Definition Regs.c:27
#define LOWER_32_BITS
Definition BasicTypes.h:119
#define LOWER_16_BITS
Definition BasicTypes.h:120
#define TRUE
Definition BasicTypes.h:114
#define FALSE
Definition BasicTypes.h:113
#define SECOND_LOWER_8_BITS
Definition BasicTypes.h:122
#define LOWER_8_BITS
Definition BasicTypes.h:121
#define X86_FLAGS_VM
Definition Constants.h:541
#define X86_FLAGS_RF
Definition Constants.h:540
#define X86_FLAGS_TF
Definition Constants.h:531
#define X86_FLAGS_VIP
Definition Constants.h:544
#define X86_FLAGS_ZF
Definition Constants.h:529
#define X86_FLAGS_OF
Definition Constants.h:534
#define X86_FLAGS_AF
Definition Constants.h:528
#define X86_FLAGS_CF
EFLAGS/RFLAGS.
Definition Constants.h:526
#define X86_FLAGS_DF
Definition Constants.h:533
#define X86_FLAGS_IF
Definition Constants.h:532
#define X86_FLAGS_SF
Definition Constants.h:530
#define X86_FLAGS_AC
Definition Constants.h:542
#define X86_FLAGS_ID
Definition Constants.h:545
#define X86_FLAGS_VIF
Definition Constants.h:543
#define X86_FLAGS_NT
Definition Constants.h:539
#define X86_FLAGS_IOPL_SHIFT
Definition Constants.h:537
#define X86_FLAGS_PF
Definition Constants.h:527
@ REGISTER_DIL
Definition ScriptEngineCommonDefinitions.h:351
@ REGISTER_DR1
Definition ScriptEngineCommonDefinitions.h:431
@ REGISTER_R12W
Definition ScriptEngineCommonDefinitions.h:374
@ REGISTER_EDI
Definition ScriptEngineCommonDefinitions.h:349
@ REGISTER_R14W
Definition ScriptEngineCommonDefinitions.h:384
@ REGISTER_BPL
Definition ScriptEngineCommonDefinitions.h:343
@ REGISTER_CF
Definition ScriptEngineCommonDefinitions.h:401
@ REGISTER_R8D
Definition ScriptEngineCommonDefinitions.h:353
@ REGISTER_DI
Definition ScriptEngineCommonDefinitions.h:350
@ REGISTER_R14L
Definition ScriptEngineCommonDefinitions.h:386
@ REGISTER_RDX
Definition ScriptEngineCommonDefinitions.h:326
@ REGISTER_R10H
Definition ScriptEngineCommonDefinitions.h:365
@ REGISTER_BH
Definition ScriptEngineCommonDefinitions.h:334
@ REGISTER_R12D
Definition ScriptEngineCommonDefinitions.h:373
@ REGISTER_GDTR
Definition ScriptEngineCommonDefinitions.h:423
@ REGISTER_R10
Definition ScriptEngineCommonDefinitions.h:362
@ REGISTER_DR3
Definition ScriptEngineCommonDefinitions.h:433
@ REGISTER_CR4
Definition ScriptEngineCommonDefinitions.h:428
@ REGISTER_CS
Definition ScriptEngineCommonDefinitions.h:396
@ REGISTER_BL
Definition ScriptEngineCommonDefinitions.h:335
@ REGISTER_AL
Definition ScriptEngineCommonDefinitions.h:320
@ REGISTER_IOPL
Definition ScriptEngineCommonDefinitions.h:410
@ REGISTER_CH
Definition ScriptEngineCommonDefinitions.h:324
@ REGISTER_RF
Definition ScriptEngineCommonDefinitions.h:412
@ REGISTER_DR6
Definition ScriptEngineCommonDefinitions.h:434
@ REGISTER_R12
Definition ScriptEngineCommonDefinitions.h:372
@ REGISTER_CL
Definition ScriptEngineCommonDefinitions.h:325
@ REGISTER_RBX
Definition ScriptEngineCommonDefinitions.h:331
@ REGISTER_TR
Definition ScriptEngineCommonDefinitions.h:424
@ REGISTER_PF
Definition ScriptEngineCommonDefinitions.h:402
@ REGISTER_ZF
Definition ScriptEngineCommonDefinitions.h:404
@ REGISTER_R14H
Definition ScriptEngineCommonDefinitions.h:385
@ REGISTER_EIP
Definition ScriptEngineCommonDefinitions.h:419
@ REGISTER_R9
Definition ScriptEngineCommonDefinitions.h:357
@ REGISTER_R12H
Definition ScriptEngineCommonDefinitions.h:375
@ REGISTER_R14D
Definition ScriptEngineCommonDefinitions.h:383
@ REGISTER_ESP
Definition ScriptEngineCommonDefinitions.h:337
@ REGISTER_IDTR
Definition ScriptEngineCommonDefinitions.h:421
@ REGISTER_RIP
Definition ScriptEngineCommonDefinitions.h:418
@ REGISTER_DL
Definition ScriptEngineCommonDefinitions.h:330
@ REGISTER_R11
Definition ScriptEngineCommonDefinitions.h:367
@ REGISTER_NT
Definition ScriptEngineCommonDefinitions.h:411
@ REGISTER_FS
Definition ScriptEngineCommonDefinitions.h:394
@ REGISTER_SPL
Definition ScriptEngineCommonDefinitions.h:339
@ REGISTER_OF
Definition ScriptEngineCommonDefinitions.h:409
@ REGISTER_DH
Definition ScriptEngineCommonDefinitions.h:329
@ REGISTER_R15
Definition ScriptEngineCommonDefinitions.h:387
@ REGISTER_LDTR
Definition ScriptEngineCommonDefinitions.h:422
@ REGISTER_AF
Definition ScriptEngineCommonDefinitions.h:403
@ REGISTER_CR8
Definition ScriptEngineCommonDefinitions.h:429
@ REGISTER_IP
Definition ScriptEngineCommonDefinitions.h:420
@ REGISTER_R8
Definition ScriptEngineCommonDefinitions.h:352
@ REGISTER_SS
Definition ScriptEngineCommonDefinitions.h:397
@ REGISTER_DR2
Definition ScriptEngineCommonDefinitions.h:432
@ REGISTER_R8L
Definition ScriptEngineCommonDefinitions.h:356
@ REGISTER_RAX
Definition ScriptEngineCommonDefinitions.h:316
@ REGISTER_R13
Definition ScriptEngineCommonDefinitions.h:377
@ REGISTER_R11D
Definition ScriptEngineCommonDefinitions.h:368
@ REGISTER_R13H
Definition ScriptEngineCommonDefinitions.h:380
@ REGISTER_EBX
Definition ScriptEngineCommonDefinitions.h:332
@ REGISTER_GS
Definition ScriptEngineCommonDefinitions.h:395
@ REGISTER_DR0
Definition ScriptEngineCommonDefinitions.h:430
@ REGISTER_R9L
Definition ScriptEngineCommonDefinitions.h:361
@ REGISTER_R15D
Definition ScriptEngineCommonDefinitions.h:388
@ REGISTER_CR2
Definition ScriptEngineCommonDefinitions.h:426
@ REGISTER_SF
Definition ScriptEngineCommonDefinitions.h:405
@ REGISTER_DX
Definition ScriptEngineCommonDefinitions.h:328
@ REGISTER_TF
Definition ScriptEngineCommonDefinitions.h:406
@ REGISTER_R9D
Definition ScriptEngineCommonDefinitions.h:358
@ REGISTER_ESI
Definition ScriptEngineCommonDefinitions.h:345
@ REGISTER_R15H
Definition ScriptEngineCommonDefinitions.h:390
@ REGISTER_RSI
Definition ScriptEngineCommonDefinitions.h:344
@ REGISTER_SIL
Definition ScriptEngineCommonDefinitions.h:347
@ REGISTER_BP
Definition ScriptEngineCommonDefinitions.h:342
@ REGISTER_AC
Definition ScriptEngineCommonDefinitions.h:414
@ REGISTER_R10L
Definition ScriptEngineCommonDefinitions.h:366
@ REGISTER_R13D
Definition ScriptEngineCommonDefinitions.h:378
@ REGISTER_R10D
Definition ScriptEngineCommonDefinitions.h:363
@ REGISTER_EFLAGS
Definition ScriptEngineCommonDefinitions.h:399
@ REGISTER_CR0
Definition ScriptEngineCommonDefinitions.h:425
@ REGISTER_DF
Definition ScriptEngineCommonDefinitions.h:408
@ REGISTER_R11H
Definition ScriptEngineCommonDefinitions.h:370
@ REGISTER_VM
Definition ScriptEngineCommonDefinitions.h:413
@ REGISTER_R15L
Definition ScriptEngineCommonDefinitions.h:391
@ REGISTER_R9H
Definition ScriptEngineCommonDefinitions.h:360
@ REGISTER_VIP
Definition ScriptEngineCommonDefinitions.h:416
@ REGISTER_SI
Definition ScriptEngineCommonDefinitions.h:346
@ REGISTER_R10W
Definition ScriptEngineCommonDefinitions.h:364
@ REGISTER_EAX
Definition ScriptEngineCommonDefinitions.h:317
@ REGISTER_CX
Definition ScriptEngineCommonDefinitions.h:323
@ REGISTER_BX
Definition ScriptEngineCommonDefinitions.h:333
@ REGISTER_IF
Definition ScriptEngineCommonDefinitions.h:407
@ REGISTER_R13L
Definition ScriptEngineCommonDefinitions.h:381
@ REGISTER_ES
Definition ScriptEngineCommonDefinitions.h:393
@ REGISTER_AX
Definition ScriptEngineCommonDefinitions.h:318
@ REGISTER_R12L
Definition ScriptEngineCommonDefinitions.h:376
@ REGISTER_RCX
Definition ScriptEngineCommonDefinitions.h:321
@ REGISTER_R8W
Definition ScriptEngineCommonDefinitions.h:354
@ REGISTER_R8H
Definition ScriptEngineCommonDefinitions.h:355
@ REGISTER_ID
Definition ScriptEngineCommonDefinitions.h:417
@ REGISTER_EDX
Definition ScriptEngineCommonDefinitions.h:327
@ REGISTER_RFLAGS
Definition ScriptEngineCommonDefinitions.h:398
@ REGISTER_VIF
Definition ScriptEngineCommonDefinitions.h:415
@ REGISTER_R11L
Definition ScriptEngineCommonDefinitions.h:371
@ REGISTER_R14
Definition ScriptEngineCommonDefinitions.h:382
@ REGISTER_R15W
Definition ScriptEngineCommonDefinitions.h:389
@ REGISTER_CR3
Definition ScriptEngineCommonDefinitions.h:427
@ REGISTER_SP
Definition ScriptEngineCommonDefinitions.h:338
@ REGISTER_DR7
Definition ScriptEngineCommonDefinitions.h:435
@ REGISTER_FLAGS
Definition ScriptEngineCommonDefinitions.h:400
@ REGISTER_RDI
Definition ScriptEngineCommonDefinitions.h:348
@ REGISTER_ECX
Definition ScriptEngineCommonDefinitions.h:322
@ REGISTER_R13W
Definition ScriptEngineCommonDefinitions.h:379
@ REGISTER_R11W
Definition ScriptEngineCommonDefinitions.h:369
@ REGISTER_DS
Definition ScriptEngineCommonDefinitions.h:392
@ REGISTER_RSP
Definition ScriptEngineCommonDefinitions.h:336
@ REGISTER_EBP
Definition ScriptEngineCommonDefinitions.h:341
@ REGISTER_AH
Definition ScriptEngineCommonDefinitions.h:319
@ REGISTER_RBP
Definition ScriptEngineCommonDefinitions.h:340
@ REGISTER_R9W
Definition ScriptEngineCommonDefinitions.h:359
#define INVALID
Definition ScriptEngineCommonDefinitions.h:92
#define LogInfo(format,...)
Define log variables.
Definition HyperDbgHyperLogIntrinsics.h:71
IMPORT_EXPORT_VMM UINT64 GetGuestCr4()
Get the Guest Cr4 value.
Definition ManageRegs.c:507
IMPORT_EXPORT_VMM UINT64 GetGuestCr8()
Get the Guest Cr8 value.
Definition ManageRegs.c:522
IMPORT_EXPORT_VMM UINT64 GetGuestIdtr()
Get the Guest Idtr.
Definition ManageRegs.c:304
IMPORT_EXPORT_VMM UINT64 GetGuestDr1()
Get the Guest Dr1 value.
Definition ManageRegs.c:681
IMPORT_EXPORT_VMM VMX_SEGMENT_SELECTOR GetGuestEs()
Get the Guest Es Selector.
Definition ManageRegs.c:274
IMPORT_EXPORT_VMM VMX_SEGMENT_SELECTOR GetGuestCs()
Get the Guest Cs Selector.
Definition ManageRegs.c:49
IMPORT_EXPORT_VMM UINT64 GetGuestGdtr()
Get the Guest Gdtr.
Definition ManageRegs.c:358
IMPORT_EXPORT_VMM UINT64 GetGuestLdtr()
Get the Guest Ldtr.
Definition ManageRegs.c:331
IMPORT_EXPORT_VMM UINT64 GetGuestDr2()
Get the Guest Dr2 value.
Definition ManageRegs.c:694
IMPORT_EXPORT_VMM VMX_SEGMENT_SELECTOR GetGuestDs()
Get the Guest Ds Selector.
Definition ManageRegs.c:139
IMPORT_EXPORT_VMM UINT64 GetGuestDr3()
Get the Guest Dr3 value.
Definition ManageRegs.c:707
IMPORT_EXPORT_VMM UINT64 GetGuestRFlags()
Get the Guest Rflags value.
Definition ManageRegs.c:409
IMPORT_EXPORT_VMM VMX_SEGMENT_SELECTOR GetGuestSs()
Get the Guest Ss Selector.
Definition ManageRegs.c:94
IMPORT_EXPORT_VMM UINT64 GetGuestRIP()
Get the Guest RIP value.
Definition ManageRegs.c:448
IMPORT_EXPORT_VMM VMX_SEGMENT_SELECTOR GetGuestGs()
Get the Guest Gs Selector.
Definition ManageRegs.c:229
IMPORT_EXPORT_VMM UINT64 GetGuestCr0()
Get the Guest Cr0 value.
Definition ManageRegs.c:463
IMPORT_EXPORT_VMM UINT64 GetGuestCr3()
Get the Guest Cr3 value.
Definition ManageRegs.c:492
IMPORT_EXPORT_VMM UINT64 GetGuestTr()
Get the Guest Tr.
Definition ManageRegs.c:383
IMPORT_EXPORT_VMM UINT64 GetGuestDr7()
Get the Guest Dr7 (breakpoint trigger) value.
Definition ManageRegs.c:733
IMPORT_EXPORT_VMM UINT64 GetGuestDr0()
Get the Guest Dr0 value.
Definition ManageRegs.c:668
IMPORT_EXPORT_VMM UINT64 GetGuestCr2()
Get the Guest Cr2 value.
Definition ManageRegs.c:478
IMPORT_EXPORT_VMM VMX_SEGMENT_SELECTOR GetGuestFs()
Get the Guest Fs Selector.
Definition ManageRegs.c:184
IMPORT_EXPORT_VMM UINT64 GetGuestDr6()
Get the Guest Dr6 (breakpoint status) value.
Definition ManageRegs.c:720
BOOLEAN g_HwdbgInstanceInfoIsValid
Shows whether the instance info is valid (received) or not.
Definition globals.h:697
NULL()
Definition test-case-generator.py:530
UINT16 Selector
Definition DataTypes.h:486
UINT64 rsp
Definition BasicTypes.h:145
UINT64 r14
Definition BasicTypes.h:155
UINT64 r15
Definition BasicTypes.h:156
UINT64 rdi
Definition BasicTypes.h:148
UINT64 rax
Definition BasicTypes.h:141
UINT64 r12
Definition BasicTypes.h:153
UINT64 r13
Definition BasicTypes.h:154
UINT64 r9
Definition BasicTypes.h:150
UINT64 r8
Definition BasicTypes.h:149
UINT64 rbp
Definition BasicTypes.h:146
UINT64 rbx
Definition BasicTypes.h:144
UINT64 r10
Definition BasicTypes.h:151
UINT64 rcx
Definition BasicTypes.h:142
UINT64 rsi
Definition BasicTypes.h:147
UINT64 r11
Definition BasicTypes.h:152
UINT64 rdx
Definition BasicTypes.h:143

◆ GetRegValueHwdbg()

UINT64 GetRegValueHwdbg ( UINT64 * Regs,
UINT32 RegId )

Get the register value for hardware debugging.

Parameters
Regs
RegId
Returns
UINT64
28{
29 return Regs[RegId];
30}

◆ SetRegValue()

BOOLEAN SetRegValue ( PGUEST_REGS GuestRegs,
UINT32 RegisterId,
UINT64 Value )

Set the register value.

Parameters
GuestRegs
RegisterId
Value
Returns
BOOLEAN
1004{
1005 BOOLEAN Result = TRUE;
1006
1007 switch (RegisterId)
1008 {
1009 case REGISTER_RAX:
1010 GuestRegs->rax = Value;
1011
1012 break;
1013
1014 case REGISTER_EAX:
1015 GuestRegs->rax = (GuestRegs->rax & UPPER_32_BITS) | (Value & LOWER_32_BITS);
1016
1017 break;
1018
1019 case REGISTER_AX:
1020 GuestRegs->rax = (GuestRegs->rax & UPPER_48_BITS) | (Value & LOWER_16_BITS);
1021
1022 break;
1023
1024 case REGISTER_AH:
1025 GuestRegs->rax = (GuestRegs->rax & UPPER_48_BITS_AND_LOWER_8_BITS) | ((Value << 8) & SECOND_LOWER_8_BITS);
1026
1027 break;
1028
1029 case REGISTER_AL:
1030 GuestRegs->rax = (GuestRegs->rax & UPPER_56_BITS) | (Value & LOWER_8_BITS);
1031
1032 break;
1033
1034 case REGISTER_RCX:
1035 GuestRegs->rcx = Value;
1036
1037 break;
1038 case REGISTER_ECX:
1039 GuestRegs->rcx = (GuestRegs->rcx & UPPER_32_BITS) | (Value & LOWER_32_BITS);
1040
1041 break;
1042
1043 case REGISTER_CX:
1044 GuestRegs->rcx = (GuestRegs->rcx & UPPER_48_BITS) | (Value & LOWER_16_BITS);
1045
1046 break;
1047
1048 case REGISTER_CH:
1049 GuestRegs->rcx = (GuestRegs->rcx & UPPER_48_BITS_AND_LOWER_8_BITS) | ((Value << 8) & SECOND_LOWER_8_BITS);
1050
1051 break;
1052
1053 case REGISTER_CL:
1054 GuestRegs->rcx = (GuestRegs->rcx & UPPER_56_BITS) | (Value & LOWER_8_BITS);
1055
1056 break;
1057 case REGISTER_RDX:
1058 GuestRegs->rdx = Value;
1059
1060 break;
1061 case REGISTER_EDX:
1062 GuestRegs->rdx = (GuestRegs->rdx & UPPER_32_BITS) | (Value & LOWER_32_BITS);
1063
1064 break;
1065
1066 case REGISTER_DX:
1067 GuestRegs->rdx = (GuestRegs->rdx & UPPER_48_BITS) | (Value & LOWER_16_BITS);
1068
1069 break;
1070
1071 case REGISTER_DH:
1072 GuestRegs->rdx = (GuestRegs->rdx & UPPER_48_BITS_AND_LOWER_8_BITS) | ((Value << 8) & SECOND_LOWER_8_BITS);
1073
1074 break;
1075
1076 case REGISTER_DL:
1077 GuestRegs->rdx = (GuestRegs->rdx & UPPER_56_BITS) | (Value & LOWER_8_BITS);
1078
1079 break;
1080 case REGISTER_RBX:
1081 GuestRegs->rbx = Value;
1082
1083 break;
1084 case REGISTER_EBX:
1085 GuestRegs->rbx = (GuestRegs->rbx & UPPER_32_BITS) | (Value & LOWER_32_BITS);
1086
1087 break;
1088
1089 case REGISTER_BX:
1090 GuestRegs->rbx = (GuestRegs->rbx & UPPER_48_BITS) | (Value & LOWER_16_BITS);
1091
1092 break;
1093
1094 case REGISTER_BH:
1095 GuestRegs->rbx = (GuestRegs->rbx & UPPER_48_BITS_AND_LOWER_8_BITS) | ((Value << 8) & SECOND_LOWER_8_BITS);
1096
1097 break;
1098
1099 case REGISTER_BL:
1100 GuestRegs->rbx = (GuestRegs->rbx & UPPER_56_BITS) | (Value & LOWER_8_BITS);
1101
1102 break;
1103 case REGISTER_RSP:
1104
1105#ifdef SCRIPT_ENGINE_USER_MODE
1106 GuestRegs->rsp = Value;
1107#endif // SCRIPT_ENGINE_USER_MODE
1108
1109#ifdef SCRIPT_ENGINE_KERNEL_MODE
1110 GuestRegs->rsp = Value;
1112#endif // SCRIPT_ENGINE_KERNEL_MODE
1113
1114 break;
1115
1116 case REGISTER_ESP:
1117
1118#ifdef SCRIPT_ENGINE_USER_MODE
1119 GuestRegs->rsp = Value;
1120#endif // SCRIPT_ENGINE_USER_MODE
1121
1122#ifdef SCRIPT_ENGINE_KERNEL_MODE
1123 GuestRegs->rsp = (GuestRegs->rsp & UPPER_32_BITS) | (Value & LOWER_32_BITS);
1124 SetGuestRSP(GuestRegs->rsp);
1125#endif // SCRIPT_ENGINE_KERNEL_MODE
1126
1127 break;
1128
1129 case REGISTER_SP:
1130
1131#ifdef SCRIPT_ENGINE_USER_MODE
1132 GuestRegs->rsp = Value;
1133#endif // SCRIPT_ENGINE_USER_MODE
1134
1135#ifdef SCRIPT_ENGINE_KERNEL_MODE
1136 GuestRegs->rsp = (GuestRegs->rsp & UPPER_48_BITS) | (Value & LOWER_16_BITS);
1137 SetGuestRSP(GuestRegs->rsp);
1138#endif // SCRIPT_ENGINE_KERNEL_MODE
1139
1140 break;
1141
1142 case REGISTER_SPL:
1143
1144#ifdef SCRIPT_ENGINE_USER_MODE
1145 GuestRegs->rsp = Value;
1146#endif // SCRIPT_ENGINE_USER_MODE
1147
1148#ifdef SCRIPT_ENGINE_KERNEL_MODE
1149 GuestRegs->rsp = (GuestRegs->rsp & UPPER_56_BITS) | (Value & LOWER_8_BITS);
1150 SetGuestRSP(GuestRegs->rsp);
1151#endif // SCRIPT_ENGINE_KERNEL_MODE
1152
1153 break;
1154
1155 case REGISTER_RBP:
1156 GuestRegs->rbp = Value;
1157
1158 break;
1159 case REGISTER_EBP:
1160 GuestRegs->rbp = (GuestRegs->rbp & UPPER_32_BITS) | (Value & LOWER_32_BITS);
1161
1162 break;
1163
1164 case REGISTER_BP:
1165 GuestRegs->rbp = (GuestRegs->rbp & UPPER_48_BITS) | (Value & LOWER_16_BITS);
1166
1167 break;
1168
1169 case REGISTER_BPL:
1170 GuestRegs->rbp = (GuestRegs->rbp & UPPER_56_BITS) | (Value & LOWER_8_BITS);
1171
1172 break;
1173 case REGISTER_RSI:
1174 GuestRegs->rsi = Value;
1175
1176 break;
1177 case REGISTER_ESI:
1178 GuestRegs->rsi = (GuestRegs->rsi & UPPER_32_BITS) | (Value & LOWER_32_BITS);
1179
1180 break;
1181
1182 case REGISTER_SI:
1183 GuestRegs->rsi = (GuestRegs->rsi & UPPER_48_BITS) | (Value & LOWER_16_BITS);
1184
1185 break;
1186
1187 case REGISTER_SIL:
1188 GuestRegs->rsi = (GuestRegs->rsi & UPPER_56_BITS) | (Value & LOWER_8_BITS);
1189
1190 break;
1191 case REGISTER_RDI:
1192 GuestRegs->rdi = Value;
1193
1194 break;
1195 case REGISTER_EDI:
1196 GuestRegs->rdi = (GuestRegs->rdi & UPPER_32_BITS) | (Value & LOWER_32_BITS);
1197
1198 break;
1199
1200 case REGISTER_DI:
1201 GuestRegs->rdi = (GuestRegs->rdi & UPPER_48_BITS) | (Value & LOWER_16_BITS);
1202
1203 break;
1204
1205 case REGISTER_DIL:
1206 GuestRegs->rdi = (GuestRegs->rdi & UPPER_56_BITS) | (Value & LOWER_8_BITS);
1207
1208 break;
1209 case REGISTER_R8:
1210 GuestRegs->r8 = Value;
1211
1212 break;
1213 case REGISTER_R8D:
1214 GuestRegs->r8 = (GuestRegs->r8 & UPPER_32_BITS) | (Value & LOWER_32_BITS);
1215
1216 break;
1217
1218 case REGISTER_R8W:
1219 GuestRegs->r8 = (GuestRegs->r8 & UPPER_48_BITS) | (Value & LOWER_16_BITS);
1220
1221 break;
1222
1223 case REGISTER_R8H:
1224 GuestRegs->r8 = (GuestRegs->r8 & UPPER_48_BITS_AND_LOWER_8_BITS) | ((Value << 8) & SECOND_LOWER_8_BITS);
1225
1226 break;
1227
1228 case REGISTER_R8L:
1229 GuestRegs->r8 = (GuestRegs->r8 & UPPER_56_BITS) | (Value & LOWER_8_BITS);
1230
1231 break;
1232 case REGISTER_R9:
1233 GuestRegs->r9 = Value;
1234
1235 break;
1236 case REGISTER_R9D:
1237 GuestRegs->r9 = (GuestRegs->r9 & UPPER_32_BITS) | (Value & LOWER_32_BITS);
1238
1239 break;
1240
1241 case REGISTER_R9W:
1242 GuestRegs->r9 = (GuestRegs->r9 & UPPER_48_BITS) | (Value & LOWER_16_BITS);
1243
1244 break;
1245
1246 case REGISTER_R9H:
1247 GuestRegs->r9 = (GuestRegs->r9 & UPPER_48_BITS_AND_LOWER_8_BITS) | ((Value << 8) & SECOND_LOWER_8_BITS);
1248
1249 break;
1250
1251 case REGISTER_R9L:
1252 GuestRegs->r9 = (GuestRegs->r9 & UPPER_56_BITS) | (Value & LOWER_8_BITS);
1253
1254 break;
1255 case REGISTER_R10:
1256 GuestRegs->r10 = Value;
1257
1258 break;
1259 case REGISTER_R10D:
1260 GuestRegs->r10 = (GuestRegs->r10 & UPPER_32_BITS) | (Value & LOWER_32_BITS);
1261
1262 break;
1263
1264 case REGISTER_R10W:
1265 GuestRegs->r10 = (GuestRegs->r10 & UPPER_48_BITS) | (Value & LOWER_16_BITS);
1266
1267 break;
1268
1269 case REGISTER_R10H:
1270 GuestRegs->r10 = (GuestRegs->r10 & UPPER_48_BITS_AND_LOWER_8_BITS) | ((Value << 8) & SECOND_LOWER_8_BITS);
1271
1272 break;
1273
1274 case REGISTER_R10L:
1275 GuestRegs->r10 = (GuestRegs->r10 & UPPER_56_BITS) | (Value & LOWER_8_BITS);
1276
1277 break;
1278 case REGISTER_R11:
1279 GuestRegs->r11 = Value;
1280
1281 break;
1282 case REGISTER_R11D:
1283 GuestRegs->r11 = (GuestRegs->r11 & UPPER_32_BITS) | (Value & LOWER_32_BITS);
1284
1285 break;
1286
1287 case REGISTER_R11W:
1288 GuestRegs->r11 = (GuestRegs->r11 & UPPER_48_BITS) | (Value & LOWER_16_BITS);
1289
1290 break;
1291
1292 case REGISTER_R11H:
1293 GuestRegs->r11 = (GuestRegs->r11 & UPPER_48_BITS_AND_LOWER_8_BITS) | ((Value << 8) & SECOND_LOWER_8_BITS);
1294
1295 break;
1296
1297 case REGISTER_R11L:
1298 GuestRegs->r11 = (GuestRegs->r11 & UPPER_56_BITS) | (Value & LOWER_8_BITS);
1299
1300 break;
1301 case REGISTER_R12:
1302 GuestRegs->r12 = Value;
1303
1304 break;
1305 case REGISTER_R12D:
1306 GuestRegs->r12 = (GuestRegs->r12 & UPPER_32_BITS) | (Value & LOWER_32_BITS);
1307
1308 break;
1309
1310 case REGISTER_R12W:
1311 GuestRegs->r12 = (GuestRegs->r12 & UPPER_48_BITS) | (Value & LOWER_16_BITS);
1312
1313 break;
1314
1315 case REGISTER_R12H:
1316 GuestRegs->r12 = (GuestRegs->r12 & UPPER_48_BITS_AND_LOWER_8_BITS) | ((Value << 8) & SECOND_LOWER_8_BITS);
1317
1318 break;
1319
1320 case REGISTER_R12L:
1321 GuestRegs->r12 = (GuestRegs->r12 & UPPER_56_BITS) | (Value & LOWER_8_BITS);
1322
1323 break;
1324 case REGISTER_R13:
1325 GuestRegs->r13 = Value;
1326
1327 break;
1328 case REGISTER_R13D:
1329 GuestRegs->r13 = (GuestRegs->r13 & UPPER_32_BITS) | (Value & LOWER_32_BITS);
1330
1331 break;
1332
1333 case REGISTER_R13W:
1334 GuestRegs->r13 = (GuestRegs->r13 & UPPER_48_BITS) | (Value & LOWER_16_BITS);
1335
1336 break;
1337
1338 case REGISTER_R13H:
1339 GuestRegs->r13 = (GuestRegs->r13 & UPPER_48_BITS_AND_LOWER_8_BITS) | ((Value << 8) & SECOND_LOWER_8_BITS);
1340
1341 break;
1342
1343 case REGISTER_R13L:
1344 GuestRegs->r13 = (GuestRegs->r13 & UPPER_56_BITS) | (Value & LOWER_8_BITS);
1345
1346 break;
1347 case REGISTER_R14:
1348 GuestRegs->r14 = Value;
1349
1350 break;
1351 case REGISTER_R14D:
1352 GuestRegs->r14 = (GuestRegs->r14 & UPPER_32_BITS) | (Value & LOWER_32_BITS);
1353
1354 break;
1355
1356 case REGISTER_R14W:
1357 GuestRegs->r14 = (GuestRegs->r14 & UPPER_48_BITS) | (Value & LOWER_16_BITS);
1358
1359 break;
1360
1361 case REGISTER_R14H:
1362 GuestRegs->r14 = (GuestRegs->r14 & UPPER_48_BITS_AND_LOWER_8_BITS) | ((Value << 8) & SECOND_LOWER_8_BITS);
1363
1364 break;
1365
1366 case REGISTER_R14L:
1367 GuestRegs->r14 = (GuestRegs->r14 & UPPER_56_BITS) | (Value & LOWER_8_BITS);
1368
1369 break;
1370 case REGISTER_R15:
1371 GuestRegs->r15 = Value;
1372
1373 break;
1374 case REGISTER_R15D:
1375 GuestRegs->r15 = (GuestRegs->r15 & UPPER_32_BITS) | (Value & LOWER_32_BITS);
1376
1377 break;
1378
1379 case REGISTER_R15W:
1380 GuestRegs->r15 = (GuestRegs->r15 & UPPER_48_BITS) | (Value & LOWER_16_BITS);
1381
1382 break;
1383
1384 case REGISTER_R15H:
1385 GuestRegs->r15 = (GuestRegs->r15 & UPPER_48_BITS_AND_LOWER_8_BITS) | ((Value << 8) & SECOND_LOWER_8_BITS);
1386
1387 break;
1388
1389 case REGISTER_R15L:
1390 GuestRegs->r15 = (GuestRegs->r15 & UPPER_56_BITS) | (Value & LOWER_8_BITS);
1391
1392 break;
1393 case REGISTER_DS:
1394
1395#ifdef SCRIPT_ENGINE_USER_MODE
1396 //
1397 // Nothing to do
1398 //
1399#endif // SCRIPT_ENGINE_USER_MODE
1400
1401#ifdef SCRIPT_ENGINE_KERNEL_MODE
1404#endif // SCRIPT_ENGINE_KERNEL_MODE
1405
1406 break;
1407
1408 case REGISTER_ES:
1409
1410#ifdef SCRIPT_ENGINE_USER_MODE
1411 //
1412 // Nothing to do
1413 //
1414#endif // SCRIPT_ENGINE_USER_MODE
1415
1416#ifdef SCRIPT_ENGINE_KERNEL_MODE
1419#endif // SCRIPT_ENGINE_KERNEL_MODE
1420
1421 break;
1422
1423 case REGISTER_FS:
1424
1425#ifdef SCRIPT_ENGINE_USER_MODE
1426 //
1427 // Nothing to do
1428 //
1429#endif // SCRIPT_ENGINE_USER_MODE
1430
1431#ifdef SCRIPT_ENGINE_KERNEL_MODE
1434#endif // SCRIPT_ENGINE_KERNEL_MODE
1435
1436 break;
1437
1438 case REGISTER_GS:
1439
1440#ifdef SCRIPT_ENGINE_USER_MODE
1441 //
1442 // Nothing to do
1443 //
1444#endif // SCRIPT_ENGINE_USER_MODE
1445
1446#ifdef SCRIPT_ENGINE_KERNEL_MODE
1449#endif // SCRIPT_ENGINE_KERNEL_MODE
1450
1451 break;
1452
1453 case REGISTER_CS:
1454
1455#ifdef SCRIPT_ENGINE_USER_MODE
1456 //
1457 // Nothing to do
1458 //
1459#endif // SCRIPT_ENGINE_USER_MODE
1460
1461#ifdef SCRIPT_ENGINE_KERNEL_MODE
1464#endif // SCRIPT_ENGINE_KERNEL_MODE
1465
1466 break;
1467
1468 case REGISTER_SS:
1469
1470#ifdef SCRIPT_ENGINE_USER_MODE
1471 //
1472 // Nothing to do
1473 //
1474#endif // SCRIPT_ENGINE_USER_MODE
1475
1476#ifdef SCRIPT_ENGINE_KERNEL_MODE
1479#endif // SCRIPT_ENGINE_KERNEL_MODE
1480
1481 break;
1482
1483 case REGISTER_RFLAGS:
1484
1485#ifdef SCRIPT_ENGINE_USER_MODE
1486 //
1487 // Nothing to do
1488 //
1489#endif // SCRIPT_ENGINE_USER_MODE
1490
1491#ifdef SCRIPT_ENGINE_KERNEL_MODE
1493#endif // SCRIPT_ENGINE_KERNEL_MODE
1494
1495 break;
1496
1497 case REGISTER_EFLAGS:
1498
1499#ifdef SCRIPT_ENGINE_USER_MODE
1500 //
1501 // Nothing to do
1502 //
1503#endif // SCRIPT_ENGINE_USER_MODE
1504
1505#ifdef SCRIPT_ENGINE_KERNEL_MODE
1507#endif // SCRIPT_ENGINE_KERNEL_MODE
1508
1509 break;
1510
1511 case REGISTER_FLAGS:
1512
1513#ifdef SCRIPT_ENGINE_USER_MODE
1514 //
1515 // Nothing to do
1516 //
1517#endif // SCRIPT_ENGINE_USER_MODE
1518
1519#ifdef SCRIPT_ENGINE_KERNEL_MODE
1521#endif // SCRIPT_ENGINE_KERNEL_MODE
1522
1523 break;
1524
1525 case REGISTER_CF:
1526
1527#ifdef SCRIPT_ENGINE_USER_MODE
1528 //
1529 // Nothing to do
1530 //
1531#endif // SCRIPT_ENGINE_USER_MODE
1532
1533#ifdef SCRIPT_ENGINE_KERNEL_MODE
1535#endif // SCRIPT_ENGINE_KERNEL_MODE
1536
1537 break;
1538
1539 case REGISTER_PF:
1540
1541#ifdef SCRIPT_ENGINE_USER_MODE
1542 //
1543 // Nothing to do
1544 //
1545#endif // SCRIPT_ENGINE_USER_MODE
1546
1547#ifdef SCRIPT_ENGINE_KERNEL_MODE
1549#endif // SCRIPT_ENGINE_KERNEL_MODE
1550
1551 break;
1552
1553 case REGISTER_AF:
1554
1555#ifdef SCRIPT_ENGINE_USER_MODE
1556 //
1557 // Nothing to do
1558 //
1559#endif // SCRIPT_ENGINE_USER_MODE
1560
1561#ifdef SCRIPT_ENGINE_KERNEL_MODE
1563#endif // SCRIPT_ENGINE_KERNEL_MODE
1564
1565 break;
1566
1567 case REGISTER_ZF:
1568
1569#ifdef SCRIPT_ENGINE_USER_MODE
1570 //
1571 // Nothing to do
1572 //
1573#endif // SCRIPT_ENGINE_USER_MODE
1574
1575#ifdef SCRIPT_ENGINE_KERNEL_MODE
1577#endif // SCRIPT_ENGINE_KERNEL_MODE
1578
1579 break;
1580
1581 case REGISTER_SF:
1582
1583#ifdef SCRIPT_ENGINE_USER_MODE
1584 //
1585 // Nothing to do
1586 //
1587#endif // SCRIPT_ENGINE_USER_MODE
1588
1589#ifdef SCRIPT_ENGINE_KERNEL_MODE
1591#endif // SCRIPT_ENGINE_KERNEL_MODE
1592
1593 break;
1594
1595 case REGISTER_TF:
1596
1597#ifdef SCRIPT_ENGINE_USER_MODE
1598 //
1599 // Nothing to do
1600 //
1601#endif // SCRIPT_ENGINE_USER_MODE
1602
1603#ifdef SCRIPT_ENGINE_KERNEL_MODE
1605#endif // SCRIPT_ENGINE_KERNEL_MODE
1606
1607 break;
1608
1609 case REGISTER_IF:
1610
1611#ifdef SCRIPT_ENGINE_USER_MODE
1612 //
1613 // Nothing to do
1614 //
1615#endif // SCRIPT_ENGINE_USER_MODE
1616
1617#ifdef SCRIPT_ENGINE_KERNEL_MODE
1619#endif // SCRIPT_ENGINE_KERNEL_MODE
1620
1621 break;
1622
1623 case REGISTER_DF:
1624
1625#ifdef SCRIPT_ENGINE_USER_MODE
1626 //
1627 // Nothing to do
1628 //
1629#endif // SCRIPT_ENGINE_USER_MODE
1630
1631#ifdef SCRIPT_ENGINE_KERNEL_MODE
1633#endif // SCRIPT_ENGINE_KERNEL_MODE
1634
1635 break;
1636
1637 case REGISTER_OF:
1638
1639#ifdef SCRIPT_ENGINE_USER_MODE
1640 //
1641 // Nothing to do
1642 //
1643#endif // SCRIPT_ENGINE_USER_MODE
1644
1645#ifdef SCRIPT_ENGINE_KERNEL_MODE
1647#endif // SCRIPT_ENGINE_KERNEL_MODE
1648
1649 break;
1650
1651 case REGISTER_IOPL:
1652
1653#ifdef SCRIPT_ENGINE_USER_MODE
1654 //
1655 // Nothing to do
1656 //
1657#endif // SCRIPT_ENGINE_USER_MODE
1658
1659#ifdef SCRIPT_ENGINE_KERNEL_MODE
1661 Value = (Value >> 4) & 1;
1663#endif // SCRIPT_ENGINE_KERNEL_MODE
1664
1665 break;
1666
1667 case REGISTER_NT:
1668
1669#ifdef SCRIPT_ENGINE_USER_MODE
1670 //
1671 // Nothing to do
1672 //
1673#endif // SCRIPT_ENGINE_USER_MODE
1674
1675#ifdef SCRIPT_ENGINE_KERNEL_MODE
1677#endif // SCRIPT_ENGINE_KERNEL_MODE
1678
1679 break;
1680
1681 case REGISTER_RF:
1682
1683#ifdef SCRIPT_ENGINE_USER_MODE
1684 //
1685 // Nothing to do
1686 //
1687#endif // SCRIPT_ENGINE_USER_MODE
1688
1689#ifdef SCRIPT_ENGINE_KERNEL_MODE
1691#endif // SCRIPT_ENGINE_KERNEL_MODE
1692
1693 break;
1694
1695 case REGISTER_VM:
1696
1697#ifdef SCRIPT_ENGINE_USER_MODE
1698 //
1699 // Nothing to do
1700 //
1701#endif // SCRIPT_ENGINE_USER_MODE
1702
1703#ifdef SCRIPT_ENGINE_KERNEL_MODE
1705#endif // SCRIPT_ENGINE_KERNEL_MODE
1706
1707 break;
1708
1709 case REGISTER_AC:
1710
1711#ifdef SCRIPT_ENGINE_USER_MODE
1712 //
1713 // Nothing to do
1714 //
1715#endif // SCRIPT_ENGINE_USER_MODE
1716
1717#ifdef SCRIPT_ENGINE_KERNEL_MODE
1719#endif // SCRIPT_ENGINE_KERNEL_MODE
1720
1721 break;
1722
1723 case REGISTER_VIF:
1724
1725#ifdef SCRIPT_ENGINE_USER_MODE
1726 //
1727 // Nothing to do
1728 //
1729#endif // SCRIPT_ENGINE_USER_MODE
1730
1731#ifdef SCRIPT_ENGINE_KERNEL_MODE
1733#endif // SCRIPT_ENGINE_KERNEL_MODE
1734
1735 break;
1736
1737 case REGISTER_VIP:
1738
1739#ifdef SCRIPT_ENGINE_USER_MODE
1740 //
1741 // Nothing to do
1742 //
1743#endif // SCRIPT_ENGINE_USER_MODE
1744
1745#ifdef SCRIPT_ENGINE_KERNEL_MODE
1747#endif // SCRIPT_ENGINE_KERNEL_MODE
1748
1749 break;
1750
1751 case REGISTER_ID:
1752
1753#ifdef SCRIPT_ENGINE_USER_MODE
1754 //
1755 // Nothing to do
1756 //
1757#endif // SCRIPT_ENGINE_USER_MODE
1758
1759#ifdef SCRIPT_ENGINE_KERNEL_MODE
1761#endif // SCRIPT_ENGINE_KERNEL_MODE
1762
1763 break;
1764
1765 case REGISTER_RIP:
1766
1767#ifdef SCRIPT_ENGINE_USER_MODE
1768 //
1769 // Nothing to do
1770 //
1771#endif // SCRIPT_ENGINE_USER_MODE
1772
1773#ifdef SCRIPT_ENGINE_KERNEL_MODE
1775#endif // SCRIPT_ENGINE_KERNEL_MODE
1776
1777 break;
1778
1779 case REGISTER_EIP:
1780
1781#ifdef SCRIPT_ENGINE_USER_MODE
1782 //
1783 // Nothing to do
1784 //
1785#endif // SCRIPT_ENGINE_USER_MODE
1786
1787#ifdef SCRIPT_ENGINE_KERNEL_MODE
1789#endif // SCRIPT_ENGINE_KERNEL_MODE
1790
1791 break;
1792
1793 case REGISTER_IP:
1794
1795#ifdef SCRIPT_ENGINE_USER_MODE
1796 //
1797 // Nothing to do
1798 //
1799#endif // SCRIPT_ENGINE_USER_MODE
1800
1801#ifdef SCRIPT_ENGINE_KERNEL_MODE
1803#endif // SCRIPT_ENGINE_KERNEL_MODE
1804
1805 break;
1806
1807 case REGISTER_IDTR:
1808
1809#ifdef SCRIPT_ENGINE_USER_MODE
1810 //
1811 // Nothing to do
1812 //
1813#endif // SCRIPT_ENGINE_USER_MODE
1814
1815#ifdef SCRIPT_ENGINE_KERNEL_MODE
1817#endif // SCRIPT_ENGINE_KERNEL_MODE
1818
1819 break;
1820
1821 case REGISTER_LDTR:
1822
1823#ifdef SCRIPT_ENGINE_USER_MODE
1824 //
1825 // Nothing to do
1826 //
1827#endif // SCRIPT_ENGINE_USER_MODE
1828
1829#ifdef SCRIPT_ENGINE_KERNEL_MODE
1831#endif // SCRIPT_ENGINE_KERNEL_MODE
1832
1833 break;
1834
1835 case REGISTER_GDTR:
1836
1837#ifdef SCRIPT_ENGINE_USER_MODE
1838 //
1839 // Nothing to do
1840 //
1841#endif // SCRIPT_ENGINE_USER_MODE
1842
1843#ifdef SCRIPT_ENGINE_KERNEL_MODE
1845#endif // SCRIPT_ENGINE_KERNEL_MODE
1846
1847 break;
1848
1849 case REGISTER_TR:
1850
1851#ifdef SCRIPT_ENGINE_USER_MODE
1852 //
1853 // Nothing to do
1854 //
1855#endif // SCRIPT_ENGINE_USER_MODE
1856
1857#ifdef SCRIPT_ENGINE_KERNEL_MODE
1859#endif // SCRIPT_ENGINE_KERNEL_MODE
1860
1861 break;
1862
1863 case REGISTER_CR0:
1864
1865#ifdef SCRIPT_ENGINE_USER_MODE
1866 //
1867 // Nothing to do
1868 //
1869#endif // SCRIPT_ENGINE_USER_MODE
1870
1871#ifdef SCRIPT_ENGINE_KERNEL_MODE
1873#endif // SCRIPT_ENGINE_KERNEL_MODE
1874
1875 break;
1876
1877 case REGISTER_CR2:
1878
1879#ifdef SCRIPT_ENGINE_USER_MODE
1880 //
1881 // Nothing to do
1882 //
1883#endif // SCRIPT_ENGINE_USER_MODE
1884
1885#ifdef SCRIPT_ENGINE_KERNEL_MODE
1887#endif // SCRIPT_ENGINE_KERNEL_MODE
1888
1889 break;
1890
1891 case REGISTER_CR3:
1892
1893#ifdef SCRIPT_ENGINE_USER_MODE
1894 //
1895 // Nothing to do
1896 //
1897#endif // SCRIPT_ENGINE_USER_MODE
1898
1899#ifdef SCRIPT_ENGINE_KERNEL_MODE
1901#endif // SCRIPT_ENGINE_KERNEL_MODE
1902
1903 break;
1904
1905 case REGISTER_CR4:
1906
1907#ifdef SCRIPT_ENGINE_USER_MODE
1908 //
1909 // Nothing to do
1910 //
1911#endif // SCRIPT_ENGINE_USER_MODE
1912
1913#ifdef SCRIPT_ENGINE_KERNEL_MODE
1915#endif // SCRIPT_ENGINE_KERNEL_MODE
1916
1917 break;
1918
1919 case REGISTER_CR8:
1920
1921#ifdef SCRIPT_ENGINE_USER_MODE
1922 //
1923 // Nothing to do
1924 //
1925#endif // SCRIPT_ENGINE_USER_MODE
1926
1927#ifdef SCRIPT_ENGINE_KERNEL_MODE
1929#endif // SCRIPT_ENGINE_KERNEL_MODE
1930
1931 break;
1932
1933 case REGISTER_DR0:
1934
1935#ifdef SCRIPT_ENGINE_USER_MODE
1936 //
1937 // Nothing to do
1938 //
1939#endif // SCRIPT_ENGINE_USER_MODE
1940
1941#ifdef SCRIPT_ENGINE_KERNEL_MODE
1943#endif // SCRIPT_ENGINE_KERNEL_MODE
1944
1945 break;
1946
1947 case REGISTER_DR1:
1948
1949#ifdef SCRIPT_ENGINE_USER_MODE
1950 //
1951 // Nothing to do
1952 //
1953#endif // SCRIPT_ENGINE_USER_MODE
1954
1955#ifdef SCRIPT_ENGINE_KERNEL_MODE
1957#endif // SCRIPT_ENGINE_KERNEL_MODE
1958
1959 break;
1960
1961 case REGISTER_DR2:
1962
1963#ifdef SCRIPT_ENGINE_USER_MODE
1964 //
1965 // Nothing to do
1966 //
1967#endif // SCRIPT_ENGINE_USER_MODE
1968
1969#ifdef SCRIPT_ENGINE_KERNEL_MODE
1971#endif // SCRIPT_ENGINE_KERNEL_MODE
1972
1973 break;
1974
1975 case REGISTER_DR3:
1976
1977#ifdef SCRIPT_ENGINE_USER_MODE
1978 //
1979 // Nothing to do
1980 //
1981#endif // SCRIPT_ENGINE_USER_MODE
1982
1983#ifdef SCRIPT_ENGINE_KERNEL_MODE
1985#endif // SCRIPT_ENGINE_KERNEL_MODE
1986
1987 break;
1988
1989 case REGISTER_DR6:
1990
1991#ifdef SCRIPT_ENGINE_USER_MODE
1992 //
1993 // Nothing to do
1994 //
1995#endif // SCRIPT_ENGINE_USER_MODE
1996
1997#ifdef SCRIPT_ENGINE_KERNEL_MODE
1999#endif // SCRIPT_ENGINE_KERNEL_MODE
2000
2001 break;
2002
2003 case REGISTER_DR7:
2004
2005#ifdef SCRIPT_ENGINE_USER_MODE
2006 //
2007 // Nothing to do
2008 //
2009#endif // SCRIPT_ENGINE_USER_MODE
2010
2011#ifdef SCRIPT_ENGINE_KERNEL_MODE
2013#endif // SCRIPT_ENGINE_KERNEL_MODE
2014
2015 break;
2016 default:
2017 Result = FALSE;
2018 break;
2019 }
2020
2021 return Result;
2022}
#define UPPER_56_BITS
Definition BasicTypes.h:116
UCHAR BOOLEAN
Definition BasicTypes.h:35
#define UPPER_48_BITS_AND_LOWER_8_BITS
Definition BasicTypes.h:123
#define UPPER_32_BITS
Definition BasicTypes.h:118
#define UPPER_48_BITS
Definition BasicTypes.h:117
#define X86_FLAGS_IOPL_SHIFT_2ND_BIT
Definition Constants.h:538
struct _VMX_SEGMENT_SELECTOR * PVMX_SEGMENT_SELECTOR
IMPORT_EXPORT_VMM VOID SetGuestLdtr(UINT64 Ldtr)
Set the Guest Ldtr.
Definition ManageRegs.c:320
IMPORT_EXPORT_VMM VOID SetGuestRSP(UINT64 RSP)
Set the Guest RSP Register.
Definition ManageRegs.c:437
IMPORT_EXPORT_VMM VOID SetGuestSsSel(PVMX_SEGMENT_SELECTOR Ss)
Set just the Guest Ss selector.
Definition ManageRegs.c:68
IMPORT_EXPORT_VMM VOID SetGuestGdtr(UINT64 Gdtr)
Set the Guest Gdtr.
Definition ManageRegs.c:347
IMPORT_EXPORT_VMM VOID SetGuestDr6(UINT64 value)
Set the Guest Dr6 Register.
Definition ManageRegs.c:645
IMPORT_EXPORT_VMM VOID SetGuestCr3(UINT64 Cr3)
Set the Guest Cr3 Register.
Definition ManageRegs.c:561
IMPORT_EXPORT_VMM VOID SetGuestDr0(UINT64 value)
Set the Guest Dr0 Register.
Definition ManageRegs.c:597
IMPORT_EXPORT_VMM VOID SetGuestCr8(UINT64 Cr8)
Set the Guest Cr8 Register.
Definition ManageRegs.c:585
IMPORT_EXPORT_VMM VOID SetGuestDr1(UINT64 value)
Set the Guest Dr1 Register.
Definition ManageRegs.c:609
IMPORT_EXPORT_VMM VOID SetGuestTr(UINT64 Tr)
Definition ManageRegs.c:372
IMPORT_EXPORT_VMM VOID SetGuestDsSel(PVMX_SEGMENT_SELECTOR Ds)
Set just the Guest Ds selector.
Definition ManageRegs.c:113
IMPORT_EXPORT_VMM VOID SetGuestEsSel(PVMX_SEGMENT_SELECTOR Es)
Set just the Guest Es selector.
Definition ManageRegs.c:248
IMPORT_EXPORT_VMM VOID SetGuestCr0(UINT64 Cr0)
Set the Guest Cr0 Register.
Definition ManageRegs.c:537
IMPORT_EXPORT_VMM VOID SetGuestCr2(UINT64 Cr2)
Set the Guest Cr2 Register.
Definition ManageRegs.c:549
IMPORT_EXPORT_VMM VOID SetGuestGsSel(PVMX_SEGMENT_SELECTOR Gs)
Set just the Guest Gs selector.
Definition ManageRegs.c:203
IMPORT_EXPORT_VMM VOID SetGuestDr2(UINT64 value)
Set the Guest Dr2 Register.
Definition ManageRegs.c:621
IMPORT_EXPORT_VMM VOID SetGuestCsSel(PVMX_SEGMENT_SELECTOR Cs)
Set just the Guest Cs selector.
Definition ManageRegs.c:22
IMPORT_EXPORT_VMM VOID SetGuestRIP(UINT64 RIP)
Set the Guest RIP Register.
Definition ManageRegs.c:425
IMPORT_EXPORT_VMM VOID SetGuestDr7(UINT64 value)
Set the Guest Dr7 Register.
Definition ManageRegs.c:657
IMPORT_EXPORT_VMM VOID SetGuestCr4(UINT64 Cr4)
Set the Guest Cr4 Register.
Definition ManageRegs.c:573
IMPORT_EXPORT_VMM VOID SetGuestFsSel(PVMX_SEGMENT_SELECTOR Fs)
Set just the Guest Fs selector.
Definition ManageRegs.c:158
IMPORT_EXPORT_VMM VOID SetGuestDr3(UINT64 value)
Set the Guest Dr3 Register.
Definition ManageRegs.c:633
IMPORT_EXPORT_VMM VOID SetGuestRFlags(UINT64 RFlags)
Set the Guest RFLAGS Register.
Definition ManageRegs.c:398
IMPORT_EXPORT_VMM VOID SetGuestIdtr(UINT64 Idtr)
Set the Guest Idtr.
Definition ManageRegs.c:293
RequestedActionOfThePacket Value(0x1) 00000000

◆ SetRegValueHwdbg()

BOOLEAN SetRegValueHwdbg ( UINT64 * Regs,
UINT32 RegisterId,
UINT64 Value )

Set the register value for hardware debugging.

Parameters
Regs
RegisterId
Value
Returns
BOOLEAN
988{
989 Regs[RegisterId] = Value;
990 return TRUE;
991}

◆ SetRegValueUsingSymbol()

BOOLEAN SetRegValueUsingSymbol ( PGUEST_REGS GuestRegs,
PSYMBOL Symbol,
UINT64 Value )

Set the register value.

Parameters
GuestRegs
Symbol
Value
ActionBuffer
Returns
BOOLEAN
2036{
2037#if defined(SCRIPT_ENGINE_USER_MODE) && defined(HYPERDBG_LIBHYPERDBG)
2039 return SetRegValue(GuestRegs, (UINT32)Symbol->Value, Value);
2040 else
2041 return SetRegValueHwdbg((UINT64 *)GuestRegs, (UINT32)Symbol->Value, Value);
2042#else
2043 return SetRegValue(GuestRegs, (UINT32)Symbol->Value, Value);
2044#endif // defined(SCRIPT_ENGINE_USER_MODE) && defined(HYPERDBG_LIBHYPERDBG)
2045}
BOOLEAN SetRegValue(PGUEST_REGS GuestRegs, UINT32 RegisterId, UINT64 Value)
Set the register value.
Definition Regs.c:1003
BOOLEAN SetRegValueHwdbg(UINT64 *Regs, UINT32 RegisterId, UINT64 Value)
Set the register value for hardware debugging.
Definition Regs.c:987
unsigned int UINT32
Definition BasicTypes.h:54
long long unsigned Value
Definition ScriptEngineCommonDefinitions.h:9