Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


e5de8e3390e0c7d2c918804e3ff21b5833ce929b
[palacios.git] / palacios / src / palacios / vmcs.c
1 /* 
2  * This file is part of the Palacios Virtual Machine Monitor developed
3  * by the V3VEE Project with funding from the United States National 
4  * Science Foundation and the Department of Energy.  
5  *
6  * The V3VEE Project is a joint project between Northwestern University
7  * and the University of New Mexico.  You can find out more at 
8  * http://www.v3vee.org
9  *
10  * Copyright (c) 2008, Jack Lange <jarusl@cs.northwestern.edu> 
11  * Copyright (c) 2008, The V3VEE Project <http://www.v3vee.org> 
12  * All rights reserved.
13  *
14  * Author: Jack Lange <jarusl@cs.northwestern.edu>
15  *
16  * This is free software.  You are permitted to use,
17  * redistribute, and modify it as specified in the file "V3VEE_LICENSE".
18  */
19
20 #include <palacios/vmcs.h>
21 #include <palacios/vmx_lowlevel.h>
22 #include <palacios/vmm.h>
23
24
25 // static const char * v3_vmcs_field_to_str(vmcs_field_t field);
26
27 //extern char * exception_names;
28 //
29 // Ignores "HIGH" addresses - 32 bit only for now
30 //
31
32
33 static inline void print_vmcs_field(vmcs_field_t vmcs_index) {
34     int len = v3_vmcs_get_field_len(vmcs_index);
35     addr_t val;
36     
37     if (vmcs_read(vmcs_index, &val) != VMX_SUCCESS) {
38         PrintError("VMCS_READ error for %s\n", v3_vmcs_field_to_str(vmcs_index));
39         return;
40     };
41     
42     if (len == 2) {
43         PrintDebug("\t%s: 0x%.4x\n", v3_vmcs_field_to_str(vmcs_index), (uint16_t)val);
44     } else if (len == 4) {
45         PrintDebug("\t%s: 0x%.8x\n", v3_vmcs_field_to_str(vmcs_index), (uint32_t)val);
46     } else if (len == 8) {
47         PrintDebug("\t%s: 0x%p\n", v3_vmcs_field_to_str(vmcs_index), (void *)(addr_t)val);
48     }
49 }
50
51
52
53 static void print_guest_state()
54 {
55     PrintDebug("VMCS_GUEST_STATE\n");
56     print_vmcs_field(VMCS_GUEST_RIP);
57     print_vmcs_field(VMCS_GUEST_RSP);
58     print_vmcs_field(VMCS_GUEST_RFLAGS);
59     print_vmcs_field(VMCS_GUEST_CR0);
60     print_vmcs_field(VMCS_GUEST_CR3);
61     print_vmcs_field(VMCS_GUEST_CR4);
62     print_vmcs_field(VMCS_GUEST_DR7);
63
64
65     PrintDebug("\n");
66
67     PrintDebug("   ==> CS\n");
68     print_vmcs_field(VMCS_GUEST_CS_SELECTOR);
69     print_vmcs_field(VMCS_GUEST_CS_BASE);
70     print_vmcs_field(VMCS_GUEST_CS_LIMIT);
71     print_vmcs_field(VMCS_GUEST_CS_ACCESS);
72
73     PrintDebug("   ==> SS\n");
74     print_vmcs_field(VMCS_GUEST_SS_SELECTOR);
75     print_vmcs_field(VMCS_GUEST_SS_BASE);
76     print_vmcs_field(VMCS_GUEST_SS_LIMIT);
77     print_vmcs_field(VMCS_GUEST_SS_ACCESS);
78
79     PrintDebug("   ==> DS\n");
80     print_vmcs_field(VMCS_GUEST_DS_SELECTOR);
81     print_vmcs_field(VMCS_GUEST_DS_BASE);
82     print_vmcs_field(VMCS_GUEST_DS_LIMIT);
83     print_vmcs_field(VMCS_GUEST_DS_ACCESS);
84
85     PrintDebug("   ==> ES\n");
86     print_vmcs_field(VMCS_GUEST_ES_SELECTOR);
87     print_vmcs_field(VMCS_GUEST_ES_BASE);
88     print_vmcs_field(VMCS_GUEST_ES_LIMIT);
89     print_vmcs_field(VMCS_GUEST_ES_ACCESS);
90
91     PrintDebug("   ==> FS\n");
92     print_vmcs_field(VMCS_GUEST_FS_SELECTOR);
93     print_vmcs_field(VMCS_GUEST_FS_BASE);
94     print_vmcs_field(VMCS_GUEST_FS_LIMIT);
95     print_vmcs_field(VMCS_GUEST_FS_ACCESS);
96
97     PrintDebug("   ==> GS\n");
98     print_vmcs_field(VMCS_GUEST_GS_SELECTOR);
99     print_vmcs_field(VMCS_GUEST_GS_BASE);
100     print_vmcs_field(VMCS_GUEST_GS_LIMIT);
101     print_vmcs_field(VMCS_GUEST_GS_ACCESS);
102
103     PrintDebug("   ==> LDTR\n");
104     print_vmcs_field(VMCS_GUEST_LDTR_SELECTOR);
105     print_vmcs_field(VMCS_GUEST_LDTR_BASE);
106     print_vmcs_field(VMCS_GUEST_LDTR_LIMIT);
107     print_vmcs_field(VMCS_GUEST_LDTR_ACCESS);
108
109     PrintDebug("   ==> TR\n");
110     print_vmcs_field(VMCS_GUEST_TR_SELECTOR);
111     print_vmcs_field(VMCS_GUEST_TR_BASE);
112     print_vmcs_field(VMCS_GUEST_TR_LIMIT);
113     print_vmcs_field(VMCS_GUEST_TR_ACCESS);
114
115     PrintDebug("   ==> GDTR\n");
116     print_vmcs_field(VMCS_GUEST_GDTR_BASE);
117     print_vmcs_field(VMCS_GUEST_GDTR_LIMIT);
118
119     PrintDebug("   ==> IDTR\n");
120     print_vmcs_field(VMCS_GUEST_IDTR_BASE);
121     print_vmcs_field(VMCS_GUEST_IDTR_LIMIT);
122
123     PrintDebug("\n");
124
125     print_vmcs_field(VMCS_GUEST_DBG_CTL);
126 #ifdef __V3_32BIT__
127     print_vmcs_field(VMCS_GUEST_DBG_CTL_HIGH);
128 #endif
129     print_vmcs_field(VMCS_GUEST_SYSENTER_CS);
130     print_vmcs_field(VMCS_GUEST_SYSENTER_ESP);
131     print_vmcs_field(VMCS_GUEST_SYSENTER_EIP);
132
133     print_vmcs_field(VMCS_GUEST_PERF_GLOBAL_CTRL);
134 #ifdef __V3_32BIT__
135     print_vmcs_field(VMCS_GUEST_PERF_GLOBAL_CTRL_HIGH);
136 #endif
137
138     print_vmcs_field(VMCS_GUEST_SMBASE);
139
140
141     PrintDebug("GUEST_NON_REGISTER_STATE\n");
142
143     print_vmcs_field(VMCS_GUEST_ACTIVITY_STATE);
144     print_vmcs_field(VMCS_GUEST_INT_STATE);
145     print_vmcs_field(VMCS_GUEST_PENDING_DBG_EXCP);
146
147 }
148        
149 static void print_host_state()
150 {
151     PrintDebug("VMCS_HOST_STATE\n");
152
153     print_vmcs_field(VMCS_HOST_RIP);
154     print_vmcs_field(VMCS_HOST_RSP);
155     print_vmcs_field(VMCS_HOST_CR0);
156     print_vmcs_field(VMCS_HOST_CR3);
157     print_vmcs_field(VMCS_HOST_CR4);
158     
159     PrintDebug("\n");
160     print_vmcs_field(VMCS_HOST_CS_SELECTOR);
161     print_vmcs_field(VMCS_HOST_SS_SELECTOR);
162     print_vmcs_field(VMCS_HOST_DS_SELECTOR);
163     print_vmcs_field(VMCS_HOST_ES_SELECTOR);
164     print_vmcs_field(VMCS_HOST_FS_SELECTOR);
165     print_vmcs_field(VMCS_HOST_GS_SELECTOR);
166     print_vmcs_field(VMCS_HOST_TR_SELECTOR);
167
168     PrintDebug("\n");
169     print_vmcs_field(VMCS_HOST_FS_BASE);
170     print_vmcs_field(VMCS_HOST_GS_BASE);
171     print_vmcs_field(VMCS_HOST_TR_BASE);
172     print_vmcs_field(VMCS_HOST_GDTR_BASE);
173     print_vmcs_field(VMCS_HOST_IDTR_BASE);
174
175     PrintDebug("\n");
176     print_vmcs_field(VMCS_HOST_SYSENTER_CS);
177     print_vmcs_field(VMCS_HOST_SYSENTER_ESP);
178     print_vmcs_field(VMCS_HOST_SYSENTER_EIP);
179
180     print_vmcs_field(VMCS_HOST_PERF_GLOBAL_CTRL);
181 #ifdef __V3_32BIT__
182     print_vmcs_field(VMCS_HOST_PERF_GLOBAL_CTRL_HIGH);
183 #endif
184 }
185
186
187 static void print_exec_ctrls() {
188     PrintDebug("VMCS_EXEC_CTRL_FIELDS\n");
189     print_vmcs_field(VMCS_PIN_CTRLS);
190     print_vmcs_field(VMCS_PROC_CTRLS);
191     print_vmcs_field(VMCS_SEC_PROC_CTRLS);
192     
193     print_vmcs_field(VMCS_EXCP_BITMAP);
194     print_vmcs_field(VMCS_PG_FAULT_ERR_MASK);
195     print_vmcs_field(VMCS_PG_FAULT_ERR_MATCH);
196
197     print_vmcs_field(VMCS_IO_BITMAP_A_ADDR);
198 #ifdef __V3_32BIT__
199     print_vmcs_field(VMCS_IO_BITMAP_A_ADDR_HIGH);
200 #endif
201     print_vmcs_field(VMCS_IO_BITMAP_B_ADDR);
202 #ifdef __V3_32BIT__
203     print_vmcs_field(VMCS_IO_BITMAP_B_ADDR_HIGH);
204 #endif
205
206     print_vmcs_field(VMCS_TSC_OFFSET);
207 #ifdef __V3_32BIT__
208     print_vmcs_field(VMCS_TSC_OFFSET_HIGH);
209 #endif
210
211     PrintDebug("\n");
212
213     print_vmcs_field(VMCS_CR0_MASK);
214     print_vmcs_field(VMCS_CR0_READ_SHDW);
215     print_vmcs_field(VMCS_CR4_MASK);
216     print_vmcs_field(VMCS_CR4_READ_SHDW);
217
218     print_vmcs_field(VMCS_CR3_TGT_CNT);
219     print_vmcs_field(VMCS_CR3_TGT_VAL_0);
220     print_vmcs_field(VMCS_CR3_TGT_VAL_1);
221     print_vmcs_field(VMCS_CR3_TGT_VAL_2);
222     print_vmcs_field(VMCS_CR3_TGT_VAL_3);
223
224     PrintDebug("\n");
225
226     print_vmcs_field(VMCS_APIC_ACCESS_ADDR);    
227 #ifdef __V3_32BIT__
228     print_vmcs_field(VMCS_APIC_ACCESS_ADDR_HIGH);
229 #endif
230
231     print_vmcs_field(VMCS_VAPIC_ADDR);    
232 #ifdef __V3_32BIT__
233     print_vmcs_field(VMCS_VAPIC_ADDR_HIGH);
234 #endif
235
236     print_vmcs_field(VMCS_TPR_THRESHOLD);
237
238     print_vmcs_field(VMCS_MSR_BITMAP);
239 #ifdef __V3_32BIT__
240     print_vmcs_field(VMCS_MSR_BITMAP_HIGH);
241 #endif
242
243     print_vmcs_field(VMCS_EXEC_PTR);
244 #ifdef __V3_32BIT__
245     print_vmcs_field(VMCS_EXEC_PTR_HIGH);
246 #endif
247 }
248
249
250 static void print_exit_ctrls() {
251     PrintDebug("VMCS_EXIT_CTRLS\n");
252
253     print_vmcs_field(VMCS_EXIT_CTRLS);
254
255
256     print_vmcs_field(VMCS_EXIT_MSR_STORE_CNT);
257     print_vmcs_field(VMCS_EXIT_MSR_STORE_ADDR);
258 #ifdef __V3_32BIT__
259     print_vmcs_field(VMCS_EXIT_MSR_STORE_ADDR_HIGH);
260 #endif
261
262     print_vmcs_field(VMCS_EXIT_MSR_LOAD_CNT);
263     print_vmcs_field(VMCS_EXIT_MSR_LOAD_ADDR);
264 #ifdef __V3_32BIT__
265     print_vmcs_field(VMCS_EXIT_MSR_LOAD_ADDR_HIGH);
266 #endif
267
268 }
269
270
271 static void print_entry_ctrls() {
272     PrintDebug("VMCS_ENTRY_CTRLS\n");
273     
274     print_vmcs_field(VMCS_ENTRY_CTRLS);
275
276     print_vmcs_field(VMCS_ENTRY_MSR_LOAD_CNT);
277     print_vmcs_field(VMCS_ENTRY_MSR_LOAD_ADDR);
278 #ifdef __V3_32BIT__
279     print_vmcs_field(VMCS_ENTRY_MSR_LOAD_ADDR_HIGH);
280 #endif
281
282     print_vmcs_field(VMCS_ENTRY_INT_INFO);
283     print_vmcs_field(VMCS_ENTRY_EXCP_ERR);
284     print_vmcs_field(VMCS_ENTRY_INSTR_LEN);
285
286
287 }
288
289
290 static void print_exit_info() {
291     PrintDebug("VMCS_EXIT_INFO\n");
292
293     print_vmcs_field(VMCS_EXIT_REASON);
294     print_vmcs_field(VMCS_EXIT_QUAL);
295
296     print_vmcs_field(VMCS_EXIT_INT_INFO);
297     print_vmcs_field(VMCS_EXIT_INT_ERR);
298
299     print_vmcs_field(VMCS_IDT_VECTOR_INFO);
300     print_vmcs_field(VMCS_IDT_VECTOR_ERR);
301
302     print_vmcs_field(VMCS_EXIT_INSTR_LEN);
303
304     print_vmcs_field(VMCS_GUEST_LINEAR_ADDR);
305     print_vmcs_field(VMCS_VMX_INSTR_INFO);
306
307     print_vmcs_field(VMCS_IO_RCX);
308     print_vmcs_field(VMCS_IO_RSI);
309     print_vmcs_field(VMCS_IO_RDI);
310     print_vmcs_field(VMCS_IO_RIP);
311
312
313     print_vmcs_field(VMCS_INSTR_ERR);
314 }
315
316 void v3_print_vmcs() {
317
318     print_vmcs_field(VMCS_LINK_PTR);
319 #ifdef __V3_32BIT__
320     print_vmcs_field(VMCS_LINK_PTR_HIGH);
321 #endif
322
323     print_guest_state();
324     print_host_state();
325
326     print_exec_ctrls();
327     print_exit_ctrls();
328     print_entry_ctrls();
329     print_exit_info();
330
331
332
333
334 }
335
336
337 /*
338  * Returns the field length in bytes
339  */
340 int v3_vmcs_get_field_len(vmcs_field_t field) {
341     switch(field)  {
342         /* 16 bit Control Fields */
343         case VMCS_GUEST_ES_SELECTOR:
344         case VMCS_GUEST_CS_SELECTOR:
345         case VMCS_GUEST_SS_SELECTOR:
346         case VMCS_GUEST_DS_SELECTOR:
347         case VMCS_GUEST_FS_SELECTOR:
348         case VMCS_GUEST_GS_SELECTOR:
349         case VMCS_GUEST_LDTR_SELECTOR:
350         case VMCS_GUEST_TR_SELECTOR:
351         case VMCS_HOST_ES_SELECTOR:
352         case VMCS_HOST_CS_SELECTOR:
353         case VMCS_HOST_SS_SELECTOR:
354         case VMCS_HOST_DS_SELECTOR:
355         case VMCS_HOST_FS_SELECTOR:
356         case VMCS_HOST_GS_SELECTOR:
357         case VMCS_HOST_TR_SELECTOR:
358             return 2;
359
360         /* 32 bit Control Fields */
361         case VMCS_PIN_CTRLS:
362         case VMCS_PROC_CTRLS:
363         case VMCS_SEC_PROC_CTRLS:
364         case VMCS_EXCP_BITMAP:
365         case VMCS_PG_FAULT_ERR_MASK:
366         case VMCS_PG_FAULT_ERR_MATCH:
367         case VMCS_CR3_TGT_CNT:
368         case VMCS_EXIT_CTRLS:
369         case VMCS_EXIT_MSR_STORE_CNT:
370         case VMCS_EXIT_MSR_LOAD_CNT:
371         case VMCS_ENTRY_CTRLS:
372         case VMCS_ENTRY_MSR_LOAD_CNT:
373         case VMCS_ENTRY_INT_INFO:
374         case VMCS_ENTRY_EXCP_ERR:
375         case VMCS_ENTRY_INSTR_LEN:
376         case VMCS_TPR_THRESHOLD:
377         case VMCS_INSTR_ERR:
378         case VMCS_EXIT_REASON:
379         case VMCS_EXIT_INT_INFO:
380         case VMCS_EXIT_INT_ERR:
381         case VMCS_IDT_VECTOR_INFO:
382         case VMCS_IDT_VECTOR_ERR:
383         case VMCS_EXIT_INSTR_LEN:
384         case VMCS_VMX_INSTR_INFO:
385         case VMCS_GUEST_ES_LIMIT:
386         case VMCS_GUEST_CS_LIMIT:
387         case VMCS_GUEST_SS_LIMIT:
388         case VMCS_GUEST_DS_LIMIT:
389         case VMCS_GUEST_FS_LIMIT:
390         case VMCS_GUEST_GS_LIMIT:
391         case VMCS_GUEST_LDTR_LIMIT:
392         case VMCS_GUEST_TR_LIMIT:
393         case VMCS_GUEST_GDTR_LIMIT:
394         case VMCS_GUEST_IDTR_LIMIT:
395         case VMCS_GUEST_ES_ACCESS:
396         case VMCS_GUEST_CS_ACCESS:
397         case VMCS_GUEST_SS_ACCESS:
398         case VMCS_GUEST_DS_ACCESS:
399         case VMCS_GUEST_FS_ACCESS:
400         case VMCS_GUEST_GS_ACCESS:
401         case VMCS_GUEST_LDTR_ACCESS:
402         case VMCS_GUEST_TR_ACCESS:
403         case VMCS_GUEST_INT_STATE:
404         case VMCS_GUEST_ACTIVITY_STATE:
405         case VMCS_GUEST_SMBASE:
406         case VMCS_GUEST_SYSENTER_CS:
407         case VMCS_HOST_SYSENTER_CS:
408             return 4;
409
410
411         /* high bits of variable width fields
412          * We can probably just delete most of these....
413          */
414         case VMCS_IO_BITMAP_A_ADDR_HIGH:
415         case VMCS_IO_BITMAP_B_ADDR_HIGH:
416         case VMCS_MSR_BITMAP_HIGH:
417         case VMCS_EXIT_MSR_STORE_ADDR_HIGH:
418         case VMCS_EXIT_MSR_LOAD_ADDR_HIGH:
419         case VMCS_ENTRY_MSR_LOAD_ADDR_HIGH:
420         case VMCS_EXEC_PTR_HIGH:
421         case VMCS_TSC_OFFSET_HIGH:
422         case VMCS_VAPIC_ADDR_HIGH:
423         case VMCS_APIC_ACCESS_ADDR_HIGH:
424         case VMCS_LINK_PTR_HIGH:
425         case VMCS_GUEST_DBG_CTL_HIGH:
426         case VMCS_GUEST_PERF_GLOBAL_CTRL_HIGH:
427         case VMCS_HOST_PERF_GLOBAL_CTRL_HIGH:
428             return 4;
429
430             /* Natural Width Control Fields */
431         case VMCS_IO_BITMAP_A_ADDR:
432         case VMCS_IO_BITMAP_B_ADDR:
433         case VMCS_MSR_BITMAP:
434         case VMCS_EXIT_MSR_STORE_ADDR:
435         case VMCS_EXIT_MSR_LOAD_ADDR:
436         case VMCS_ENTRY_MSR_LOAD_ADDR:
437         case VMCS_EXEC_PTR:
438         case VMCS_TSC_OFFSET:
439         case VMCS_VAPIC_ADDR:
440         case VMCS_APIC_ACCESS_ADDR:
441         case VMCS_LINK_PTR:
442         case VMCS_GUEST_DBG_CTL:
443         case VMCS_GUEST_PERF_GLOBAL_CTRL:
444         case VMCS_HOST_PERF_GLOBAL_CTRL:
445         case VMCS_CR0_MASK:
446         case VMCS_CR4_MASK:
447         case VMCS_CR0_READ_SHDW:
448         case VMCS_CR4_READ_SHDW:
449         case VMCS_CR3_TGT_VAL_0:
450         case VMCS_CR3_TGT_VAL_1:
451         case VMCS_CR3_TGT_VAL_2:
452         case VMCS_CR3_TGT_VAL_3:
453         case VMCS_EXIT_QUAL:
454         case VMCS_IO_RCX:
455         case VMCS_IO_RSI:
456         case VMCS_IO_RDI:
457         case VMCS_IO_RIP:
458         case VMCS_GUEST_LINEAR_ADDR:
459         case VMCS_GUEST_CR0:
460         case VMCS_GUEST_CR3:
461         case VMCS_GUEST_CR4:
462         case VMCS_GUEST_ES_BASE:
463         case VMCS_GUEST_CS_BASE:
464         case VMCS_GUEST_SS_BASE:
465         case VMCS_GUEST_DS_BASE:
466         case VMCS_GUEST_FS_BASE:
467         case VMCS_GUEST_GS_BASE:
468         case VMCS_GUEST_LDTR_BASE:
469         case VMCS_GUEST_TR_BASE:
470         case VMCS_GUEST_GDTR_BASE:
471         case VMCS_GUEST_IDTR_BASE:
472         case VMCS_GUEST_DR7:
473         case VMCS_GUEST_RSP:
474         case VMCS_GUEST_RIP:
475         case VMCS_GUEST_RFLAGS:
476         case VMCS_GUEST_PENDING_DBG_EXCP:
477         case VMCS_GUEST_SYSENTER_ESP:
478         case VMCS_GUEST_SYSENTER_EIP:
479         case VMCS_HOST_CR0:
480         case VMCS_HOST_CR3:
481         case VMCS_HOST_CR4:
482         case VMCS_HOST_FS_BASE:
483         case VMCS_HOST_GS_BASE:
484         case VMCS_HOST_TR_BASE:
485         case VMCS_HOST_GDTR_BASE:
486         case VMCS_HOST_IDTR_BASE:
487         case VMCS_HOST_SYSENTER_ESP:
488         case VMCS_HOST_SYSENTER_EIP:
489         case VMCS_HOST_RSP:
490         case VMCS_HOST_RIP:
491             return sizeof(addr_t);
492
493         default:
494             PrintError("Invalid VMCS field\n");
495             return -1;
496     }
497 }
498
499
500
501
502
503
504
505
506
507
508
509
510 static const char VMCS_GUEST_ES_SELECTOR_STR[] = "GUEST_ES_SELECTOR";
511 static const char VMCS_GUEST_CS_SELECTOR_STR[] = "GUEST_CS_SELECTOR";
512 static const char VMCS_GUEST_SS_SELECTOR_STR[] = "GUEST_SS_SELECTOR";
513 static const char VMCS_GUEST_DS_SELECTOR_STR[] = "GUEST_DS_SELECTOR";
514 static const char VMCS_GUEST_FS_SELECTOR_STR[] = "GUEST_FS_SELECTOR";
515 static const char VMCS_GUEST_GS_SELECTOR_STR[] = "GUEST_GS_SELECTOR";
516 static const char VMCS_GUEST_LDTR_SELECTOR_STR[] = "GUEST_LDTR_SELECTOR";
517 static const char VMCS_GUEST_TR_SELECTOR_STR[] = "GUEST_TR_SELECTOR";
518 static const char VMCS_HOST_ES_SELECTOR_STR[] = "HOST_ES_SELECTOR";
519 static const char VMCS_HOST_CS_SELECTOR_STR[] = "HOST_CS_SELECTOR";
520 static const char VMCS_HOST_SS_SELECTOR_STR[] = "HOST_SS_SELECTOR";
521 static const char VMCS_HOST_DS_SELECTOR_STR[] = "HOST_DS_SELECTOR";
522 static const char VMCS_HOST_FS_SELECTOR_STR[] = "HOST_FS_SELECTOR";
523 static const char VMCS_HOST_GS_SELECTOR_STR[] = "HOST_GS_SELECTOR";
524 static const char VMCS_HOST_TR_SELECTOR_STR[] = "HOST_TR_SELECTOR";
525 static const char VMCS_IO_BITMAP_A_ADDR_STR[] = "IO_BITMAP_A_ADDR";
526 static const char VMCS_IO_BITMAP_A_ADDR_HIGH_STR[] = "IO_BITMAP_A_ADDR_HIGH";
527 static const char VMCS_IO_BITMAP_B_ADDR_STR[] = "IO_BITMAP_B_ADDR";
528 static const char VMCS_IO_BITMAP_B_ADDR_HIGH_STR[] = "IO_BITMAP_B_ADDR_HIGH";
529 static const char VMCS_MSR_BITMAP_STR[] = "MSR_BITMAPS";
530 static const char VMCS_MSR_BITMAP_HIGH_STR[] = "MSR_BITMAPS_HIGH";
531 static const char VMCS_EXIT_MSR_STORE_ADDR_STR[] = "EXIT_MSR_STORE_ADDR";
532 static const char VMCS_EXIT_MSR_STORE_ADDR_HIGH_STR[] = "EXIT_MSR_STORE_ADDR_HIGH";
533 static const char VMCS_EXIT_MSR_LOAD_ADDR_STR[] = "EXIT_MSR_LOAD_ADDR";
534 static const char VMCS_EXIT_MSR_LOAD_ADDR_HIGH_STR[] = "EXIT_MSR_LOAD_ADDR_HIGH";
535 static const char VMCS_ENTRY_MSR_LOAD_ADDR_STR[] = "ENTRY_MSR_LOAD_ADDR";
536 static const char VMCS_ENTRY_MSR_LOAD_ADDR_HIGH_STR[] = "ENTRY_MSR_LOAD_ADDR_HIGH";
537 static const char VMCS_EXEC_PTR_STR[] = "VMCS_EXEC_PTR";
538 static const char VMCS_EXEC_PTR_HIGH_STR[] = "VMCS_EXEC_PTR_HIGH";
539 static const char VMCS_TSC_OFFSET_STR[] = "TSC_OFFSET";
540 static const char VMCS_TSC_OFFSET_HIGH_STR[] = "TSC_OFFSET_HIGH";
541 static const char VMCS_VAPIC_ADDR_STR[] = "VAPIC_PAGE_ADDR";
542 static const char VMCS_VAPIC_ADDR_HIGH_STR[] = "VAPIC_PAGE_ADDR_HIGH";
543 static const char VMCS_APIC_ACCESS_ADDR_STR[] = "APIC_ACCESS_ADDR";
544 static const char VMCS_APIC_ACCESS_ADDR_HIGH_STR[] = "APIC_ACCESS_ADDR_HIGH";
545 static const char VMCS_LINK_PTR_STR[] = "VMCS_LINK_PTR";
546 static const char VMCS_LINK_PTR_HIGH_STR[] = "VMCS_LINK_PTR_HIGH";
547 static const char VMCS_GUEST_DBG_CTL_STR[] = "GUEST_DEBUG_CTL";
548 static const char VMCS_GUEST_DBG_CTL_HIGH_STR[] = "GUEST_DEBUG_CTL_HIGH";
549 static const char VMCS_GUEST_PERF_GLOBAL_CTRL_STR[] = "GUEST_PERF_GLOBAL_CTRL";
550 static const char VMCS_GUEST_PERF_GLOBAL_CTRL_HIGH_STR[] = "GUEST_PERF_GLOBAL_CTRL_HIGH";
551 static const char VMCS_HOST_PERF_GLOBAL_CTRL_STR[] = "HOST_PERF_GLOBAL_CTRL";
552 static const char VMCS_HOST_PERF_GLOBAL_CTRL_HIGH_STR[] = "HOST_PERF_GLOBAL_CTRL_HIGH";
553 static const char VMCS_PIN_CTRLS_STR[] = "PIN_VM_EXEC_CTRLS";
554 static const char VMCS_PROC_CTRLS_STR[] = "PROC_VM_EXEC_CTRLS";
555 static const char VMCS_EXCP_BITMAP_STR[] = "EXCEPTION_BITMAP";
556 static const char VMCS_PG_FAULT_ERR_MASK_STR[] = "PAGE_FAULT_ERROR_MASK";
557 static const char VMCS_PG_FAULT_ERR_MATCH_STR[] = "PAGE_FAULT_ERROR_MATCH";
558 static const char VMCS_CR3_TGT_CNT_STR[] = "CR3_TARGET_COUNT";
559 static const char VMCS_EXIT_CTRLS_STR[] = "VM_EXIT_CTRLS";
560 static const char VMCS_EXIT_MSR_STORE_CNT_STR[] = "VM_EXIT_MSR_STORE_COUNT";
561 static const char VMCS_EXIT_MSR_LOAD_CNT_STR[] = "VM_EXIT_MSR_LOAD_COUNT";
562 static const char VMCS_ENTRY_CTRLS_STR[] = "VM_ENTRY_CTRLS";
563 static const char VMCS_ENTRY_MSR_LOAD_CNT_STR[] = "VM_ENTRY_MSR_LOAD_COUNT";
564 static const char VMCS_ENTRY_INT_INFO_STR[] = "VM_ENTRY_INT_INFO_FIELD";
565 static const char VMCS_ENTRY_EXCP_ERR_STR[] = "VM_ENTRY_EXCEPTION_ERROR";
566 static const char VMCS_ENTRY_INSTR_LEN_STR[] = "VM_ENTRY_INSTR_LENGTH";
567 static const char VMCS_TPR_THRESHOLD_STR[] = "TPR_THRESHOLD";
568 static const char VMCS_SEC_PROC_CTRLS_STR[] = "VMCS_SEC_PROC_CTRLS";
569 static const char VMCS_INSTR_ERR_STR[] = "VM_INSTR_ERROR";
570 static const char VMCS_EXIT_REASON_STR[] = "EXIT_REASON";
571 static const char VMCS_EXIT_INT_INFO_STR[] = "VM_EXIT_INT_INFO";
572 static const char VMCS_EXIT_INT_ERR_STR[] = "VM_EXIT_INT_ERROR";
573 static const char VMCS_IDT_VECTOR_INFO_STR[] = "IDT_VECTOR_INFO";
574 static const char VMCS_IDT_VECTOR_ERR_STR[] = "IDT_VECTOR_ERROR";
575 static const char VMCS_EXIT_INSTR_LEN_STR[] = "VM_EXIT_INSTR_LENGTH";
576 static const char VMCS_VMX_INSTR_INFO_STR[] = "VMX_INSTR_INFO";
577 static const char VMCS_GUEST_ES_LIMIT_STR[] = "GUEST_ES_LIMIT";
578 static const char VMCS_GUEST_CS_LIMIT_STR[] = "GUEST_CS_LIMIT";
579 static const char VMCS_GUEST_SS_LIMIT_STR[] = "GUEST_SS_LIMIT";
580 static const char VMCS_GUEST_DS_LIMIT_STR[] = "GUEST_DS_LIMIT";
581 static const char VMCS_GUEST_FS_LIMIT_STR[] = "GUEST_FS_LIMIT";
582 static const char VMCS_GUEST_GS_LIMIT_STR[] = "GUEST_GS_LIMIT";
583 static const char VMCS_GUEST_LDTR_LIMIT_STR[] = "GUEST_LDTR_LIMIT";
584 static const char VMCS_GUEST_TR_LIMIT_STR[] = "GUEST_TR_LIMIT";
585 static const char VMCS_GUEST_GDTR_LIMIT_STR[] = "GUEST_GDTR_LIMIT";
586 static const char VMCS_GUEST_IDTR_LIMIT_STR[] = "GUEST_IDTR_LIMIT";
587 static const char VMCS_GUEST_ES_ACCESS_STR[] = "GUEST_ES_ACCESS";
588 static const char VMCS_GUEST_CS_ACCESS_STR[] = "GUEST_CS_ACCESS";
589 static const char VMCS_GUEST_SS_ACCESS_STR[] = "GUEST_SS_ACCESS";
590 static const char VMCS_GUEST_DS_ACCESS_STR[] = "GUEST_DS_ACCESS";
591 static const char VMCS_GUEST_FS_ACCESS_STR[] = "GUEST_FS_ACCESS";
592 static const char VMCS_GUEST_GS_ACCESS_STR[] = "GUEST_GS_ACCESS";
593 static const char VMCS_GUEST_LDTR_ACCESS_STR[] = "GUEST_LDTR_ACCESS";
594 static const char VMCS_GUEST_TR_ACCESS_STR[] = "GUEST_TR_ACCESS";
595 static const char VMCS_GUEST_INT_STATE_STR[] = "GUEST_INT_STATE";
596 static const char VMCS_GUEST_ACTIVITY_STATE_STR[] = "GUEST_ACTIVITY_STATE";
597 static const char VMCS_GUEST_SMBASE_STR[] = "GUEST_SMBASE";
598 static const char VMCS_GUEST_SYSENTER_CS_STR[] = "GUEST_SYSENTER_CS";
599 static const char VMCS_HOST_SYSENTER_CS_STR[] = "HOST_SYSENTER_CS";
600 static const char VMCS_CR0_MASK_STR[] = "CR0_GUEST_HOST_MASK";
601 static const char VMCS_CR4_MASK_STR[] = "CR4_GUEST_HOST_MASK";
602 static const char VMCS_CR0_READ_SHDW_STR[] = "CR0_READ_SHADOW";
603 static const char VMCS_CR4_READ_SHDW_STR[] = "CR4_READ_SHADOW";
604 static const char VMCS_CR3_TGT_VAL_0_STR[] = "CR3_TARGET_VALUE_0";
605 static const char VMCS_CR3_TGT_VAL_1_STR[] = "CR3_TARGET_VALUE_1";
606 static const char VMCS_CR3_TGT_VAL_2_STR[] = "CR3_TARGET_VALUE_2";
607 static const char VMCS_CR3_TGT_VAL_3_STR[] = "CR3_TARGET_VALUE_3";
608 static const char VMCS_EXIT_QUAL_STR[] = "EXIT_QUALIFICATION";
609 static const char VMCS_IO_RCX_STR[] = "IO_RCX";
610 static const char VMCS_IO_RSI_STR[] = "IO_RSI";
611 static const char VMCS_IO_RDI_STR[] = "IO_RDI";
612 static const char VMCS_IO_RIP_STR[] = "IO_RIP";
613 static const char VMCS_GUEST_LINEAR_ADDR_STR[] = "GUEST_LINEAR_ADDR";
614 static const char VMCS_GUEST_CR0_STR[] = "GUEST_CR0";
615 static const char VMCS_GUEST_CR3_STR[] = "GUEST_CR3";
616 static const char VMCS_GUEST_CR4_STR[] = "GUEST_CR4";
617 static const char VMCS_GUEST_ES_BASE_STR[] = "GUEST_ES_BASE";
618 static const char VMCS_GUEST_CS_BASE_STR[] = "GUEST_CS_BASE";
619 static const char VMCS_GUEST_SS_BASE_STR[] = "GUEST_SS_BASE";
620 static const char VMCS_GUEST_DS_BASE_STR[] = "GUEST_DS_BASE";
621 static const char VMCS_GUEST_FS_BASE_STR[] = "GUEST_FS_BASE";
622 static const char VMCS_GUEST_GS_BASE_STR[] = "GUEST_GS_BASE";
623 static const char VMCS_GUEST_LDTR_BASE_STR[] = "GUEST_LDTR_BASE";
624 static const char VMCS_GUEST_TR_BASE_STR[] = "GUEST_TR_BASE";
625 static const char VMCS_GUEST_GDTR_BASE_STR[] = "GUEST_GDTR_BASE";
626 static const char VMCS_GUEST_IDTR_BASE_STR[] = "GUEST_IDTR_BASE";
627 static const char VMCS_GUEST_DR7_STR[] = "GUEST_DR7";
628 static const char VMCS_GUEST_RSP_STR[] = "GUEST_RSP";
629 static const char VMCS_GUEST_RIP_STR[] = "GUEST_RIP";
630 static const char VMCS_GUEST_RFLAGS_STR[] = "GUEST_RFLAGS";
631 static const char VMCS_GUEST_PENDING_DBG_EXCP_STR[] = "GUEST_PENDING_DEBUG_EXCS";
632 static const char VMCS_GUEST_SYSENTER_ESP_STR[] = "GUEST_SYSENTER_ESP";
633 static const char VMCS_GUEST_SYSENTER_EIP_STR[] = "GUEST_SYSENTER_EIP";
634 static const char VMCS_HOST_CR0_STR[] = "HOST_CR0";
635 static const char VMCS_HOST_CR3_STR[] = "HOST_CR3";
636 static const char VMCS_HOST_CR4_STR[] = "HOST_CR4";
637 static const char VMCS_HOST_FS_BASE_STR[] = "HOST_FS_BASE";
638 static const char VMCS_HOST_GS_BASE_STR[] = "HOST_GS_BASE";
639 static const char VMCS_HOST_TR_BASE_STR[] = "HOST_TR_BASE";
640 static const char VMCS_HOST_GDTR_BASE_STR[] = "HOST_GDTR_BASE";
641 static const char VMCS_HOST_IDTR_BASE_STR[] = "HOST_IDTR_BASE";
642 static const char VMCS_HOST_SYSENTER_ESP_STR[] = "HOST_SYSENTER_ESP";
643 static const char VMCS_HOST_SYSENTER_EIP_STR[] = "HOST_SYSENTER_EIP";
644 static const char VMCS_HOST_RSP_STR[] = "HOST_RSP";
645 static const char VMCS_HOST_RIP_STR[] = "HOST_RIP";
646
647
648
649 const char * v3_vmcs_field_to_str(vmcs_field_t field) {   
650     switch (field) {
651         case VMCS_GUEST_ES_SELECTOR:
652             return VMCS_GUEST_ES_SELECTOR_STR;
653         case VMCS_GUEST_CS_SELECTOR:
654             return VMCS_GUEST_CS_SELECTOR_STR;
655         case VMCS_GUEST_SS_SELECTOR:
656             return VMCS_GUEST_SS_SELECTOR_STR;
657         case VMCS_GUEST_DS_SELECTOR:
658             return VMCS_GUEST_DS_SELECTOR_STR;
659         case VMCS_GUEST_FS_SELECTOR:
660             return VMCS_GUEST_FS_SELECTOR_STR;
661         case VMCS_GUEST_GS_SELECTOR:
662             return VMCS_GUEST_GS_SELECTOR_STR;
663         case VMCS_GUEST_LDTR_SELECTOR:
664             return VMCS_GUEST_LDTR_SELECTOR_STR;
665         case VMCS_GUEST_TR_SELECTOR:
666             return VMCS_GUEST_TR_SELECTOR_STR;
667         case VMCS_HOST_ES_SELECTOR:
668             return VMCS_HOST_ES_SELECTOR_STR;
669         case VMCS_HOST_CS_SELECTOR:
670             return VMCS_HOST_CS_SELECTOR_STR;
671         case VMCS_HOST_SS_SELECTOR:
672             return VMCS_HOST_SS_SELECTOR_STR;
673         case VMCS_HOST_DS_SELECTOR:
674             return VMCS_HOST_DS_SELECTOR_STR;
675         case VMCS_HOST_FS_SELECTOR:
676             return VMCS_HOST_FS_SELECTOR_STR;
677         case VMCS_HOST_GS_SELECTOR:
678             return VMCS_HOST_GS_SELECTOR_STR;
679         case VMCS_HOST_TR_SELECTOR:
680             return VMCS_HOST_TR_SELECTOR_STR;
681         case VMCS_IO_BITMAP_A_ADDR:
682             return VMCS_IO_BITMAP_A_ADDR_STR;
683         case VMCS_IO_BITMAP_A_ADDR_HIGH:
684             return VMCS_IO_BITMAP_A_ADDR_HIGH_STR;
685         case VMCS_IO_BITMAP_B_ADDR:
686             return VMCS_IO_BITMAP_B_ADDR_STR;
687         case VMCS_IO_BITMAP_B_ADDR_HIGH:
688             return VMCS_IO_BITMAP_B_ADDR_HIGH_STR;
689         case VMCS_MSR_BITMAP:
690             return VMCS_MSR_BITMAP_STR;
691         case VMCS_MSR_BITMAP_HIGH:
692             return VMCS_MSR_BITMAP_HIGH_STR;
693         case VMCS_EXIT_MSR_STORE_ADDR:
694             return VMCS_EXIT_MSR_STORE_ADDR_STR;
695         case VMCS_EXIT_MSR_STORE_ADDR_HIGH:
696             return VMCS_EXIT_MSR_STORE_ADDR_HIGH_STR;
697         case VMCS_EXIT_MSR_LOAD_ADDR:
698             return VMCS_EXIT_MSR_LOAD_ADDR_STR;
699         case VMCS_EXIT_MSR_LOAD_ADDR_HIGH:
700             return VMCS_EXIT_MSR_LOAD_ADDR_HIGH_STR;
701         case VMCS_ENTRY_MSR_LOAD_ADDR:
702             return VMCS_ENTRY_MSR_LOAD_ADDR_STR;
703         case VMCS_ENTRY_MSR_LOAD_ADDR_HIGH:
704             return VMCS_ENTRY_MSR_LOAD_ADDR_HIGH_STR;
705         case VMCS_EXEC_PTR:
706             return VMCS_EXEC_PTR_STR;
707         case VMCS_EXEC_PTR_HIGH:
708             return VMCS_EXEC_PTR_HIGH_STR;
709         case VMCS_TSC_OFFSET:
710             return VMCS_TSC_OFFSET_STR;
711         case VMCS_TSC_OFFSET_HIGH:
712             return VMCS_TSC_OFFSET_HIGH_STR;
713         case VMCS_VAPIC_ADDR:
714             return VMCS_VAPIC_ADDR_STR;
715         case VMCS_VAPIC_ADDR_HIGH:
716             return VMCS_VAPIC_ADDR_HIGH_STR;
717         case VMCS_APIC_ACCESS_ADDR:
718             return VMCS_APIC_ACCESS_ADDR_STR;
719         case VMCS_APIC_ACCESS_ADDR_HIGH:
720             return VMCS_APIC_ACCESS_ADDR_HIGH_STR;
721         case VMCS_LINK_PTR:
722             return VMCS_LINK_PTR_STR;
723         case VMCS_LINK_PTR_HIGH:
724             return VMCS_LINK_PTR_HIGH_STR;
725         case VMCS_GUEST_DBG_CTL:
726             return VMCS_GUEST_DBG_CTL_STR;
727         case VMCS_GUEST_DBG_CTL_HIGH:
728             return VMCS_GUEST_DBG_CTL_HIGH_STR;
729         case VMCS_GUEST_PERF_GLOBAL_CTRL:
730             return VMCS_GUEST_PERF_GLOBAL_CTRL_STR;
731         case VMCS_GUEST_PERF_GLOBAL_CTRL_HIGH:
732             return VMCS_GUEST_PERF_GLOBAL_CTRL_HIGH_STR;
733         case VMCS_HOST_PERF_GLOBAL_CTRL:
734             return VMCS_HOST_PERF_GLOBAL_CTRL_STR;
735         case VMCS_HOST_PERF_GLOBAL_CTRL_HIGH:
736             return VMCS_HOST_PERF_GLOBAL_CTRL_HIGH_STR;
737         case VMCS_PIN_CTRLS:
738             return VMCS_PIN_CTRLS_STR;
739         case VMCS_PROC_CTRLS:
740             return VMCS_PROC_CTRLS_STR;
741         case VMCS_EXCP_BITMAP:
742             return VMCS_EXCP_BITMAP_STR;
743         case VMCS_PG_FAULT_ERR_MASK:
744             return VMCS_PG_FAULT_ERR_MASK_STR;
745         case VMCS_PG_FAULT_ERR_MATCH:
746             return VMCS_PG_FAULT_ERR_MATCH_STR;
747         case VMCS_CR3_TGT_CNT:
748             return VMCS_CR3_TGT_CNT_STR;
749         case VMCS_EXIT_CTRLS:
750             return VMCS_EXIT_CTRLS_STR;
751         case VMCS_EXIT_MSR_STORE_CNT:
752             return VMCS_EXIT_MSR_STORE_CNT_STR;
753         case VMCS_EXIT_MSR_LOAD_CNT:
754             return VMCS_EXIT_MSR_LOAD_CNT_STR;
755         case VMCS_ENTRY_CTRLS:
756             return VMCS_ENTRY_CTRLS_STR;
757         case VMCS_ENTRY_MSR_LOAD_CNT:
758             return VMCS_ENTRY_MSR_LOAD_CNT_STR;
759         case VMCS_ENTRY_INT_INFO:
760             return VMCS_ENTRY_INT_INFO_STR;
761         case VMCS_ENTRY_EXCP_ERR:
762             return VMCS_ENTRY_EXCP_ERR_STR;
763         case VMCS_ENTRY_INSTR_LEN:
764             return VMCS_ENTRY_INSTR_LEN_STR;
765         case VMCS_TPR_THRESHOLD:
766             return VMCS_TPR_THRESHOLD_STR;
767         case VMCS_SEC_PROC_CTRLS:
768             return VMCS_SEC_PROC_CTRLS_STR;
769         case VMCS_INSTR_ERR:
770             return VMCS_INSTR_ERR_STR;
771         case VMCS_EXIT_REASON:
772             return VMCS_EXIT_REASON_STR;
773         case VMCS_EXIT_INT_INFO:
774             return VMCS_EXIT_INT_INFO_STR;
775         case VMCS_EXIT_INT_ERR:
776             return VMCS_EXIT_INT_ERR_STR;
777         case VMCS_IDT_VECTOR_INFO:
778             return VMCS_IDT_VECTOR_INFO_STR;
779         case VMCS_IDT_VECTOR_ERR:
780             return VMCS_IDT_VECTOR_ERR_STR;
781         case VMCS_EXIT_INSTR_LEN:
782             return VMCS_EXIT_INSTR_LEN_STR;
783         case VMCS_VMX_INSTR_INFO:
784             return VMCS_VMX_INSTR_INFO_STR;
785         case VMCS_GUEST_ES_LIMIT:
786             return VMCS_GUEST_ES_LIMIT_STR;
787         case VMCS_GUEST_CS_LIMIT:
788             return VMCS_GUEST_CS_LIMIT_STR;
789         case VMCS_GUEST_SS_LIMIT:
790             return VMCS_GUEST_SS_LIMIT_STR;
791         case VMCS_GUEST_DS_LIMIT:
792             return VMCS_GUEST_DS_LIMIT_STR;
793         case VMCS_GUEST_FS_LIMIT:
794             return VMCS_GUEST_FS_LIMIT_STR;
795         case VMCS_GUEST_GS_LIMIT:
796             return VMCS_GUEST_GS_LIMIT_STR;
797         case VMCS_GUEST_LDTR_LIMIT:
798             return VMCS_GUEST_LDTR_LIMIT_STR;
799         case VMCS_GUEST_TR_LIMIT:
800             return VMCS_GUEST_TR_LIMIT_STR;
801         case VMCS_GUEST_GDTR_LIMIT:
802             return VMCS_GUEST_GDTR_LIMIT_STR;
803         case VMCS_GUEST_IDTR_LIMIT:
804             return VMCS_GUEST_IDTR_LIMIT_STR;
805         case VMCS_GUEST_ES_ACCESS:
806             return VMCS_GUEST_ES_ACCESS_STR;
807         case VMCS_GUEST_CS_ACCESS:
808             return VMCS_GUEST_CS_ACCESS_STR;
809         case VMCS_GUEST_SS_ACCESS:
810             return VMCS_GUEST_SS_ACCESS_STR;
811         case VMCS_GUEST_DS_ACCESS:
812             return VMCS_GUEST_DS_ACCESS_STR;
813         case VMCS_GUEST_FS_ACCESS:
814             return VMCS_GUEST_FS_ACCESS_STR;
815         case VMCS_GUEST_GS_ACCESS:
816             return VMCS_GUEST_GS_ACCESS_STR;
817         case VMCS_GUEST_LDTR_ACCESS:
818             return VMCS_GUEST_LDTR_ACCESS_STR;
819         case VMCS_GUEST_TR_ACCESS:
820             return VMCS_GUEST_TR_ACCESS_STR;
821         case VMCS_GUEST_INT_STATE:
822             return VMCS_GUEST_INT_STATE_STR;
823         case VMCS_GUEST_ACTIVITY_STATE:
824             return VMCS_GUEST_ACTIVITY_STATE_STR;
825         case VMCS_GUEST_SMBASE:
826             return VMCS_GUEST_SMBASE_STR;
827         case VMCS_GUEST_SYSENTER_CS:
828             return VMCS_GUEST_SYSENTER_CS_STR;
829         case VMCS_HOST_SYSENTER_CS:
830             return VMCS_HOST_SYSENTER_CS_STR;
831         case VMCS_CR0_MASK:
832             return VMCS_CR0_MASK_STR;
833         case VMCS_CR4_MASK:
834             return VMCS_CR4_MASK_STR;
835         case VMCS_CR0_READ_SHDW:
836             return VMCS_CR0_READ_SHDW_STR;
837         case VMCS_CR4_READ_SHDW:
838             return VMCS_CR4_READ_SHDW_STR;
839         case VMCS_CR3_TGT_VAL_0:
840             return VMCS_CR3_TGT_VAL_0_STR;
841         case VMCS_CR3_TGT_VAL_1:
842             return VMCS_CR3_TGT_VAL_1_STR;
843         case VMCS_CR3_TGT_VAL_2:
844             return VMCS_CR3_TGT_VAL_2_STR;
845         case VMCS_CR3_TGT_VAL_3:
846             return VMCS_CR3_TGT_VAL_3_STR;
847         case VMCS_EXIT_QUAL:
848             return VMCS_EXIT_QUAL_STR;
849         case VMCS_IO_RCX:
850             return VMCS_IO_RCX_STR;
851         case VMCS_IO_RSI:
852             return VMCS_IO_RSI_STR;
853         case VMCS_IO_RDI:
854             return VMCS_IO_RDI_STR;
855         case VMCS_IO_RIP:
856             return VMCS_IO_RIP_STR;
857         case VMCS_GUEST_LINEAR_ADDR:
858             return VMCS_GUEST_LINEAR_ADDR_STR;
859         case VMCS_GUEST_CR0:
860             return VMCS_GUEST_CR0_STR;
861         case VMCS_GUEST_CR3:
862             return VMCS_GUEST_CR3_STR;
863         case VMCS_GUEST_CR4:
864             return VMCS_GUEST_CR4_STR;
865         case VMCS_GUEST_ES_BASE:
866             return VMCS_GUEST_ES_BASE_STR;
867         case VMCS_GUEST_CS_BASE:
868             return VMCS_GUEST_CS_BASE_STR;
869         case VMCS_GUEST_SS_BASE:
870             return VMCS_GUEST_SS_BASE_STR;
871         case VMCS_GUEST_DS_BASE:
872             return VMCS_GUEST_DS_BASE_STR;
873         case VMCS_GUEST_FS_BASE:
874             return VMCS_GUEST_FS_BASE_STR;
875         case VMCS_GUEST_GS_BASE:
876             return VMCS_GUEST_GS_BASE_STR;
877         case VMCS_GUEST_LDTR_BASE:
878             return VMCS_GUEST_LDTR_BASE_STR;
879         case VMCS_GUEST_TR_BASE:
880             return VMCS_GUEST_TR_BASE_STR;
881         case VMCS_GUEST_GDTR_BASE:
882             return VMCS_GUEST_GDTR_BASE_STR;
883         case VMCS_GUEST_IDTR_BASE:
884             return VMCS_GUEST_IDTR_BASE_STR;
885         case VMCS_GUEST_DR7:
886             return VMCS_GUEST_DR7_STR;
887         case VMCS_GUEST_RSP:
888             return VMCS_GUEST_RSP_STR;
889         case VMCS_GUEST_RIP:
890             return VMCS_GUEST_RIP_STR;
891         case VMCS_GUEST_RFLAGS:
892             return VMCS_GUEST_RFLAGS_STR;
893         case VMCS_GUEST_PENDING_DBG_EXCP:
894             return VMCS_GUEST_PENDING_DBG_EXCP_STR;
895         case VMCS_GUEST_SYSENTER_ESP:
896             return VMCS_GUEST_SYSENTER_ESP_STR;
897         case VMCS_GUEST_SYSENTER_EIP:
898             return VMCS_GUEST_SYSENTER_EIP_STR;
899         case VMCS_HOST_CR0:
900             return VMCS_HOST_CR0_STR;
901         case VMCS_HOST_CR3:
902             return VMCS_HOST_CR3_STR;
903         case VMCS_HOST_CR4:
904             return VMCS_HOST_CR4_STR;
905         case VMCS_HOST_FS_BASE:
906             return VMCS_HOST_FS_BASE_STR;
907         case VMCS_HOST_GS_BASE:
908             return VMCS_HOST_GS_BASE_STR;
909         case VMCS_HOST_TR_BASE:
910             return VMCS_HOST_TR_BASE_STR;
911         case VMCS_HOST_GDTR_BASE:
912             return VMCS_HOST_GDTR_BASE_STR;
913         case VMCS_HOST_IDTR_BASE:
914             return VMCS_HOST_IDTR_BASE_STR;
915         case VMCS_HOST_SYSENTER_ESP:
916             return VMCS_HOST_SYSENTER_ESP_STR;
917         case VMCS_HOST_SYSENTER_EIP:
918             return VMCS_HOST_SYSENTER_EIP_STR;
919         case VMCS_HOST_RSP:
920             return VMCS_HOST_RSP_STR;
921         case VMCS_HOST_RIP:
922             return VMCS_HOST_RIP_STR;
923         default:
924             return NULL;
925     }
926 }
927
928
929