Учебник хакера

         

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).




Содержание раздела