您将如何从 virtualbox vm 中检索 BSOD 文本?
由于 BSOD 是文本,它应该存储在 VM 的内存空间中的某个地方,并且可能是某个定义明确的地方。
我有几个虚拟机被配置为在蓝屏上停止而不是重新启动,并且代码已经到位,可以定期进行屏幕截图。
此时我的计划是区分两个图像,如果没有差异(即屏幕上没有变化)并且4个角的像素都是蓝色(和右边的蓝色),那么我们尝试提取BSOD文本,在文本中搜索“ * STOP:”序列以确认它是 BSOD。
我最初计划使用一种快速而肮脏的 OCR 解决方案来从图像本身中提取文本,但是如果我们可以相对容易地从内存中提取它,我们将消除 OCR 错误的可能性。
我仔细阅读了手册和 API 参考,并没有看到任何似乎立即适用的内容。
是否可以从 Virtual Box 主机访问来宾内存并直接从内存中检索 BSOD 文本?
更新
澄清一下,我目前考虑了 4 种不同的选择
1)逆向工程windows调试协议并构建至少一个基本的调试器来监听vm的串口
- 需要逆向工程串行协议,怀疑这会带来相当大的困难
2)对Virtualbox保存的状态文件进行逆向工程,并从我怀疑在将VM保存在BSOD上后存储在该文件中的VESA内存区域中提取文本
- 我无法在源代码本身之外找到有关此文件格式的文档。
3) 对使用 API 检索的输出图像运行 OCR
- 这可能是最好的方法,需要在我的经验之外构建或设置和训练某种 ocr 解决方案。可能做起来比较简单,等宽字体/干净的图片,只有两种颜色要处理
4) 使用 API 调用或通过创建扩展以某种方式访问/公开它直接访问客户内存
- 正如 Warren 所指出的,似乎没有访问内存的 API,可能能够编写扩展以某种方式公开 vm 的内存,但需要了解 Virtualbox 的内部结构。
这是在 Solaris 主机上运行的,有些可能只有一个可用的 Windows vm 可能会或可能不会启动。此 VM 可以是任何相对较新的 Windows 版本(XP、2003、2003 R2、2008、Vista、2008 R2)。我可以生成任意数量的基于 Linux 的 VM,但由于许可问题,我无法生成其他 Windows VM。到目前为止,我的想法是直接从客人的记忆中检索它是最容易实现的,也许我错了,上面的方法之一,或者我没有想到的方法,会更容易实现