Library mcertikos.proc.VVMXIntroCSource
Require Import Coqlib.
Require Import AST.
Require Import Integers.
Require Import Values.
Require Import Cop.
Require Import Clight.
Require Import CDataTypes.
Require Import Ctypes.
#define C_GUEST_EIP 8 #define C_GUEST_EFLAGS 9 #define C_GUEST_CR0 10 #define C_GUEST_CR2 11 #define C_GUEST_CR3 12 #define C_GUEST_CR4 13 #define VMX_G_RAX 0 #define VMX_G_RBX 2 #define VMX_G_RCX 4 #define VMX_G_RDX 6 #define VMX_G_RSI 8 #define VMX_G_RDI 10 #define VMX_G_RBP 12 #define VMX_G_RIP 14 #define VMX_G_CR2 16 #define C_VMCS_GUEST_RSP 26652 #define C_VMCS_GUEST_RFLAGS 26656 #define C_VMCS_GUEST_CR0 26624 #define C_VMCS_GUEST_CR3 26626 #define C_VMCS_GUEST_CR4 26628 extern unsigned int vmcs_readz(unsigned int); extern unsigned int vmx_readz(unsigned int); unsigned int vmx_get_reg(unsigned int reg) { unsigned int result; if (reg == C_GUEST_EAX) result = vmx_readz(VMX_G_RAX); else if (reg == C_GUEST_EBX) result = vmx_readz(VMX_G_RBX); else if (reg == C_GUEST_ECX) result = vmx_readz(VMX_G_RCX); else if (reg == C_GUEST_EDX) result = vmx_readz(VMX_G_RDX); else if (reg == C_GUEST_ESI) result = vmx_readz(VMX_G_RSI); else if (reg == C_GUEST_EDI) result = vmx_readz(VMX_G_RDI); else if (reg == C_GUEST_CR2) result = vmx_readz(VMX_G_CR2); else if (reg == C_GUEST_EBP) result = vmx_readz(VMX_G_RBP); else if (reg == C_GUEST_EIP) result = vmx_readz(VMX_G_RIP); else if (reg == C_GUEST_ESP) result = vmcs_readz(C_VMCS_GUEST_RSP); else if (reg == C_GUEST_EFLAGS) result = vmcs_readz(C_VMCS_GUEST_RFLAGS); else if (reg == C_GUEST_CR0) result = vmcs_readz(C_VMCS_GUEST_CR0); else if (reg == C_GUEST_CR3) result = vmcs_readz(C_VMCS_GUEST_CR3); else if (reg == C_GUEST_CR4) result = vmcs_readz(C_VMCS_GUEST_CR4); return result; }
Definition _reg := 1 % positive.
Definition _result := 2 % positive.
Definition vmx_get_reg_body :=
(Ssequence
(Sifthenelse (Ebinop Oeq (Etempvar _reg tint)
(Econst_int (Int.repr 0) tint) tint)
(Scall (Some _result)
(Evar vmx_readz (Tfunction (Tcons tint Tnil) tint cc_default))
((Econst_int (Int.repr 0) tint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tint)
(Econst_int (Int.repr 1) tint) tint)
(Scall (Some _result)
(Evar vmx_readz (Tfunction (Tcons tint Tnil) tint cc_default))
((Econst_int (Int.repr 2) tint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tint)
(Econst_int (Int.repr 2) tint) tint)
(Scall (Some _result)
(Evar vmx_readz (Tfunction (Tcons tint Tnil) tint cc_default))
((Econst_int (Int.repr 4) tint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tint)
(Econst_int (Int.repr 3) tint) tint)
(Scall (Some _result)
(Evar vmx_readz (Tfunction (Tcons tint Tnil) tint
cc_default))
((Econst_int (Int.repr 6) tint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tint)
(Econst_int (Int.repr 4) tint) tint)
(Scall (Some _result)
(Evar vmx_readz (Tfunction (Tcons tint Tnil) tint
cc_default))
((Econst_int (Int.repr 8) tint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tint)
(Econst_int (Int.repr 5) tint) tint)
(Scall (Some _result)
(Evar vmx_readz (Tfunction (Tcons tint Tnil) tint
cc_default))
((Econst_int (Int.repr 10) tint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tint)
(Econst_int (Int.repr 11) tint) tint)
(Scall (Some _result)
(Evar vmx_readz (Tfunction (Tcons tint Tnil) tint
cc_default))
((Econst_int (Int.repr 16) tint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tint)
(Econst_int (Int.repr 6) tint) tint)
(Scall (Some _result)
(Evar vmx_readz (Tfunction (Tcons tint Tnil) tint
cc_default))
((Econst_int (Int.repr 12) tint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tint)
(Econst_int (Int.repr 8) tint) tint)
(Scall (Some _result)
(Evar vmx_readz (Tfunction (Tcons tint Tnil) tint
cc_default))
((Econst_int (Int.repr 14) tint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tint)
(Econst_int (Int.repr 7) tint) tint)
(Scall (Some _result)
(Evar vmcs_readz (Tfunction (Tcons tint Tnil)
tint cc_default))
((Econst_int (Int.repr 26652) tint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tint)
(Econst_int (Int.repr 9) tint) tint)
(Scall (Some _result)
(Evar vmcs_readz (Tfunction (Tcons tint Tnil)
tint cc_default))
((Econst_int (Int.repr 26656) tint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tint)
(Econst_int (Int.repr 10) tint) tint)
(Scall (Some _result)
(Evar vmcs_readz (Tfunction (Tcons tint Tnil)
tint cc_default))
((Econst_int (Int.repr 26624) tint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tint)
(Econst_int (Int.repr 12) tint)
tint)
(Scall (Some _result)
(Evar vmcs_readz (Tfunction
(Tcons tint Tnil) tint
cc_default))
((Econst_int (Int.repr 26626) tint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tint)
(Econst_int (Int.repr 13) tint)
tint)
(Scall (Some _result)
(Evar vmcs_readz (Tfunction
(Tcons tint Tnil)
tint cc_default))
((Econst_int (Int.repr 26628) tint) :: nil))
Sskip))))))))))))))
(Sreturn (Some (Etempvar _result tint)))).
Definition f_vmx_get_reg := {|
fn_return := tint;
fn_callconv := cc_default;
fn_params := ((_reg, tint) :: nil);
fn_vars := nil;
fn_temps := ((_result, tint) :: nil);
fn_body := vmx_get_reg_body
|}.
#define C_GUEST_EIP 8 #define C_GUEST_EFLAGS 9 #define C_GUEST_CR0 10 #define C_GUEST_CR2 11 #define C_GUEST_CR3 12 #define C_GUEST_CR4 13 #define VMX_G_RAX 0 #define VMX_G_RBX 2 #define VMX_G_RCX 4 #define VMX_G_RDX 6 #define VMX_G_RSI 8 #define VMX_G_RDI 10 #define VMX_G_RBP 12 #define VMX_G_RIP 14 #define VMX_G_CR2 16 #define C_VMCS_GUEST_RSP 26652 #define C_VMCS_GUEST_RFLAGS 26656 #define C_VMCS_GUEST_CR0 26624 #define C_VMCS_GUEST_CR3 26626 #define C_VMCS_GUEST_CR4 26628 extern void vmcs_writez(unsigned int, unsigned int); extern void vmx_writez(unsigned int, unsigned int); void vmx_set_reg(unsigned int reg, unsigned int val) { if (reg == C_GUEST_EAX) vmx_writez(VMX_G_RAX, val); else if (reg == C_GUEST_EBX) vmx_writez(VMX_G_RBX, val); else if (reg == C_GUEST_ECX) vmx_writez(VMX_G_RCX, val); else if (reg == C_GUEST_EDX) vmx_writez(VMX_G_RDX, val); else if (reg == C_GUEST_ESI) vmx_writez(VMX_G_RSI, val); else if (reg == C_GUEST_EDI) vmx_writez(VMX_G_RDI, val); else if (reg == C_GUEST_CR2) vmx_writez(VMX_G_CR2, val); else if (reg == C_GUEST_EBP) vmx_writez(VMX_G_RBP, val); else if (reg == C_GUEST_EIP) vmx_writez(VMX_G_RIP, val); else if (reg == C_GUEST_ESP) vmcs_writez(C_VMCS_GUEST_RSP, val); else if (reg == C_GUEST_EFLAGS) vmcs_writez(C_VMCS_GUEST_RFLAGS, val); else if (reg == C_GUEST_CR0) vmcs_writez(C_VMCS_GUEST_CR0, val); else if (reg == C_GUEST_CR3) vmcs_writez(C_VMCS_GUEST_CR3, val); else if (reg == C_GUEST_CR4) vmcs_writez(C_VMCS_GUEST_CR4, val); }
Definition _val := 3 % positive.
Definition vmx_set_reg_body :=
(Sifthenelse (Ebinop Oeq (Etempvar _reg tuint) (Econst_int (Int.repr 0) tint)
tint)
(Scall None
(Evar vmx_writez (Tfunction (Tcons tuint (Tcons tuint Tnil)) tvoid
cc_default))
((Econst_int (Int.repr 0) tint) :: (Etempvar _val tuint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tuint)
(Econst_int (Int.repr 1) tint) tint)
(Scall None
(Evar vmx_writez (Tfunction (Tcons tuint (Tcons tuint Tnil)) tvoid
cc_default))
((Econst_int (Int.repr 2) tint) :: (Etempvar _val tuint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tuint)
(Econst_int (Int.repr 2) tint) tint)
(Scall None
(Evar vmx_writez (Tfunction (Tcons tuint (Tcons tuint Tnil)) tvoid
cc_default))
((Econst_int (Int.repr 4) tint) :: (Etempvar _val tuint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tuint)
(Econst_int (Int.repr 3) tint) tint)
(Scall None
(Evar vmx_writez (Tfunction (Tcons tuint (Tcons tuint Tnil)) tvoid
cc_default))
((Econst_int (Int.repr 6) tint) :: (Etempvar _val tuint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tuint)
(Econst_int (Int.repr 4) tint) tint)
(Scall None
(Evar vmx_writez (Tfunction (Tcons tuint (Tcons tuint Tnil))
tvoid cc_default))
((Econst_int (Int.repr 8) tint) :: (Etempvar _val tuint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tuint)
(Econst_int (Int.repr 5) tint) tint)
(Scall None
(Evar vmx_writez (Tfunction (Tcons tuint (Tcons tuint Tnil))
tvoid cc_default))
((Econst_int (Int.repr 10) tint) :: (Etempvar _val tuint) ::
nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tuint)
(Econst_int (Int.repr 11) tint) tint)
(Scall None
(Evar vmx_writez (Tfunction (Tcons tuint (Tcons tuint Tnil))
tvoid cc_default))
((Econst_int (Int.repr 16) tint) :: (Etempvar _val tuint) ::
nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tuint)
(Econst_int (Int.repr 6) tint) tint)
(Scall None
(Evar vmx_writez (Tfunction
(Tcons tuint (Tcons tuint Tnil)) tvoid
cc_default))
((Econst_int (Int.repr 12) tint) ::
(Etempvar _val tuint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tuint)
(Econst_int (Int.repr 8) tint) tint)
(Scall None
(Evar vmx_writez (Tfunction
(Tcons tuint (Tcons tuint Tnil))
tvoid cc_default))
((Econst_int (Int.repr 14) tint) ::
(Etempvar _val tuint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tuint)
(Econst_int (Int.repr 7) tint) tint)
(Scall None
(Evar vmcs_writez (Tfunction
(Tcons tuint (Tcons tuint Tnil))
tvoid cc_default))
((Econst_int (Int.repr 26652) tint) ::
(Etempvar _val tuint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tuint)
(Econst_int (Int.repr 9) tint) tint)
(Scall None
(Evar vmcs_writez (Tfunction
(Tcons tuint (Tcons tuint Tnil))
tvoid cc_default))
((Econst_int (Int.repr 26656) tint) ::
(Etempvar _val tuint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tuint)
(Econst_int (Int.repr 10) tint) tint)
(Scall None
(Evar vmcs_writez (Tfunction
(Tcons tuint
(Tcons tuint Tnil)) tvoid
cc_default))
((Econst_int (Int.repr 26624) tint) ::
(Etempvar _val tuint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tuint)
(Econst_int (Int.repr 12) tint) tint)
(Scall None
(Evar vmcs_writez (Tfunction
(Tcons tuint
(Tcons tuint Tnil)) tvoid
cc_default))
((Econst_int (Int.repr 26626) tint) ::
(Etempvar _val tuint) :: nil))
(Sifthenelse (Ebinop Oeq (Etempvar _reg tuint)
(Econst_int (Int.repr 13) tint)
tint)
(Scall None
(Evar vmcs_writez (Tfunction
(Tcons tuint
(Tcons tuint Tnil))
tvoid cc_default))
((Econst_int (Int.repr 26628) tint) ::
(Etempvar _val tuint) :: nil))
Sskip)))))))))))))).
Definition f_vmx_set_reg := {|
fn_return := tvoid;
fn_callconv := cc_default;
fn_params := ((_reg, tuint) :: (_val, tuint) :: nil);
fn_vars := nil;
fn_temps := nil;
fn_body := vmx_set_reg_body
|}.
#define VMX_G_RIP 14 #define VMCS_EXIT_ITRUCTION_LENGTH 17420 extern unsigned int vmcs_readz(unsigned int); extern unsigned int vmx_readz(unsigned int); unsigned int vmx_get_next_eip() { return vmx_readz(VMX_G_RIP) + vmcs_readz(VMCS_EXIT_ITRUCTION_LENGTH); }
Definition _grip := 4 % positive.
Definition _exit_instruction_length := 5 % positive.
Definition vmx_get_next_eip_body :=
(Ssequence
(Ssequence
(Scall (Some _grip)
(Evar vmx_readz (Tfunction (Tcons tuint Tnil) tuint cc_default))
((Econst_int (Int.repr 14) tint) :: nil))
(Scall (Some _exit_instruction_length)
(Evar vmcs_readz (Tfunction (Tcons tuint Tnil) tuint cc_default))
((Econst_int (Int.repr 17420) tint) :: nil)))
(Sreturn (Some (Ebinop Oadd (Etempvar _grip tuint)
(Etempvar _exit_instruction_length tuint) tuint)))).
Definition f_vmx_get_next_eip := {|
fn_return := tuint;
fn_callconv := cc_default;
fn_params := nil;
fn_vars := nil;
fn_temps := ((_grip, tuint) :: (_exit_instruction_length, tuint) :: nil);
fn_body := vmx_get_next_eip_body
|}.
#define VMX_EXIT_QUALIFICATION 28 #define EXIT_QUAL_IO_ONE_BYTE 0 #define EXIT_QUAL_IO_TWO_BYTE 1 #define EXIT_QUAL_IO_FOUR_BYTE 3 #define SZ8 0 #define SZ16 1 #define SZ32 2 extern unsigned int vmx_readz(unsigned int); unsigned int vmx_get_exit_qualification() { return vmx_readz(VMX_EXIT_QUALIFICATION); }
Definition vmx_get_exit_qualification_body :=
(Ssequence
(Scall (Some 36%positive)
(Evar vmx_readz (Tfunction (Tcons tuint Tnil) tuint cc_default))
((Econst_int (Int.repr 28) tint) :: nil))
(Sreturn (Some (Etempvar 36%positive tuint)))).
Definition f_vmx_get_exit_qualification := {|
fn_return := tuint;
fn_callconv := cc_default;
fn_params := nil;
fn_vars := nil;
fn_temps := ((36%positive, tuint) :: nil);
fn_body := vmx_get_exit_qualification_body
|}.
#define VMX_EXIT_QUALIFICATION 28 #define EXIT_QUAL_IO_ONE_BYTE 0 #define EXIT_QUAL_IO_TWO_BYTE 1 #define EXIT_QUAL_IO_FOUR_BYTE 3 #define SZ8 0 #define SZ16 1 #define SZ32 2 extern unsigned int vmx_readz(unsigned int); unsigned int vmx_get_io_width() { unsigned int eq; unsigned int width; eq = vmx_readz(VMX_EXIT_QUALIFICATION); eq = eq & 7; if (eq == EXIT_QUAL_IO_ONE_BYTE) width = SZ8; else if (eq == EXIT_QUAL_IO_TWO_BYTE) width = SZ16; else width = SZ32; return width; }
Definition _eq := 6 % positive.
Definition _width := 7 % positive.
Definition vmx_get_io_width_body :=
(Ssequence
(Scall (Some _eq)
(Evar vmx_readz (Tfunction (Tcons tuint Tnil) tuint cc_default))
((Econst_int (Int.repr 28) tint) :: nil))
(Ssequence
(Sset _eq
(Ebinop Oand (Etempvar _eq tuint) (Econst_int (Int.repr 7) tint) tuint))
(Ssequence
(Sifthenelse (Ebinop Oeq (Etempvar _eq tuint)
(Econst_int (Int.repr 0) tint) tint)
(Sset _width (Econst_int (Int.repr 0) tint))
(Sifthenelse (Ebinop Oeq (Etempvar _eq tuint)
(Econst_int (Int.repr 1) tint) tint)
(Sset _width (Econst_int (Int.repr 1) tint))
(Sset _width (Econst_int (Int.repr 2) tint))))
(Sreturn (Some (Etempvar _width tuint)))))).
Definition f_vmx_get_io_width := {|
fn_return := tuint;
fn_callconv := cc_default;
fn_params := nil;
fn_vars := nil;
fn_temps := ((_eq, tuint) :: (_width, tuint) :: nil);
fn_body := vmx_get_io_width_body
|}.
#define VMX_EXIT_QUALIFICATION 28 #define EXIT_QUAL_IO_OUT 0 #define EXIT_QUAL_IO_IN 1 extern unsigned int vmx_readz(unsigned int); unsigned int vmx_get_io_write() { unsigned int eq; unsigned int write; eq = vmx_readz(VMX_EXIT_QUALIFICATION); if (((eq3) & 1) == EXIT_QUAL_IO_IN) write = 0; else write = 1; return write; } >>
Definition _write := 8 % positive.
Definition vmx_get_io_write_body :=
(Ssequence
(Scall (Some _eq)
(Evar vmx_readz (Tfunction (Tcons tuint Tnil) tuint cc_default))
((Econst_int (Int.repr 28) tint) :: nil))
(Ssequence
(Sifthenelse (Ebinop Oeq
(Ebinop Oand
(Ebinop Oshr (Etempvar _eq tuint)
(Econst_int (Int.repr 3) tint) tuint)
(Econst_int (Int.repr 1) tint) tuint)
(Econst_int (Int.repr 1) tint) tint)
(Sset _write (Econst_int (Int.repr 0) tint))
(Sset _write (Econst_int (Int.repr 1) tint)))
(Sreturn (Some (Etempvar _write tuint))))).
Definition f_vmx_get_io_write := {|
fn_return := tuint;
fn_callconv := cc_default;
fn_params := nil;
fn_vars := nil;
fn_temps := ((_eq, tuint) :: (_write, tuint) :: nil);
fn_body := vmx_get_io_write_body
|}.
#define VMX_EXIT_QUALIFICATION 28 extern unsigned int vmx_readz(unsigned int); unsigned int vmx_get_exit_io_rep() { unsigned int eq; unsigned int rep; eq = vmx_readz(VMX_EXIT_QUALIFICATION); rep = (eq5) & 1; return rep; } >>
Definition _rep := 9 % positive.
Definition vmx_get_exit_io_rep_body :=
(Ssequence
(Scall (Some _eq)
(Evar vmx_readz (Tfunction (Tcons tuint Tnil) tuint cc_default))
((Econst_int (Int.repr 28) tint) :: nil))
(Ssequence
(Sset _rep
(Ebinop Oand
(Ebinop Oshr (Etempvar _eq tuint) (Econst_int (Int.repr 5) tint)
tuint) (Econst_int (Int.repr 1) tint) tuint))
(Sreturn (Some (Etempvar _rep tuint))))).
Definition f_vmx_get_exit_io_rep := {|
fn_return := tuint;
fn_callconv := cc_default;
fn_params := nil;
fn_vars := nil;
fn_temps := ((_eq, tuint) :: (_rep, tuint) :: nil);
fn_body := vmx_get_exit_io_rep_body
|}.
#define VMX_EXIT_QUALIFICATION 28 extern unsigned int vmx_readz(unsigned int); unsigned int vmx_get_exit_io_str() { unsigned int eq; unsigned int str; eq = vmx_readz(VMX_EXIT_QUALIFICATION); str = (eq4) & 1; return str; } >>
Definition _str := 10 % positive.
Definition vmx_get_exit_io_str_body :=
(Ssequence
(Scall (Some _eq)
(Evar vmx_readz (Tfunction (Tcons tuint Tnil) tuint cc_default))
((Econst_int (Int.repr 28) tint) :: nil))
(Ssequence
(Sset _str
(Ebinop Oand
(Ebinop Oshr (Etempvar _eq tuint) (Econst_int (Int.repr 4) tint)
tuint) (Econst_int (Int.repr 1) tint) tuint))
(Sreturn (Some (Etempvar _str tuint))))).
Definition f_vmx_get_exit_io_str := {|
fn_return := tuint;
fn_callconv := cc_default;
fn_params := nil;
fn_vars := nil;
fn_temps := ((_eq, tuint) :: (_str, tuint) :: nil);
fn_body := vmx_get_exit_io_str_body
|}.
#define VMX_EXIT_QUALIFICATION 28 #define C_EXIT_QUAL_IO_PORT 65536 extern unsigned int vmx_readz(unsigned int); unsigned int vmx_get_exit_io_port() { unsigned int eq; eq = vmx_readz(VMX_EXIT_QUALIFICATION); return eq / C_EXIT_QUAL_IO_PORT; }
Definition vmx_get_exit_io_port_body :=
(Ssequence
(Scall (Some _eq)
(Evar vmx_readz (Tfunction (Tcons tuint Tnil) tuint cc_default))
((Econst_int (Int.repr 28) tint) :: nil))
(Sreturn (Some (Ebinop Odiv (Etempvar _eq tuint)
(Econst_int (Int.repr 65536) tuint) tuint)))).
Definition f_vmx_get_exit_io_port := {|
fn_return := tuint;
fn_callconv := cc_default;
fn_params := nil;
fn_vars := nil;
fn_temps := ((_eq, tuint) :: nil);
fn_body := vmx_get_exit_io_port_body
|}.
extern unsigned int ept_add_mapping(unsigned int, unsigned int, unsigned int); extern unsigned int ept_invalidate_mappings(void); unsigned int vmx_set_mmap(unsigned int gpa, unsigned int hpa, unsigned int mem_type) { unsigned int rc; rc = ept_add_mapping(gpa, hpa, mem_type); if (rc == 0) rc = ept_invalidate_mappings(); return rc; }
Definition _gpa := 11 % positive.
Definition _hpa := 12 % positive.
Definition _mem_type := 13 % positive.
Definition _rc := 14 % positive.
Definition vmx_set_mmap_body :=
(Ssequence
(Scall (Some _rc)
(Evar ept_add_mapping (Tfunction
(Tcons tuint (Tcons tuint (Tcons tuint Tnil)))
tuint cc_default))
((Etempvar _gpa tuint) :: (Etempvar _hpa tuint) ::
(Etempvar _mem_type tuint) :: nil))
(Ssequence
(Sifthenelse (Ebinop Oeq (Etempvar _rc tuint)
(Econst_int (Int.repr 0) tint) tint)
(Scall (Some _rc)
(Evar ept_invalidate_mappings (Tfunction Tnil tuint cc_default))
nil)
Sskip)
(Sreturn (Some (Etempvar _rc tuint)))))
.
Definition f_vmx_set_mmap := {|
fn_return := tuint;
fn_callconv := cc_default;
fn_params := ((_gpa, tuint) :: (_hpa, tuint) :: (_mem_type, tuint) :: nil);
fn_vars := nil;
fn_temps := ((_rc, tuint) :: nil);
fn_body := vmx_set_mmap_body
|}.
#define VMX_G_RIP 14 #define VMX_VPID 26 #define VMX_G_CR2 16 #define VMX_G_DR0 17 #define VMX_G_DR1 18 #define VMX_G_DR2 19 #define VMX_G_DR3 20 #define VMX_G_DR6 21 extern void vmcs_set_defaults(void); extern void vmx_writez(unsigned int, unsigned int); void vmx_init(unsigned int mbi_adr) { vmcs_set_defaults(); vmx_writez(VMX_G_RIP, 0xfff0); vmx_writez(VMX_VPID, 1); vmx_writez(VMX_G_CR2, 0); vmx_writez(VMX_G_DR0, 0); vmx_writez(VMX_G_DR1, 0); vmx_writez(VMX_G_DR2, 0); vmx_writez(VMX_G_DR3, 0); vmx_writez(VMX_G_DR6, 0xffff0ff0); }
Definition vmx_init_body :=
(Ssequence
(Scall None
(Evar vmcs_set_defaults (Tfunction Tnil tvoid cc_default)) nil)
(Ssequence
(Scall None
(Evar vmx_writez (Tfunction (Tcons tuint (Tcons tuint Tnil)) tvoid
cc_default))
((Econst_int (Int.repr 14) tint) ::
(Econst_int (Int.repr 65520) tint) :: nil))
(Ssequence
(Scall None
(Evar vmx_writez (Tfunction (Tcons tuint (Tcons tuint Tnil)) tvoid
cc_default))
((Econst_int (Int.repr 26) tint) :: (Econst_int (Int.repr 1) tint) ::
nil))
(Ssequence
(Scall None
(Evar vmx_writez (Tfunction (Tcons tuint (Tcons tuint Tnil)) tvoid
cc_default))
((Econst_int (Int.repr 16) tint) ::
(Econst_int (Int.repr 0) tint) :: nil))
(Ssequence
(Scall None
(Evar vmx_writez (Tfunction (Tcons tuint (Tcons tuint Tnil))
tvoid cc_default))
((Econst_int (Int.repr 17) tint) ::
(Econst_int (Int.repr 0) tint) :: nil))
(Ssequence
(Scall None
(Evar vmx_writez (Tfunction (Tcons tuint (Tcons tuint Tnil))
tvoid cc_default))
((Econst_int (Int.repr 18) tint) ::
(Econst_int (Int.repr 0) tint) :: nil))
(Ssequence
(Scall None
(Evar vmx_writez (Tfunction (Tcons tuint (Tcons tuint Tnil))
tvoid cc_default))
((Econst_int (Int.repr 19) tint) ::
(Econst_int (Int.repr 0) tint) :: nil))
(Ssequence
(Scall None
(Evar vmx_writez (Tfunction
(Tcons tuint (Tcons tuint Tnil)) tvoid
cc_default))
((Econst_int (Int.repr 20) tint) ::
(Econst_int (Int.repr 0) tint) :: nil))
(Scall None
(Evar vmx_writez (Tfunction
(Tcons tuint (Tcons tuint Tnil)) tvoid
cc_default))
((Econst_int (Int.repr 21) tint) ::
(Econst_int (Int.repr (4294905840)) tuint) :: nil)))))))))).
Definition f_vmx_init := {|
fn_return := tvoid;
fn_callconv := cc_default;
fn_params := nil;
fn_vars := nil;
fn_temps := nil;
fn_body := vmx_init_body
|}.