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.


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