ГЛАВА 4
Использование Команд Работы с Точками Останова
4.1 Введение
4.2 Установка Точек Останова
4.3 Управление Точками Останова
51
4.1 Введение
У Soft-ICE есть возможности работы с точками останова, обычно доступные
только в аппаратных отладчиках. Мощность и гибкость процессора 80386 дают
широкие возможности работы с точками останова без дополнительной аппаратуры.
Точки останова можно устанавливать на запись и чтение в ячейку памяти, запись
и чтение в диапазон (область) памяти, выполнение программы и доступ к портам.
Soft-ICE назначает одну шестнадцатеричную цифру (0-F) каждой точке останова.
Этот номер останова используется для обозначения точек останова, когда вы их
устанавливаете, удаляете, отменяете, восстанавливаете или редактируете.
Все точки останова Soft-ICE - "прилипающие". Это означает, что они не исчезают
автоматически после того, как они использовались; вы должны намеренно удалить
или отменить их, используя команды BC или BD. Soft-ICE может поддерживать 16
точек останова одновременно. Вы можете устанавливать до десяти точек останова
отдельного типа, кроме точек останова на ячейку памяти (BPM'ов), которых может
быть только четыре, из-за ограничений процессора 80386.
Для точек останова может быть определен параметр - счетчик. Параметр - счетчик
сообщает Soft-ICE, сколько раз точка останова должна игнорироваться перед
произведением останова.
52
4.2 Установка Точек Останова
Команды:
BPM, BPMB, BPMW, BPMD -- Устанавливают точку останова на доступ к
памяти или выполнение
BPR -- Устанавливает точку останова на диапазон памяти
BPIO -- Устанавливает точку останова на доступ к порту ввода/вывода
BPINT -- Устанавливает точку останова на прерывание
BPX -- Устанавливает/отменяет точку останова на выполнение
CSIP -- Устанавливает точку останова на CS:IP
BPAND -- Ожидает срабатывания многих точек
останова
53
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 -- Маска
Эти определители применимы только к
точкам останова на чтение и запись.
значение -- Значение размером байт, слово или двойное слово,
в зависимости от указанного размера.
54
Комментарии:
Команды 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
Эта команда определяет точку останова на выполнение.
Останов произойдет, когда в первый раз
55
будет достигнута инструкция по адресу 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.
56
BPR
BPR -- Устанавливает точку останова на диапазон памяти
Синтаксис:
BPR адрес-начала адрес-конца [опция] [C=счетчик]
адрес-начала,
адрес-конца -- адрес начала и адрес конца определяют
диапазон памяти.
опция - R, W, RW, T или TW
Комментарии:
Команда BPR позволяет устанавливать точку останова на диапазон памяти.
Все типы опций, кроме T или TW, заставляют программу выполнять
инструкцию, вызвавшую останов. Текущий CS:IP будет указывать
на следующую за точкой останова инструкцию.
Это - не точка останова на выполнение. Если нужно, чтобы происходил останов
при выполнении в диапазоне, должен использоваться R. Для точек останова на
диапазон выполнение инструкции рассматривается как чтение.
Если опция не определена, по умолчанию принимается W.
Точка останова на диапазон будет, в известных обстоятельствах, снижать
производительность системы. Любое чтение или запись в пределах 4КБ страницы,
которая содержит диапазон точки останова, анализируется Soft-ICE. Это
снижение производительности обычно незаметно, но оно может быть очень большим
в исключительных случаях.
Опции T и TW дают возможность обратной прогонки в указанном диапазоне. Они
не вызывают останова, но вместо этого сохраняют информацию об инструкциях,
которая может быть выведена позже командами TRACE или SHOW. Для получения
большей информации об обратной трассировке, см. главу 9.
57
Пример:
BPR B000:0 B000:1000 W
Эта команда определяет точку останова на диапазон памяти.
Останов произойдет, если произойдет любая запись в
область видеопамяти монохромного адаптера.
58
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.
59
Пример:
BPIO 21 W NE FF
Эта команда определяет точку останова на доступ к порту
ввода/вывода. Останов произойдет, если в регистр маски первого контроллера
прерываний будет записано значение,
отличное от FFH.
BPIO 3FE R EQ M 11XX XXXX
Эта команда определяет байтовую точку останова на чтение из порта
ввода/вывода. Останов произойдет при первом считывании из порта
ввода/вывода 3FE значения, у которого два старших бита установлены в 1.
Другие биты могут принимать любые значения.
60
BPINT
BPINT -- Устанавливает точку останова на прерывание
Синтаксис:
BPINT номер-прерывания [< AL | AH | AX >= значение] [C = счетчик]
номер-прерывания -- Номер прерывания из 0 - FF hex
значение -- Значение длиной в байт или слово
Комментарии:
Команда BPINT позволяет производить останов при выполнении аппаратного или
программного прерывания. Указывая как необязательный параметр значение
регистра AX, можно легко выделить определенные вызовы DOS или BIOS.
Если значение не определено, останов произойдет при выполнении прерывания,
определенного номером-прерывания. Это прерывание может быть аппаратным,
программным или внутренним прерыванием.
При выполнении прерывания необязательное значение сравнивается с указанным
регистром (AH, AL или AX). Если значение соответствует указанному регистру,
происходит останов.
Когда происходит останов, если прерывание было аппаратным, указатель инструк-
ции (CS:IP) будет указывать на первую инструкцию в процедуре обработки преры-
вания. Чтобы узнать, где происходило выполнение программы, когда произошло
прерывание, может использоваться команда INT?. Если прерывание было
программным, то при останове указатель инструкции (CS:IP) будет
указывать на инструкцию INT, вызвавшую останов.
61
Пример:
BPINT 21 AH=4C
Эта команда определяет точку останова на прерывание 21H.
Останов произойдет, когда будет вызвана функция DOS
4CH (завершить программу).
62
BPX
BPX -- Устанавливает/удаляет точку останова на выполнение
Синтаксис:
BPX [адрес] [C=счетчик]
Комментарии:
Команда BPX позволяет устанавливать или удалять точку останова типа point-and-
shoot на выполнение в исходном тексте. Когда курсор находится в окне кода,
адрес не требуется. Точка останова на выполнение устанавливается по адресу
текущего положения курсора. Если точка останова на выполнение уже была
установлена по адресу текущего положения курсора, то она будет
удалена.
Если окно кода не видимо или курсор - не в окне кода,
то должен быть определен адрес. Если определено только смещение, то
в качестве сегмента используется текущее значение регистра CS.
Техническое Примечание:
BPX использует для точек останова стиль прерывания 3, если указанный адрес
не принадлежит ROM. Это используется вместо регистра точек останова, чтобы
предоставить больше точек останова на выполнение. Если в ваших обстоятельствах
по некоторым причинам требуется использование регистра точек останова
(например, код не загружен) вы можете установить точку останова командой BPM.
Пример:
BPX.1234
Устанавливает точку останова на выполнение в строку 1234 исходного текста.
63
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 когда
выполнены условия точки останова.
64
BPAND
BPAND -- Ожидает срабатывания многих точек останова
Синтаксис:
BPAND список | * | OFF
список -- Ряд номеров-останова,
разделенных запятыми или пробелами
* -- Складывает по AND'у все точки останова
Комментарии:
Команда BPAND производит логическую операцию AND над двумя и более точками
останова, вызывая останов только, когда выполнены условия для всех точек
останова.
Иногда условия останова возникают, когда он вам не нужен, пока не будут
выполнены несколько различных условий. Команда BPAND позволяет определять
две или более точек останова, которые должны произойти перед производимым
действием. Эта функция позволяет устанавливать точки останова по более
сложным условиям.
Каждый раз, когда используется команда BPAND, указанные номера точек останова
добавляются к списку, пока не будет использована BPAND OFF.
Вы можете увидеть какие из номеров-останова объединены по AND'у, просматривая
список точек останова командой BL. Номера точек останова, объединенных по
AND'у, будут заканчиваться амперсантом (&).
Один раз объединенные по AND'у, точки останова остаются объединенными, пока не
будут удалены или пока BPAND не будет отключен.
65
Пример:
BPAND 0,2,3
Эта команда логически связывает условия точек останова 0, 2 и 3
между собой. Останов происходит, только когда выполнены условия всех
трех. Например, если, по крайней мере, однажды выполнены условия точек
останова 2 и 3, но условия точки останова 0 пока не выполнены вообще,
то действие не произойдет, пока не будут выполнены условия точки
останова 0.
66
4.3 Управление Точками Останова
Soft-ICE предоставляет несколько команд для управления точками останова.
Команды управления разрешают просматривать список, изменять, удалять,
активизировать и деактивировать точки останова. Точки останова идентифициру-
ются номерами-останова, которые являются шестнадцатеричный цифрами от 0 до F.
Вот команды управления точками останова:
BD -- Деактивирует точки останова
BE -- Активизирует точки останова
BL -- Выдает список точек останова
BPE -- Редактирует точку останова
BPT -- Использует точку останова как шаблон
BC -- Удаляет точки останова
67
BD
BD - Деактивирует точки останова
Синтаксис:
BD список | *
список -- Ряд номеров-останова, разделенных
запятыми или пробелами
* -- Деактивирует все точки останова
Комментарии:
Команда BD используется для временной деактивации точек останова. Они могут
вновь активизироваться командой BE (Активизировать точки останова).
Вы можете увидеть, какие из номеров-останова деактивированы, просматривая
список точек останова командой BL. Точки останова, которые деактивированы,
будут выделены звездочкой (*) после их номера-останова.
Пример:
BD 1,3
Эта команда временно деактивирует точки останова 1 и
3.
68
BE -- Активизирует точки останова
Синтаксис:
BE список | *
список -- Ряд номеров-останова, разделенных
запятыми или пробелами
* -- Активизирует все точки останова
Комментарии:
Команда BE используется для повторной активизации точек останова, которые были
деактивированы командой BD (Деактивировать точки останова).
Заметьте, что точка останова автоматически активизируется при ее определении.
Пример:
BE 3
Эта команда активизирует точку останова 3.
69
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 предшествует
звездочка (*), показывающая, что она была деактивирована.
70
BPE
BPE -- Редактирует точку останова
Синтаксис:
BPE номер-останова
Комментарии:
Команда BPE загружает описание точки останова в строку редактирования для
модификации. Тогда команда может быть отредактирована с использованием клавиш
редактирования и повторно введена нажатием ВВОДа. Эта команда предоставляет
быстрый способ изменения параметров существующей точки останова.
Пример:
BPE 1
Эта команда перемещает описание точки останова 1
в строку редактирования и удаляет точку останова 1. Нажатие
клавиши ВВОД вызовет повторный ввод
точки останова.
71
BPT
BPT -- Использует точку останова как шаблон
Синтаксис:
BT номер-останова
Комментарии:
Команда BPT использует описание существующей точки останова как шаблон для
новой точки останова.
Описание существующей точки останова загружается в строку редактирования.
Точка останова, определяемая номером-останова, не изменяется. Эта команда
предлагает быстрый путь создания новой точки останова, похожей
на существующую точку останова.
Пример:
BPT 3
Эта команда помещает шаблон точки останова 3 в
строку редактирования. При нажатии клавиши ВВОД
добавляется новая точка останова.
72
BC
BC -- Удаляет точки останова
Синтаксис:
BC список | *
список -- Ряд номеров-останова, разделенных
запятыми или пробелами
* -- Удаляет все точки останова
Комментарии:
Команда BC используется, чтобы навсегда удалить одну или более точек останова.
Пример:
BC *
Эта команда удаляет все точки останова.
~~\ Перевел Сергей Середа, 1998, Кишинев 24-71-96, /~~
~~\ e-mail: serge_sereda@hotmail.com /~~
[ ВЕРНУТЬСЯ К ОГЛАВЛЕНИЮ ]
|