首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从VM检索BSOD文本

从VM检索BSOD文本
EN

Stack Overflow用户
提问于 2012-03-29 15:51:06
回答 2查看 589关注 0票数 2

如何从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

  • --这可能是最好的方法,除了我的经验之外,还需要构建或设置和培训某种类型的ocr解决方案。可能做起来比较简单,恒定宽度的字体/干净的图像,只有两种颜色来处理

4)直接使用API调用或通过创建扩展以某种方式访问/公开来宾内存

正如沃伦所指出的那样,

  • 似乎没有访问内存的API,可能可以编写扩展以以某种方式公开vm的内存,但需要了解Virtualbox的内部结构。

这是在Solaris主机上运行的,有些主机可能只有一个可用的Windows,可以启动也可以不启动。这个VM可以是任何相对较新的windows版本(XP,2003,2003 R2,2008,Vista,2008 R2)。我可以生成任意数量的基于Linux的VM,但是由于许可问题,我不能生成更多的windows VM。到目前为止,我的想法是直接从来宾内存中检索它将是最容易实现的,也许我弄错了,上面的方法之一,或者我还没有想到的方法,将更容易实现。

EN

回答 2

Stack Overflow用户

发布于 2012-03-30 15:14:12

如果您只想获取这些信息,为什么不只是启用内核调试并在一个虚拟串口上公开呢?我相信您应该能够在I/O端口上使用用于Windows的调试工具(WinDbg)或内核调试器(KD)。由于这是一个VM,惟一的唯一要求是将虚拟串行端口映射到主机上的命名管道,然后应该配置主机上的调试器(或者其他VM,因为您的主机不是Windows)来通过该管道进行通信。您的命令应该如下所示:

代码语言:javascript
运行
复制
windbg -k com:port=\\.\pipe\<pipe_name>,pipe

kd -k com:port=\\.\pipe\<pipe_name>,pipe

有一个伟大的博客文章由传奇马克鲁西诺维奇,描述了他如何使用调试器改变BSOD屏幕的颜色。希望这将为您提供一些额外的洞察力,以使用工具,以及缩小范围,并让您到正确的领域,以提取您正在寻找的信息。

以下是一些帮助您入门的参考资料:

  • KB文章151981:如何使用空调制解调器电缆设置远程调试会话

任何其他颜色的http://support.microsoft.com/kb/151981

  • A蓝屏

Windows环境下的http://blogs.technet.com/b/markrussinovich/archive/2010/12/14/3374820.aspx

  • Debugging工具

http://msdn.microsoft.com/en-us/windows/hardware/gg463009

票数 3
EN

Stack Overflow用户

发布于 2012-06-12 17:06:34

可以使用VBoxManage和调试器提取来宾(虚拟)物理内存。

代码语言:javascript
运行
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9928951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档