Definition of the vCPU structure and virtualization-related interface support for x86_64 architecture.
The crate user must implement the AxVCpuHal
trait to provide the required low-level implementantion,
relevant implementation can refer to axvcpu. [Work in Progress]
- VMX Support: Complete Intel VT-x virtualization support
- SVM Support: AMD SVM (Secure Virtual Machine) virtualization support (feature flag
svm
) - Register Management: Comprehensive x86 register state management
- EPT (Extended Page Tables): Memory virtualization support
- MSR Handling: Model-Specific Register access and management
- VMCS Management: Virtual Machine Control Structure operations
- Interrupt Handling: Virtual interrupt and exception processing
- Tracing Support: Optional tracing for debugging (feature flag
tracing
)
The library is structured into several key modules:
-
vmx/
: Intel VMX virtualization implementationvcpu.rs
: Virtual CPU implementation (VmxArchVCpu
)vmcs.rs
: VMCS (Virtual Machine Control Structure) managementpercpu.rs
: Per-CPU state management (VmxArchPerCpuState
)definitions.rs
: VMX constants and exit reasonsinstructions.rs
: VMX instruction wrappersstructs.rs
: VMX data structures
-
regs/
: Register managementaccessors.rs
: Register access utilitiesdiff.rs
: Register state comparisonmod.rs
: General-purpose registers (GeneralRegisters
)
-
ept.rs
: Extended Page Tables implementation -
msr.rs
: Model-Specific Register handling
VmxArchVCpu
: Main virtual CPU implementationVmxArchPerCpuState
: Per-CPU virtualization stateGeneralRegisters
: x86-64 general-purpose registersVmxExitReason
: VM exit reason enumerationGuestPageWalkInfo
: Guest page walk information
use x86_vcpu::{has_hardware_support, GeneralRegisters};
// Check if VMX is supported on this hardware
if has_hardware_support() {
println!("VMX hardware support detected");
} else {
println!("VMX hardware support not available");
}
// Create and initialize guest registers
let mut regs = GeneralRegisters::default();
regs.rax = 0x1234;
regs.rbx = 0x5678;
println!("Guest registers initialized:");
println!("RAX: {:#x}", regs.rax);
println!("RBX: {:#x}", regs.rbx);
// Display register names
for (i, name) in GeneralRegisters::REGISTER_NAMES.iter().enumerate() {
println!("Register {}: {}", i, name);
}
The library supports the following Cargo features:
default
: Enables VMX support by defaultvmx
: Intel VMX (VT-x) supportsvm
: AMD SVM supporttracing
: Enable tracing for debugging
This project is licensed under multiple licenses. You may choose to use this project under any of the following licenses:
- GPL-3.0-or-later - GNU General Public License v3.0 or later
- Apache-2.0 - Apache License 2.0
- MulanPubL-2.0 - Mulan Public License 2.0
- MulanPSL2 - Mulan Permissive Software License v2
You may use this software under the terms of any of these licenses at your option.