РАЗДЕЛ IV - Дополнительные Темы
ГЛАВА 11
Дополнительные Возможности
11.1 Использование Soft-ICE с другими Отладчиками
11.1.1 Отладчики, Использующие DOS
11.1.2 Команда ACTION с другими Отладчиками
11.1.3 Специальные Соображения
11.1.4 Использование Soft-ICE с CODEVIEW
11.1.5 Отладчики, Использующие Регистры Точек Останова 80386
11.2 Пользовательские Точки Останова
11.2.1 Пример Пользовательской Точки Останова
11.3 Окно в Графическом Режиме
11.4 Возможности Отладки с Отображаемой Памятью
11.5 Возможности Отладки с Расширенной Памятью
209
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.
210
Если вы хотите возвращаться к вашему отладчику после выполнения останова, вы
должны изменить 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.
211
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 Пользовательские Точки Останова
Время от времени вам может требоваться очень специфический набор условий
точки останова. Если специальные условия требуют ввода значений регистров или
памяти, вы можете написать подпрограмму спецификации точки останова.
212
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.
213
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
214
Установите команду 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, чтобы последующие точки останова не проходили через
вашу подпрограмму спецификации.
215
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страница# смещение
216
где указатель - число, определяющее, какой указатель
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 будут продолжать использовать
последние введенные указатель и страницу. Чтобы вернуться к обычной памяти,
используйте одну из вышеупомянутых
217
команд с сегментом, указанным в области адреса, например:
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 определяет адрес в указанном мегабайте,
где находится второй блок данных
для сравнения.
218
Пример:
C M 3 1000:2000 L10 3000:4000
Эта команда будет сравнивать первые 10 байтов
памяти, размещенной с 1000:2000, с первыми 10 байтами
памяти, размещенной с 3000:4000.
Заметьте:
Последующие использования команд D, E, S, F и C будут продолжать использовать
последний указанный мегабайт. Чтобы вернуться к мегабайту 0 (стандартная
память), выполните одну из вышеупомянутых команд с 0, указанным как мегабайт,
например:
D M 0
~~\ Перевел Сергей Середа, 1998, Кишинев 24-71-96, /~~
~~\ e-mail: serge_sereda@hotmail.com /~~
[ ВЕРНУТЬСЯ К ОГЛАВЛЕНИЮ ]
|