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.


*** empty log message ***
[palacios.git] / palacios / src / geekos / vmcb.c
1 #include <geekos/vmcb.h>
2 #include <geekos/vmm.h>
3 #include <geekos/vmm_util.h>
4
5
6 void PrintDebugVMCB(vmcb_t * vmcb) {
7   reg_ex_t tmp_reg;
8
9   vmcb_ctrl_t * ctrl_area = GET_VMCB_CTRL_AREA(vmcb);
10   vmcb_saved_state_t * guest_area = GET_VMCB_SAVE_STATE_AREA(vmcb);
11
12   PrintDebug("VMCB (0x%.8x)\n", vmcb);
13
14   PrintDebug("--Control Area--\n");
15   PrintDebug("CR Reads: %x\n", ctrl_area->cr_reads.bitmap);
16   PrintDebug("CR Writes: %x\n", ctrl_area->cr_writes.bitmap);
17   PrintDebug("DR Reads: %x\n", ctrl_area->dr_reads.bitmap);
18   PrintDebug("DR Writes: %x\n", ctrl_area->dr_writes.bitmap);
19
20   PrintDebug("Exception Bitmap: %x (at 0x%.8x)\n", ctrl_area->exceptions.bitmap, &(ctrl_area->exceptions));
21   PrintDebug("\tDivide-by-Zero: %d\n", ctrl_area->exceptions.ex_names.de);
22   PrintDebug("\tDebug: %d\n", ctrl_area->exceptions.ex_names.db);
23   PrintDebug("\tNon-maskable interrupts: %d\n", ctrl_area->exceptions.ex_names.nmi);
24   PrintDebug("\tBreakpoint: %d\n", ctrl_area->exceptions.ex_names.bp);
25   PrintDebug("\tOverflow: %d\n", ctrl_area->exceptions.ex_names.of);
26   PrintDebug("\tBound-Range: %d\n", ctrl_area->exceptions.ex_names.br);
27   PrintDebug("\tInvalid Opcode: %d\n", ctrl_area->exceptions.ex_names.ud);
28   PrintDebug("\tDevice not available: %d\n", ctrl_area->exceptions.ex_names.nm);
29   PrintDebug("\tDouble Fault: %d\n", ctrl_area->exceptions.ex_names.df);
30   PrintDebug("\tInvalid TSS: %d\n", ctrl_area->exceptions.ex_names.ts);
31   PrintDebug("\tSegment not present: %d\n", ctrl_area->exceptions.ex_names.np);
32   PrintDebug("\tStack: %d\n", ctrl_area->exceptions.ex_names.ss);
33   PrintDebug("\tGPF: %d\n", ctrl_area->exceptions.ex_names.gp);
34   PrintDebug("\tPage Fault: %d\n", ctrl_area->exceptions.ex_names.pf);
35   PrintDebug("\tFloating Point: %d\n", ctrl_area->exceptions.ex_names.mf);
36   PrintDebug("\tAlignment Check: %d\n", ctrl_area->exceptions.ex_names.ac);
37   PrintDebug("\tMachine Check: %d\n", ctrl_area->exceptions.ex_names.mc);
38   PrintDebug("\tSIMD floating point: %d\n", ctrl_area->exceptions.ex_names.xf);
39   PrintDebug("\tSecurity: %d\n", ctrl_area->exceptions.ex_names.sx);
40
41   PrintDebug("Instructions bitmap: %.8x (at 0x%.8x)\n", ctrl_area->instrs.bitmap, &(ctrl_area->instrs));
42   PrintDebug("\tINTR: %d\n", ctrl_area->instrs.instrs.INTR);
43   PrintDebug("\tNMI: %d\n", ctrl_area->instrs.instrs.NMI);
44   PrintDebug("\tSMI: %d\n", ctrl_area->instrs.instrs.SMI);
45   PrintDebug("\tINIT: %d\n", ctrl_area->instrs.instrs.INIT);
46   PrintDebug("\tVINTR: %d\n", ctrl_area->instrs.instrs.VINTR);
47   PrintDebug("\tCR0: %d\n", ctrl_area->instrs.instrs.CR0);
48   PrintDebug("\tRD_IDTR: %d\n", ctrl_area->instrs.instrs.RD_IDTR);
49   PrintDebug("\tRD_GDTR: %d\n", ctrl_area->instrs.instrs.RD_GDTR);
50   PrintDebug("\tRD_LDTR: %d\n", ctrl_area->instrs.instrs.RD_LDTR);
51   PrintDebug("\tRD_TR: %d\n", ctrl_area->instrs.instrs.RD_TR);
52   PrintDebug("\tWR_IDTR: %d\n", ctrl_area->instrs.instrs.WR_IDTR);
53   PrintDebug("\tWR_GDTR: %d\n", ctrl_area->instrs.instrs.WR_GDTR);
54   PrintDebug("\tWR_LDTR: %d\n", ctrl_area->instrs.instrs.WR_LDTR);
55   PrintDebug("\tWR_TR: %d\n", ctrl_area->instrs.instrs.WR_TR);
56   PrintDebug("\tRDTSC: %d\n", ctrl_area->instrs.instrs.RDTSC);
57   PrintDebug("\tRDPMC: %d\n", ctrl_area->instrs.instrs.RDPMC);
58   PrintDebug("\tPUSHF: %d\n", ctrl_area->instrs.instrs.PUSHF);
59   PrintDebug("\tPOPF: %d\n", ctrl_area->instrs.instrs.POPF);
60   PrintDebug("\tCPUID: %d\n", ctrl_area->instrs.instrs.CPUID);
61   PrintDebug("\tRSM: %d\n", ctrl_area->instrs.instrs.RSM);
62   PrintDebug("\tIRET: %d\n", ctrl_area->instrs.instrs.IRET);
63   PrintDebug("\tINTn: %d\n", ctrl_area->instrs.instrs.INTn);
64   PrintDebug("\tINVD: %d\n", ctrl_area->instrs.instrs.INVD);
65   PrintDebug("\tPAUSE: %d\n", ctrl_area->instrs.instrs.PAUSE);
66   PrintDebug("\tHLT: %d\n", ctrl_area->instrs.instrs.HLT);
67   PrintDebug("\tINVLPG: %d\n", ctrl_area->instrs.instrs.INVLPG);
68   PrintDebug("\tINVLPGA: %d\n", ctrl_area->instrs.instrs.INVLPGA);
69   PrintDebug("\tIOIO_PROT: %d\n", ctrl_area->instrs.instrs.IOIO_PROT);
70   PrintDebug("\tMSR_PROT: %d\n", ctrl_area->instrs.instrs.MSR_PROT);
71   PrintDebug("\ttask_switch: %d\n", ctrl_area->instrs.instrs.task_switch);
72   PrintDebug("\tFERR_FREEZE: %d\n", ctrl_area->instrs.instrs.FERR_FREEZE);
73   PrintDebug("\tshutdown_evts: %d\n", ctrl_area->instrs.instrs.shutdown_evts);
74
75   PrintDebug("SVM Instruction Bitmap: %.8x (at 0x%.8x)\n", ctrl_area->svm_instrs.bitmap, &(ctrl_area->svm_instrs));
76   PrintDebug("\tVMRUN: %d\n", ctrl_area->svm_instrs.instrs.VMRUN);
77   PrintDebug("\tVMMCALL: %d\n", ctrl_area->svm_instrs.instrs.VMMCALL);
78   PrintDebug("\tVMLOAD: %d\n", ctrl_area->svm_instrs.instrs.VMLOAD);
79   PrintDebug("\tVMSAVE: %d\n", ctrl_area->svm_instrs.instrs.VMSAVE);
80   PrintDebug("\tSTGI: %d\n", ctrl_area->svm_instrs.instrs.STGI);
81   PrintDebug("\tCLGI: %d\n", ctrl_area->svm_instrs.instrs.CLGI);
82   PrintDebug("\tSKINIT: %d\n", ctrl_area->svm_instrs.instrs.SKINIT);
83   PrintDebug("\tRDTSCP: %d\n", ctrl_area->svm_instrs.instrs.RDTSCP);
84   PrintDebug("\tICEBP: %d\n", ctrl_area->svm_instrs.instrs.ICEBP);
85   PrintDebug("\tWBINVD: %d\n", ctrl_area->svm_instrs.instrs.WBINVD);
86   PrintDebug("\tMONITOR: %d\n", ctrl_area->svm_instrs.instrs.MONITOR);
87   PrintDebug("\tMWAIT_always: %d\n", ctrl_area->svm_instrs.instrs.MWAIT_always);
88   PrintDebug("\tMWAIT_if_armed: %d\n", ctrl_area->svm_instrs.instrs.MWAIT_if_armed);
89
90
91
92   tmp_reg.r_reg = ctrl_area->IOPM_BASE_PA;
93   PrintDebug("IOPM_BASE_PA: lo: 0x%.8x, hi: 0x%.8x\n", tmp_reg.e_reg.low, tmp_reg.e_reg.high);
94   tmp_reg.r_reg = ctrl_area->MSRPM_BASE_PA;
95   PrintDebug("MSRPM_BASE_PA: lo: 0x%.8x, hi: 0x%.8x\n", tmp_reg.e_reg.low, tmp_reg.e_reg.high);
96   tmp_reg.r_reg = ctrl_area->TSC_OFFSET;
97   PrintDebug("TSC_OFFSET: lo: 0x%.8x, hi: 0x%.8x\n", tmp_reg.e_reg.low, tmp_reg.e_reg.high);
98
99   PrintDebug("guest_ASID: %d\n", ctrl_area->guest_ASID);
100   PrintDebug("TLB_CONTROL: %d\n", ctrl_area->TLB_CONTROL);
101
102
103   PrintDebug("Guest Control Bitmap: %x (at 0x%.8x)\n", ctrl_area->guest_ctrl.bitmap, &(ctrl_area->guest_ctrl));
104   PrintDebug("\tV_TPR: %d\n", ctrl_area->guest_ctrl.ctrls.V_TPR);
105   PrintDebug("\tV_IRQ: %d\n", ctrl_area->guest_ctrl.ctrls.V_IRQ);
106   PrintDebug("\tV_INTR_PRIO: %d\n", ctrl_area->guest_ctrl.ctrls.V_INTR_PRIO);
107   PrintDebug("\tV_IGN_TPR: %d\n", ctrl_area->guest_ctrl.ctrls.V_IGN_TPR);
108   PrintDebug("\tV_INTR_MASKING: %d\n", ctrl_area->guest_ctrl.ctrls.V_INTR_MASKING);
109   PrintDebug("\tV_INTR_VECTOR: %d\n", ctrl_area->guest_ctrl.ctrls.V_INTR_VECTOR);
110
111   PrintDebug("Interrupt_shadow: %d\n", ctrl_area->interrupt_shadow);
112
113
114   tmp_reg.r_reg = ctrl_area->exit_code;
115   PrintDebug("exit_code: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
116   tmp_reg.r_reg = ctrl_area->exit_info1;
117   PrintDebug("exit_info1: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
118   tmp_reg.r_reg = ctrl_area->exit_info2;
119   PrintDebug("exit_info2: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
120
121   tmp_reg.r_reg = ctrl_area->exit_int_info;
122   PrintDebug("exit_int_info: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
123
124
125   tmp_reg.r_reg = ctrl_area->NP_ENABLE;
126   PrintDebug("NP_ENABLE: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
127
128   tmp_reg.r_reg = ctrl_area->EVENTINJ;
129   PrintDebug("EVENTINJ: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
130
131
132   tmp_reg.r_reg = ctrl_area->N_CR3;
133   PrintDebug("N_CR3: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
134
135   PrintDebug("LBR_VIRTUALIZATION_ENABLE: %d\n", ctrl_area->LBR_VIRTUALIZATION_ENABLE);
136
137
138   PrintDebug("\n--Guest Saved State--\n");
139
140   PrintDebug("es Selector (at 0x%.8x): \n", &(guest_area->es));
141   PrintDebug("\tSelector: %d\n", guest_area->es.selector); 
142   PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", 
143              guest_area->es.attrib.fields.type, guest_area->es.attrib.fields.S, 
144              guest_area->es.attrib.fields.dpl, guest_area->es.attrib.fields.P,
145              guest_area->es.attrib.fields.avl, guest_area->es.attrib.fields.L,
146              guest_area->es.attrib.fields.db, guest_area->es.attrib.fields.G);
147   PrintDebug("\tlimit: %lu\n", guest_area->es.limit);
148   tmp_reg.r_reg = guest_area->es.base;
149   PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
150
151
152   PrintDebug("cs Selector (at 0x%.8x): \n", &(guest_area->cs));
153   PrintDebug("\tSelector: %d\n", guest_area->cs.selector); 
154   PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", 
155              guest_area->cs.attrib.fields.type, guest_area->cs.attrib.fields.S, 
156              guest_area->cs.attrib.fields.dpl, guest_area->cs.attrib.fields.P,
157              guest_area->cs.attrib.fields.avl, guest_area->cs.attrib.fields.L,
158              guest_area->cs.attrib.fields.db, guest_area->cs.attrib.fields.G);
159   PrintDebug("\tlimit: %lu\n", guest_area->cs.limit);
160   tmp_reg.r_reg = guest_area->cs.base;
161   PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
162
163
164   PrintDebug("ss Selector (at 0x%.8x): \n", &(guest_area->ss));
165   PrintDebug("\tSelector: %d\n", guest_area->ss.selector); 
166   PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", 
167              guest_area->ss.attrib.fields.type, guest_area->ss.attrib.fields.S, 
168              guest_area->ss.attrib.fields.dpl, guest_area->ss.attrib.fields.P,
169              guest_area->ss.attrib.fields.avl, guest_area->ss.attrib.fields.L,
170              guest_area->ss.attrib.fields.db, guest_area->ss.attrib.fields.G);
171   PrintDebug("\tlimit: %lu\n", guest_area->ss.limit);
172   tmp_reg.r_reg = guest_area->ss.base;
173   PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
174
175
176   PrintDebug("ds Selector (at 0x%.8x): \n", &(guest_area->ds));
177   PrintDebug("\tSelector: %d\n", guest_area->ds.selector); 
178   PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", 
179              guest_area->ds.attrib.fields.type, guest_area->ds.attrib.fields.S, 
180              guest_area->ds.attrib.fields.dpl, guest_area->ds.attrib.fields.P,
181              guest_area->ds.attrib.fields.avl, guest_area->ds.attrib.fields.L,
182              guest_area->ds.attrib.fields.db, guest_area->ds.attrib.fields.G);
183   PrintDebug("\tlimit: %lu\n", guest_area->ds.limit);
184   tmp_reg.r_reg = guest_area->ds.base;
185   PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
186
187
188   PrintDebug("fs Selector (at 0x%.8x): \n", &(guest_area->fs));
189   PrintDebug("\tSelector: %d\n", guest_area->fs.selector); 
190   PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", 
191              guest_area->fs.attrib.fields.type, guest_area->fs.attrib.fields.S, 
192              guest_area->fs.attrib.fields.dpl, guest_area->fs.attrib.fields.P,
193              guest_area->fs.attrib.fields.avl, guest_area->fs.attrib.fields.L,
194              guest_area->fs.attrib.fields.db, guest_area->fs.attrib.fields.G);
195   PrintDebug("\tlimit: %lu\n", guest_area->fs.limit);
196   tmp_reg.r_reg = guest_area->fs.base;
197   PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
198
199
200   PrintDebug("gs Selector (at 0x%.8x): \n", &(guest_area->gs));
201   PrintDebug("\tSelector: %d\n", guest_area->gs.selector); 
202   PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", 
203              guest_area->gs.attrib.fields.type, guest_area->gs.attrib.fields.S, 
204              guest_area->gs.attrib.fields.dpl, guest_area->gs.attrib.fields.P,
205              guest_area->gs.attrib.fields.avl, guest_area->gs.attrib.fields.L,
206              guest_area->gs.attrib.fields.db, guest_area->gs.attrib.fields.G);
207   PrintDebug("\tlimit: %lu\n", guest_area->gs.limit);
208   tmp_reg.r_reg = guest_area->gs.base;
209   PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
210
211
212   PrintDebug("gdtr Selector (at 0x%.8x): \n", &(guest_area->gdtr));
213   PrintDebug("\tSelector: %d\n", guest_area->gdtr.selector); 
214   PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", 
215              guest_area->gdtr.attrib.fields.type, guest_area->gdtr.attrib.fields.S, 
216              guest_area->gdtr.attrib.fields.dpl, guest_area->gdtr.attrib.fields.P,
217              guest_area->gdtr.attrib.fields.avl, guest_area->gdtr.attrib.fields.L,
218              guest_area->gdtr.attrib.fields.db, guest_area->gdtr.attrib.fields.G);
219   PrintDebug("\tlimit: %lu\n", guest_area->gdtr.limit);
220   tmp_reg.r_reg = guest_area->gdtr.base;
221   PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
222
223
224   PrintDebug("ldtr Selector (at 0x%.8x): \n", &(guest_area->ldtr));
225   PrintDebug("\tSelector: %d\n", guest_area->ldtr.selector); 
226   PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", 
227              guest_area->ldtr.attrib.fields.type, guest_area->ldtr.attrib.fields.S, 
228              guest_area->ldtr.attrib.fields.dpl, guest_area->ldtr.attrib.fields.P,
229              guest_area->ldtr.attrib.fields.avl, guest_area->ldtr.attrib.fields.L,
230              guest_area->ldtr.attrib.fields.db, guest_area->ldtr.attrib.fields.G);
231   PrintDebug("\tlimit: %lu\n", guest_area->ldtr.limit);
232   tmp_reg.r_reg = guest_area->ldtr.base;
233   PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
234
235
236   PrintDebug("idtr Selector (at 0x%.8x): \n", &(guest_area->idtr));
237   PrintDebug("\tSelector: %d\n", guest_area->idtr.selector); 
238   PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", 
239              guest_area->idtr.attrib.fields.type, guest_area->idtr.attrib.fields.S, 
240              guest_area->idtr.attrib.fields.dpl, guest_area->idtr.attrib.fields.P,
241              guest_area->idtr.attrib.fields.avl, guest_area->idtr.attrib.fields.L,
242              guest_area->idtr.attrib.fields.db, guest_area->idtr.attrib.fields.G);
243   PrintDebug("\tlimit: %lu\n", guest_area->idtr.limit);
244   tmp_reg.r_reg = guest_area->idtr.base;
245   PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
246
247
248   PrintDebug("tr Selector (at 0x%.8x): \n", &(guest_area->tr));
249   PrintDebug("\tSelector: %d\n", guest_area->tr.selector); 
250   PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", 
251              guest_area->tr.attrib.fields.type, guest_area->tr.attrib.fields.S, 
252              guest_area->tr.attrib.fields.dpl, guest_area->tr.attrib.fields.P,
253              guest_area->tr.attrib.fields.avl, guest_area->tr.attrib.fields.L,
254              guest_area->tr.attrib.fields.db, guest_area->tr.attrib.fields.G);
255   PrintDebug("\tlimit: %lu\n", guest_area->tr.limit);
256   tmp_reg.r_reg = guest_area->tr.base;
257   PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
258
259
260   PrintDebug("cpl: %d\n", guest_area->cpl);
261
262   
263   tmp_reg.r_reg = guest_area->efer;
264   PrintDebug("EFER: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
265
266   tmp_reg.r_reg = guest_area->cr4;
267   PrintDebug("CR4: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
268   tmp_reg.r_reg = guest_area->cr3;
269   PrintDebug("CR3: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
270   tmp_reg.r_reg = guest_area->cr0;
271   PrintDebug("CR0: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
272   tmp_reg.r_reg = guest_area->dr7;
273   PrintDebug("DR7: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
274   tmp_reg.r_reg = guest_area->dr6;
275   PrintDebug("DR6: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
276   tmp_reg.r_reg = guest_area->rflags;
277   PrintDebug("RFLAGS: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
278   tmp_reg.r_reg = guest_area->rip;
279   PrintDebug("RIP: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
280
281
282   tmp_reg.r_reg = guest_area->rsp;
283   PrintDebug("RSP: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
284
285   
286   tmp_reg.r_reg = guest_area->rax;
287   PrintDebug("RAX: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
288   tmp_reg.r_reg = guest_area->star;
289   PrintDebug("STAR: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
290   tmp_reg.r_reg = guest_area->lstar;
291   PrintDebug("LSTAR: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
292   tmp_reg.r_reg = guest_area->cstar;
293   PrintDebug("CSTAR: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
294   tmp_reg.r_reg = guest_area->sfmask;
295   PrintDebug("SFMASK: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
296   tmp_reg.r_reg = guest_area->KernelGsBase;
297   PrintDebug("KernelGsBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
298   tmp_reg.r_reg = guest_area->sysenter_cs;
299   PrintDebug("sysenter_cs: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
300   tmp_reg.r_reg = guest_area->sysenter_esp;
301   PrintDebug("sysenter_esp: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
302   tmp_reg.r_reg = guest_area->sysenter_eip;
303   PrintDebug("sysenter_eip: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
304   tmp_reg.r_reg = guest_area->cr2;
305   PrintDebug("CR2: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
306
307   tmp_reg.r_reg = guest_area->g_pat;
308   PrintDebug("g_pat: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
309   tmp_reg.r_reg = guest_area->dbgctl;
310   PrintDebug("dbgctl: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
311   tmp_reg.r_reg = guest_area->br_from;
312   PrintDebug("br_from: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
313   tmp_reg.r_reg = guest_area->br_to;
314   PrintDebug("br_to: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
315   tmp_reg.r_reg = guest_area->lastexcpfrom;
316   PrintDebug("lastexcpfrom: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
317   tmp_reg.r_reg = guest_area->lastexcpto;
318   PrintDebug("lastexcpto: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
319
320
321
322
323
324
325 }