虚拟化 · 2023年11月16日 0

Hyper-v调试环境搭建

启用Hyper-v功能

Win10启用Hyper-V

管理员权限运行Powershell

运行:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

在启用或关闭Windows功能中启用Hyper-v功能,重启系统后生效:

Winserver 2019启用Hyper-v

在服务器管理界面上选择”添加角色和功能“,服务器角色中选择Hyper-V:

安装完成后,等待重启。

Hyper-v嵌套虚拟化

Vbox嵌套Hyper-v?

 经测试,Hyper-V和Vbox不能同时开启虚拟机,也不能在Vbox的虚拟机(7.0版本)中嵌套使用hyper-v。

Hyper-v嵌套

Hyper-v内嵌套Hyper-v自然是没有问题。

列出主机上已有的虚拟机:

Get-VM

指定虚拟机下启用嵌套虚拟化:

Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true

如需禁用嵌套虚拟化则运行:

Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $false

Vmware嵌套Hyper-v

Vmware支持嵌套开启Hyper-v,但是在主机启用过Hyper-V并需要勾选嵌套虚拟化Vt-x功能的情况下,出现模块“VPMC”启动失败报错。

需要完全关闭Hyper-v功能:

bcdedit /set hypervisorlaunchtype off

并在Windows功能中取消勾选下面的选项:

重启后即可正常开启虚拟机并嵌套安装Hyper-V了。

Windbg调试Hyper-v

调试hyper-v和windows内核需要分开两个windbg,内核调试用串口,hyper-v调试用net模式。

vmware添加串口:

虚拟机上运行:

bcdedit /dbgsettings serial debugport:1 baudrate:115200

bcdedit /debug on

bcdedit /hypervisorsettings NET HOSTIP:192.168.23.1 PORT:50001

bcdedit /set hypervisordebug on

bcdedit /set hypervisorlaunchtype auto

其中HOSTIP:192.168.23.1 为主机ip,虚拟机与主机间要网络互通。

输入bcdedit /hypervisorsettings 命令,查看配置信息:

记录上面的key字段信息,需要填入windbg中。

主机中打开两个windbg,分别设置:

Windows未开放hyper-v核心模块的符号,但还是可以用一些标准命令的。

lm          #查看模块

k*          #查看堆栈

d*,e*  <VA>    #读/写虚拟地址数据

!d*, !e*  <PA>  #读/写物理地址数据

r <寄存器>         #查看寄存器

!vtop <cr3> <VA>      #将虚拟地址转换为物理地址

hyper-v调试器中运行lmvm hv 可以查看hyper-v handler模块的信息,Intel架构下也就是hvix64.exe:

可以看到它的基址为fffff8b5`27000000,使用!vtop转换为物理地址,先获取cr3:

dump物理内存数据和虚拟内存数据一致。

在内核调试器上运行!idt 可以查看IDT表: