VM-Exit handler for different exit reasons.
23{
27
28
29
30
31 VCpu = &
g_GuestState[KeGetCurrentProcessorNumberEx(NULL)];
32
33
34
35
36 VCpu->
Regs = GuestRegs;
38
39
40
41
43
44
45
46
48 ExitReason &= 0xffff;
49
50
51
52
54
55
56
57
59
60
61
62
64
65
66
67
69
70
71
72
74
75
76
77
78
79
80
81
82 switch (ExitReason)
83 {
84 case VMX_EXIT_REASON_TRIPLE_FAULT:
85 {
87
88 break;
89 }
90
91
92
93
94
95
96
97 case VMX_EXIT_REASON_EXECUTE_VMCLEAR:
98 case VMX_EXIT_REASON_EXECUTE_VMPTRLD:
99 case VMX_EXIT_REASON_EXECUTE_VMPTRST:
100 case VMX_EXIT_REASON_EXECUTE_VMREAD:
101 case VMX_EXIT_REASON_EXECUTE_VMRESUME:
102 case VMX_EXIT_REASON_EXECUTE_VMWRITE:
103 case VMX_EXIT_REASON_EXECUTE_VMXOFF:
104 case VMX_EXIT_REASON_EXECUTE_VMXON:
105 case VMX_EXIT_REASON_EXECUTE_VMLAUNCH:
106 {
107
108
109
110
111
112
113
114
115
116
118
119 break;
120 }
121 case VMX_EXIT_REASON_EXECUTE_INVEPT:
122 case VMX_EXIT_REASON_EXECUTE_INVVPID:
123 case VMX_EXIT_REASON_EXECUTE_GETSEC:
124 case VMX_EXIT_REASON_EXECUTE_INVD:
125 {
126
127
128
130
131 break;
132 }
133 case VMX_EXIT_REASON_MOV_CR:
134 {
135
136
137
139
140 break;
141 }
142 case VMX_EXIT_REASON_EXECUTE_RDMSR:
143 {
144
145
146
148
149 break;
150 }
151 case VMX_EXIT_REASON_EXECUTE_WRMSR:
152 {
153
154
155
157
158 break;
159 }
160 case VMX_EXIT_REASON_IO_SMI:
161 case VMX_EXIT_REASON_SMI:
162 {
163
164
165
167
168 break;
169 }
170 case VMX_EXIT_REASON_EXECUTE_CPUID:
171 {
172
173
174
176
177 break;
178 }
179
180 case VMX_EXIT_REASON_EXECUTE_IO_INSTRUCTION:
181 {
182
183
184
186
187 break;
188 }
189 case VMX_EXIT_REASON_EPT_VIOLATION:
190 {
191
192
193
195 {
196 LogError(
"Err, there were errors in handling EPT violation");
197 }
198
199 break;
200 }
201 case VMX_EXIT_REASON_EPT_MISCONFIGURATION:
202 {
203
204
205
207
208 break;
209 }
210 case VMX_EXIT_REASON_EXECUTE_VMCALL:
211 {
212
213
214
216
217 break;
218 }
219 case VMX_EXIT_REASON_EXCEPTION_OR_NMI:
220 {
221
222
223
225
226 break;
227 }
228 case VMX_EXIT_REASON_EXTERNAL_INTERRUPT:
229 {
230
231
232
234
235 break;
236 }
237 case VMX_EXIT_REASON_INTERRUPT_WINDOW:
238 {
239
240
241
242
244
245 break;
246 }
247 case VMX_EXIT_REASON_NMI_WINDOW:
248 {
249
250
251
253
254 break;
255 }
256 case VMX_EXIT_REASON_MONITOR_TRAP_FLAG:
257 {
258
259
260
262
263 break;
264 }
265 case VMX_EXIT_REASON_EXECUTE_HLT:
266 {
267
268
269
270
271
272
273
274 break;
275 }
276 case VMX_EXIT_REASON_EXECUTE_RDTSC:
277 case VMX_EXIT_REASON_EXECUTE_RDTSCP:
278
279 {
280
281
282
283
285
286 break;
287 }
288 case VMX_EXIT_REASON_EXECUTE_RDPMC:
289 {
290
291
292
294
295 break;
296 }
297 case VMX_EXIT_REASON_MOV_DR:
298 {
299
300
301
303
304 break;
305 }
306 case VMX_EXIT_REASON_EXECUTE_XSETBV:
307 {
308
309
310
312
313 break;
314 }
315 case VMX_EXIT_REASON_VMX_PREEMPTION_TIMER_EXPIRED:
316 {
317
318
319
321
322 break;
323 }
324 case VMX_EXIT_REASON_PAGE_MODIFICATION_LOG_FULL:
325 {
326
327
328
330
331 break;
332 }
333 default:
334 {
335
336
337
338 LogError(
"Err, unknown vmexit, reason : 0x%llx", ExitReason);
339
340 break;
341 }
342 }
343
344
345
346
347
349 {
350
351
352
353
354
356 {
358 }
359
361 }
362
363
364
365
367 {
369 }
370
371
372
373
375
376
377
378
379 return Result;
380}
VOID VmxHandleTripleFaults(VIRTUAL_MACHINE_STATE *VCpu)
Handling triple fault VM-exits.
Definition CrossVmexits.c:70
VOID VmxHandleVmxPreemptionTimerVmexit(VIRTUAL_MACHINE_STATE *VCpu)
Handling VMX Preemption Timer vm-exits.
Definition CrossVmexits.c:53
VOID DirtyLoggingHandleVmexits(VIRTUAL_MACHINE_STATE *VCpu)
Handling vm-exits of PML.
Definition DirtyLogging.c:300
VOID DispatchEventException(VIRTUAL_MACHINE_STATE *VCpu)
Handling debugger functions related to EXCEPTION events.
Definition Dispatch.c:825
VOID DispatchEventXsetbv(VIRTUAL_MACHINE_STATE *VCpu)
Handling debugger functions related to XSETBV events.
Definition Dispatch.c:180
VOID DispatchEventRdpmc(VIRTUAL_MACHINE_STATE *VCpu)
Handling debugger functions related to RDPMC events.
Definition Dispatch.c:663
VOID DispatchEventRdmsr(VIRTUAL_MACHINE_STATE *VCpu)
Handling debugger functions related to RDMSR events.
Definition Dispatch.c:573
VOID DispatchEventCpuid(VIRTUAL_MACHINE_STATE *VCpu)
Handling debugger functions related to CPUID events.
Definition Dispatch.c:113
VOID DispatchEventTsc(VIRTUAL_MACHINE_STATE *VCpu, BOOLEAN IsRdtscp)
Handling debugger functions related to RDTSC/RDTSCP events.
Definition Dispatch.c:248
VOID DispatchEventIO(VIRTUAL_MACHINE_STATE *VCpu)
Handling debugger functions related to IO events.
Definition Dispatch.c:499
VOID DispatchEventMov2DebugRegs(VIRTUAL_MACHINE_STATE *VCpu)
Handling debugger functions related to MOV 2 DR events.
Definition Dispatch.c:708
VOID DispatchEventVmcall(VIRTUAL_MACHINE_STATE *VCpu)
Handling debugger functions related to VMCALL events.
Definition Dispatch.c:301
VOID DispatchEventMovToFromControlRegisters(VIRTUAL_MACHINE_STATE *VCpu)
Handling debugger functions related to mov to/from CR events.
Definition Dispatch.c:761
VOID DispatchEventWrmsr(VIRTUAL_MACHINE_STATE *VCpu)
Handling debugger functions related to WRMSR events.
Definition Dispatch.c:618
VOID DispatchEventExternalInterrupts(VIRTUAL_MACHINE_STATE *VCpu)
Handling debugger functions related to external-interrupt events.
Definition Dispatch.c:920
BOOLEAN EptHandleEptViolation(VIRTUAL_MACHINE_STATE *VCpu)
Handle VM exits for EPT violations.
Definition Ept.c:1108
VOID EptHandleMisconfiguration(VOID)
Handle vm-exits for EPT Misconfiguration.
Definition Ept.c:1152
VOID EventInjectUndefinedOpcode(VIRTUAL_MACHINE_STATE *VCpu)
Inject UD to the guest (Invalid Opcode - Undefined Opcode).
Definition Events.c:79
VOID HvResumeToNextInstruction()
Add the current instruction length to guest rip to resume to next instruction.
Definition Hv.c:298
VOID IdtEmulationHandleInterruptWindowExiting(_Inout_ VIRTUAL_MACHINE_STATE *VCpu)
Handle interrupt-window exitings.
Definition IdtEmulation.c:662
VOID IdtEmulationHandleNmiWindowExiting(_Inout_ VIRTUAL_MACHINE_STATE *VCpu)
Handle NMI-window exitings.
Definition IdtEmulation.c:605
VOID MtfHandleVmexit(VIRTUAL_MACHINE_STATE *VCpu)
Handle Monitor Trap Flag vm-exits.
Definition Mtf.c:21
IMPORT_EXPORT_HYPEREVADE VOID TransparentCheckAndTrapFlagAfterVmexit()
Handle anti-debugging method of a trap flag after a VM exit.
Definition VmxFootprints.c:153
#define LogError(format,...)
Log in the case of error.
Definition HyperDbgHyperLogIntrinsics.h:113
#define LogInfo(format,...)
Define log variables.
Definition HyperDbgHyperLogIntrinsics.h:71
NULL()
Definition test-case-generator.py:530
UINT32 ExitQualification
Definition State.h:330
GUEST_XMM_REGS * XmmRegs
Definition State.h:327
BOOLEAN IncrementRip
Definition State.h:313
GUEST_REGS * Regs
Definition State.h:326
UINT32 ExitReason
Definition State.h:329
VMX_VMXOFF_STATE VmxoffState
Definition State.h:350
BOOLEAN IsOnVmxRootMode
Definition State.h:312
UINT64 LastVmexitRip
Definition State.h:331
BOOLEAN IsVmxoffExecuted
Definition State.h:168
Definition BasicTypes.h:136
UINT64 rsp
Definition BasicTypes.h:145
Definition BasicTypes.h:174