T2D-dev

Удаленная отладка с помощью SoftICE


...

Юрий “yurembo” Язев

независимый игродел


SoftICE безнадежно устарел. Его последняя версия вышла в 2006-м году в составе пакета DriverStudio. Тем не менее, это нисколько не занижает его значимости, влияния и мощности, пускай, былой. SoftICE не работает на ОС Windows после WinXP SP2, но это настолько мощный инструмент, что отладчики последующих лет с ним просто не сравняться. По своим возможностям, удобству использования он затыкает за пояс всех.

Главный минус уже назван: прекращение развития и неспособность работы в новых версиях ОС Windows. Между тем, если программист хочет научиться отлаживать программы, не имея их исходных кодов, то ему сам Бог велел освоить SoftICE.

Виртуальные машины: VMware, VirtualBox в этом деле совсем не помощники. SoftICE выступает прослойкой между железом и операционной системой, выполняется на уровне ядра последней. Поэтому способен заморозить ее работу (о чем говорит название отладчика) и вмешаться в ее недра.

Следовательно для экспериментов с SoftICE прекрасным вариантом будет выделить отдельную старенькую (например, достать из кладовки или с балкона, сдуть пыль, пустить слезу ностальгии по тем временам, когда ты проводил в ее обществе сутки напролет) 32-х битную машинку. А лучше две. Установить на них Windows 2000 или Windows XP. И вперед, в дебри машинных кодов.

SoftICE - первый отладчик способный отлаживать программу на локальном компьютере без помощи отдельной машины. Это несравнимое преимущество. Однако существует масса ситуаций, когда без дополнительной машины не обойтись, например, при отладке полноэкранных приложений, в частности игр, для вывода графики использующих DirectX или OpenGL.

В данной статье мы рассмотрим, каким образом можно объединить 2 компьютера в целях отладки приложения с помощью SoftICE. Он располагает 3-мя способами подключения 2-х компьютеров:

  1. с помощью null-модемного кабеля;
  2. с помощью Dial-up модема;
  3. через сетевые платы;

Второй способ сразу же отметается: зачем использовать старые 56-ти килобитные модемы для подключения двух компьютеров? Скорости для пересылки отладочных данных вполне достаточно, однако неудобство использования такой связи на лицо. Этот способ подходит для отладки на удаленном в пространстве компьютере, да и то, модемная связь уже давно канула в лету.

Третий способ вполне хорошо: можно отлаживать программу на находящемся рядом компе, подключенном к локальной сети. Но в таком случае надо установить дополнительные драйвера, предназначенные для SoftICE. Последний поддерживает ограниченное число сетевых плат. К тому же, поскольку драйвера выполняются на 0-й уровне, их установка - это дополнительная дыра в безопасности. В Minix драйвера работаю в пользовательском режиме, и ему норм, правда, все тормозит не по-детски. Но это тема отдельного разговора, относящегося даже не столько к кодокопанию, сколько к проектированию и реализации операционных систем.

Я выбираю первый способ, потому что при его использовании не надо ничего доустанавливать, а скорости вполне достаточно. На современных компах нет COM-портов. Но мы же используем старые машинки, а на них они есть 100%.

Для исследования и удаленной отладки программного обеспечения я использую 2 машинки:

  1. хостовая машина на базе процессора Athlon XP 1800 Mhz
  2. целевая машина на базе Pentium 4 2800 Mhz

Оба представляют истинные 32-х разрядные процессоры.

На целевом компьютере запускается подопытное приложение, игра, драйвер, etc. Он выступает в роли загона, колбы с химикатами, лаборатории, аэродинамической трубы для обката новых крыльев. На нем, в моем случае, установлена Windows 2000 SP4. Кстати, девушки - хакеры от нее в восторге. Но, как говорится, сложней найти такую девушку, чем соблазнить ее. Хостовая машинка выступает в роли неинтеллектуального терминала, который посылает команды и принимает текстовый вывод от целевой части Айса, отлаживающей приложение на удаленном компе. На ней у меня установлена Windows XP SP3. Внимание: целевая часть Айса намертво завешивает последнюю, поскольку SP3 не поддерживается, однако хостовая часть работает норм, поскольку не лезет в дебри операционной системы, а только предоставляет управление удаленной отладкой.

После подключения null-модемного кабеля к обоим компам надо проверить соединение. Это можно сделать с помощью любого COM-сниффера. Его так же можно написать самому, но, чтобы не тратить время скачаем первый попавшийся.

Я скачал 14-ти дневную демо-версию Serial Port Monitor от Eltima Software. Для проверки этого срока мне хватит. Устанавливаем, запускаем. Внимание, приложение не работает под Windows 2000. Создадим новую сессию. Появится окошко New Monitoring Session. В нем надо выбрать порт, который хотим мониторить, способ отображения данных и то, какие данные мы хотим видеть. Стоп! У нас же на машине один порт. А в списке их 2: COM1 и COM3. Какой-то из них наверняка виртуальный, создан Айсом для своих нужд. С помощью сниффера проверим их оба. После выбора порта отметим способ отображения данных: Dump view. Остальные параметры оставим по умолчанию - Start Monitoring.


...

Откроется окно Dump view. Ниже него будет присутствовать панель для отправки данных. В ниспадающем списке Port выбираем соответствующий порт. Лучше оставить по умолчанию, так как идет прослушка того порта, который был выбран при создании сессии. В списке Baudrate задается скорость передачи в бодах. Рекомендуется выбрать: 57600. Остальные настройки можно оставить без изменений. Для открытия порта жмем кнопку Open. В активирующееся ниже поле ввода введем любое значение и нажмем кнопку Send справа. Содержимое строки будет отправлено. В списке выше отобразится время отправки данных и само отправленное значение. В случае, если порт виртуальный, тогда в этот же момент добавится строка о прочитанных тех же самых данных.


...

Таким образом, мы можем проверить соединение, отправку и получение данных между двумя компьютерами.

После того, как соединение будет установлено, можно переходить к настройке Айса. Для этого запускаем SoftICE Symbol Loader, в нем открываем меню настроек: Edit -> SoftICE Initialization Settings…


...

В ниспадающем списке Serial Connection выбираем порт, к которому подключен кабель (мы протестировали его с помощью сниффера), из списка Serial Connection Speed выбираем скорость: 57600. На целевой системе вдобавок поставим флажок Auto Connect (via null modem). После этого надо перезагрузить целевую систему. После чего не забыть, запустить Айс.

Затем на хостовом компьютере из домашней директории SoftICE запустим утилиту siremote со следующими параметрами:

> siremote com1 57600

Заместо com1 должен стоять открытый порт, через который идет соединение.

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


...

“Разморозить” целевую систему можно, как с хостовой, так и целевой, нажав Ctrl+D. Теперь, можешь отлаживать любое приложение, в том числе, игры, на целевой машине, отдавая команды с хостовой.