endmenu
source "palacios/src/interfaces/Kconfig"
-
+ source "palacios/src/extensions/Kconfig"
config TELEMETRY
bool "Enable VMM telemetry support"
Enable the Vnet in Palacios
+config INSPECTOR
+ bool "Enable VM inspection"
+ depends on EXPERIMENTAL
+ default n
+ help
+ Enable inspection framework for vm internal state
+
+config SYSCALL_HIJACK
+ bool "Enable System Call Interposition"
+ depends on EXPERIMENTAL
+ default n
+ help
+ Enable the VMM to hijack system calls executed by the guest.
+ If enabled, the VMM will intercept software interrupt (INT) instructions,
+ Fast-System Call instructions (SYSENTER, SYSCALL), and the LIDT instruction
+
+config HIJACK_SYSCALL_MSR
+ bool "Intercept Syscall-related MSR reads & writes"
+ depends on SYSCALL_HIJACK
+ default n
+ help
+ Allow the VMM to intercept reads and writes to MSRs
+ related to SYSCALL and SYSENTER instructions. Specifically,
+ it will intercept R/W to STAR, CSTAR, and LSTAR.
+
endmenu
help
Enable the Vnet debug in Palacios
+config DEBUG_SYSCALL_HIJACK
+ bool "Enable Syscall hijack Debug in Palacios"
+ default n
+ depends on EXPERIMENTAL && SYSCALL_HIJACK && DEBUG_ON
+ help
+ Enable Debugging printouts for syscall hijacking
+ code in Palacios
+
endmenu
vmm_binaries.o \
vmm_cpuid.o \
vmm_xml.o \
- vmm_muxer.o \
vmm_mem_hook.o \
vmm_mptable.o \
vmm_extensions.o \
vmm_multitree.o \
- obj-$(CONFIG_INSPECTOR) += vmm_inspector.o
obj-$(CONFIG_XED) += vmm_xed.o
vmx_io.o \
vmx_lowlevel.o \
vmx_msr.o \
+ vmx_hw_info.o \
vmcs.o \
vmx_ctrl_regs.o \
vmx_assist.o
obj-$(CONFIG_SYMCALL) += vmm_symcall.o
obj-$(CONFIG_SYMMOD) += vmm_symmod.o
+obj-$(CONFIG_SYSCALL_HIJACK) += vmm_syscall_hijack.o
obj-y += mmu/
case XED_OPERAND_IMM0:
+ {
+ v3_op->size = xed_decoded_inst_get_immediate_width(&xed_instr);
+
+ if (v3_op->size > 4) {
+ PrintError("Unhandled 64 bit immediates\n");
+ return -1;
+ }
+ v3_op->operand = xed_decoded_inst_get_unsigned_immediate(&xed_instr);
+
+ v3_op->type = IMM_OPERAND;
+
+ }
+ break;
case XED_OPERAND_AGEN:
case XED_OPERAND_PTR:
case XED_OPERAND_RELBR:
}
}
- V3_Print("Operand 0 mode: %s\n", xed_operand_action_enum_t2str(xed_operand_rw(op)));
+ // V3_Print("Operand 0 mode: %s\n", xed_operand_action_enum_t2str(xed_operand_rw(op)));
if (xed_operand_read(op)) {
}
}
- V3_Print("Operand 1 mode: %s\n", xed_operand_action_enum_t2str(xed_operand_rw(op)));
+ // V3_Print("Operand 1 mode: %s\n", xed_operand_action_enum_t2str(xed_operand_rw(op)));
if (xed_operand_read(op)) {
v3_op->read = 1;
instr->third_operand.type = REG_OPERAND;
- PrintDebug("Operand 3 mode: %s\n", xed_operand_action_enum_t2str(xed_operand_rw(op)));
+ PrintDebug("Operand 2 mode: %s\n", xed_operand_action_enum_t2str(xed_operand_rw(op)));
if (xed_operand_read(op)) {
case XED_IFORM_INVLPG_MEMb:
return V3_OP_INVLPG;
+ // KCH
+ case XED_IFORM_INT_IMM:
+ return V3_OP_INT;
+
/* Data Instructions */