Module: Hypervisor
- Defined in:
- lib/hypervisor.rb,
lib/hypervisor/vcpu.rb,
lib/hypervisor/version.rb,
lib/hypervisor/constants.rb,
lib/hypervisor/framework.rb
Defined Under Namespace
Modules: Framework
Classes: VCPU
Constant Summary
collapse
- VERSION =
"0.1.0"
- SUCCESS =
0
- ERROR =
0xfae94001
- BUSY =
0xfae94002
- BAD_ARGUMENT =
0xfae94003
- NO_RESOURCES =
0xfae94005
- NO_DEVICE =
0xfae94006
- UNSUPPORTED =
0xfae9400f
- VM_DEFAULT =
0
- VM_SPECIFY_MITIGATIONS =
1 << 0
- VM_MITIGATION_A_ENABLE =
1 << 1
- VM_MITIGATION_B_ENABLE =
1 << 2
- VM_MITIGATION_C_ENABLE =
1 << 3
- VM_MITIGATION_D_ENABLE =
1 << 4
- VCPU_DEFAULT =
0
- MEMORY_READ =
1 << 0
- MEMORY_WRITE =
1 << 1
- MEMORY_EXEC =
1 << 2
- X86_RIP =
0
- X86_RFLAGS =
1
- X86_RAX =
2
- X86_RCX =
3
- X86_RDX =
4
- X86_RBX =
5
- X86_RSI =
6
- X86_RDI =
7
- X86_RSP =
8
- X86_RBP =
9
- X86_R8 =
10
- X86_R9 =
11
- X86_R10 =
12
- X86_R11 =
13
- X86_R12 =
14
- X86_R13 =
15
- X86_R14 =
16
- X86_R15 =
17
- X86_CS =
18
- X86_SS =
19
- X86_DS =
20
- X86_ES =
21
- X86_FS =
22
- X86_GS =
23
- X86_IDT_BASE =
24
- X86_IDT_LIMIT =
25
- X86_GDT_BASE =
26
- X86_GDT_LIMIT =
27
- X86_LDTR =
28
- X86_LDT_BASE =
29
- X86_LDT_LIMIT =
30
- X86_LDT_AR =
31
- X86_TR =
32
- X86_TSS_BASE =
33
- X86_TSS_LIMIT =
34
- X86_TSS_AR =
35
- X86_CR0 =
36
- X86_CR1 =
37
- X86_CR2 =
38
- X86_CR3 =
39
- X86_CR4 =
40
- X86_DR0 =
41
- X86_DR1 =
42
- X86_DR2 =
43
- X86_DR3 =
44
- X86_DR4 =
45
- X86_DR5 =
46
- X86_DR6 =
47
- X86_DR7 =
48
- X86_TPR =
49
- X86_XCR0 =
50
- VMX_CAP_PINBASED =
0
- VMX_CAP_PROCBASED =
1
- VMX_CAP_PROCBASED2 =
2
- VMX_CAP_ENTRY =
3
- VMX_CAP_EXIT =
4
- VMX_CAP_PREEMPTION_TIMER =
32
- VMCS_VPID =
0x00000000
- VMCS_CTRL_POSTED_INT_N_VECTOR =
0x00000002
- VMCS_CTRL_EPTP_INDEX =
0x00000004
- VMCS_GUEST_ES =
0x00000800
- VMCS_GUEST_CS =
0x00000802
- VMCS_GUEST_SS =
0x00000804
- VMCS_GUEST_DS =
0x00000806
- VMCS_GUEST_FS =
0x00000808
- VMCS_GUEST_GS =
0x0000080a
- VMCS_GUEST_LDTR =
0x0000080c
- VMCS_GUEST_TR =
0x0000080e
- VMCS_GUEST_INT_STATUS =
0x00000810
- VMCS_HOST_ES =
0x00000c00
- VMCS_HOST_CS =
0x00000c02
- VMCS_HOST_SS =
0x00000c04
- VMCS_HOST_DS =
0x00000c06
- VMCS_HOST_FS =
0x00000c08
- VMCS_HOST_GS =
0x00000c0a
- VMCS_HOST_TR =
0x00000c0c
- VMCS_CTRL_IO_BITMAP_A =
0x00002000
- VMCS_CTRL_IO_BITMAP_B =
0x00002002
- VMCS_CTRL_MSR_BITMAPS =
0x00002004
- VMCS_CTRL_VMEXIT_MSR_STORE_ADDR =
0x00002006
- VMCS_CTRL_VMEXIT_MSR_LOAD_ADDR =
0x00002008
- VMCS_CTRL_VMENTRY_MSR_LOAD_ADDR =
0x0000200a
- VMCS_CTRL_EXECUTIVE_VMCS_PTR =
0x0000200c
- VMCS_CTRL_TSC_OFFSET =
0x00002010
- VMCS_CTRL_VIRTUAL_APIC =
0x00002012
- VMCS_CTRL_APIC_ACCESS =
0x00002014
- VMCS_CTRL_POSTED_INT_DESC_ADDR =
0x00002016
- VMCS_CTRL_VMFUNC_CTRL =
0x00002018
- VMCS_CTRL_EPTP =
0x0000201a
- VMCS_CTRL_EOI_EXIT_BITMAP_0 =
0x0000201c
- VMCS_CTRL_EOI_EXIT_BITMAP_1 =
0x0000201e
- VMCS_CTRL_EOI_EXIT_BITMAP_2 =
0x00002020
- VMCS_CTRL_EOI_EXIT_BITMAP_3 =
0x00002022
- VMCS_CTRL_EPTP_LIST_ADDR =
0x00002024
- VMCS_CTRL_VMREAD_BITMAP_ADDR =
0x00002026
- VMCS_CTRL_VMWRITE_BITMAP_ADDR =
0x00002028
- VMCS_CTRL_VIRT_EXC_INFO_ADDR =
0x0000202a
- VMCS_CTRL_XSS_EXITING_BITMAP =
0x0000202c
- VMCS_GUEST_PHYSICAL_ADDRESS =
0x00002400
- VMCS_GUEST_LINK_POINTER =
0x00002800
- VMCS_GUEST_IA32_DEBUGCTL =
0x00002802
- VMCS_GUEST_IA32_PAT =
0x00002804
- VMCS_GUEST_IA32_EFER =
0x00002806
- VMCS_GUEST_IA32_PERF_GLOBAL_CTRL =
0x00002808
- VMCS_GUEST_PDPTE0 =
0x0000280a
- VMCS_GUEST_PDPTE1 =
0x0000280c
- VMCS_GUEST_PDPTE2 =
0x0000280e
- VMCS_GUEST_PDPTE3 =
0x00002810
- VMCS_HOST_IA32_PAT =
0x00002c00
- VMCS_HOST_IA32_EFER =
0x00002c02
- VMCS_HOST_IA32_PERF_GLOBAL_CTRL =
0x00002c04
- VMCS_CTRL_PIN_BASED =
0x00004000
- VMCS_CTRL_CPU_BASED =
0x00004002
- VMCS_CTRL_EXC_BITMAP =
0x00004004
- VMCS_CTRL_PF_ERROR_MASK =
0x00004006
- VMCS_CTRL_PF_ERROR_MATCH =
0x00004008
- VMCS_CTRL_CR3_COUNT =
0x0000400a
- VMCS_CTRL_VMEXIT_CONTROLS =
0x0000400c
- VMCS_CTRL_VMEXIT_MSR_STORE_COUNT =
0x0000400e
- VMCS_CTRL_VMEXIT_MSR_LOAD_COUNT =
0x00004010
- VMCS_CTRL_VMENTRY_CONTROLS =
0x00004012
- VMCS_CTRL_VMENTRY_MSR_LOAD_COUNT =
0x00004014
- VMCS_CTRL_VMENTRY_IRQ_INFO =
0x00004016
- VMCS_CTRL_VMENTRY_EXC_ERROR =
0x00004018
- VMCS_CTRL_VMENTRY_INSTR_LEN =
0x0000401a
- VMCS_CTRL_TPR_THRESHOLD =
0x0000401c
- VMCS_CTRL_CPU_BASED2 =
0x0000401e
- VMCS_CTRL_PLE_GAP =
0x00004020
- VMCS_CTRL_PLE_WINDOW =
0x00004022
- VMCS_RO_INSTR_ERROR =
0x00004400
- VMCS_RO_EXIT_REASON =
0x00004402
- VMCS_RO_VMEXIT_IRQ_INFO =
0x00004404
- VMCS_RO_VMEXIT_IRQ_ERROR =
0x00004406
- VMCS_RO_IDT_VECTOR_INFO =
0x00004408
- VMCS_RO_IDT_VECTOR_ERROR =
0x0000440a
- VMCS_RO_VMEXIT_INSTR_LEN =
0x0000440c
- VMCS_RO_VMX_INSTR_INFO =
0x0000440e
- VMCS_GUEST_ES_LIMIT =
0x00004800
- VMCS_GUEST_CS_LIMIT =
0x00004802
- VMCS_GUEST_SS_LIMIT =
0x00004804
- VMCS_GUEST_DS_LIMIT =
0x00004806
- VMCS_GUEST_FS_LIMIT =
0x00004808
- VMCS_GUEST_GS_LIMIT =
0x0000480a
- VMCS_GUEST_LDTR_LIMIT =
0x0000480c
- VMCS_GUEST_TR_LIMIT =
0x0000480e
- VMCS_GUEST_GDTR_LIMIT =
0x00004810
- VMCS_GUEST_IDTR_LIMIT =
0x00004812
- VMCS_GUEST_ES_AR =
0x00004814
- VMCS_GUEST_CS_AR =
0x00004816
- VMCS_GUEST_SS_AR =
0x00004818
- VMCS_GUEST_DS_AR =
0x0000481a
- VMCS_GUEST_FS_AR =
0x0000481c
- VMCS_GUEST_GS_AR =
0x0000481e
- VMCS_GUEST_LDTR_AR =
0x00004820
- VMCS_GUEST_TR_AR =
0x00004822
- VMCS_GUEST_IGNORE_IRQ =
0x00004824
- VMCS_GUEST_ACTIVITY_STATE =
0x00004826
- VMCS_GUEST_SMBASE =
0x00004828
- VMCS_GUEST_IA32_SYSENTER_CS =
0x0000482a
- VMCS_GUEST_VMX_TIMER_VALUE =
0x0000482e
- VMCS_HOST_IA32_SYSENTER_CS =
0x00004c00
- VMCS_CTRL_CR0_MASK =
0x00006000
- VMCS_CTRL_CR4_MASK =
0x00006002
- VMCS_CTRL_CR0_SHADOW =
0x00006004
- VMCS_CTRL_CR4_SHADOW =
0x00006006
- VMCS_CTRL_CR3_VALUE0 =
0x00006008
- VMCS_CTRL_CR3_VALUE1 =
0x0000600a
- VMCS_CTRL_CR3_VALUE2 =
0x0000600c
- VMCS_CTRL_CR3_VALUE3 =
0x0000600e
- VMCS_RO_EXIT_QUALIFIC =
0x00006400
- VMCS_RO_IO_RCX =
0x00006402
- VMCS_RO_IO_RSI =
0x00006404
- VMCS_RO_IO_RDI =
0x00006406
- VMCS_RO_IO_RIP =
0x00006408
- VMCS_RO_GUEST_LIN_ADDR =
0x0000640a
- VMCS_GUEST_CR0 =
0x00006800
- VMCS_GUEST_CR3 =
0x00006802
- VMCS_GUEST_CR4 =
0x00006804
- VMCS_GUEST_ES_BASE =
0x00006806
- VMCS_GUEST_CS_BASE =
0x00006808
- VMCS_GUEST_SS_BASE =
0x0000680a
- VMCS_GUEST_DS_BASE =
0x0000680c
- VMCS_GUEST_FS_BASE =
0x0000680e
- VMCS_GUEST_GS_BASE =
0x00006810
- VMCS_GUEST_LDTR_BASE =
0x00006812
- VMCS_GUEST_TR_BASE =
0x00006814
- VMCS_GUEST_GDTR_BASE =
0x00006816
- VMCS_GUEST_IDTR_BASE =
0x00006818
- VMCS_GUEST_DR7 =
0x0000681a
- VMCS_GUEST_RSP =
0x0000681c
- VMCS_GUEST_RIP =
0x0000681e
- VMCS_GUEST_RFLAGS =
0x00006820
- VMCS_GUEST_DEBUG_EXC =
0x00006822
- VMCS_GUEST_SYSENTER_ESP =
0x00006824
- VMCS_GUEST_SYSENTER_EIP =
0x00006826
- VMCS_HOST_CR0 =
0x00006c00
- VMCS_HOST_CR3 =
0x00006c02
- VMCS_HOST_CR4 =
0x00006c04
- VMCS_HOST_FS_BASE =
0x00006c06
- VMCS_HOST_GS_BASE =
0x00006c08
- VMCS_HOST_TR_BASE =
0x00006c0a
- VMCS_HOST_GDTR_BASE =
0x00006c0c
- VMCS_HOST_IDTR_BASE =
0x00006c0e
- VMCS_HOST_IA32_SYSENTER_ESP =
0x00006c10
- VMCS_HOST_IA32_SYSENTER_EIP =
0x00006c12
- VMCS_HOST_RSP =
0x00006c14
- VMCS_HOST_RIP =
0x00006c16
- VMCS_MAX =
0x00006c18
- VMX_BASIC_TRUE_CTLS =
1 << 55
- PIN_BASED_INTR =
1 << 0
- PIN_BASED_NMI =
1 << 3
- PIN_BASED_VIRTUAL_NMI =
1 << 5
- PIN_BASED_PREEMPTION_TIMER =
1 << 6
- PIN_BASED_POSTED_INTR =
1 << 7
- CPU_BASED_IRQ_WND =
1 << 2
- CPU_BASED_TSC_OFFSET =
1 << 3
- CPU_BASED_HLT =
1 << 7
- CPU_BASED_INVLPG =
1 << 9
- CPU_BASED_MWAIT =
1 << 10
- CPU_BASED_RDPMC =
1 << 11
- CPU_BASED_RDTSC =
1 << 12
- CPU_BASED_CR3_LOAD =
1 << 15
- CPU_BASED_CR3_STORE =
1 << 16
- CPU_BASED_CR8_LOAD =
1 << 19
- CPU_BASED_CR8_STORE =
1 << 20
- CPU_BASED_TPR_SHADOW =
1 << 21
- CPU_BASED_VIRTUAL_NMI_WND =
1 << 22
- CPU_BASED_MOV_DR =
1 << 23
- CPU_BASED_UNCOND_IO =
1 << 24
- CPU_BASED_IO_BITMAPS =
1 << 25
- CPU_BASED_MTF =
1 << 27
- CPU_BASED_MSR_BITMAPS =
1 << 28
- CPU_BASED_MONITOR =
1 << 29
- CPU_BASED_PAUSE =
1 << 30
- CPU_BASED_SECONDARY_CTLS =
1 << 31
- CPU_BASED2_VIRTUAL_APIC =
1 << 0
- CPU_BASED2_EPT =
1 << 1
- CPU_BASED2_DESC_TABLE =
1 << 2
- CPU_BASED2_RDTSCP =
1 << 3
- CPU_BASED2_X2APIC =
1 << 4
- CPU_BASED2_VPID =
1 << 5
- CPU_BASED2_WBINVD =
1 << 6
- CPU_BASED2_UNRESTRICTED =
1 << 7
- CPU_BASED2_APIC_REG_VIRT =
1 << 8
- CPU_BASED2_VIRT_INTR_DELIVERY =
1 << 9
- CPU_BASED2_PAUSE_LOOP =
1 << 10
- CPU_BASED2_RDRAND =
1 << 11
- CPU_BASED2_INVPCID =
1 << 12
- CPU_BASED2_VMFUNC =
1 << 13
- CPU_BASED2_VMCS_SHADOW =
1 << 14
- CPU_BASED2_RDSEED =
1 << 16
- CPU_BASED2_EPT_VE =
1 << 18
- CPU_BASED2_XSAVES_XRSTORS =
1 << 20
- VMX_EPT_VPID_SUPPORT_AD =
1 << 21
- VMX_EPT_VPID_SUPPORT_EXONLY =
1 << 0
- VMEXIT_SAVE_DBG_CONTROLS =
1 << 2
- VMEXIT_HOST_IA32E =
1 << 9
- VMEXIT_LOAD_IA32_PERF_GLOBAL_CTRL =
1 << 12
- VMEXIT_ACK_INTR =
1 << 15
- VMEXIT_SAVE_IA32_PAT =
1 << 18
- VMEXIT_LOAD_IA32_PAT =
1 << 19
- VMEXIT_SAVE_EFER =
1 << 20
- VMEXIT_LOAD_EFER =
1 << 21
- VMEXIT_SAVE_VMX_TIMER =
1 << 22
- VMENTRY_LOAD_DBG_CONTROLS =
1 << 2
- VMENTRY_GUEST_IA32E =
1 << 9
- VMENTRY_SMM =
1 << 10
- VMENTRY_DEACTIVATE_DUAL_MONITOR =
1 << 11
- VMENTRY_LOAD_IA32_PERF_GLOBAL_CTRL =
1 << 13
- VMENTRY_LOAD_IA32_PAT =
1 << 14
- VMENTRY_LOAD_EFER =
1 << 15
- VMX_REASON_EXC_NMI =
0
- VMX_REASON_IRQ =
1
- VMX_REASON_TRIPLE_FAULT =
2
- VMX_REASON_INIT =
3
- VMX_REASON_SIPI =
4
- VMX_REASON_IO_SMI =
5
- VMX_REASON_OTHER_SMI =
6
- VMX_REASON_IRQ_WND =
7
- VMX_REASON_VIRTUAL_NMI_WND =
8
- VMX_REASON_TASK =
9
- VMX_REASON_CPUID =
10
- VMX_REASON_GETSEC =
11
- VMX_REASON_HLT =
12
- VMX_REASON_INVD =
13
- VMX_REASON_INVLPG =
14
- VMX_REASON_RDPMC =
15
- VMX_REASON_RDTSC =
16
- VMX_REASON_RSM =
17
- VMX_REASON_VMCALL =
18
- VMX_REASON_VMCLEAR =
19
- VMX_REASON_VMLAUNCH =
20
- VMX_REASON_VMPTRLD =
21
- VMX_REASON_VMPTRST =
22
- VMX_REASON_VMREAD =
23
- VMX_REASON_VMRESUME =
24
- VMX_REASON_VMWRITE =
25
- VMX_REASON_VMOFF =
26
- VMX_REASON_VMON =
27
- VMX_REASON_MOV_CR =
28
- VMX_REASON_MOV_DR =
29
- VMX_REASON_IO =
30
- VMX_REASON_RDMSR =
31
- VMX_REASON_WRMSR =
32
- VMX_REASON_VMENTRY_GUEST =
33
- VMX_REASON_VMENTRY_MSR =
34
- VMX_REASON_MWAIT =
36
- VMX_REASON_MTF =
37
- VMX_REASON_MONITOR =
39
- VMX_REASON_PAUSE =
40
- VMX_REASON_VMENTRY_MC =
41
- VMX_REASON_TPR_THRESHOLD =
43
- VMX_REASON_APIC_ACCESS =
44
- VMX_REASON_VIRTUALIZED_EOI =
45
- VMX_REASON_GDTR_IDTR =
46
- VMX_REASON_LDTR_TR =
47
- VMX_REASON_EPT_VIOLATION =
48
- VMX_REASON_EPT_MISCONFIG =
49
- VMX_REASON_EPT_INVEPT =
50
- VMX_REASON_RDTSCP =
51
- VMX_REASON_VMX_TIMER_EXPIRED =
52
- VMX_REASON_INVVPID =
53
- VMX_REASON_WBINVD =
54
- VMX_REASON_XSETBV =
55
- VMX_REASON_APIC_WRITE =
56
- VMX_REASON_RDRAND =
57
- VMX_REASON_INVPCID =
58
- VMX_REASON_VMFUNC =
59
- VMX_REASON_RDSEED =
61
- VMX_REASON_XSAVES =
63
- VMX_REASON_XRSTORS =
64
- IRQ_INFO_EXT_IRQ =
0 << 8
- IRQ_INFO_NMI =
2 << 8
- IRQ_INFO_HARD_EXC =
3 << 8
- IRQ_INFO_SOFT_IRQ =
4 << 8
- IRQ_INFO_PRIV_SOFT_EXC =
5 << 8
- IRQ_INFO_SOFT_EXC =
6 << 8
- IRQ_INFO_ERROR_VALID =
1 << 11
- IRQ_INFO_VALID =
1 << 31
Class Method Summary
collapse
Class Method Details
.allocate(n, &block) ⇒ Object
9
10
11
|
# File 'lib/hypervisor.rb', line 9
def self.allocate(n, &block)
FFI::AutoPointer.new(Hypervisor::Framework.valloc(n), Hypervisor::Framework.method(:free), &block)
end
|
.create(options = VM_DEFAULT) ⇒ Object
13
14
15
|
# File 'lib/hypervisor.rb', line 13
def self.create(options = VM_DEFAULT)
Framework.return_t(Framework.hv_vm_create(options))
end
|
.destroy ⇒ Object
17
18
19
|
# File 'lib/hypervisor.rb', line 17
def self.destroy
Framework.return_t(Framework.hv_vm_destroy)
end
|
.map(uva, gpa, size, flags) ⇒ Object
21
22
23
|
# File 'lib/hypervisor.rb', line 21
def self.map(uva, gpa, size, flags)
Framework.return_t(Framework.hv_vm_map(uva, gpa, size, flags))
end
|
.protect(gpa, size, flags) ⇒ Object
29
30
31
|
# File 'lib/hypervisor.rb', line 29
def self.protect(gpa, size, flags)
Framework.return_t(Framework.hv_vm_protect(gpa, size, flags))
end
|
.read_capability(field) ⇒ Object
37
38
39
40
41
42
43
|
# File 'lib/hypervisor.rb', line 37
def self.read_capability(field)
FFI::MemoryPointer.new(:uint64_t, 1) do |value|
Framework.return_t(Framework.hv_vmx_read_capability(field, value))
return value.get_uint64(0)
end
end
|
.sync_tsc(tsc) ⇒ Object
33
34
35
|
# File 'lib/hypervisor.rb', line 33
def self.sync_tsc(tsc)
Framework.return_t(Framework.hv_vm_sync_tsc(tsc))
end
|
.unmap(gpa, size) ⇒ Object
25
26
27
|
# File 'lib/hypervisor.rb', line 25
def self.unmap(gpa, size)
Framework.return_t(Framework.hv_vm_unmap(gpa, size))
end
|