Windows pvpanic测试
Last updated
Last updated
Windows pvpanic驱动安装后,我们需要测试和排查虚拟机crash
首先测试未启用pvpanic设备时候的core dump功能,此时先设置Windows蓝屏时不自动重启,然后通过命令行实现虚拟机内存core dump。
如果想在蓝屏时候避免Windows默认自动重启,以便有充足时间手工触发一次core dump,则执行以下操作:
inject-nmi
触发蓝屏QEMU的底层协议 QENU Machine Protocol (QMP)可以通过 libvirt 的 qemu-monitor-command
命令访问。QMP指令inject-nmi
可以触发Windows虚拟机出现一个蓝屏core dump
触发命令如下:
这里
execute
表示执行inject-nmi
指令(完全是JSON格式),此时就会在Windows虚拟机的VNC桌面看到触发了一个蓝屏。
此时Linux终端返回信息
在VNC上观察可以看到出现蓝屏提示信息:
这里采用两种方法,一种是通过
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是一个开源的内存提取工具。不过,请直接从官方网站下载最新版本,发行版的版本过低,无法分析windows 2016系统。
分析后会给出建议的profile,类似:
安装Windows Software Development Kit,可以从微软网站下载Windows 10 SDK for April 2018 Update。这个SDK提供了最新的头文件,库,元数据和用于构建Windows 10应用程序的工具。
也可以单独安装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符号