Releases: StrikerX3/virt86
Releases · StrikerX3/virt86
virt86 1.1.0
Version 1.1.0 contains breaking changes to gdt.hpp
. GDTEntry
is now an union
containing various types of GDT entries. Existing code should now check the type of GDT entry via <GDTEntry value>.generic.system
and drill down depending on the type. See VirtualProcessor::GetGDTEntry
for more details on how to determine the GDT entry type and how to read their values. Additionally, the codeDataSegment
field was renamed to system
to better reflect its actual meaning.
GDT entry handling received these fixes:
- LDT and TSS entries are expanded to 16 bytes in IA-32e mode. The new code now reads them correctly, as well as call gates, task gates, interrupt gates and trap gates, in addition to regular GDT entries, of course.
VirtualProcessor::ReadSegment
now validates the entries and can load LDT and TSS correctly. Since gates cannot be loaded into segment registers, they will not be read into theRegValue
variable.
This version also brings the following improvements:
- virt86 now detects the maximum supported guest physical address on the host and prevents mapping memory to guests beyond the allowed range.
- HAXM (as of 7.5.1) further restricts the maximum GPA address range to 231 pages.
- Floating point extensions supported by the host are now identified via
cpuid
. Virtualization platforms may further restrict the supported extension set in their guests.- HAXM (as of 7.5.1) does not handle the VM exit caused by
xsetbv
and therefore does not support AVX. All AVX-related extensions are thus disabled with this platform.
- HAXM (as of 7.5.1) does not handle the VM exit caused by
- WHPX adapter will now detect the platform version running on the host system and selectively enable certain features according to the version:
- 10.0.17763.0:
XCR0
register,SPEC_CTRL
andPRED_CMD
MSRs and dirty bitmap support.
- 10.0.17763.0:
- WHPX should now initialize correctly on Windows 10 systems with platform version 10.0.17134.0.
- Floating point registers beyond the first of each type (e.g.
ST1
,MM5
,XMM15
) should now read and write correctly on all platforms. - Defined
FXSAVE
andXSAVE
data structures, including all known XSAVE components. - Fixed CPUID leaf handling with KVM which caused guests to not detect advanced CPU features properly.
virt86 1.0.2
- Added method
VirtualProcessor::ReadSegment
to read segment data from the guest's GDT entries - Adjusted writes to general purpose registers to match
mov
instruction behavior:- 32-bit writes (e.g.
EAX
,EDI
,ESP
) zero-extend the value to 64-bit - 8-bit and 16-bit writes (e.g.
AH
,DL
,BP
) only modify the corresponding portion of the 64-bit register value
- 32-bit writes (e.g.
- Writes to
IP
,EIP
,FLAGS
andEFLAGS
will always zero-extend to 64-bitRIP
orRFLAGS
- HAXM: Read/write EFER register to MSR to work around an issue where the EFER register value is not updated in the VCPU state retrieved from the driver (see intel/haxm#214)
- WHPX: Fixed memory leaks if register name translation fails
virt86 1.0.1
- Support for memory aliasing (mapping portions of the same host virtual addresses to different guest physical addresses).
- HAXM 7.5.1 no longer executes certain MMIO instructions partially. The
partialMMIOInstructions
feature is disabled when HAXM 7.5.1 or above is detected. - Many code quality improvements based on the C++ Core Guidelines
- Various small fixes and improvements
virt86 1.0.0
First full release of virt86.
Includes support for the following virtualization platforms and operating systems:
- Windows: HAXM, Windows Hypervisor Platform
- Linux: HAXM, KVM
- Mac OS X: HAXM