Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PASOIB.doc
Скачиваний:
119
Добавлен:
17.09.2019
Размер:
4.95 Mб
Скачать

Приложение

6.1. Отладка программ в отладчике SoftIce

Отладчик SoftICE является наиболее мощным из существующих отладчиков общего назначения, с помощью которого можно отлаживать практически любые типы кодов, включая исполняемые файлы, драйверы устройств, DLL, OCX, а также статические и динамические VxD.

SoftICE может функционировать под операционными системами WINDOWS 95 и WINDOWS NT и состоит из отладчика уровня ядра и утилиты Symbol Loader, позволяющую загружать отладочную информацию. Данный отладчик обладает следующими привлекательными возможностями.

1. Отладка на уровне исходных кодов 32-битных приложений (Win32), драйверов устройств Windows NT (как пользовательского уровня, так и уровня ядра), драйверов Windows95, VxD, 16-битных Windows программ и DOS программ.

2. Отладка практически любых типов кодов, включая обработчики прерываний и ядро операционных систем Windows NT и Windows 95.

3. Установка прерываний на обращение к памяти как по чтению, так и по записи, на чтение/запись в порты ввода/вывода и на аппаратные прерывания.

4. Установка прерываний на сообщения Windows.

5. Задание условий возникновения прерываний и последовательности действий при их возникновении.

6. Показывает промежуток времени, прошедший до возникновения прерывания, используя счетчик процессора Pentium.

7. Отладка ядра операционной системы на одной машине.

8. Выдача различной внутренней служебной информации операционной системы.

9. Использование модема для подключения SoftICE к удаленному компьютеру. Это позволяет изучить проблемы в работе удаленного компьютера, например, причины краха системы.

10. Создание пользовательских макрокоманд.

SoftICE функционирует в нулевом кольце защиты и загружается в память до загрузки операционной системы WINDOWS путем запуска программы WINICE.EXE.

Из операционной системы Windows, в отладчик SoftICE выход осуществляется, как правило, при нажатии комбинации клавиш Ctrl+D.

Рабочий экран отладчика SoftICE представлено на рис. 6.1.

Рис. 6.1. Рабочее окно отладчика SoftICE

Экран SoftICE – основной инструмент при отладке приложения. Он подразделяется на 7 окон и строку подсказки, позволяющие контролировать различные стороны процесса отладки. В таблице 6.1. перечислены все окна в порядке убывания их значимости.

Окно SoftICE

Описание

Окно команд

Ввод команд и выдача сообщений

Окно кода

Вывод машинных инструкций и/или исходных кодов

Окно локальных переменных

Вывод содержимого текущего кадра стека

Окно слежения

Вывод значений переменных, указанных командой WATCH

Окно регистров

Вывод и изменение содержимого регистров и флагов. Если в ходе выполнения команды были изменены какие-либо регистры, то SoftICE подсвечивает их другим цветом.

Окно данных

Отображение и изменение содержимого участка памяти

Окно стека сопроцессора

Вывод содержимого стека (регистров) сопроцессора или MMX-регистров

Строка подсказки

Краткая информация о командах SoftICE

По умолчанию SoftICE выводит на экран строку подсказки и окна команд, кода и локальных переменных. В зависимости от задач можно открывать и закрывать другие необходимые окна. Для открывания и закрывания окон, а также для переключения из окна в окно используются следующие команды.

Команда открытия/закрытия

Команда переключения в окно

Окно

WC

Alt+C

Окно кода

WD

Alt+D

Окно данных

WF

Невозможно

Окно стека сопроцессора

WL

Alt+L

Окно локальных переменных

WR

Alt+R

Окно регистров

WW

Alt+W

Окно слежения

Команды отладчику SoftICE можно вводить только тогда, когда курсор находится в окне команд либо кода.

Синтаксис команд

Команды SoftICE имеют следующие общие правила построения:

1. Все команды представляют собой нечувствительные в регистру строки длиной от 1 до 6 символов.

2. Адрес в SoftICE может быть представлен парой селектор:смещение или сегмент:смещение, либо одним смещением.

3. В используемых выражениях могут использоваться:

Символы группировки – круглые скобки ‘(‘, ‘)’.

Числа в шестнадцатиричном или десятичном формате.

Адреса.

Номера строк.

Строковые литералы.

Идентификаторы.

Операторы.

Встроенные функции.

Регистры.

В окне регистров детально представлено, также, значение регистра флагов.

Флаг

Описание

Флаг

Описание

o

Флаг переполнения

z

Флаг нуля

d

Флаг направления

a

Флаг дополнительного переноса

i

Флаг разрешения прерывания

p

Флаг четности

s

Флаг знака

с

Флаг переноса

Строчный неподсвеченный символ означает, что флаг не установлен и имеет значение “0”. Выделенный заглавный символ показывает, что флаг имеет значение “1”. Например, o d I s Z a p c.

Переключение значения флага, когда курсор находится в одном из них осуществляется клавишей INSERT.

Использование прерываний в SoftICE

Одновременно в SoftICE можно установить до 256 прерываний. SoftICE поддерживает следующие типы контрольных точек.

1. Прерывания на инструкции, располагающиеся по конкретным адресам в памяти. Данные типы прерываний устанавливаются командой BPX (либо щелчком мыши на команде). SoftICE заменяет существующие инструкции командами INT 3.

2. Прерывания на обращение к памяти. SoftICE использует отладочные регистры для прерывания работы, когда читается (или исполняется) определенный байт, слово или двойное слово в памяти, или по этому адресу производится запись. Данный тип прерываний основан на использовании отладочных регистров DRx и чрезвычайно полезен для выяснения вопроса, когда и где происходит изменение программных переменных, а также для установки контрольных точек в исполняемом коде, размещенном в памяти «только для чтения». Для установки такого типа прерываний используется команда BPM.

3. Контрольные точки на прерываниях. SoftICE перехватывает прерывания, модифицируя таблицу дескрипторов прерываний. Для таких контрольных точек используется команда BPINT.

4. Прерывания ввода/вывода. SoftICE использует расширения отладочных регистров процессоров Pentium и Pentium Pro, чтобы отслеживать инструкции IN и OUT по заданному номеру порта. Этот тип прерываний устанавливается командой BPIO.

5. Прерывания на сообщения Windows. SoftICE отслеживает поступление в окно определенного сообщения (или сообщений из заданного диапазона). Для установки такой точки прерывания используется команда BMSG.

Любое из данных прерываний может быть задано со следующими дополнительными параметрами.

Условное выражение [IF выражение]. Для возникновения прерывания выражение должно иметь в результате ненулевое значение TRUE.

Действие при прерывании [DO “команда1; команда2; …”]. При возникновении прерывания будет автоматически выполнена указанная последовательность команд.

Форматы команд

Команда BPX

BPX [адрес] [IF выражение] [DO “команда1; команда2; …”]

Здесь, адрес указывает адрес установки прерывания. В качестве него может быть указан непосредственный адрес, либо имя вызываемой функции.

Например, BPX MessageBoxA,

Команда BPM

BPM [B|W|D] адрес [R|W|RW|X] [отладочный регистр] [IF выражение] [DO “команда1; команда2; …”]

BPM, BPMB – прерывание по обращение к заданному байту, BPMW – к слову, BPMD – к двойному слову.

R, W, RW – прерывание по чтению, записи, или по чтению и записи.

X – прерывание по исполнению указанного адреса (в отличие от команды BPX не производится модификация кода).

Отладочный регистр – указывает, какой регистр должен задействоваться при реализации команды (как правило, определяется автоматически).

Например, команда BPMD MyGlobalVariable W IF MyGlobalVariable==5 устанавливает прерывание по записи значения “5” в переменную размером двойное слово с именем MyGlobalVariable.

Команда BPINT

BPINT номер-прерывания [IF выражение] [DO “команда1; команда2; …”]

Например, BPINT 2E IF EAX==1E.

Команда BPIO

BPIO номер-порта [R|W|RW]

[IF выражение] [DO “команда1; команда2; …”]

R,W,RW – прерывание по чтению из порта (IN) записи в порт (OUT) или по любой из них.

Команда BMSG

BMSG дескриптор-окна [L] [1-сообщение-диапазона [последнее-сообщение-диапазона]] [IF выражение] [DO “команда1; команда2; …”]

L означает, чтобы сообщение было просто отображено в окне команд без активизации SoftICE.

Диапазоны сообщений показывают, какие сообщения необходимо фиксировать.

Например, BMSG 1001E WM_NCPAINT

Для удаления контрольных точек используется команда BC, например, BC MessageBoxA. Для удаления всех контрольных точек можно воспользоваться командой BC *.

Для того чтобы выключить контрольную точку без удаления необходимо воспользоваться командой BD, например BD MessageBoxA. Для включения отключенной контрольной точки существует команда BE.

Отображение информации в окне данных

Каждая строка окна данных отображает 16 байт области памяти в текущем формате в виде байт, слов, двойных слов или коротких или длинных вещественных значений.

Для изменения адреса отображаемой области данных необходимо указать адрес в команде D. Можно казать как непосредственный адрес, так и сослаться на регистр.

Например,

:D es:1000 – выводит содержимое памяти, начиная с адреса ES:1000h

:D ESI – выводит содержимое памяти, начиная с адреса, указанного в регистре ESI.

Команда D может использоваться одновременно и для указания формата отображения.

DB – формат побайтового отображения, DW – формат отображения в виде слов, DD – в виде двойных слов.

Например, DW es:1000

Пошаговое исполнение кода

Выполнять код в пошаговом режиме можно используя функциональную клавишу F8. По клавише F12 программа выполняется до тех пор, пока не встретится инструкция RET, ее можно эффективно использовать для выхода из подпрограмм.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]