Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Руководство по Soft-ICE (DOS) - 6
- OS/2 это что? Половина операционной системы?

Сейчас мы используем интерактивный ассемблер 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. Другие биты могут принимать любое значение.

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay