Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
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[=]длина]
длина -- Число инструкций
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 |


