【问题标题】:How can I force VirtualBox GuestOS CPUID to match HostOS?如何强制 VirtualBox GuestOS CPUID 匹配 HostOS?
【发布时间】:2015-11-04 03:40:56
【问题描述】:

我正在尝试在 VirtualBox 中运行的 Windows VM 上测试一些跨平台软件,但是当我运行该程序时它崩溃并出现错误代码:0xC00000ID: Illegal Operation

当我查看反汇编时,我可以看到它是一条 VMOVUPS 指令(AVX 指令集的一部分)。它在我的 Linux HostOS 上运行良好,这是我所期望的,因为我在支持 AVX 的机器上运行。有趣的是,主机上的 CPUID 结果与来宾上的结果不匹配。

主持人:

IN:  eax=0x00000001 
OUT: eax=0x000206a7 ebx=0x05100800 ecx=0x1fbae3ff edx=0xbfebfbff

客人:

IN:  eax=0x00000001 
OUT: eax=0x000206a7 ebx=0x00000800 ecx=0x00000209 edx=0x078bfbff

我尝试使用以下命令设置 CPU 功能,但这根本没有改变值。

vboxmanage modifyvm Windows --cpuidset 00000001 000206a7 00100800 1fbae3ff bfebfbff

VirtualBox 可能缺少这些本应存在的 CPU 功能(AVX、SSE4 等)是否有某些原因?

附:如果相关的话,VM 映像是前一段时间生成的,可能是在不支持 AVX 的机器上生成的,但我仍然希望 modifyvm 命令甚至冷启动来修复它。


更新:我的 Virtualbox 版本 (4.0.3) 似乎没有将 AVX 指令传递给 CPU。更新到 v5.0.8 解决了我的问题,但使用 AVX2 的人暂时可能没有那么幸运。

【问题讨论】:

  • 您的 VortualBox 版本可能不支持模拟 AVX 指令。看来latest beta code 可以解决这个问题。您不妨尝试从here下载最新的 Win32 5.0 候选版本
  • Bingo - 我已经更新到 5.0.8,我的 CPUID 现在显示支持 AVX 并且程序运行完美。

标签: assembly visual-studio-2015 x86 virtualbox avx


【解决方案1】:

VirtualBox 5.0 beta-3 之前的版本不支持 AVX 指令集,也没有传递到 CPU。这是根据这个 Oracle VirtualBox bug report。下载并安装 >= 5.0 beta-3 的版本应该可以解决问题。

【讨论】:

    猜你喜欢
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    相关资源
    最近更新 更多