Подробное руководство по SoftICE.

Обсудить статью на форуме


Массу свежих 2020 года крэкерских инструментов, видеоуроков и статей вы сможете найти на видеокурсе от нашего сайта. Подробнее здесь.
 РАЗДЕЛ 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 (Активизировать точки останова).
 
 Вы можете уви

Обсуждение статьи: Подробное руководство по SoftICE. >>>


Комментарии к статье: Подробное руководство по SoftICE.

Сергей Середа (serge_sereda@ho 13.04.2005 08:19:46
А ничего страшного в том, что это - мой перевод, который официально лежит по адресам: http://consumer.nm.ru/translations/s-ice_ru.rar и http://consumer.nm.ru/translations/ice28add.rar
(и HTML-версия: http://consumer.nm.ru/translations/sidoshtm.rar)?
Нормально всё? Это я в том смысле, что про то, что перевод выполнен мной - ни слова. Это, господа, не есть хорошо.
---
zenit 28.08.2008 20:18:09
я вот не пойму чем сайс круче олли? тем что его хрен установишь??? на одной икспи просто не реагирует на ктрл д,на второй абсолютно такой же икспи при запуске нтайса вываливается синий экран смерти...токо на работе на старом третьем пне но с такой икспи удалось запустить,но на работе сцуко работать заставляют))) а олли тоже глючит-при попытке аттача процесса вешает этот процесс(((
---

При перепечатке ссылка на https://exelab.ru обязательна.



Видеокурс ВЗЛОМ