#include <geekos/vmcb.h>
+#include <geekos/vmm.h>
+#include <geekos/vmm_util.h>
+void PrintDebugVMCB(vmcb_t * vmcb) {
+ reg_ex_t tmp_reg;
+ vmcb_ctrl_t * ctrl_area = GET_VMCB_CTRL_AREA(vmcb);
+ vmcb_saved_state_t * guest_area = GET_VMCB_SAVE_STATE_AREA(vmcb);
+
+ PrintDebug("VMCB (0x%.8x)\n", vmcb);
+
+ PrintDebug("--Control Area--\n");
+ PrintDebug("CR Reads: %x\n", ctrl_area->cr_reads.bitmap);
+ PrintDebug("CR Writes: %x\n", ctrl_area->cr_writes.bitmap);
+ PrintDebug("DR Reads: %x\n", ctrl_area->dr_reads.bitmap);
+ PrintDebug("DR Writes: %x\n", ctrl_area->dr_writes.bitmap);
+
+ PrintDebug("Exception Bitmap: %x (at 0x%.8x)\n", ctrl_area->exceptions.bitmap, &(ctrl_area->exceptions));
+ PrintDebug("\tDivide-by-Zero: %d\n", ctrl_area->exceptions.ex_names.de);
+ PrintDebug("\tDebug: %d\n", ctrl_area->exceptions.ex_names.db);
+ PrintDebug("\tNon-maskable interrupts: %d\n", ctrl_area->exceptions.ex_names.nmi);
+ PrintDebug("\tBreakpoint: %d\n", ctrl_area->exceptions.ex_names.bp);
+ PrintDebug("\tOverflow: %d\n", ctrl_area->exceptions.ex_names.of);
+ PrintDebug("\tBound-Range: %d\n", ctrl_area->exceptions.ex_names.br);
+ PrintDebug("\tInvalid Opcode: %d\n", ctrl_area->exceptions.ex_names.ud);
+ PrintDebug("\tDevice not available: %d\n", ctrl_area->exceptions.ex_names.nm);
+ PrintDebug("\tDouble Fault: %d\n", ctrl_area->exceptions.ex_names.df);
+ PrintDebug("\tInvalid TSS: %d\n", ctrl_area->exceptions.ex_names.ts);
+ PrintDebug("\tSegment not present: %d\n", ctrl_area->exceptions.ex_names.np);
+ PrintDebug("\tStack: %d\n", ctrl_area->exceptions.ex_names.ss);
+ PrintDebug("\tGPF: %d\n", ctrl_area->exceptions.ex_names.gp);
+ PrintDebug("\tPage Fault: %d\n", ctrl_area->exceptions.ex_names.pf);
+ PrintDebug("\tFloating Point: %d\n", ctrl_area->exceptions.ex_names.mf);
+ PrintDebug("\tAlignment Check: %d\n", ctrl_area->exceptions.ex_names.ac);
+ PrintDebug("\tMachine Check: %d\n", ctrl_area->exceptions.ex_names.mc);
+ PrintDebug("\tSIMD floating point: %d\n", ctrl_area->exceptions.ex_names.xf);
+ PrintDebug("\tSecurity: %d\n", ctrl_area->exceptions.ex_names.sx);
+
+ PrintDebug("Instructions bitmap: %.8x (at 0x%.8x)\n", ctrl_area->instrs.bitmap, &(ctrl_area->instrs));
+ PrintDebug("\tINTR: %d\n", ctrl_area->instrs.instrs.INTR);
+ PrintDebug("\tNMI: %d\n", ctrl_area->instrs.instrs.NMI);
+ PrintDebug("\tSMI: %d\n", ctrl_area->instrs.instrs.SMI);
+ PrintDebug("\tINIT: %d\n", ctrl_area->instrs.instrs.INIT);
+ PrintDebug("\tVINTR: %d\n", ctrl_area->instrs.instrs.VINTR);
+ PrintDebug("\tCR0: %d\n", ctrl_area->instrs.instrs.CR0);
+ PrintDebug("\tRD_IDTR: %d\n", ctrl_area->instrs.instrs.RD_IDTR);
+ PrintDebug("\tRD_GDTR: %d\n", ctrl_area->instrs.instrs.RD_GDTR);
+ PrintDebug("\tRD_LDTR: %d\n", ctrl_area->instrs.instrs.RD_LDTR);
+ PrintDebug("\tRD_TR: %d\n", ctrl_area->instrs.instrs.RD_TR);
+ PrintDebug("\tWR_IDTR: %d\n", ctrl_area->instrs.instrs.WR_IDTR);
+ PrintDebug("\tWR_GDTR: %d\n", ctrl_area->instrs.instrs.WR_GDTR);
+ PrintDebug("\tWR_LDTR: %d\n", ctrl_area->instrs.instrs.WR_LDTR);
+ PrintDebug("\tWR_TR: %d\n", ctrl_area->instrs.instrs.WR_TR);
+ PrintDebug("\tRDTSC: %d\n", ctrl_area->instrs.instrs.RDTSC);
+ PrintDebug("\tRDPMC: %d\n", ctrl_area->instrs.instrs.RDPMC);
+ PrintDebug("\tPUSHF: %d\n", ctrl_area->instrs.instrs.PUSHF);
+ PrintDebug("\tPOPF: %d\n", ctrl_area->instrs.instrs.POPF);
+ PrintDebug("\tCPUID: %d\n", ctrl_area->instrs.instrs.CPUID);
+ PrintDebug("\tRSM: %d\n", ctrl_area->instrs.instrs.RSM);
+ PrintDebug("\tIRET: %d\n", ctrl_area->instrs.instrs.IRET);
+ PrintDebug("\tINTn: %d\n", ctrl_area->instrs.instrs.INTn);
+ PrintDebug("\tINVD: %d\n", ctrl_area->instrs.instrs.INVD);
+ PrintDebug("\tPAUSE: %d\n", ctrl_area->instrs.instrs.PAUSE);
+ PrintDebug("\tHLT: %d\n", ctrl_area->instrs.instrs.HLT);
+ PrintDebug("\tINVLPG: %d\n", ctrl_area->instrs.instrs.INVLPG);
+ PrintDebug("\tINVLPGA: %d\n", ctrl_area->instrs.instrs.INVLPGA);
+ PrintDebug("\tIOIO_PROT: %d\n", ctrl_area->instrs.instrs.IOIO_PROT);
+ PrintDebug("\tMSR_PROT: %d\n", ctrl_area->instrs.instrs.MSR_PROT);
+ PrintDebug("\ttask_switch: %d\n", ctrl_area->instrs.instrs.task_switch);
+ PrintDebug("\tFERR_FREEZE: %d\n", ctrl_area->instrs.instrs.FERR_FREEZE);
+ PrintDebug("\tshutdown_evts: %d\n", ctrl_area->instrs.instrs.shutdown_evts);
+
+ PrintDebug("SVM Instruction Bitmap: %.8x (at 0x%.8x)\n", ctrl_area->svm_instrs.bitmap, &(ctrl_area->svm_instrs));
+ PrintDebug("\tVMRUN: %d\n", ctrl_area->svm_instrs.instrs.VMRUN);
+ PrintDebug("\tVMMCALL: %d\n", ctrl_area->svm_instrs.instrs.VMMCALL);
+ PrintDebug("\tVMLOAD: %d\n", ctrl_area->svm_instrs.instrs.VMLOAD);
+ PrintDebug("\tVMSAVE: %d\n", ctrl_area->svm_instrs.instrs.VMSAVE);
+ PrintDebug("\tSTGI: %d\n", ctrl_area->svm_instrs.instrs.STGI);
+ PrintDebug("\tCLGI: %d\n", ctrl_area->svm_instrs.instrs.CLGI);
+ PrintDebug("\tSKINIT: %d\n", ctrl_area->svm_instrs.instrs.SKINIT);
+ PrintDebug("\tRDTSCP: %d\n", ctrl_area->svm_instrs.instrs.RDTSCP);
+ PrintDebug("\tICEBP: %d\n", ctrl_area->svm_instrs.instrs.ICEBP);
+ PrintDebug("\tWBINVD: %d\n", ctrl_area->svm_instrs.instrs.WBINVD);
+ PrintDebug("\tMONITOR: %d\n", ctrl_area->svm_instrs.instrs.MONITOR);
+ PrintDebug("\tMWAIT_always: %d\n", ctrl_area->svm_instrs.instrs.MWAIT_always);
+ PrintDebug("\tMWAIT_if_armed: %d\n", ctrl_area->svm_instrs.instrs.MWAIT_if_armed);
+
+
+
+ tmp_reg.r_reg = ctrl_area->IOPM_BASE_PA;
+ PrintDebug("IOPM_BASE_PA: lo: 0x%.8x, hi: 0x%.8x\n", tmp_reg.e_reg.low, tmp_reg.e_reg.high);
+ tmp_reg.r_reg = ctrl_area->MSRPM_BASE_PA;
+ PrintDebug("MSRPM_BASE_PA: lo: 0x%.8x, hi: 0x%.8x\n", tmp_reg.e_reg.low, tmp_reg.e_reg.high);
+ tmp_reg.r_reg = ctrl_area->TSC_OFFSET;
+ PrintDebug("TSC_OFFSET: lo: 0x%.8x, hi: 0x%.8x\n", tmp_reg.e_reg.low, tmp_reg.e_reg.high);
+
+ PrintDebug("guest_ASID: %d\n", ctrl_area->guest_ASID);
+ PrintDebug("TLB_CONTROL: %d\n", ctrl_area->TLB_CONTROL);
+
+
+ PrintDebug("Guest Control Bitmap: %x (at 0x%.8x)\n", ctrl_area->guest_ctrl.bitmap, &(ctrl_area->guest_ctrl));
+ PrintDebug("\tV_TPR: %d\n", ctrl_area->guest_ctrl.ctrls.V_TPR);
+ PrintDebug("\tV_IRQ: %d\n", ctrl_area->guest_ctrl.ctrls.V_IRQ);
+ PrintDebug("\tV_INTR_PRIO: %d\n", ctrl_area->guest_ctrl.ctrls.V_INTR_PRIO);
+ PrintDebug("\tV_IGN_TPR: %d\n", ctrl_area->guest_ctrl.ctrls.V_IGN_TPR);
+ PrintDebug("\tV_INTR_MASKING: %d\n", ctrl_area->guest_ctrl.ctrls.V_INTR_MASKING);
+ PrintDebug("\tV_INTR_VECTOR: %d\n", ctrl_area->guest_ctrl.ctrls.V_INTR_VECTOR);
+
+ PrintDebug("Interrupt_shadow: %d\n", ctrl_area->interrupt_shadow);
+
+
+ tmp_reg.r_reg = ctrl_area->exit_code;
+ PrintDebug("exit_code: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+ tmp_reg.r_reg = ctrl_area->exit_info1;
+ PrintDebug("exit_info1: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+ tmp_reg.r_reg = ctrl_area->exit_info2;
+ PrintDebug("exit_info2: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+
+ tmp_reg.r_reg = ctrl_area->exit_int_info;
+ PrintDebug("exit_int_info: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+
+
+ tmp_reg.r_reg = ctrl_area->NP_ENABLE;
+ PrintDebug("NP_ENABLE: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+
+ tmp_reg.r_reg = ctrl_area->EVENTINJ;
+ PrintDebug("EVENTINJ: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+
+
+ tmp_reg.r_reg = ctrl_area->N_CR3;
+ PrintDebug("N_CR3: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+
+ PrintDebug("LBR_VIRTUALIZATION_ENABLE: %d\n", ctrl_area->LBR_VIRTUALIZATION_ENABLE);
+
+
+ PrintDebug("\n--Guest Saved State--\n");
+
+ PrintDebug("es Selector (at 0x%.8x): \n", &(guest_area->es));
+ PrintDebug("\tSelector: %d\n", guest_area->es.selector);
+ PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n",
+ guest_area->es.attrib.fields.type, guest_area->es.attrib.fields.S,
+ guest_area->es.attrib.fields.dpl, guest_area->es.attrib.fields.P,
+ guest_area->es.attrib.fields.avl, guest_area->es.attrib.fields.L,
+ guest_area->es.attrib.fields.db, guest_area->es.attrib.fields.G);
+ PrintDebug("\tlimit: %lu\n", guest_area->es.limit);
+ tmp_reg.r_reg = guest_area->es.base;
+ PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+
+
+ PrintDebug("cs Selector (at 0x%.8x): \n", &(guest_area->cs));
+ PrintDebug("\tSelector: %d\n", guest_area->cs.selector);
+ PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n",
+ guest_area->cs.attrib.fields.type, guest_area->cs.attrib.fields.S,
+ guest_area->cs.attrib.fields.dpl, guest_area->cs.attrib.fields.P,
+ guest_area->cs.attrib.fields.avl, guest_area->cs.attrib.fields.L,
+ guest_area->cs.attrib.fields.db, guest_area->cs.attrib.fields.G);
+ PrintDebug("\tlimit: %lu\n", guest_area->cs.limit);
+ tmp_reg.r_reg = guest_area->cs.base;
+ PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+
+
+ PrintDebug("ss Selector (at 0x%.8x): \n", &(guest_area->ss));
+ PrintDebug("\tSelector: %d\n", guest_area->ss.selector);
+ PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n",
+ guest_area->ss.attrib.fields.type, guest_area->ss.attrib.fields.S,
+ guest_area->ss.attrib.fields.dpl, guest_area->ss.attrib.fields.P,
+ guest_area->ss.attrib.fields.avl, guest_area->ss.attrib.fields.L,
+ guest_area->ss.attrib.fields.db, guest_area->ss.attrib.fields.G);
+ PrintDebug("\tlimit: %lu\n", guest_area->ss.limit);
+ tmp_reg.r_reg = guest_area->ss.base;
+ PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+
+
+ PrintDebug("ds Selector (at 0x%.8x): \n", &(guest_area->ds));
+ PrintDebug("\tSelector: %d\n", guest_area->ds.selector);
+ PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n",
+ guest_area->ds.attrib.fields.type, guest_area->ds.attrib.fields.S,
+ guest_area->ds.attrib.fields.dpl, guest_area->ds.attrib.fields.P,
+ guest_area->ds.attrib.fields.avl, guest_area->ds.attrib.fields.L,
+ guest_area->ds.attrib.fields.db, guest_area->ds.attrib.fields.G);
+ PrintDebug("\tlimit: %lu\n", guest_area->ds.limit);
+ tmp_reg.r_reg = guest_area->ds.base;
+ PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+
+
+ PrintDebug("fs Selector (at 0x%.8x): \n", &(guest_area->fs));
+ PrintDebug("\tSelector: %d\n", guest_area->fs.selector);
+ PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n",
+ guest_area->fs.attrib.fields.type, guest_area->fs.attrib.fields.S,
+ guest_area->fs.attrib.fields.dpl, guest_area->fs.attrib.fields.P,
+ guest_area->fs.attrib.fields.avl, guest_area->fs.attrib.fields.L,
+ guest_area->fs.attrib.fields.db, guest_area->fs.attrib.fields.G);
+ PrintDebug("\tlimit: %lu\n", guest_area->fs.limit);
+ tmp_reg.r_reg = guest_area->fs.base;
+ PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+
+
+ PrintDebug("gs Selector (at 0x%.8x): \n", &(guest_area->gs));
+ PrintDebug("\tSelector: %d\n", guest_area->gs.selector);
+ PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n",
+ guest_area->gs.attrib.fields.type, guest_area->gs.attrib.fields.S,
+ guest_area->gs.attrib.fields.dpl, guest_area->gs.attrib.fields.P,
+ guest_area->gs.attrib.fields.avl, guest_area->gs.attrib.fields.L,
+ guest_area->gs.attrib.fields.db, guest_area->gs.attrib.fields.G);
+ PrintDebug("\tlimit: %lu\n", guest_area->gs.limit);
+ tmp_reg.r_reg = guest_area->gs.base;
+ PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+
+
+ PrintDebug("gdtr Selector (at 0x%.8x): \n", &(guest_area->gdtr));
+ PrintDebug("\tSelector: %d\n", guest_area->gdtr.selector);
+ PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n",
+ guest_area->gdtr.attrib.fields.type, guest_area->gdtr.attrib.fields.S,
+ guest_area->gdtr.attrib.fields.dpl, guest_area->gdtr.attrib.fields.P,
+ guest_area->gdtr.attrib.fields.avl, guest_area->gdtr.attrib.fields.L,
+ guest_area->gdtr.attrib.fields.db, guest_area->gdtr.attrib.fields.G);
+ PrintDebug("\tlimit: %lu\n", guest_area->gdtr.limit);
+ tmp_reg.r_reg = guest_area->gdtr.base;
+ PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+
+
+ PrintDebug("ldtr Selector (at 0x%.8x): \n", &(guest_area->ldtr));
+ PrintDebug("\tSelector: %d\n", guest_area->ldtr.selector);
+ PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n",
+ guest_area->ldtr.attrib.fields.type, guest_area->ldtr.attrib.fields.S,
+ guest_area->ldtr.attrib.fields.dpl, guest_area->ldtr.attrib.fields.P,
+ guest_area->ldtr.attrib.fields.avl, guest_area->ldtr.attrib.fields.L,
+ guest_area->ldtr.attrib.fields.db, guest_area->ldtr.attrib.fields.G);
+ PrintDebug("\tlimit: %lu\n", guest_area->ldtr.limit);
+ tmp_reg.r_reg = guest_area->ldtr.base;
+ PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+
+
+ PrintDebug("idtr Selector (at 0x%.8x): \n", &(guest_area->idtr));
+ PrintDebug("\tSelector: %d\n", guest_area->idtr.selector);
+ PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n",
+ guest_area->idtr.attrib.fields.type, guest_area->idtr.attrib.fields.S,
+ guest_area->idtr.attrib.fields.dpl, guest_area->idtr.attrib.fields.P,
+ guest_area->idtr.attrib.fields.avl, guest_area->idtr.attrib.fields.L,
+ guest_area->idtr.attrib.fields.db, guest_area->idtr.attrib.fields.G);
+ PrintDebug("\tlimit: %lu\n", guest_area->idtr.limit);
+ tmp_reg.r_reg = guest_area->idtr.base;
+ PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+
+
+ PrintDebug("tr Selector (at 0x%.8x): \n", &(guest_area->tr));
+ PrintDebug("\tSelector: %d\n", guest_area->tr.selector);
+ PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n",
+ guest_area->tr.attrib.fields.type, guest_area->tr.attrib.fields.S,
+ guest_area->tr.attrib.fields.dpl, guest_area->tr.attrib.fields.P,
+ guest_area->tr.attrib.fields.avl, guest_area->tr.attrib.fields.L,
+ guest_area->tr.attrib.fields.db, guest_area->tr.attrib.fields.G);
+ PrintDebug("\tlimit: %lu\n", guest_area->tr.limit);
+ tmp_reg.r_reg = guest_area->tr.base;
+ PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+
+
+ PrintDebug("cpl: %d\n", guest_area->cpl);
+
+
+ tmp_reg.r_reg = guest_area->efer;
+ PrintDebug("EFER: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+
+ tmp_reg.r_reg = guest_area->cr4;
+ PrintDebug("CR4: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+ tmp_reg.r_reg = guest_area->cr3;
+ PrintDebug("CR3: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+ tmp_reg.r_reg = guest_area->cr0;
+ PrintDebug("CR0: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+ tmp_reg.r_reg = guest_area->dr7;
+ PrintDebug("DR7: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+ tmp_reg.r_reg = guest_area->dr6;
+ PrintDebug("DR6: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+ tmp_reg.r_reg = guest_area->rflags;
+ PrintDebug("RFLAGS: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+ tmp_reg.r_reg = guest_area->rip;
+ PrintDebug("RIP: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+
+
+ tmp_reg.r_reg = guest_area->rsp;
+ PrintDebug("RSP: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+
+
+ tmp_reg.r_reg = guest_area->rax;
+ PrintDebug("RAX: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+ tmp_reg.r_reg = guest_area->star;
+ PrintDebug("STAR: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+ tmp_reg.r_reg = guest_area->lstar;
+ PrintDebug("LSTAR: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+ tmp_reg.r_reg = guest_area->cstar;
+ PrintDebug("CSTAR: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+ tmp_reg.r_reg = guest_area->sfmask;
+ PrintDebug("SFMASK: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+ tmp_reg.r_reg = guest_area->KernelGsBase;
+ PrintDebug("KernelGsBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+ tmp_reg.r_reg = guest_area->sysenter_cs;
+ PrintDebug("sysenter_cs: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+ tmp_reg.r_reg = guest_area->sysenter_esp;
+ PrintDebug("sysenter_esp: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+ tmp_reg.r_reg = guest_area->sysenter_eip;
+ PrintDebug("sysenter_eip: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+ tmp_reg.r_reg = guest_area->cr2;
+ PrintDebug("CR2: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+
+ tmp_reg.r_reg = guest_area->g_pat;
+ PrintDebug("g_pat: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+ tmp_reg.r_reg = guest_area->dbgctl;
+ PrintDebug("dbgctl: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+ tmp_reg.r_reg = guest_area->br_from;
+ PrintDebug("br_from: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+ tmp_reg.r_reg = guest_area->br_to;
+ PrintDebug("br_to: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+ tmp_reg.r_reg = guest_area->lastexcpfrom;
+ PrintDebug("lastexcpfrom: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+ tmp_reg.r_reg = guest_area->lastexcpto;
+ PrintDebug("lastexcpto: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low);
+
+
+
+
+
+
+}