Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Руководство по Soft-ICE (DOS) - 22
Сидит мужик перед компьютером, в DOOM играет. Давно сидит, мастерство оттачивает. Тут сзади появляется дьявол и говорит:
- Я выполню любые твои три желания, но потом, сам понимашь, я тебя возьму в ад.
Мужик:
- IDDQD, IDKFA И В АД!!!!

По этой причине, хорошая практика - отключать точки останова 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 определяет адрес в указанном мегабайте, где находится второй блок данных для сравнения.

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