Windows pvpanic测试

Windows pvpanic驱动安装后,我们需要测试和排查虚拟机crash

测试未启用pvpanic设备core dump

首先测试未启用pvpanic设备时候的core dump功能,此时先设置Windows蓝屏时不自动重启,然后通过命令行实现虚拟机内存core dump。

windows虚拟机关闭蓝屏自动重启(可选)

如果想在蓝屏时候避免Windows默认自动重启,以便有充足时间手工触发一次core dump,则执行以下操作:

关闭windows蓝屏自动重启

QEMU QMP inject-nmi触发蓝屏

QEMU的底层协议 QENU Machine Protocol (QMP)可以通过 libvirt 的 qemu-monitor-command 命令访问。QMP指令inject-nmi可以触发Windows虚拟机出现一个蓝屏core dump

触发命令如下:

这里execute表示执行inject-nmi指令(完全是JSON格式),此时就会在Windows虚拟机的VNC桌面看到触发了一个蓝屏。

参考 Multiple ways to access QEMU Machine Protocol (QMP)

此时Linux终端返回信息

在VNC上观察可以看到出现蓝屏提示信息:

windows

手工获取虚拟机内存core dump

这里采用两种方法,一种是通过virsh调用直接QMP指令,一种是通过 virsh dump方式,对比两者memory dump有什么差异。

  • virsh调用直接QMP指令,不过,为了能够方便人观察指令,virsh提供了一个 --hmp 参数来替代JSON格式输入:

参考 Extracting Windows VM crash dumps ,这里传递给QMP的指令应该是 dump-guest-memory paging=false protocol=file:/tmp/win2016_qmp_dump-guest-memory

但是我这里出现了报错:

根据help dump-guest-memory输出的提示,改写成dump-guest-memory win2016_qmp_dump-guest-memory。这是因为参数-p: do paging to get guest's memory mapping.,而这里似乎不应该使用paging,所以去掉-p参数。

但是,总是提示Could not open 'win2016_qmp_dump-guest-memory': Permission denied

暂时失败!!!

参考 Unable to execute QEMU command 'dump-guest-memory': dump: failed to save memory可以知道,如果使用pvpanic,实际上也是调用 dump-guest-memory 指令:

Simple virsh commands 这篇使用文档写得很简洁实用,可以参考

  • 使用virsh dump

使用Volatility转换

Volatility是一个开源的内存提取工具。不过,请直接从官方网站下载最新版本,发行版的版本过低,无法分析windows 2016系统。

分析后会给出建议的profile,类似:

分析

准备Windows分析平台

也可以单独安装WinDbg (Debugging Tools for Windows),不过Windows Software Development Kit,可以从微软网站下载Windows 10 SDK for April 2018 Update已经包含了功能相同的WinDbg。

  • 启动WindDbg,然后使用菜单``

  • 在windbg的file菜单中打开symbol path设置。输入

然后可以看到winDbg下载符号表,完成后,就可以进行分析。

  • 简单命令

    • ~n 这里n表示cpu编号,例如~0切换到cpu 0,~1切换到cpu 1

    • kv 检查堆栈

    • .reload 加载nt符号

windbg

参考

Last updated

Was this helpful?