如何修改KVM创建的windows的CPUID返回值

Posted

技术标签:

【中文标题】如何修改KVM创建的windows的CPUID返回值【英文标题】:How to modify the return value of CPUID of windows created by KVM 【发布时间】:2020-10-21 09:31:50 【问题描述】:

我通过 KVM 创建了一个 windows 7 x86 虚拟机。 当它执行以下指令时:

mov eax, 0x40000000
cpuid

它会返回这个:

eax=0x40000005
ebx=0x7263694d
ecx=0x666f736f
edx=0x76482074

那是“Microsoft Hv”。

如何调整 KVM 以返回自定义值?

【问题讨论】:

【参考方案1】:

如果您的意思是 QEMU/KVM,那么您需要说服 hyperv 启蒙系统采用不同的配置。

对于 QEMU cli,使用 hv-vendor-id=foobarbaz 作为标志。请参阅the docs 了解更多信息。 对于 libvirt:在 <hyperv> </hyperv> 标签之间添加 <vendor_id state='on' value='foobarbaz'/>

一种懒惰的替代方法是全面禁用启蒙(这将隐藏 hyperv cpuid 叶)。

以下内容可能不相关,但它是对这个问题的直接回答。 对于直接使用 KVM 的自定义 VMM,请使用 kvm_set_cpuid2 ioctl。查看documentation 了解更多信息。

【讨论】:

以上是关于如何修改KVM创建的windows的CPUID返回值的主要内容,如果未能解决你的问题,请参考以下文章

如何以未使用的 x86 操作码在 linux KVM 中实现新指令

KVM修改网络模式为Bridge后,原有虚拟机该如何修改配置

如何使用 CPUID 查找主板信息?

如何通过 CPUID 命令使用 C/C++ 获取物理和虚拟地址位

如何通过python创建kvm虚拟机

在 Windows 上使用 JNA 调用 __cpuid 函数