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.


f317088f1d79708ec70ddb4d5ae65f6284c1acfe
[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
122   PrintDebug("Exit Int Info: (at 0x%.8x)\n", &(ctrl_area->exit_int_info));
123   PrintDebug("Vector: %d\n", ctrl_area->exit_int_info.vector);
124   PrintDebug("(type=%d) (ev=%d) (valid=%d)\n", ctrl_area->exit_int_info.type, 
125              ctrl_area->exit_int_info.ev, ctrl_area->exit_int_info.valid);
126   PrintDebug("Error Code: %d\n", ctrl_area->exit_int_info.error_code);
127
128
129   tmp_reg.r_reg = ctrl_area->NP_ENABLE;
130   PrintDebug("NP_ENABLE: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
131
132   PrintDebug("Event Injection: (at 0x%.8x)\n", &(ctrl_area->EVENTINJ));
133   PrintDebug("Vector: %d\n", ctrl_area->EVENTINJ.vector);
134   PrintDebug("(type=%d) (ev=%d) (valid=%d)\n", ctrl_area->EVENTINJ.type, 
135              ctrl_area->EVENTINJ.ev, ctrl_area->EVENTINJ.valid);
136   PrintDebug("Error Code: %d\n", ctrl_area->EVENTINJ.error_code);
137
138
139   tmp_reg.r_reg = ctrl_area->N_CR3;
140   PrintDebug("N_CR3: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
141
142   PrintDebug("LBR_VIRTUALIZATION_ENABLE: %d\n", ctrl_area->LBR_VIRTUALIZATION_ENABLE);
143
144
145   PrintDebug("\n--Guest Saved State--\n");
146
147   PrintDebug("es Selector (at 0x%.8x): \n", &(guest_area->es));
148   PrintDebug("\tSelector: %d\n", guest_area->es.selector); 
149   PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", 
150              guest_area->es.attrib.fields.type, guest_area->es.attrib.fields.S, 
151              guest_area->es.attrib.fields.dpl, guest_area->es.attrib.fields.P,
152              guest_area->es.attrib.fields.avl, guest_area->es.attrib.fields.L,
153              guest_area->es.attrib.fields.db, guest_area->es.attrib.fields.G);
154   PrintDebug("\tlimit: %lu\n", guest_area->es.limit);
155   tmp_reg.r_reg = guest_area->es.base;
156   PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
157
158
159   PrintDebug("cs Selector (at 0x%.8x): \n", &(guest_area->cs));
160   PrintDebug("\tSelector: %d\n", guest_area->cs.selector); 
161   PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", 
162              guest_area->cs.attrib.fields.type, guest_area->cs.attrib.fields.S, 
163              guest_area->cs.attrib.fields.dpl, guest_area->cs.attrib.fields.P,
164              guest_area->cs.attrib.fields.avl, guest_area->cs.attrib.fields.L,
165              guest_area->cs.attrib.fields.db, guest_area->cs.attrib.fields.G);
166   PrintDebug("\tlimit: %lu\n", guest_area->cs.limit);
167   tmp_reg.r_reg = guest_area->cs.base;
168   PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
169
170
171   PrintDebug("ss Selector (at 0x%.8x): \n", &(guest_area->ss));
172   PrintDebug("\tSelector: %d\n", guest_area->ss.selector); 
173   PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", 
174              guest_area->ss.attrib.fields.type, guest_area->ss.attrib.fields.S, 
175              guest_area->ss.attrib.fields.dpl, guest_area->ss.attrib.fields.P,
176              guest_area->ss.attrib.fields.avl, guest_area->ss.attrib.fields.L,
177              guest_area->ss.attrib.fields.db, guest_area->ss.attrib.fields.G);
178   PrintDebug("\tlimit: %lu\n", guest_area->ss.limit);
179   tmp_reg.r_reg = guest_area->ss.base;
180   PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
181
182
183   PrintDebug("ds Selector (at 0x%.8x): \n", &(guest_area->ds));
184   PrintDebug("\tSelector: %d\n", guest_area->ds.selector); 
185   PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", 
186              guest_area->ds.attrib.fields.type, guest_area->ds.attrib.fields.S, 
187              guest_area->ds.attrib.fields.dpl, guest_area->ds.attrib.fields.P,
188              guest_area->ds.attrib.fields.avl, guest_area->ds.attrib.fields.L,
189              guest_area->ds.attrib.fields.db, guest_area->ds.attrib.fields.G);
190   PrintDebug("\tlimit: %lu\n", guest_area->ds.limit);
191   tmp_reg.r_reg = guest_area->ds.base;
192   PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
193
194
195   PrintDebug("fs Selector (at 0x%.8x): \n", &(guest_area->fs));
196   PrintDebug("\tSelector: %d\n", guest_area->fs.selector); 
197   PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", 
198              guest_area->fs.attrib.fields.type, guest_area->fs.attrib.fields.S, 
199              guest_area->fs.attrib.fields.dpl, guest_area->fs.attrib.fields.P,
200              guest_area->fs.attrib.fields.avl, guest_area->fs.attrib.fields.L,
201              guest_area->fs.attrib.fields.db, guest_area->fs.attrib.fields.G);
202   PrintDebug("\tlimit: %lu\n", guest_area->fs.limit);
203   tmp_reg.r_reg = guest_area->fs.base;
204   PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
205
206
207   PrintDebug("gs Selector (at 0x%.8x): \n", &(guest_area->gs));
208   PrintDebug("\tSelector: %d\n", guest_area->gs.selector); 
209   PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", 
210              guest_area->gs.attrib.fields.type, guest_area->gs.attrib.fields.S, 
211              guest_area->gs.attrib.fields.dpl, guest_area->gs.attrib.fields.P,
212              guest_area->gs.attrib.fields.avl, guest_area->gs.attrib.fields.L,
213              guest_area->gs.attrib.fields.db, guest_area->gs.attrib.fields.G);
214   PrintDebug("\tlimit: %lu\n", guest_area->gs.limit);
215   tmp_reg.r_reg = guest_area->gs.base;
216   PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
217
218
219   PrintDebug("gdtr Selector (at 0x%.8x): \n", &(guest_area->gdtr));
220   PrintDebug("\tSelector: %d\n", guest_area->gdtr.selector); 
221   PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", 
222              guest_area->gdtr.attrib.fields.type, guest_area->gdtr.attrib.fields.S, 
223              guest_area->gdtr.attrib.fields.dpl, guest_area->gdtr.attrib.fields.P,
224              guest_area->gdtr.attrib.fields.avl, guest_area->gdtr.attrib.fields.L,
225              guest_area->gdtr.attrib.fields.db, guest_area->gdtr.attrib.fields.G);
226   PrintDebug("\tlimit: %lu\n", guest_area->gdtr.limit);
227   tmp_reg.r_reg = guest_area->gdtr.base;
228   PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
229
230
231   PrintDebug("ldtr Selector (at 0x%.8x): \n", &(guest_area->ldtr));
232   PrintDebug("\tSelector: %d\n", guest_area->ldtr.selector); 
233   PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", 
234              guest_area->ldtr.attrib.fields.type, guest_area->ldtr.attrib.fields.S, 
235              guest_area->ldtr.attrib.fields.dpl, guest_area->ldtr.attrib.fields.P,
236              guest_area->ldtr.attrib.fields.avl, guest_area->ldtr.attrib.fields.L,
237              guest_area->ldtr.attrib.fields.db, guest_area->ldtr.attrib.fields.G);
238   PrintDebug("\tlimit: %lu\n", guest_area->ldtr.limit);
239   tmp_reg.r_reg = guest_area->ldtr.base;
240   PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
241
242
243   PrintDebug("idtr Selector (at 0x%.8x): \n", &(guest_area->idtr));
244   PrintDebug("\tSelector: %d\n", guest_area->idtr.selector); 
245   PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", 
246              guest_area->idtr.attrib.fields.type, guest_area->idtr.attrib.fields.S, 
247              guest_area->idtr.attrib.fields.dpl, guest_area->idtr.attrib.fields.P,
248              guest_area->idtr.attrib.fields.avl, guest_area->idtr.attrib.fields.L,
249              guest_area->idtr.attrib.fields.db, guest_area->idtr.attrib.fields.G);
250   PrintDebug("\tlimit: %lu\n", guest_area->idtr.limit);
251   tmp_reg.r_reg = guest_area->idtr.base;
252   PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
253
254
255   PrintDebug("tr Selector (at 0x%.8x): \n", &(guest_area->tr));
256   PrintDebug("\tSelector: %d\n", guest_area->tr.selector); 
257   PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", 
258              guest_area->tr.attrib.fields.type, guest_area->tr.attrib.fields.S, 
259              guest_area->tr.attrib.fields.dpl, guest_area->tr.attrib.fields.P,
260              guest_area->tr.attrib.fields.avl, guest_area->tr.attrib.fields.L,
261              guest_area->tr.attrib.fields.db, guest_area->tr.attrib.fields.G);
262   PrintDebug("\tlimit: %lu\n", guest_area->tr.limit);
263   tmp_reg.r_reg = guest_area->tr.base;
264   PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
265
266
267   PrintDebug("cpl: %d\n", guest_area->cpl);
268
269   
270   tmp_reg.r_reg = guest_area->efer;
271   PrintDebug("EFER: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
272
273   tmp_reg.r_reg = guest_area->cr4;
274   PrintDebug("CR4: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
275   tmp_reg.r_reg = guest_area->cr3;
276   PrintDebug("CR3: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
277   tmp_reg.r_reg = guest_area->cr0;
278   PrintDebug("CR0: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
279   tmp_reg.r_reg = guest_area->dr7;
280   PrintDebug("DR7: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
281   tmp_reg.r_reg = guest_area->dr6;
282   PrintDebug("DR6: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
283   tmp_reg.r_reg = guest_area->rflags;
284   PrintDebug("RFLAGS: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
285   tmp_reg.r_reg = guest_area->rip;
286   PrintDebug("RIP: 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->rsp;
290   PrintDebug("RSP: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
291
292   
293   tmp_reg.r_reg = guest_area->rax;
294   PrintDebug("RAX: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
295   tmp_reg.r_reg = guest_area->star;
296   PrintDebug("STAR: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
297   tmp_reg.r_reg = guest_area->lstar;
298   PrintDebug("LSTAR: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
299   tmp_reg.r_reg = guest_area->cstar;
300   PrintDebug("CSTAR: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
301   tmp_reg.r_reg = guest_area->sfmask;
302   PrintDebug("SFMASK: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
303   tmp_reg.r_reg = guest_area->KernelGsBase;
304   PrintDebug("KernelGsBase: 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_cs;
306   PrintDebug("sysenter_cs: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
307   tmp_reg.r_reg = guest_area->sysenter_esp;
308   PrintDebug("sysenter_esp: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
309   tmp_reg.r_reg = guest_area->sysenter_eip;
310   PrintDebug("sysenter_eip: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
311   tmp_reg.r_reg = guest_area->cr2;
312   PrintDebug("CR2: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
313
314   tmp_reg.r_reg = guest_area->g_pat;
315   PrintDebug("g_pat: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
316   tmp_reg.r_reg = guest_area->dbgctl;
317   PrintDebug("dbgctl: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
318   tmp_reg.r_reg = guest_area->br_from;
319   PrintDebug("br_from: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
320   tmp_reg.r_reg = guest_area->br_to;
321   PrintDebug("br_to: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
322   tmp_reg.r_reg = guest_area->lastexcpfrom;
323   PrintDebug("lastexcpfrom: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
324   tmp_reg.r_reg = guest_area->lastexcpto;
325   PrintDebug("lastexcpto: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
326
327
328
329
330
331
332 }