如何从virtualbox vm检索BSOD文本??
由于BSOD是文本,它应该存储在VM的内存空间的某个地方,而且可能是定义良好的地方。
我有几个VM已经被配置为停止在蓝色屏幕上而不是重新启动,并且代码已经到位,可以定期拍摄屏幕快照。
此时,我的计划是区分两个图像,如果没有差异(即屏幕上没有变化),而4个角落中的像素都是蓝色的(以及右边的蓝色),那么我们尝试提取BSOD文本,搜索文本中的"* STOP:“序列来确认其为BSOD。
我最初计划开发一个快速而肮脏的OCR解决方案,从图像本身提取文本,但是如果我们能够相对容易地从内存中提取文本,我们将消除OCR错误的可能性。
我仔细阅读了手册和API引用,没有看到任何似乎立即适用的东西。
是否可以从Virtual主机访问来宾内存并直接从内存中检索BSOD文本?
更新
为了澄清,我考虑了4种不同的选择
1)反向工程windows调试协议,并至少构建一个基本调试器来侦听vm的串口
带来相当大的困难。
2)反向工程Virtualbox保存的状态文件,并在将VM保存在BSOD上之后,从我怀疑存储在该文件中的VESA内存区域提取文本
3)在使用API检索的输出映像上运行OCR
4)直接使用API调用或通过创建扩展以某种方式访问/公开来宾内存
正如沃伦所指出的那样,
这是在Solaris主机上运行的,有些主机可能只有一个可用的Windows,可以启动也可以不启动。这个VM可以是任何相对较新的windows版本(XP,2003,2003 R2,2008,Vista,2008 R2)。我可以生成任意数量的基于Linux的VM,但是由于许可问题,我不能生成更多的windows VM。到目前为止,我的想法是直接从来宾内存中检索它将是最容易实现的,也许我弄错了,上面的方法之一,或者我还没有想到的方法,将更容易实现。
发布于 2012-03-30 15:14:12
如果您只想获取这些信息,为什么不只是启用内核调试并在一个虚拟串口上公开呢?我相信您应该能够在I/O端口上使用用于Windows的调试工具(WinDbg)或内核调试器(KD)。由于这是一个VM,惟一的唯一要求是将虚拟串行端口映射到主机上的命名管道,然后应该配置主机上的调试器(或者其他VM,因为您的主机不是Windows)来通过该管道进行通信。您的命令应该如下所示:
windbg -k com:port=\\.\pipe\<pipe_name>,pipe
kd -k com:port=\\.\pipe\<pipe_name>,pipe有一个伟大的博客文章由传奇马克鲁西诺维奇,描述了他如何使用调试器改变BSOD屏幕的颜色。希望这将为您提供一些额外的洞察力,以使用工具,以及缩小范围,并让您到正确的领域,以提取您正在寻找的信息。
以下是一些帮助您入门的参考资料:
任何其他颜色的http://support.microsoft.com/kb/151981
Windows环境下的http://blogs.technet.com/b/markrussinovich/archive/2010/12/14/3374820.aspx
http://msdn.microsoft.com/en-us/windows/hardware/gg463009
发布于 2012-06-12 17:06:34
可以使用VBoxManage和调试器提取来宾(虚拟)物理内存。
VBoxManage debugvm TestVm dumpguestcore --filename guest.dump
gdb --core guest.dump
# dump memory [phys-mem-file] 0x0 [size vm-memory]然后,可以在内存转储中搜索字符串内容。
另见:http://www.halfdog.net/Misc/TipsAndTricks/VirtualBox.html#ExtractGuestPhysicalMemory
https://stackoverflow.com/questions/9928951
复制相似问题