Как бы вы извлекли текст BSOD из виртуальной коробки VM?
Поскольку BSOD - это текст, он должен храниться где-то в области памяти виртуальной машины и, возможно, где-то четко определенным.
У меня есть несколько виртуальных машин, которые были настроены для остановки на синих экранах, а не для перезагрузки, и имеется код для регулярного создания снимков экрана.
На данный момент мой план состоит в том, чтобы различать два изображения, если нет различий (т.е. не было никаких изменений на экране), и все пиксели в 4 углах синие (и правый синий), тогда мы пытаемся извлечь текста BSOD, найдите в тексте последовательность «* STOP:», чтобы подтвердить его как BSOD.
Изначально я планировал быстрое и грязное решение для оптического распознавания текста для извлечения текста из самого изображения, однако, если бы мы могли относительно легко извлечь его из памяти, мы бы исключили возможность ошибок распознавания.
Я просмотрел руководство и справочник по API и не видел ничего, что, кажется, сразу применимо.
Можно ли получить доступ к памяти гостей с хоста Virtual Box и получить текст BSOD непосредственно из памяти?
UPDATE
Просто чтобы уточнить, я рассмотрел 4 различных варианта в настоящее время
1) Обратный инжиниринг протокола отладки Windows и создание хотя бы базового отладчика для прослушивания последовательного порта виртуальной машины
- Требуется обратный инжиниринг последовательного протокола, подозреваю, что это будет довольно сложным
2) Обратный инжиниринг файла сохраненного состояния Virtualbox и извлечение текста из области памяти VESA, которая, как я подозреваю, сохраняется в этом файле после сохранения виртуальной машины на BSOD
- Мне не удалось найти документацию по этому формату файла вне самого исходного кода.
3) Запуск распознавания текста на выходном изображении, полученном с использованием API
- Это может быть лучший путь, требующий создания или настройки и обучения решению ocr некоторого вида, вне моего опыта. Может быть относительно простым, шрифт постоянной ширины / чистое изображение, только два цвета для обработки
4) Доступ к памяти гостей напрямую с помощью вызова API или путем создания расширения для доступа / предоставления доступа к нему каким-либо образом
- Как указал Уоррен, похоже, что нет API для доступа к памяти, возможно, он сможет написать расширение, чтобы каким-то образом раскрыть память виртуальной машины, но потребует понимания внутренних возможностей Virtualbox.
Он работает на хостах Solaris, и некоторые могут иметь только один доступный Windows vm, который может загружаться или не загружаться. Эта виртуальная машина может быть любой относительно новой версией Windows (XP, 2003, 2003 R2, 2008, Vista, 2008 R2). Я могу порождать произвольное количество виртуальных машин на основе Linux, однако я не могу порождать дополнительные виртуальные машины Windows из-за проблем с лицензированием. В этот момент я думал, что извлечь его непосредственно из памяти гостей будет проще всего, возможно, я ошибаюсь, и один из перечисленных выше методов или тот, о котором я не думал, будет проще реализовать.