Отладка ядра Windows из Linux

Я использовал для отладки ядра Windows с помощью VirtualKD, WinDBG и одной виртуальной машины.

Недавно я получил машину Linux, и теперь мне интересно. Какой самый простой способ отладить ядро ​​Windows, когда ваш хост не может запустить VirtualKD/WinDBG *?

Я предполагаю, что для решения потребуются две виртуальные машины, но у меня есть два экземпляра, размещенных на моей реальной машине, а не экземпляр, находящийся внутри другого виртуального экземпляра...

В любом случае, чтобы выполнить эту работу?

Спасибо заранее!

* Вино - последнее средство по причинам стабильности...

Ответ 1

Решено! В основном, я закончил использование двух (VirtualBox) виртуальных машин, эмулирующих последовательное соединение (нуль-модемный кабель) через сокет Unix (на хосте). Для получения дополнительной информации прочитайте ниже:

Настройка оборудования *:

  • отлаживаемый:
    • Убедитесь, что устройство выключено и отредактировано Последовательные порты.
    • Включить Порт 1 и присвоить значения следующим образом: Номер порта: COM1, Режим порта: Хост-труба, Создать трубку: Непроверено (клиент), Путь к портам/файлу: /tmp/win_link.
  • Debugger:
    • То же, что и выше (используя тот же путь), только на этот раз Create Pipe должен быть проверено (сервер).

Настройка отладчика:

  • Запустите WinDBG и нажмите Ctrl + K, чтобы вызвать Отладка ядра.
  • в COM, введите: Baudrate: 115200, Port: COM1, Сброс: 0 и убедитесь, что Труба и Повторное подключение не отмечено (важно).
  • Вам будет представлен следующий вывод: Opened \\\\.\com1 Waiting to reconnect...

Настройка Debuggee:

  • Запустите bootcfg/debug on/port com1/baud 115200/id 1. Чтобы проверить, запустите bootcfg. **
  • Reboot.
  • Довольно рано на этапе загрузки WinDBG на другом компьютере должен обнаружить, что debuggee запущен.

* Предполагается использование VirtualBox. Пользователи VMWare/KVM, вероятно, смогут достичь тех же результатов после аналогичных шагов. Кроме того, для получения дополнительной информации см. Документы VirtualBox.

** Предполагая, что гости - Windows XP. Более поздние версии включают bcdedit, которые можно использовать, как описано здесь.

Ответ 4

Еще один вариант - включить локальную отладку ядра. Это связано с некоторыми ограничениями, однако оно позволит вам получить доступ к данным ядра, используя только одну виртуальную машину.

Этот подход работает только в Windows 8.0 и Windows Server 2012 и более поздних версиях.

Выполните следующие действия:

  • Откройте окно командной строки в качестве администратора.
  • Введите bcdedit /debug on
  • Если компьютер еще не настроен в качестве цели отладки транспорта, введите bcdedit /dbgsettings local
  • Перезагрузите компьютер.

После перезагрузки системы вы можете выполнить WinDBG как Administrator, нажмите ctrl+k или перейдите к File -> Attach to kernel -> Local и нажмите OK.

Прикрепить к варианту ядра

В этот момент вы сможете выполнять команды только для ядра и обращаться к структурам ядра:

введите описание изображения здесь

Протестировано под Windows 10 и с новой версией WinDBG (предварительный просмотр).

Ссылка: Настройка локальной отладки ядра одного компьютера вручную