WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!

Pages:     || 2 | 3 | 4 |
-- [ Страница 1 ] --

Using SoftICE Руководство пользователя Windows NT™ Windows® 98 Windows® 95 Windows® 3.1 DOS Compuware, логотип Compuware, NuMega, логотип NuMega, SoftICE являются торговыми или зарегистрированными

торговыми марками фирмы Compuware Corporation. К данному переводу эта уважаемая фирма никакого отношения не имеет. Перевод выполнен на сайте Оглавление Предисловие...................................................................................................... 7 Цель данного руководства.................................................................................................7 Для кого предназначено данное руководство...............................................................7 Организация руководства.................................................................................................7 Принятые обозначения......................................................................................................8 Как пользоваться этим руководством.............................................................................9 Другая полезная документация........................................................................................9 Поддержка пользователей...............................................................................................10 По общим вопросам....................................................................................................10 По техническим вопросам........................................................................................ 1. Знакомство с SoftICE................................................................................. Общая характеристика....................................................................................................11 SoftICE...........................................................................................................................11 Symbol Loader............................................................................................................... 2. Учебник SoftICE.......................................................................................... Введение..............................................................................................................................14 Загрузка SoftICE................................................................................................................14 Пример построения приложения GDIDEMO..............................................................15 Загрузка приложения GDIDEMO..................................................................................15 Управление экраном SoftICE...........................................................................................16 Трассировка и пошаговое выполнение кода...............................................................17 Просмотр локальных данных..........................................................................................18 Установка точек прерывания..........................................................................................18 Установка одноразовой контрольной точки.........................................................18 Установка постоянной точки прерывания............................................................19 Использование информационных команд SoftICE....................................................20 Использование идентификаторов и таблиц символов..............................................21 Установка условного прерывания.................................................................................21 Установка точки прерывания BPX..........................................................................22 Редактирование точки прерывания........................................................................22 Установка контрольной точки чтения/записи в память........................................... 3. Загрузка кода в SoftICE............................................................................. Концепции отладки...........................................................................................................25 Подготовка к отладке прикладных программ.......................................................25 Подготовка к отладке драйверов устройств и VxD..............................................26 Запуск SoftICE вручную...................................................................................................26 Загрузка SoftICE для Windows 95 или Windows 98...............................................26 Запуск SoftICE для Windows NT............................................................................... Оглавление Создание приложений с отладочной информацией..................................................27 Использование Symbol Loader для трансляции и загрузки файлов........................28 Изменение параметров настройки модуля..................................................................29 Изменение Общих Параметров настройки (вкладка General)..........................30 Изменение параметров трансляции (вкладка Translation).................................31 Изменение параметров отладки (вкладка Debugging)........................................33 Задание исходных файлов программы.........................................................................34 Удаление таблиц символов..............................................................................................34 Запуск утилиты Symbol Loader из командной строки DOS......................................35 Использование утилиты загрузчика символов командной строки.........................36 Синтаксис команд NMSYM......................................................................................36 Использование NMSYM для трансляции отладочной информации................37 Использование NMSYM для загрузки модуля и отладочной информации....40 Использование NMSYM для загрузки таблиц символов или экспортов.........42 Использование NMSYM для выгрузки отладочной информации....................43 Использование NMSYM для сохранения протокола работы в файл....................43 Получение информации об утилите NMSYM....................................................... 4. Интерфейс SoftICE..................................................................................... Введение..............................................................................................................................45 Universal Video Driver.......................................................................................................45 Установка размера видеопамяти.............................................................................46 Вызов экрана SoftICE........................................................................................................46 Отключение SoftICE на этапе загрузки........................................................................46 Содержимое экрана SoftICE...........................................................................................46 Изменение размера экрана SoftICE........................................................................47 Управление окнами SoftICE......................................................................................48 Копирование и вставка данных в окнах.................................................................50 Ввод команд с помощью мыши................................................................................50 Получение помощи.....................................................................................................50 Окно команд.......................................................................................................................51 Листание содержимого окна команд......................................................................51 Ввод команд..................................................................................................................52 Вызов предыдущих команд.......................................................................................54 Использование макрокоманд времени исполнения............................................54 Сохранение содержимого буфера протокола окна команд в файл.................56 Связанные с окном команды....................................................................................56 Окно кодов..........................................................................................................................56 Управление окном кодов...........................................................................................56 Отображение информации.......................................................................................57 Ввод команд из окна кодов........................................................................................59 Окно локальных переменных.........................................................................................60 Управление окном локальных переменных..........................................................60 Раскрытие и сжатие содержимого стека...............................................................61 Связанные с окном команды.................................................................................... Оглавление Окно слежения..................................................................................................................61 Управление окном слежения....................................................................................61 Создание выражений для отслеживания их значений.......................................62 Отображение информации.......................................................................................62 Развертывание и сжатие выражений.....................................................................62 Связанные с окном команды....................................................................................63 Окно регистров..................................................................................................................63 Управление окном регистров...................................................................................63 Отображение информации.......................................................................................63 Изменение содержимого регистров и значений флагов....................................64 Связанные с окном команды....................................................................................64 Окно данных.......................................................................................................................65 Управление окном данных........................................................................................65 Отображение информации.......................................................................................65 Изменение адреса отображаемой памяти и формата данных..........................66 Изменение содержимого памяти.............................................................................67 Присвоение выражения............................................................................................67 Связанные с окном команды....................................................................................67 Окно стека..........................................................................................................................67 Окно регистров процессора Pentium III.......................................................................68 Окно стека FPU..................................................................................................................68 Отображение информации....................................................................................... 5. Использование SoftICE............................................................................. Отладка нескольких программ одновременно............................................................70 Перехват ошибок...............................................................................................................70 32 битный код защищенного режима кольца 3 (программы Win32)....................70 Драйверы кольца 0 (драйверы устройств режима ядра)....................................71 16 битный код защищенного режима кольца 3 (16 битные Windows программы)......................................................................71 Контекст адресов...............................................................................................................72 Использование команд '.' (точка) INT 0x41..................................................................72 Переходы из 3 кольца защиты к 0 кольцу — общие сведения................................. 6. Использование прерываний...................................................................... Введение..............................................................................................................................75 Типы контрольных точек, поддерживаемых SoftICE................................................75 Дополнительные возможности контрольных точек............................................76 Прерывание исполняемых команд.........................................................................76 Прерывания на обращение к памяти......................................................................77 Контрольные точки на прерываниях......................................................................78 Прерывания на ввод/вывод......................................................................................78 Прерывания на сообщения Windows......................................................................79 Понятие о контексте прерывания.................................................................................80 Виртуальные контрольные точки..................................................................................81 Задание действий при прерывании............................................................................... Оглавление Условные прерывания......................................................................................................82 Функции статистики условных прерываний........................................................83 Использование локальных переменных в условных выражениях..................85 Использование стека в условных выражениях....................................................86 Производительность..................................................................................................88 Дублирование контрольных точек..........................................................................88 Затраченное время............................................................................................................88 Статистика прерываний..................................................................................................89 Ссылка на контрольную точку в выражениях............................................................89 Управление контрольными точками.............................................................................89 Использование встроенных контрольных точек........................................................ 7. Использование выражений..................................................................... Выражения..........................................................................................................................91 Операторы....................................................................................................................91 Приоритет операторов...............................................................................................93 Составные части выражений...................................................................................94 Типы выражений.........................................................................................................99 Приведение типов.....................................................................................................101 Исчисление идентификаторов...............................................................................102 Использование операторов адресации с идентификаторами......................... 8. Загрузка символов для системных компонентов............................. Загрузка экспортируемых символов для DLL и EXE файлов...............................104 Использование неименованных точек входа......................................................105 Использование экспортируемых имен в выражениях.....................................105 Динамическая загрузка 32 битного DLL экспорта............................................105 Использование символьных файлов Windows NT (.DBG) с SoftICE.....................106 Использование символьных файлов Windows 95/98 (.SYM) с SoftICE........................ 9. Использование SoftICE с модемом....................................................... Введение............................................................................................................................107 Аппаратные требования................................................................................................107 Установление соединения.............................................................................................107 Использование программы SERIAL32.EXE..........................................................108 Команда DIAL.............................................................................................................109 Команда ANSWER..................................................................................................... 10. Настройка SoftICE.................................................................................. Изменение начальных установок SoftICE..................................................................111 Изменение общих установок (General)................................................................112 Предварительная загрузка символической информации и исходного кода (Symbols)...............................................................................113 Предварительная загрузка экспортируемой информации (Exports).................115 Настройка удаленной отладки (Remote Debugging) через Интернет.................115 Настройка удаленной отладки (Remote Debugging) через модемное или последовательное соединение...................................117 Изменений назначений клавиатуре (Keyboard Mappings)..............................118 Работа с постоянными макрокомандами (Macro Definitions)..........................120 Параметры для устранения неисправностей (Troubleshooting)..................... Оглавление 11. Исследование Windows NT..................................................................... Обзор..................................................................................................................................124 Ресурсы для квалифицированных разработчиков............................................124 Внутри ядра Windows NT...............................................................................................127 Управление процессорами Intel.............................................................................128 Распределение памяти в Windows NT..................................................................132 Подсистема Win32...........................................................................................................136 Внутри CSRSS.............................................................................................................136 Объекты USER и GDI................................................................................................138 Адресное пространство процесса..........................................................................142 Функции управления кучами................................................................................. 12. Использование BoundsChecker Driver Edition.................................. Что такое BoundsChecker Driver Edition?...................................................................151 Настройка BoundsChecker............................................................................................151 Команда EVENT...............................................................................................................152 Просмотр событий в окне событий.......................................................................153 Просмотр событий в окне команд.........................................................................154 Просмотр результатов наблюдений............................................................................154 Условные обозначения............................................................................................154 Поиск событий..........................................................................................................155 Отображение сводной информации.....................................................................155 Отображение детальной информации.................................................................155 Фильтрация событий......................................................................................................156 Фильтрация по типу событий.................................................................................157 Фильтрация по параметрам.................................................................................... Приложение А. Сообщения об ошибках................................................. 159 Приложение B. Поддерживаемые видеоадаптеры.............................. 164 Приложение C. Устранение проблем SoftICE........................................ 167 Приложение D. Расширения отладчика уровня ядра.......................... Требования для использования расширения отладчика уровня ядра......................... Приложение E. События, отслеживаемые BoundsChecker................. Вызовы API функций ядра Windows NT....................................................................171 Стандартные процедуры драйверов и функции обратного вызова.....................172 Стандартные процедуры драйверов.....................................................................172 Специальные функции обратного вызова...........................................................172 Процедуры быстрого ввода/вывода.....................................................................173 Программы DriverWorks..........................................................................................173 Различные системные события....................................................................................173 DebugPrint...................................................................................................................173 Error Events.................................................................................................................173 Системные вызовы Windows NT...........................................................................173 Исключение "Divide by zero" (Деление на ноль)................................................173 Двойные ошибки (Double Faults)...........................................................................173 Ошибки при обращении к отсутствующей странице (Page Faults (Int0E)).. Оглавление Ошибки..............................................................................................................................174 Ошибки возврата из API функции........................................................................174 Ошибки передачи параметров...............................................................................175 Нарушение IRQL.......................................................................................................175 Стековые ошибки..................................................................................................... Словарь........................................................................................................... 176 Дополнение. Установка SoftICE................................................................ Введение............................................................................................................................178 Требования к аппаратному и программному обеспечению...................................178 Варианты вывода информации SoftICE на экран...............................................179 Подготовка к установке.................................................................................................181 Установка..........................................................................................................................181 Действия после установки программы.......................................................................184 Настройка BOOT.INI для поддержки одного процессора в мультипроцессорной системе.......................................................................185 Настройка загрузки SoftICE под управлением Windows 95.............................185 Подключение удаленного компьютера через последовательный порт.........186 Разрешение проблем с видеоадаптерами................................................................... Некоторые книги предназначены для того, чтобы с ними ознакомиться, другие для того, чтобы их проглотить, и лишь немногие, чтобы их обдумывать и усваивать.

Сэр Френсис Бэкон Some books are to be tasted, others to be swallowed, and some few to be chewed and digested.

Sir Francis Bacon Предисловие Цель данного руководства SoftICE является мощным отладчиком общего назначения, с помощью которого можно отлаживать практически любые типы кодов, включая исполняемые файлы, драйверы устройств, DDL, OCX, а также статические и динамические VxD. Данное руководство описывает, как установить и использовать SoftICE для загрузки и отладки программ под управлением Windows 95, Windows 98 и Windows NT. Так как многие программисты предпочитают учиться, непосредственно экспериментируя с програм мой, в данное руководство включен раздел, который посвятит Вас в основы отладки.

Для кого предназначено данное руководство Это руководство предназначено для программистов, которые хотят использовать SoftICE для отладки программ для операционных систем Windows 95/98 и Windows NT.

Организация руководства Руководство пользователя организовано следующим образом: Глава 1. "Знакомство с SoftICE"  Кратко описывает компоненты пакета и их характеристики, и объясняет, как можно связаться с Центром технической поддержки фирмы NuMega. Глава 2. "Наставник по SoftICE"  Рассказывает об основах отладки программ, включая трассировку кода, про смотр содержимого локальных переменных и структур, установку различных контрольных точек и просмотр таблиц с символьной информацией. Глава 3. "Загрузка кода в SoftICE"  Объясняет, как использовать утилиту Symbol Loader для загрузки в отладчик различных типов программ. Глава 4. "Интерфейс SoftICE"  Описывает интерфейс SoftICE.

 Несмотря на то, что структура руководства "Using SoftICE" претерпела некоторые изменения, само его описание в данной главе не было отредактировано. Мы взяли на себя смелость исправить возникшее несоответствие нумерации глав и добавили неупомянутые новые главы. (Здесь и далее — примечания редактора перевода.) Предисловие Глава 5. "Использование SoftICE"  Рассказывает о способах перехвата ошибок исполнения программ, контекстах ад ресов, использовании команд INT 0x41 '.' (точка) и переходах из кольца 3 в кольцо 0. Глава 6. "Использование прерываний"  Объясняет, как устанавливать на исполняемые команды, на любые обраще ния к памяти, на прерывания, на чтение или запись в порты ввода/вывода. Глава 7. "Использование выражений"  Описывает правила составления выражений при работе с контрольными точ ками. Глава 8. "Загрузка символов для системных компонентов"  Рассказывает, как загружать экспортируемые.DLL и.EXE файлами символы, и как использовать в SoftICE файлы с отладочной информацией для Windows NT. Глава 9. "Использование SoftICE с модемом"  Описывает, как установить модемную связь для управления SoftICE с удален ного компьютера. Глава 10. "Настройка SoftICE"  Объясняет, как использовать конфигурационный файл SoftICE для настройки окружения отладчика, предварительной загрузки отладочной информации и настройки удаленной отладки, как модифицировать клавиатуру для Ваших нужд и создавать макрокоманды, и описывает варианты решений некоторых возникающих проблем. Глава 11. "Исследование Windows NT"  Краткий обзор строения операционной системы Windows NT. Глава 12. "Совместная работа с BoundsChecker Driver Edition" Приложение A. "Сообщения об ошибках"  Поясняет выдаваемые в процессе работы SoftICE сообщения. Приложение B. "Поддерживаемые видеоадаптеры"  Здесь приведен список поддерживаемых отладчиком видеоадаптеров. Приложение C. "Устранение проблем SoftICE"  Объясняет, каким образом можно решить некоторые возникающие в процес се работы проблемы. Приложение D. "Расширение для отладчика ядра" Приложение E. "Список событий, отслеживаемых отладчиком BoundsChecker" Словарь  Дополнение. "Установка SoftICE"  Перечисляет аппаратные и программные требования SoftICE и поясняет, как установить отладчик для операционных систем Windows 95 и Windows NT.

Принятые обозначения В данном руководстве приняты следующие обозначения: Обозначение Enter курсив Описание Указывает, что Вам следует набрать текст и нажать кла вишу RETURN или щелкнуть по кнопке OK. Обозначает самую разную информацию, например, имя библиотеки.

Продолжение на следующей странице  Эта глава была исключена из оригинального руководства, однако, мы решили со хранить ее и приводим в конце перевода в виде дополнения.

Как пользоваться этим руководством Обозначение Описание Используется в инструкциях и в примерах программ, чтобы указать символы, которые Вам следует набрать на клавиатуре.

МАЛЫЕ ПРОПИСНЫЕ Обозначают элементы пользовательского интерфейса, такие, например, как кнопки или меню. Обозначают имена директорий и файлов, ключевые слова и акронимы.

ПРОПИСНЫЕ Как пользоваться этим руководством В следующей таблице предлагаются различные варианты использования данно го руководства на основании Вашего опыта отладки приложений: Опыт отладки С чего начать Изучение главы 2 "Наставник по SoftICE" Прочитать главу 3 "Загрузка кода в SoftICE" и главу 4 "Управление SoftICE" Прочитать главу 3 "Загрузка кода в SoftICE", а за тем просмотреть главу 4 "Управление SoftICE" об использовании мыши и окон слежения и локаль ных переменных Опыт использования от ладчиков отсутствует Имеется опыт использо вания других отладчиков Опыт использования ранних версий SoftICE Другая полезная документация В дополнение к данному руководству компания NuMega выпускает следующую документацию по отладчику SoftICE: Справочник по командам SoftICE  В справочнике в алфавитном порядке описаны все команды SoftICE. Дается полное описание синтаксиса команд и выводимая ими информация, а также приведены примеры, поясняющие их использование. Встроенная система подсказок  Комплекс SoftICE оснащен контекстно зависимой системой подсказки для программы Symbol Loader, а также строкой помощи для команд отладчика. Документация в электронном виде  Как руководство пользователя, так и справочник по командам SoftICE доступ ны в электронном виде. Для их использования необходимо запустить про грамму Acrobat Reader и открыть файлы "Using SoftICE" (данное руководство) или "SoftICE Command Reference" (Справочник по командам).

Предисловие Поддержка пользователей По общим вопросам Служба поддержки пользователей фирмы NuMega позволит Вам получить ответы на любые вопросы, касающиеся обновления программы, серийных номеров, и связан ные с поставками программных продуктов. Обращайтесь в любые дни с понедельника по пятницу с 830 до 530 по восточно американскому времени (EST) по телефонам: 888 283 9896 — для жителей США и Канады;

+1 603 578 8103 — для жителей других стран.

По техническим вопросам Центр технической поддержки фирмы NuMega может помочь Вам в разреше нии любых вопросов, начиная с установки продукта, и кончая различными техни ческими проблемами. Прежде чем обратиться на фирму, внимательно прочтите соответствующие разделы документации и ReadMe файлов. С центром технической поддержки можно связаться следующими способами: E mail: Укажите серийный номер используемого Вами продукта, как можно подробнее опишите возникшие у Вас проблемы и направьте письмо по адресу Tech@numega.com. WWW Наша база знаний доступна по адресу www.numega.com, раздел Support (Поддержка). Телефон Поддержка по телефону является платной услугой (помощь в вопросах установки и запуска продуктов предоставляется бесплатно) и доступ на с понедельника по пятницу с 830 до 530 по восточно американскому времени (EST). При обращении в службу имейте наготове номер вер сии продукта и его серийный номер. Звоните по телефонам: 888 NUMEGA S — для жителей США и Канады;

+1 603 578 8100 — для жителей других стран. Факс Укажите серийный номер используемого Вами продукта, как мож но подробнее опишите возникшие у Вас проблемы и направьте факс по номеру 603 578 8401. Прежде чем обращать в службы поддержки фирмы NuMega, пожалуйста подго товьте следующую информацию: Номер версии и серийный номер продукта. Конфигурацию системы: версия операционной системы, параметры сети, ко личество оперативной памяти, переменные окружения и путь. Название и версию используемого Вами компилятора и линкера и параметры, с которыми они запускаются. Описание проблемы;

параметры инициализации, сообщения об ошибках, дамп стека, содержание всех диагностических сообщений. Если проблема возникает постоянно, то опишите способ ее воспроизведения.

Для великого эксперимента чрезвычайно важна одна вещь — сам экспериментатор.

Уолтер Бейджхот To a great experience one thing is essential, an experiencing nature.

Walter Bagehot 1. Знакомство с SoftICE Общая характеристика Приложение SoftICE выпускается как для операционной системы Windows 95, Windows 98, так и для Windows NT, и состоит из отладчика уровня ядра SoftICE и утилиты Symbol Loader. Собственно программа SoftICE (далее просто — SoftICE) представляет собой многоцелевой отладчик, который может быть использован для отладки практически любых типов программ, включая обработчики прерываний и драйверы ввода/вывода. Утилита Symbol Loader загружает отладочную информа цию Вашего модуля для использования ее в SoftICE, помогает составить строку инициализации и позволяет сохранять протокол работы SoftICE в файл. В после дующих разделах данной главы дается краткое описание обоих программ.

SoftICE SoftICE сочетает в себе мощь аппаратного отладчика с легкостью использования символьного отладчика. Он предоставляет возможность установки прерываний, подобных аппаратным, которые сохраняются, несмотря на все манипуляции опе рационной системы с виртуальной памятью. SoftICE позволяет просматривать ис ходные тексты отлаживаемых Вами программ и обращаться к локальным и гло бальным переменным по их символическим именам. SoftICE обладает следующими привлекательными особенностями: Отладка на уровне исходных кодов 32 битных приложений (Win32), драйве ров устройств Windows NT (как пользовательского уровня, так и уровня ядра), драйверов Windows 95 и Windows 98, VxD, 16 битных Windows программ и DOS программ. Отладка практически любых типов кодов, включая обработчики прерываний и ядро операционных систем Windows 95, Windows 98 и Windows NT. Установка прерываний на обращение к памяти как по чтению, так и по запи си, на чтение/запись в порты ввода/вывода и на аппаратные прерывания. Установка прерываний на сообщения Windows. Задание условий возникновения прерываний и последовательности действий при их возникновении. Показывает промежуток времени, прошедший до момента возникновения прерывания, используя счетчик процессора Pentium. Отладка ядра операционной системы на одной машине.

1. Знакомство с SoftICE Выдача внутренней информации операционной системы, такой как: полная информация о процессах и потоках;

распределение виртуальной памяти процесса;

точки входа ядра;

полная информация об объектах типа драйвер и устройство;

параметры кучи Win32;

кадры структурной обработки исключений;

экспорт DLL. Позволяет использовать команду WHAT для идентификации имени или выра жения, если они могут быть приведены к одному из известных отладчику ти пов. Автоматическое появление экрана SoftICE при возникновении необрабаты ваемого исключения. Использование модема для подключения SoftICE к удаленному компьютеру. Это позволяет изучить проблемы в работе удаленного компьютера, например, причины краха системы. Поддержка набора инструкция MMX. Создание пользовательских макрокоманд. Как устроен отладчик SoftICE SoftICE для Windows 95 и Windows 98 состоит из 2 файлов виртуальных драйве ров (.VxD), а SoftICE для Windows NT из 2 драйверов устройств уровня ядра. Windows 95, Windows 98 (VxD) WINICE.EXE SIWVID.386 Windows NT (драйверы уровня ядра) NTICE.SYS SIWVID.386 Описание Обеспечивает собственно отладку Обеспечивает поддержку видеосистемы Вашего компьютера Замечание: SoftICE для Windows NT должен загружаться самой операционной системы, так как он встраивается как драйвер устройств. Следова тельно, Вы не можете отлаживать такие составные части Windows NT, как фрагменты кодов загрузки драйверов DriverEntry, подпрограммы инициализации HAL и NTOSKRNL, и коды загрузчиков Windows NT или NTDETECT. Интерфейс пользователя SoftICE Вне зависимости от платформы SoftICE имеет общий интерфейс для отладки приложений. Пользовательский интерфейс разработан для обеспечения макси мального удобства работы, но не в ущерб устойчивости системы. Для того, чтобы обеспечить возможность появления экрана SoftICE в любой момент без нарушения работы системы, отладчику необходимо непосредственно взаимодействовать с ап паратным обеспечением. Исходя из этого, SoftICE использует полноэкранный сим вольный режим вывода информации:

 Начиная с версии 3.2, благодаря включению в пакет "универсального" видео драйвера, SoftICE может работать в текущем видеорежиме без переключения в текстовый режим.

Общая характеристика Подробно расположение информации на экране SoftICE описано в главе 4 "Управление SoftICE".

Symbol Loader Утилита Symbol Loader (Символьный загрузчик) является программой, которая по зволяет извлекать отладочную информацию из Ваших,.EXE,.DLL и.OCX файлов, статических и динамических виртуальных драйверов (VxD), драйверов устройств и за гружать ее в SoftICE. Утилита также позволяет: настраивать типы и количество загружаемой в отладчик информации в соот ветствии с Вашими потребностями;

автоматически загружать приложение и устанавливать прерывание на точку его входа;

сохранять результаты Вашей работы в файл. Общий вид окна Symbol Loader показан на следующем рисунке:

Кроме графического режима работы, Symbol Loader поддерживает интерфейс командной строки, что позволяет использовать многие его свойства в окне DOS и автоматизировать большинство его функций. Кроме того, вместе с SoftICE постав ляется дополнительная утилита командной строки (NMSYM), с помощью которой можно загружать отладочную информацию в пакетном режиме.

Теперь мы обсудим борьбу за существование более детально.

Чарльз Дарвин We will now discuss in a little more detail the struggle for existence.

Charles Darwin 2. Учебник SoftICE Введение Эта глава позволит Вам получить необходимый начальный опыт отладки прило жений Windows, продемонстрирует основные этапы отладки приложений и драй веров. В течение этого урока вы узнаете, как: загрузить SoftICE;

сформировать приложение;

загрузить исходный код приложения и файлы с отладочной информацией;

трассировать и пошагово выполнять исходные и машинные коды;

просматривать локальные данные и структуры;

устанавливать контрольные точки и точки останова;

использовать команд SoftICE для исследования состояния приложения;

работать с символическими именами и таблицами символов;

изменять контрольные точки таким образом, чтобы они активизировались лишь при определенных условиях. Каждый раздел в учебнике построен на основе предыдущего, так что их следует изучать по порядку. В качестве примера в учебнике используется приложение GDIDEMO, предна значенное для демонстрации возможностей GDI операционных систем Windows. GDIDEMO размещен в каталоге \EXAMPLES\GDIDEMO Вашего CDROM’а, но для работы его следует скопировать на жесткий диск. Вы можете заменить пример другими, в том числе и Вашими своими собствен ными приложениями. Принципы отладки и функции SoftICE, использованные в данной главе, применимы в большинстве случаев. Замечание: Примеры этого учебника основаны на работе под операционной сис темой Windows NT. При использовании Windows 95 и Windows 98 могут наблюдаться незначительные отличия.

Загрузка SoftICE Если Вы запускаете SoftICE под Windows 95, Windows 98 или под Windows NT в режиме Boot, System или Automatic, то SoftICE автоматически запускается при ка ждом запуске или перезагрузке компьютера. В ручном (Manual) режиме под Windows NT SoftICE автоматически загружаться не будет. Для загрузки SoftICE из Windows 95 или Windows 98 введите команду WINICE. В случае загрузки SoftICE под Windows NT выполните одно из перечисленных ниже действий: Выберите в меню пункт "START SOFTICE".

Пример построения приложения GDIDEMO Введите команду: NET START NTICE.

Замечание: Запустив SoftICE, Вы не сможете его выгрузить до полной переза грузки компьютера. Для проверки загрузки SoftICE нажмите комбинацию клавиш Ctrl D. Должен появится экран SoftICE. Для возвращения в систему используйте команды X (eXit — Выход) или G (Co to — Перейти к) (функциональная клавиша F5).

Пример построения приложения GDIDEMO Первый шаг при подготовке к отладке приложения Windows — это компиляция и компоновка его с отладочной информацией. Для этого в демонстрационном при ложении GDIDEMO уже создан makefile. Для построения программы выполните следующие действия: 1 Откройте окно DOS. 2 Перейдите в директорию, где находится исходный код приложения. 3 Выполните команду NMAKE: C:\MSTOOLS\SAMPLES\WIN32\GDIDEMO>NMAKE Если GDIDEMO находится в другой директории, укажите правильный путь.

Загрузка приложения GDIDEMO При загрузке приложения происходит создание символьного файла из отладоч ной информации и загрузка символьных и исходных файлов в SoftICE. Для загруз ки приложения GDIDEMO выполните следующие действия: 1 Запустите утилиту Symbol Loader. Появится окно символьного загрузчика.

2 Выберите "OPEN MODULE" из меню "FILE" или щелкните по кнопке "OPEN". Появится диалог выбора файла. 3 Выберите файл GDIDEMO.EXE и нажмите клавишу "OPEN". 4 Выберите пункт "LOAD" из меню "MODULE" или щелкните по кнопке "LOAD" для загрузки GDIDEMO.

2. Учебник SoftICE Символьный загрузчик транслирует отладочную информацию в символьный файл.NMS, загружает символьные и исходные файлы, запускает GDIDEMO, открывает экран SoftICE, и отображает исходный текст приложения из файла GDIDEMO.C Управление экраном SoftICE Экран SoftICE — это Ваш главный инструмент для просмотра и отладки кода. На экране может быть отображено до семи различных окон и одна справочная строка, что позволит вам просматривать и управлять различными аспектами сеанса отладки. По умолчанию, на экране отображено следующее:  Local Window (Окно локальных переменных) — Отображает текущий кадр стека. Code Window (Окно кода) — Отображает исходный текст программы или со ответствующие им ассемблерные инструкции. Command Window (Окно команд) — Предназначено для ввода команд пользо вателя и отображение информации. Help Line (Строка подсказки) — Предоставляет краткую информацию о ко мандах SoftICE, а также показывает текущий контекст адреса.

Окно регистров Окно локальных переменных Окно данных Окно кода Кнопки прокрутки окна Окно команд Имя текущего процесса Строка подсказки 1 Рассмотрим содержимое окна кода. Обратите внимание, что SoftICE отобра жает подпрограмму WinMain в 34 строке. По умолчанию, после загрузки ва шего приложения SoftICE создает контрольную точку в первом основном мо дуле и останавливается на ней. 2 Чтобы увидеть все исходные файлы, которые загружены в SoftICE, введите команду FILE с параметром "*":  :FILE * SoftICE покажет список исходных файлов GDIDEMO: draw.c, maze.c, xform.c, poly.c, wininfo.c, dialog.c, init.c, bounce.c, и gdidemo.c. Окно команд изменяет свой размер в зависимости от числа строк, используемых другими открытыми окнами, так что Вы можете и не увидеть весь список сразу. Для просмотра продолжения списка нажмите любую клавишу. (Изменение размеров окон описано в глава 4 "Интерфейс SoftICE" на странице 48.) Трассировка и пошаговое выполнение кода 3 Практически в каждом окне SoftICE можно использовать прокрутку. Если у Вас подключена мышь, то Вы можете щелкнуть на стрелках прокрутки. Если нет, то не расстраивайтесь, SoftICE позволяет пролистывать окна с помощью различных комбинаций клавиш. В таблице приведены последовательности действий для листания окна кода. Листание окна кода Комбинации клавиш Работа мышью Щелкните по верхней внут ренней стрелке Щелкните по нижней внут ренней стрелке Щелкните по верхней внеш ней стрелке Щелкните по нижней внеш ней стрелке Щелкните по левой стрелке На предыдущую страницу PageUp На следующую страницу На предыдущую строку На следующую строку На один символ влево На один символ вправо PageDown Стрелка вверх Стрелка вниз Ctrl Стрелка влево Ctrl Стрелка вправо Щелкните по правой стрелке 4 Ввод команды U с параметром EIP приводит к дизассемблированию текущей инструкции (инструкция, подсвеченная в данный момент). :U EIP Это же действие можно выполнить с помощью команды "." (точка): :.

Трассировка и пошаговое выполнение кода Следующие шаги покажут Вам, как использовать SoftICE для трассировки ис ходного кода: 1 Введите команду T (Trace — Трассировать) или нажмите клавишу F8.  :T Происходит выполнение одной строки исходного кода. Следующая за ней строка окажется подсвеченной.  if(!hPrevInst) 2 Окно кода в настоящее время отображает исходный текст. Однако, это окно может также отображать дизассемблированный код или смешанный (исход ный и дизассемблированный) код. Для просмотра смешанного кода исполь зуйте команду SRС (F3).  :SR Обратите внимание, что каждая строка исходного текста теперь сопровожда ется ассемблерными командами. 3 Нажмите F3 еще раз для получения "чистого" дизассемблерного кода, а затем еще раз для возврата на экран исходного текста. 4 Введите команду T (F8) для трассировки следующей инструкции. Исполняйте эту команду до тех пор, пока не достигнете строки, выполняющей функцию RegisterAppClass. Как было показано, команда T выполняет одну исходную инструкцию или ко манду ассемблера. Вы также можете использовать команду P (F10) для пошагового исполнения программы. Пошаговое исполнение отличается от трассировки тем, 2. Учебник SoftICE что при выполнении команды CALL, управление не будет возвращено до полного завершения вызванной функции. Совет: Команда T не трассирует вызовы функций, если их исходный текст недоступен. Хороший пример этого — Win32 API. Для трассировки вызовов функций в случаях, когда недоступен исходный текст, ис пользуйте команду SRC (F3) для переключения в смешанный или ассемблерный режим.

Просмотр локальных данных Окно локальных переменных предназначено для отображения текущего кадра стека. В нашем случае это окно содержит локальные данные для функции WinMain. Следующие шаги иллюстрируют, как можно использовать окно локаль ных переменных: 1 Выполните команду T, чтобы войти в функцию RegisterAppClass. Окно ло кальных переменных на данный момент пусто, потому что память под локаль ные переменные еще не выделена. Код функции RegisterAppClass находится в исходном файле INIT.C. SoftICE отображает имя текущего исходного файла в верхнем левом углу окна кода. 2 Снова выполните команду T. Окно локальных переменных содержит параметр hInstance, переданный в RegisterAppClass, и локальную структуру wndClass. Структура wndClass отме чена знаком "+". Это означает, что Вы можете развернуть структуру и про смотреть ее содержимое. Замечание: Вы также можете разворачивать символьные строки и массивы. 3 Если у Вас установлен процессор типа Pentium и имеется мышь, то двойным щелчком по структуре WNDCLASSA Вы можете развернуть ее. Чтобы свер нуть структуру wndClass, щелкните дважды по знаку ““. 4 Развернуть структуру можно и с помощью клавиатуры: нажмите Alt L, чтобы переместить курсор в окно локальных переменных, стрелками вверх или вниз переместите подсвеченную строку на структуру и нажмите Enter. Чтобы свернуть структуру, нажмите Enter еще раз.

Установка точек прерывания Этот раздел научит вас устанавливать два типа контрольных точек: одноразовые и постоянные.

Установка одноразовой контрольной точки Ниже показано, как можно установить одноразовую контрольную точку. Она отличается тем, что удаляется сразу после того, как произойдет ее выполнение. 1 Чтобы вернуться в окно кода, необходимо щелкнуть по нему мышкой или на жать Alt C. Если Вы хотите вернуться обратно в окно команд, то снова нажмите Alt C. 2 Используйте стрелку вниз на клавиатуре, стрелку прокрутки вниз или коман ду U для того, чтобы переместить курсор на 61 строку (первый вызов API функции RegisterClass). Если вы используете команду U, то командная строка должна выглядеть так:  :U.61 SoftICE разместит эту строку вверху окна кода.

Установка точек прерывания 3 Используйте команду HERE (функциональная клавиша F7), чтобы исполнить код до строки 61. Команда HERE исполняет программу, начиная с текущей инструкции, до ин струкции, на которую указывает курсор. Команда HERE устанавливает одно разовую точку прерывания на определенный адрес или строку исходного кода и продолжает исполнение до срабатывания этого прерывания. После сраба тывания прерывания, SoftICE автоматически удаляет данную точку, так что второй раз она уже не сработает. В результате окажется подсвеченной следующая строка:  if (!RegisterClass(&wndClass)) Замечание: Тоже самое вы можете сделать, используя команду G (Перейти к), задав номер строки, до которой необходимо исполнить программу: :G. Установка постоянной точки прерывания Следующая последовательность действий иллюстрирует установку второго ти па контрольных точек: постоянной точки прерывания, которая не удаляется после срабатывания. 1 Найдите следующий вызов функции RegisterClass, он происходит в строке 74. Установите курсор на строку 74 и введите команду BPX (F9). Команда BPX ус танавливает точку прерывания, вставляя в исходный код инструкцию INT 3. 2 Повторное нажатие клавиши F9 удалят контрольную точку. Если у Вас в компьютере используются процессор Pentium и мышь, вы може те двойным щелчком на любой строке в окне кода устанавливать или удалять в ней контрольную точку. 3 Установите точку прерывания на 74 строке, и командой G или X (F5) продол жайте выполнения программы до тех пор, пока эта точка не сработает.  :G Окно SoftICE появится после выполнения инструкции INT 3. В отличие от команды HERE, ставящей одноразовую контрольную точку, ко манда BPX устанавливает постоянную точку прерывания, которая существует до тех пор, пока Вы ее не удалите. 4 Для просмотра информации о текущей точке прерывания используйте коман ду BL:  :BL  00) BPX #0137: Замечание: Адрес, который вы увидите, может не совпадать с данным здесь. Команда BL показала Вам, что установлена одна контрольная точка на адрес 0x402442. Этот адрес соответствует 74 строке исходного текста в файле INIT.C. 5 Вы можете использовать вычислитель выражений SoftICE, чтобы перевести но мер строки в адрес. Чтобы определить адрес 74 строки, используйте команду ?:  :?.  void *= 0x 6 Функция RegisterAppClass имеет относительно простую реализацию, поэтому нет необходимости трассировать каждую строку исходного кода. Используя команду P с параметром RET (функцинальная клавиша F12), можно вернуться в точку, откуда произошел вызов функции:  :P RET 2. Учебник SoftICE Параметр RET в команде P заставляет SoftICE полностью выполнить вызванную процедуру до момента выхода из нее. SoftICE остановится в блоке WinMain на инструкции, расположенной после вызова функции RegisterAppClass, так как функция RegisterAppClass была вызвана из WinMain. Следующая строка в бло ке WinMain окажется подсвеченной.  msg.wParam = 1;

7 Чтобы удалить все установленные контрольные точки, введите команду BC со звездочкой в качестве параметра:  :BC * Использование информационных команд SoftICE SoftICE предоставляет большое количество информационных команд, которые позволяют вам следить за состоянием приложения или системы. Данный раздел объясняет назначение двух команд: H (помощь) и CLASS. 1 Команды H и CLASS лучше всего работают, когда у Вас достаточно места для размещения выводимой ими информации, поэтому закройте окно локальных переменных командой WL, что приводит к увеличению размера окна команд. 2 Команда H предоставляет общие сведения обо всех командах SoftICE или де тальную справку о конкретной команде. Для просмотра детальной справки о команде CLASS введите CLASS в качестве параметра команды H:  :H CLASS  Display window class information CLASS [-x] [process | thread | module | class-name] ex: CLASS USER Первая строка справки предоставляет описание команды, вторая — полный ее синтаксис, включая все опции и/или параметры, а третья — пример ис пользования команды. 3 Функция RegisterAppClass регистрирует шаблон класса окна, который ис пользуется приложением GDIDEMO для создания окна. Используйте команду CLASS, чтобы исследовать классы, зарегистрированные GDIDEMO.  :CLASS GDIDEMO  Class Name Handle Owner Wndw Proc Styles ----------------------Application Private--------------------BOUNCEDEMO A018A3B0 GDIDEMO 004015A4 00000003 DRAWDEMO A018A318 GDIDEMO 00403CE4 00000003 MAZEDEMO A018A280 GDIDEMO 00403A94 00000003 XFORMDEMO A018A1E8 GDIDEMO 00403764 00000003 POLYDEMO A018A150 GDIDEMO 00402F34 00000003 GDIDEMO A018A0C0 GDIDEMO 004010B5 Замечание: В этом примере показаны только классы, которые зарегистрирова ны приложением GDIDEMO. Классы, зарегистрированные други ми модулями Windows, например USER32, опущены. Информация, выводимая командой CLASS — это сводная информация для каж дого класса окна, зарегистрированного от имени процесса GDIDEMO. Она вклю чает имя класса, адрес внутренней структуры данных WINCLASS, модуль, который этот класс зарегистрировал, адрес процедуры для оконного класса, заданной по умолчанию, и значение флагов стиля класса. Замечание: Для получения более детального описания класса окна используйте команду CLASS с опцией –X, как показано ниже: :CLASS –x Использование идентификаторов и таблиц символов Использование идентификаторов и таблиц символов Теперь, когда Вы достаточно знакомы с SoftICE, чтобы пошагово отлаживать, трассировать и создавать точки прерывания, настало время исследовать идентифи каторы и таблицы. Когда Вы загружаете отладочную информацию приложения, SoftICE создает таблицу, которая содержит все идентификаторы, определенные для этого модуля. 1 Используйте команду TABLE, чтобы просмотреть все таблицы идентификато ров, загруженных на данный момент.  :TABLE  GDIDEMO [NM32] 964657 Bytes Of Symbol Memory Available Активная в данный момент таблица идентификаторов отображается жирным шрифтом. Эта таблица используется для интерпретации идентификаторов имен. Сделать активной другую необходимую Вам в данный момент таблицу можно с помощью команды TABLE, указав в качестве параметра ее имя: :TABLE GDIDEMO 2 Для вывода списка идентификаторов из текущей таблицы используется ко манда SYM. Если текущей окажется таблица GDIDEMO, то команда SYM вы ведет список, подобный приведенному ниже:  :SYM .text(001B) 001B:00401000 001B:004010B5 001B:004011DB 001B:00401270 001B:00401496 001B:004014D2 001B:004014EA 001B:00401530 001B:004015A4 001B:004016A6 001B:00401787 001B:0040179C WinMain WndProc CreateProc CommandProc PaintProc DestroyProc lRandom CreateBounceWindow BounceProc BounceCreateProc BounceCommandProc BouncePaintProc Это список символических имен из раздела.text исполняемой программы. Раз дел.text обычно используется для процедур и функций. Все идентификаторы, ото браженные в этом примере, являются функциями GDIDEMO.

Установка условного прерывания Одним из идентификаторов, определенных в GDIDEMO, является имя функции LockWindowInfo. Эта функция предназначена для получения значения указателя, которое является специфическим для каждого экземпляра окна. Для изучения условных точек прерывания и контрольных точек в памяти Вами будут выполнены следующие шаги: вы установите контрольную точку типа BPX на функцию LockWindowInfo;

отредактируете эту точку с использованием условного выражение, получив таким образом условную контрольную точку;

установите контрольную точку на адрес в памяти для того, чтобы отлеживать доступ к фрагменту ключевой информации, как описано это в разделе “Уста новка контрольной точки чтения/записи в память” на странице 23.

2. Учебник SoftICE Установка точки прерывания BPX Перед установкой условной контрольной точки, Вам необходимо установить точку прерывания типа BPX на функцию LockWindowInfo. 1 Установите прерывание на функцию LockWindowInfo:  :BPX LockWindowInfo Когда одному из окон GDIDEMO необходимо вывести что либо в своей рабо чей области, оно вызывает функцию LockWindowInfo. Каждый раз, когда вы зывается эта функция, будет активизирован экран SoftICE. Окна в приложе нии GDIDEMO меняются непрерывно, поэтому эта точка прерывания сраба тывает очень часто. 2 Проверьте факт установки контрольной точки командой BL. 3 Выйдите из SoftICE командой X или G. Всякий раз, когда произойдет вызов функции LockWindowInfo, на мониторе будет появляться экран SoftICE.

Редактирование точки прерывания Из прототипа функции LockWindowInfo, расположенного в строке 47, видно, что в функцию передается один параметр типа HWND, а из функции возвращается указатель не установленного типа. Параметр HWND — это дескриптор окна, кото рое пытается вывести информацию в рабочей области. В настоящий момент нам необходимо изменить существующую контрольную точку, добавив условие для выявления нужного нам значения HWND. 1 Прежде чем устанавливать условную контрольную точку, необходимо полу чить значение HWND для окна POLYDEMO. Команда HWND предоставляет информацию об окнах приложения, поэтому выполните команду HWND с па раметром GDIDEMO:  :HWND GDIDEMO Ниже показано, что Вы должны увидеть на экране при использовании опера ционной системы Windows NT. Если Вы работаете под Windows 95 или Windows 98, информация будет немного отличаться.  Handle Class WinProc TID Module 07019C GDIDEMO 004010B5 2D GDIDEMO 100160 MDIClient 77E7F2F5 2D GDIDEMO 09017E BOUNCEDEMO 004015A4 2D GDIDEMO 100172 POLYDEMO 00402F34 2D GDIDEMO 11015C DRAWDEMO 00403CE4 2D GDIDEMO Дескриптор окна POLYDEMO выделен подчеркиванием и жирным шрифтом. Именно это значение Вы и будете использовать при формировании условного выражения. Если в области вывода HWND информация об окне POLYDEMO отсутствует, то выйдите из SoftICE, используя команду G или X (F5), и повто ряйте шаг 1 до тех пор, пока данное окно не будет создано. Значение, использованное в нашем примере, скорее всего будет отличаться от того, которое увидите Вы. Для правильного выполнения данного упражнения Вам следует использовать фактическое значение HWND для Вашей системы. Используя дескриптор окна POLYDEMO, Вы можете составить условное вы ражение для контроля вызова функции LockWindowInfo, проверяя совпаде ние передаваемого программе параметра с требуемым значением дескрипто ра. Когда будет вызвана функция LockWindowInfo с дескриптором окна POLYDEMO, появится экран SoftICE.

Установка контрольной точки чтения/записи в память 2 Так как на функцию LockWindowInfo контрольная точка уже установлена, то с помощью команды BPE (редактирование контрольной точки) ее можно из менить:  :BPE 0 Когда Вы выдаете команду BPE для изменения существующей контрольной точки, SoftICE помещает ее описание в командную строку:  :BPX LockWindowInfo В конце командной строки появится курсор, чтобы вы смогли набрать услов ное выражение. 3 Не забудьте подставить значение дескриптора окна POLYDEMO, которое Вы нашли с помощью команды HWND вместо значения 100172, используемого в данном примере. Ваше условное выражение должно выглядеть следующим образом (условное выражение выделено жирным шрифтом):  :BPX LockWindowInfo IF ESP->4 == 100172 Замечание: Приложения Win32 передают параметры через стек в точке вхо да функции;

первый параметр имеет положительное смещение 4 относитель но регистра ESP. Для вычислителя выражений SoftICE это записывается в ви де: ESP >4. ESP — это регистр указателя вершины стека, а оператор “ >” за ставляет левую часть выражения (в данном случае — ESP) принять смещение, указанное в правой его части (4). Для более полной информации о вычисли теле выражений обратитесь к главе 7 "Использование выражений", а за сведе ниями относительно стека в условных выражениях обратитесь к разделу "Условные прерывания" на странице 82. 4 Командой BL проверьте, что точка прерывания и условное выражение уста новлены правильно. 5 Выйдите из SoftICE, используя команду G или X (F5). Когда в следующий раз появится экран SoftICE, условное выражение будет иметь значение ИСТИНА.

Установка контрольной точки чтения/записи в память Мы установили контрольную точку, а затем добавили условное выражение так, чтобы иметь возможность получить адрес структуры данных, уникальной для каждо го экземпляра окна POLYDEMO. Это значение сохранено в дополнительных данных окна (extra data) и является глобальным дескриптором. Функция LockWindowInfo находит этот глобальный дескриптор и использует Win32 API LocalLock для трансля ции его в указатель, который может быть использован для доступа к данным этого экземпляра окна. 1 Получите значение указателя для данных экземпляра окна, выполняя про грамму до строки 57.  :G.57 2 Функции Win32 API возвращают 32 разрядные значения в регистре EAX, так что Вы можете использовать команду BPMD с регистром EAX для установки контрольной точки в памяти на указатель данных экземпляра окна.  :BPMD EAX Для контроля чтения и/или записи двойных слов (Dword) по линейному адре су команда BPMD использует аппаратные отладочные регистры процессоров фирмы Intel. В нашем случае, вы выполняете команду BPMD для перехвата доступа чтения и записи к первому двойному слову (Dword) данных экземпля ра окна.

2. Учебник SoftICE 3 Используйте команду BL для того, чтобы проверить правильность установки контрольной точки. Вы должны увидеть примерно следующее:  :BL  00) BPX LockWindowInfo IF ((ESP->4)==0x100172) 01) BPMD #0023:001421F8 RW DR Контрольная точка с индексом 0 — это прерывание выполнения функции LockWindowInfo, а точка 1 — это контрольная точка BPMD на данные экземп ляра окна. 4 Для отключения точки прерывания на LockWindowInfo выполните команду BD.  :BD 0 SoftICE имеет команды BC (удалить точку прерывания) и BD (отключить точку прерывания). Отключение полезно, когда Вы хотите повторно использовать эту же контрольную точку в следующем сеансе отладки. Если же Вы не соби раетесь снова использовать какое либо прерывание, имеет смысл его удалить. 5 Используйте команду BL для того, чтобы проверить отключение точки преры вания на LockWindowInfo. SoftICE отмечает блокированные прерывания звездочкой "*" после его индекса. Вы должны увидеть примерно следующее:  :BL  00) * BPX LockWindowInfo IF ((ESP->4)==0x100172) 01) BPMD #0023:001421F8 RW DR Замечание: Снова задействовать временно отключенную точку прерывания можно с помощью команды BE:  :BE 6 Выйдите из SoftICE, используя команду G или X. Когда окно POLYDEMO обратится к первому двойному слову (Dword) данных экземпляра окна, сработает прерывание и появится экран SoftICE. Если экран SoftICE появится вследствие срабатывания контрольной точки в памя ти, Вы окажетесь в функции PolyDrawBez или PolyRedraw. Обе функции обраща ются к полю nBezTotal со смещением 0 данных экземпляра окна POLYDRAW. Замечание: Архитектура процессоров фирмы Intel определяет точки преры вания в памяти как ловушки, что означает их срабатывание после обращения к памяти. Команда или исходная строка, подсвеченные в SoftICE в данный момент — это команда или исходная строка, которая только что обратилась к памяти. 7 Удалите контрольные точки, которые вы устанавливали в этом разделе, ис пользуя команду BC.  :BC * Замечание: Вы можете использовать символ звездочка "*" в командах BC, BD и BE для удаления, отключения и включения всех контрольных точек одно временно. 8 Выйдите из SoftICE, используя команду G или X. Операционная система завершит приложение. Поздравляем, Вы закончили свой первый сеанс отладки. В этом сеансе Вы нау чились трассировать исходный код, просматривать локальные данные и структуры, устанавливать контрольные точки и добавлять к ним условия, устанавливать точки прерывания в памяти. SoftICE предоставляет гораздо больше возможностей. Ко манды ADDR, HEAP, LOCALS, QUERY, THREAD, TYPES, WATCH и WHAT являются од ними из многих команд SoftICE, которые помогут Вам отлаживать приложения бо лее просто и быстро. За полным описанием команд обращайтесь к "Справочнику по командам SoftICE".

Дьявол кроется в деталях.

Декарт The devil is in the details.

Descartes 3. Загрузка кода в SoftICE Концепции отладки SoftICE позволяет прозводить отладку прикладных программ Windows и драй веров устройств на уровне исходного кода. Для этого SoftICE использует утилиту Symbol Loader (Символьный Загрузчик), транслирующую отладочную информацию из Вашего модуля в файл.NMS. Затем Symbol Loader может загрузить.NMS файл и, по желанию, исходный код в SoftICE для их использования в сеансе отладки. Момент загрузки.NMS зависит от того, когда исполняется отлаживаемый мо дуль — после инициализации операционной системы, или это драйвер устройства или статический VxD, который загружается перед инициализацией операционной системы. Если Вы разрабатываете драйвер устройства или VxD, SoftICE загрузит символы модуля и исходный код в момент собственного запуска. Если Вы отлажи ваете модуль или компонент, который исполняется после загрузки операционной системы, с помощью Symbol Loader Вы можете загрузить символьную информацию тогда, когда она понадобится. Эта глава объясняет, как использовать Symbol Loader, чтобы загрузить Ваш мо дуль в SoftICE. Здесь также рассказывается, как использовать загрузчик из ко мандной строки DOS для автоматизации исполняемых им задач, и как пользоваться утилиту командной строки NMSYM для создания пакетов трансляции и загрузки символьной информации. Замечание: Symbol Loader поддерживает только прикладные программы Windows. Для отладки прикладных программ MS DOS используйте утилиты ка талога UTIL16.

Подготовка к отладке прикладных программ Ниже приведены общие принципы подготовки к отладке модулей и их компо нентов, исполняемых после загрузки операционной системы. Это могут быть ис полняемые.EXE файлы, библиотеки DLL, динамические.VxD и.OCX файлы. В последующих разделах перечисленные этапы объясняются более подробно. 1 Сформируйте модуль с отладочной информацией. 2 Загрузите SoftICE, если он еще не загружен. 3 Запустите Symbol Loader. 4 Щелкните по кнопке "OPEN", чтобы открыть отлаживаемый модуль. 5 Оттранслируйте отладочную информацию в файл.NMS и загрузите ее вместе с исходным кодом в SoftICE.

3. Загрузка кода в SoftICE Подготовка к отладке драйверов устройств и VxD Следующая последовательность шагов показывает, что необходимо выполнить для отладки драйверов устройств или статических VxD, которые загружаются пре жде, чем операционная система полностью инициализируется. В последующих разделах перечисленные этапы объясняются более подробно. 1 Сформируйте прикладную программу с отладочной информацией. 2 Загрузите SoftICE, если он еще не загружен. 3 Запустите Symbol Loader. 4 Щелкните по кнопке "OPEN", чтобы открыть отлаживаемый модуль 5 Выберите пункт "PACKAGE SOURCE WITH SYMBOL TABLE" в режимах трансляции Symbol Loader. (См. раздел "Изменение параметров настройки модуля" на странице 29.) 6 Для создания нового.NMS файла щелкните по кнопке "TRANSLATE". 7 Измените параметры настройки SoftICE для загрузки отладочной информа ции VxD или драйвера устройства при запуске. (Подробности настройки смотрите в разделе "Предварительная загрузка символьной информации и ис ходного кода" на странице 113.) 8 Перезагрузите компьютер.

Запуск SoftICE вручную SoftICE не запускается автоматически при следующих конфигурациях:   Если Вы не запустили WINICE.EXE из AUTOEXEC.BAT перед стартом Windows 95 или Windows 98. Если Вы установили ручной режим запуска SoftICE для Windows NT. Если Вы используете такие конфигурации, то SoftICE необходимо загрузить вручную. Следующие разделы описывают, как это сделать под различными опера ционными системами Windows.

Загрузка SoftICE для Windows 95 или Windows Чтобы загрузить SoftICE для Windows 95 или Windows 98, запустите его из ко мандной строки DOS. После инициализации SoftICE автоматически производит за пуск операционной системы. Команды имеет следующий синтаксис: Синтаксис команды [/HST n][/TRA n][/SYM n ][/M] [/LOAD [x] name] [/EXP name] [drive:\path\WIN.COM [windows-command-line]] Необязательные параметры: Параметр /EXP name Описание Добавляет экспортируемые символы из DLL или приложе ний Windows, заданных параметром "name" данные в SoftICE. Это позволит Вам обращаться к этим данным с по мощью символических имен Увеличивает размер буфера протокола вызова команд, где n – количество Кб (десятичное). По умолчанию n=8 Кб.

Продолжение на следующей странице  WINICE /HST n Если речь идет о параметре "HISTORY BUFFER SIZE" (размер буфера протокола), то его размер по умолчанию равен 256К (см. страницу 112).

Создание приложений с отладочной информацией Ключ /LOAD name [x] Описание Загружает отладочную информацию и исходный код, где name –полный путь и имя собранных вместе с отладочной информацией VxD, DOS TSR, загружаемых драйверов DOS, DOS программ, драйверов Windows, Windows DLL и про грамм для Windows. Если присутствует параметр "x", то ис ходный код загружаться не будет. Направляет вывод SoftICE на дополнительный монохром ный монитор в обход VGA. Резервирует n (десятичное) килобайт под таблицу симво лов. По умолчанию n=0 Kб. Устанавливает размер буфера обратной трассировки рав ным n Кб (десятичное). По умолчанию n=8 Kb.

/M /SYM n /TRA n Совет:

Вы можете определять эти переключатели в строке инициализации. (Смотрите раздел "Изменение начальных установок SoftICE" на странице 111.) Запуск SoftICE для Windows NT Чтобы загрузить SoftICE для Windows NT, сделайте следующее: Выберите "START SOFTICE". Введите команду: NET START NTICE. Замечание: Как только Вы загрузите SoftICE, Вы не сможете его дезактивиро вать до тех пор, пока не перегрузите компьютер.

Создание приложений с отладочной информацией Ниже дается сводная таблица параметров компиляции и компоновки программ. Полную информацию, касающуюся формирования Вашей прикладной программы с отладочной информацией, смотрите в соответствующей документации. Компилятор Создание отладочной информации Borland C + Для создания стандартной отладочной информации: + 4.5 и 5.0 Компиляция с ключом /v Компоновка с ключом /v Delphi 2.0 Для создания стандартной отладочной информации компилируйте проект со следующими ключами: V — для включения отладочной информации в исполняемый модуль. $W+ — чтобы создать кадры стека. $D+ — чтобы создать информацию отладки. $L+ — чтобы создать локальные символы отладки. $O — чтобы отключить оптимизацию Продолжение на следующей странице  Под отладочную информацию по умолчанию выделяется 1024 Кб в Windows 95 и 512 Кб в Windows NT (см. страницу 114).

28 Компилятор MASM 6.11 Создание отладочной информации 3. Загрузка кода в SoftICE Для создания отладочной информации CodeView: Ассемблировать с ключами /Zi /COFF Используйте 32 разрядный компоновщик Microsoft (LINK.EXE) с ключами /DEBUG /DEBUGTYPE:CV /PDB:NONE Microsoft Visual C + + 2.x, 4.0, 4.1, 4.2, и 5. Для создания базы данных отладочной информации программы (PDB): Компилируйте, используя опцию командной строки /Zi Используйте компоновщик Microsoft с ключами /DEBUG /DEBUGTYPE:CV Замечание: VxD требует создания отладочной информации PDB. Для создания отладочной информации CodeView: Компилируйте с отладочной информацией, совместимой с C7, используя опцию командной строки /Z7 Используйте компоновщик Microsoft с ключами /DEBUG /DEBUGTYPE:CV /PDB:NONE Замечание: Если Вы используете стандартную процедуру Windows NT DDK, то используйте следующие переменные среды: NTDEBUG=ntsd и NTDEBUGTYPE=windbg.

Symantec C + 7.2 + Компилятор фирмы Symantec создает отладочную информа цию CodeView по умолчанию. Все, что требуется – это раз решить ее вывод: Компилируйте с ключом –g Также можно использовать –gh, –gf, и –gg Компонуйте проект с ключом /CO Watcom C + 10.5 + Для создания отладочной информации CodeView: Компилируйте с ключами –hc –d3 Компонуйте проект с ключами DEBUG CODEVIEW OPTION CVPACK Использование Symbol Loader для трансляции и загрузки файлов Прежде чем SoftICE сможет отлаживать Вашу прикладную программу,.DLL или драйвер, Вы должны создать символьный файл для каждого отлаживаемого моду лей, а затем загрузить их в SoftICE. Утилита Symbol Loader делает эту процедуру простой и быстрой. Эта программа позволяет Вам выбрать необходимый модуль и создать соответствующий символьный файл, после чего загрузит его в SoftICE вме сте с исходным кодом и исполняемым файлом. По умолчанию загружаются все файлы, упомянутые в отладочной информации. Подробности того, как можно за гружать только необходимые в конкретном сеансе исходные файлы смотрите в разделе " Задание исходных файлов программы" на странице 34. Чтобы загрузить модуль с помощью утилиты Symbol Loader, сделайте следующее: 1 Запустите Symbol Loader.

Изменение параметров настройки модуля 2 Выберите пункт "OPEN MODULE" из меню "FILE", либо щелкните по кнопке "OPEN". 3 Выберите в диалоговом окне необходимый файл и нажмите кнопку "OPEN". 4 Если Вы открываете файл типа.SYM, Symbol Loader поинтересуется, 32 раз рядный это файл или нет. Ответьте, соответственно YES или NО. Из за ограничений формата.SYM файлов SoftICE не может самостоятельно определить разрядность.SYM файлов (16 или 32 битный). 5 Выберите пункт "LOAD" из меню "MODULE", либо нажмите кнопку "LOAD" для загрузки открытого файла. Symbol Loader транслирует отладочную информацию из Вашей прикладной программы в символьный файл.NMS, а затем загружает его вместе с исход ным текстом программы в SoftICE. Если Вы загружаете исполняемый файл (.EXE), то SoftICE запускает программу и устанавливает точку прерывания в первом основном модуле (WinMain, Main, или DllMain), c которым он сталки вается. Объем загружаемой информации зависит от параметров настройки режимов трансляции и отладки. Смотрите раздел "Изменение параметров настройки модуля" на странице 29 для получения более полной информации относитель но параметров настройки режимов трансляции и отладки.

Изменение параметров настройки модуля Утилита Symbol Loader имеет ряд параметров для управления трансляцией и за грузкой файлов. Их можно разделить на 3 группы: Общие — параметры командной строки и пути поиска исходных файлов. Параметры отладки — определяют типы файлов (символьные или исполняе мые), загружаемые утилитой в SoftICE, а также действия, исполняемые SoftICE во время загрузки. Параметры трансляции — определяют, какую комбинацию символов (открытая информация (Public), информация о типах, символы или символы и источник) транслирует Symbol Loader.

3. Загрузка кода в SoftICE Эти параметры устанавливаются для каждого модуля отдельно, то есть измене ние индивидуальных установок сказывается только на текущем модуле. Когда Вы открываете другой модуль, Symbol Loader использует установки по умолчанию. Чтобы изменить заданные по умолчанию параметры настройки модуля, сделай те следующее: 1 Откройте файл, если он еще не открыт. Совет: Имя открытого в данный момент файла показано в заголовке окна Symbol Loader. 2 Выберите пункт "SETTINGS" из меню "MODULE". 3 Щелкните на закладке, которая объединяет группу параметры настройки, ко торые Вы хотите изменить. (Более подробная информация о параметрах на стройки дана в последующих разделах). 4 Когда все изменения сделаны, нажмите OK. 5 Загрузите файл, чтобы применить Ваши изменения.

Изменение Общих Параметров настройки (вкладка General) Вкладка General позволяет установить параметры командной строки и опреде лить путь для поиска исходного файла.

Общие параметры настройки описаны в следующих разделах. Command line arguments (Параметры Командной строки) Используйте "COMMAND LINE ARGUMENTS" для задания параметров командной строки, передаваемых Вашему приложению. Source file search path for program (Путь для поиска исходного файла данной программы) Параметр "SOURCE FILE SEARCH PATH FOR THIS PROGRAM" задает пути поиска фай лов, связанных с данным приложением. Если Symbol Loader не может найти файлы Изменение параметров настройки модуля по заданному пути, он использует "DEFAULT SOURCE файлов по умолчанию) для развернутого поиска. Default source file search path (Путь поиска файлов по умолчанию) FILE SEARCH PATH" 31 (путь поиска Параметр "DEFAULT SOURCE FILE SEARCH PATH" используется для задания основного пути, используемого SoftICE для поиска файлов. Эта установка является глобальной. Обратите внимание, что, если Вы задаете значение параметра SOURCE FILE SEARCH PATH FOR THIS PROGRAM для конкретной программы, то Symbol Loader исполь зует сначала этот путь, и только потом путь, заданный по умолчанию. Prompt for missing source files (Запрос при отсутствии исходного файла) Если флаг "PROMPT FOR MISSING SOURCE FILES" установлен, то Symbol Loader обра тится к Вам за помощью в случае, если исходный файл не будет найден. Этот пара метр является глобальным и по умолчанию включен. Minimize loader on successful load (Минимизировать загрузчик при успешной загрузке) Используйте "MINIMIZE LOADER ON SUCCESSFUL LOAD" для автоматической мини мизации Symbol Loader после загрузки.EXE файла. Этот параметр является гло бальным и по умолчанию включен.

Изменение параметров трансляции (вкладка Translation) Параметры трансляции определяют, какая информация транслируется утили той Symbol Loader при создании.NMS файла, а также нужно ли сохранять исход ный текст программы в символьном файле. Эти настройки определяют количество памяти, необходимой для отладки Вашей программы, и перечислены в порядке воз растания требуемого количества памяти. Следующие разделы описывают параметры настройки трансляции (изображе ние вкладки находится на странице 32). Public only (Только общие) В символьный файл транслируются только глобальные имена переменных и функций. Ни информация о типах, ни исходный код в этом случае в файл не вклю чаются. Type information only (Только информация о типах) При этом значении параметра транслируется только информацию о типах. Ис пользуйте эту установку для добавлении информации о типах структур данных, ко торую Вы смогли обнаружить при исследовании программ.

3. Загрузка кода в SoftICE Symbols only (Только Символы) Установка этого значения параметра позволяет транслировать глобальные, ста тические и локальные имена символов в дополнение к информации об их типах. Исходный текст не включается. Symbols and source code (Символы и исходный код) При значении "SYMBOLS AND SOURCE CODE" в символьный файл помещается вся отладочная информация, включая исходный код и номера строк. Эта установка за действована по умолчанию. Package source with symbol table (Сохранение исходного файла вместе с таблицей символов) Установка этого флага приводит к сохранению исходный текст Вашей програм мы вместе с отладочной информацией в файле.NMS, что может понадобится при следующих обстоятельствах: Загрузка исходного текста на этапе начальной загрузки  SoftICE не ищет кодовых файлов при начальной загрузке. Если Вам необхо димо загрузить исходный текст для VxD или драйвера Windows NT, установи те флаг "PACKAGE SOURCE WITH SYMBOLS TABLE". Затем измените параметры инициализации SoftICE так, чтобы загрузить отладочную информацию для VxD или драйвера устройства при запуске. Смотрите раздел "Предваритель ная загрузка символической информации и исходного кода" на странице 113. Отладка в системе, которая не имеет доступа к Вашим исходным файлам  Если Вы хотите отлаживать Ваше приложение в системе, которая не имеет дос тупа к Вашим исходным файлам, установите при трансляции флаг "PACKAGE SOURCE WITH SYMBOLS TABLE и скопируйте файл".NMS в эту систему. Внимание: Если Вы устанавливаете флаг "PACKAGE SOURCE WITH SYMBOLS TABLE", исходный текст Вашей программы будет доступен любому, кто об Изменение параметров настройки модуля ращается к таблице символов. Если Вы не хотите, чтобы другие имели доступ к исходному тексту, но Вы предоставляете.NMS файл вместе с приложением, то выключите этот флаг.

Изменение параметров отладки (вкладка Debugging) Параметры отладки определяют, какой тип информации загружать, и нужно ли останавливаться в точке входа Вашего модуля.

Следующие разделы описывают настройки параметров отладки. Load symbol information only (Загрузка только символьной информации) "LOAD SYMBOL INFORMATION ONLY" позволяет загрузить только файл символов.NMS, но не загружает при этом исполняемый код. Исходные файлы загружаются в том случае, если Вы выбрали значение параметра трансляции "SYMBOLS AND SOURCE CODE". По умолчанию, Symbol Loader использует эту установку для файлов.DLL,.SYS, и.VxD типов. Load executable (Загрузка исполняемого кода) "LOAD EXECUTABLE" позволяет загрузить и Вашу исполняемую программу, и файл.NMS. Также загружаются соответствующие исходные файлы, если Вы выбрали значение параметра трансляции SYMBOLS AND SOURCE CODE. По умолчанию, Symbol Loader использует эту установку для файлов типа.ЕХЕ. Stop at WinMain, Main, DLLMain, etc. (Останов в WinMain, Main, DllMain и т.д.) Установка этого флага создает контрольную точку в первом основном модуле, с которым сталкивается SoftICE в процессе загрузки Вашего приложения.

3. Загрузка кода в SoftICE Задание исходных файлов программы По умолчанию производится загрузка всех исходных файлов приложения, ко торые упомянуты в отладочной информации. В зависимости от Ваших задач ис ходные коды всей программы могут Вам и не понадобиться. Кроме того, если коли чество исходных файлов велико, загрузка их всех непрактична. Во избежание загромождения памяти ненужными исходными текстами, SoftICE позволяет Вам использовать.SRC файл, который определяет, что именно необхо димо загрузить для данного сеанса работы. Этот текстовый файл, содержащий список имен исходных файлов (по одному в строке) создается в том же каталоге, где размещено Ваше приложение;

имя файла совпадает с именем этого приложе ния, но имеет расширение.SRC. Файл.SRC. Пример: Если у Вас есть программа PROGRAM.EXE, Вы можете создать.SRC файл с именем PROGRAM.SRC. Содержимое его будет выгля деть примерно так: FILE1.C FILE3.CPP FILE4.C Несмотря на то, что FILE2.C — это нормальный исходный файл приложения, он не будет загружен, потому что его нет в.SRC фай ле, а загружены будут только файлы FILE1.C, FILE3.CPP и FILE4.C.

Удаление таблиц символов Каждый раз, когда Вы транслируете приложение, утилита Symbol Loader созда ет.NMS файл отладочной информации в форме таблицы символов. После загрузки модуля, Symbol Loader сохраняет таблицу в памяти до тех пор, пока Вы ее не удали те или не перезагрузите компьютер. Чтобы удалить таблицу символов, сделайте следующее: 1 Выберите пункт "SYMBOL TABLES" в меню "EDIT".

2 Выберите в списке TABLE ID таблицы, которые Вы хотите удалить и нажмите "REMOVE" (Удалить). Совет: Используйте заголовки таблиц для их сортировки по идентифика тору, типу,.SYM=, размеру.NMS или номеру версии. Список все гда сортируется в порядке возрастания.

Запуск утилиты Symbol Loader из командной строки DOS Запуск утилиты Symbol Loader из командной строки DOS Утилита Symbol Loader (LOADER32.EXE) поддерживает интерфейс командной строки, который позволяет Вам использовать многие ее свойства из командной строки DOS без использования графического интерфейса. Таким образом, Вы мо жете автоматизировать многие часто встречающиеся задач. Прежде чем запускать LOADER32.EXE из командной строки DOS, с помощью графического интерфейса утилиты установите пути поиска файлов и определите параметры трансляции и отладки для каждого из модулей, которые Вы планируете загружать. Symbol Loader сохраняет эти параметры настройки для каждого файла и использует их, когда Вы запускаете ее, чтобы загружать или транслировать фай лы из командной строки DOS. Подробности настройки смотрите в разделе "Изме нение параметров настройки модуля" на странице 29. Для запуска LOADER32.EXE войдите в каталог, который содержит LOADER32.EXE, или укажите каталог SoftICE в путях поиска файлов. Синтаксис команды LOADER32.EXE имеет следующий синтаксис: LOADER32 [[option(s)] file-name] "File name" задает файл, который Вы хотите транслировать или загрузить. Не обязательные параметры (options) описаны в следующей таблице. Параметр /EXPORTS /LOAD Описание Загружает экспортируемую информацию Транслирует модуль в.NMS файл, если такой файл еще не создан, и загружает его в SoftICE. Если Вы предварительно установили для данного файла параметры трансляции и от ладки, то LOADER32.EXE при работе будет использовать их, в противном случае используются установки по умолчанию для данного типа модуля. Сохраняет протокол работы SoftICE в.LOG файле. Указывает LOADER32.EXE не выводить сообщение при не возможности найти файл с исходными кодами. Сохраняет Ваш исходный код вместе с отладочной информа цией в.NMS файле. Транслирует модуль в.NMS файл, используя настройки по следнего сеанса трансляции, или, если таковых нет, стандарт ные настройки для данного типа модулей.

/LOGFILE /NOPROMT /PACKAGE /TRANSLATE При формировании команды имейте в виду следующее: Параметры не являются обязательными. Если Вы запускаете утилиту без па раметров, LOADER32.EXE загружает графический интерфейс Symbol Loader и открывает указанный файл.   Укажите одновременно параметры /TRANSLATE и /LOAD, чтобы LOADER32.EXE оттранслировал модуль перед его загрузкой. Не используйте параметры /EXPORTS или /LOGFILE совместно с другими параметрами. Замечание: Если Вы задаете какой либо параметр, LOADER32.EXE не загружа ет графический интерфейс, если только не сталкивается с ошибкой. Если это произойдет, то LOADER32.EXE выведет ее в своем графи ческом окне.

3. Загрузка кода в SoftICE Использование утилиты загрузчика символов командной строки NMSYM — это утилита, которая позволяет Вам создать пакет для трансляции и за грузки отладочной информации для использования с SoftICE или другими программа ми, которые используют таблицы символов формата NM32™. NMSYM предоставляет ряд возможностей, аналогичных свойствам Symbol Loader (LOADER32.EXE) и выпол няет следующие функции: Трансляция и загрузка отладочной информации для каждого модуля в отдель ности. Загрузка и выгрузка таблиц символов и экспортируемых модулем данных. Сохранение содержимого протокола работы SoftICE в файле. Выдача информации о версии продукта и справку. В следующей таблице перечислены параметры каждой из этих функций: Функция Трансляция и загрузка символьной информации для каждого модуля в отдельности. Параметр NMSYM /TRANSLATE или /TRANS /LOAD /SOURCE /ARGS /OUTPUT или /OUT /PROMPT /SYMLOAD или /SYM /EXPORTS или /EXP /UNLOAD /LOGFILE или /LOG /VERSION или /VER /HELP или /H Загрузка и выгрузка групп таблиц символов и экспортов модуля. Сохранение содержимого буфера протокола ра боты SoftICE в файле. Выдача информации о версии продукта и справки.

Синтаксис команд NMSYM NMSYM.EXE имеет следующий синтаксис: NMSYM [option(s)] параметры (options) перечисляются друг за другом через косую черту (/). "Module name" является именем файла, который Вы хотите транслировать или загрузить. Следующий пример показывает правильный вариант задания командной строки: NMSYM /TRANSLATE C:\myproj\myproject.EXE Использование модификаторов параметров и списка файлов Многие параметры имеют собственные дополнительные модификаторы (option specifier) и возможность задания списка файлов, что позволяет конкретизировать режим работы параметра, а также выполнять операции над группами файлов. Модификаторы параметров имеют следующий синтаксис: /opton: [<, option-specifier>] Параметр заканчивается двоеточием (:), после которого через запятую идет список модификаторов.

Использование утилиты загрузчика символов командной строки Следующий пример демонстрирует использование параметра /TRANSLATE с модификаторами SOURCE и PACKAGE для трансляции исходного кода и символов, и упаковки исходных текстов в.NMS файл: /TRANSLATE:SOURCE, PACKAGE Списки файлов задаются так: /option:[;

] В следующем примере параметр /SOURCE используется с тремя дополнитель ными путями поиска. NMSYM использует их для обнаружения исходных файлов в процессе трансляции и загрузки: /SOURCE:c:\myproj\i386;

c:\myproj\include;

c:\msdev\include;

Использование NMSYM для трансляции отладочной информации Основное назначение утилиты NMSYM состоит в извлечении из модуля сгене рированной транслятором отладочной информации и перевод ее в формат NM32, а затем сохранение этой информации в.NMS файле. С этой целью используются следующие параметры командной строки NMSYM: 1 Параметр /TRANSLATION — для задания типа отладочной информации, ко торую Вы хотите получить. 2 Параметр /SOURCE определяет пути, по которым NMSYM будет искать ис ходные файлы. 3 Если Вы хотите самостоятельно определить имя.NMS файла, то используйте параметр /OUTPUT. 4 Задайте имя модуля, который Вы собираетесь транслировать.  NMSYM /TRANSLATE C:\myproj\myproject.EXE Следующие разделы описывают параметры, которые используются для управ ления трансляцией символьной информации каждого конкретного модуля. /TRANSLATE: Параметр /TRANSLATE позволяет определить тип отладочной информации, ко торую Вы хотите транслировать в.NMS файл, а также нужно ли заносить в него ис ходный код. Кроме того, имеется возможность выполнить повторную трансляцию, несмотря на то, что файл с отладочной информацией уже создан и еще не устарел. Параметр /TRANSLATE имеет ряд дополнительных модификаторов, конкрети зирующих режимы работы утилиты. Модификаторы режимов трансляции отладочной информации Следующая таблица содержит список необязательных модификаторов, которые определяют, какая отладочная информация будет транслироваться. Может быть задан только один модификатор. По умолчанию утилита NMSYM использует мо дификатор SOURCE.

38 Модификатор PUBLICS Описание 3. Загрузка кода в SoftICE Включаются только общедоступные (public) (глобальные) символы. Статические функции и переменные исключаются. В результате использования этого режима создается аналог.MAP файла. Таблицы символов имеют наименьший размер. Включена только информация о типе. Символьная инфор мация не включается. Используйте эту опцию, когда Вы хо тите внести дополнительную информацию от типах данных без исходного кода или информации отладки. Включает и символьную информацию, и информацию о ти пах. Исходный код и номера строк не добавляются. Размер таблиц символов относительно невелик. Это режим трансляции по умолчанию. Включается вся от ладочная информация и исходный код.

TYPEINFO SYMBOLS SOURCE Замечание: Включение информации об исходном коде не означает непосредст венного внесения исходных файлов. Заносятся только имена самих файлов с исходными текстами и номера строк. Модификаторы упаковки исходного кода Необязательный модификатор упаковки исходного кода определяет, будет ли NMSYM присоединять исходный код к.NMS файлу или нет. По умолчанию NMSYM делает следующее: Для модулей драйвера устройства исходный код добавляется в.NMS файл, так как он загружается прежде, чем операционная система будет полностью инициализирована. Для прикладных программ, которые исполняются после загрузки операцион ной системы, исходные тексты приложения в.NMS файл не включаются. Имеются следующие модификаторы режима включения исходных кодов в.NMS файл: Модификатор PACKAGE NOPACKAGE Описание Включает исходные файлы с.NMS файлом. Не включает исходные файлы с.NMS файлом.

Замечание: Если Вы пакуете исходный код с.NMS файлом, то он будет досту пен каждому, кто обращается к таблице символов. Модификатор ALWAYS По умолчанию, NMSYM не транслирует символьную информацию, если.NMS файл уже создан, а приложение после этого не подвергалось изменениям. Модификатор ALWAYS позволяет заставить NMSYM провести трансляцию в любом случае. Примеры использования параметра /TRANSLATE Следующий пример задает имя модуля без параметра /TRANSLATON, что при водит к использованию при трансляции режимы в зависимости от типа модуля.

Использование утилиты загрузчика символов командной строки NMSYM myproj.exe Замечание: Для приложений Win32 или библиотек DLL по умолчанию исполь зуется строка "/TRANSLATE:SOURCE, NOPACKAGE", а для моду лей драйверов — "/TRANSLATE:SOURCE, PACKAGE". Следующий пример показывает трансляцию отладочной информации для VxD. Используются модификатор SYMBOLS, чтобы исключить информацию, связанную с исходным кодом и модификатор /NOPACKAGE для запрещения включения ис ходного кода в.NMS файл. NMSYM /TRANSLATE:SYMBOLS, NOPACKAGE c:\myvxd.vxd Следующий пример использует задает трансляцию в зависимости от типа моду ля, а модификатор /ALWAYS заставляет утилиту выполнить ее в любом случае. NMSYM /TRANSLATE:ALWAYS myproj.exe /SOURCE: Параметр /SOURCE позволяет определить пути, в пределах которых NMSYM должен искать исходный файл. Во время трансляции (только с модификатором PACKAGE) или загрузки модуля (/LOAD или /SYMLOAD) утилита NMSYM будет пытаться обнаружить все исходные файлы, заданные в таблице.NMS файла. По умолчанию поиск будет проводиться в этих директориях. Модификатор "path list" — это один или несколько отделенных друг от друга точкой с запятой (;

) путей. Параметр /SOURCE может быть задан в одной команд ной строке несколько раз. Порядок инструкций /SOURCE и путей внутри каждого списка определяет последовательность поиска. Примеры использования параметра /SOURCE Следующий пример задает два пути поиска исходных файлов. NMSYM /TRANSLATE:PACKAGE /SOURCE:c:\myproj\i386;

c:\myproj\include;

myproj.exe Следующий пример задает два набора исходных путей. NMSYM /TRANS:PACKAGE /SOURCE:c:\myproj\i386;

c:\myproj\include;

/SOURCE:c:\msdev\include;

myproj.exe Следующий пример задает основной путь к исходным файлам проекта и ис пользует DOS оператор '%' для извлечения пути из стандартной переменной окру жения INCLUDE=. Список путей расширяется, чтобы включить c:\myproj\i386 и пути, перечисленный в переменной окружения INCLUDE=. NMSYM /TRANS:PACKAGE /SOURCE:c:\myproj\i386;

%INCLUDE% myproj.exe Замечание: В случае, если исходный код не найден, параметр /PROMPT опре деляет, следует ли пропустить этот файл, или просить у Вас помощи для его поиска. /OUTPUT: NMSYM составляет имя.NMS файла из имени основного модуля, добавляя к не му стандартное для таблиц NM32 расширение.NMS. Образованный файл сохраня ется в той же директории, где находится транслируемый модуль. Если Вам необхо димо изменить получаемое по умолчанию имя или расположение.NMS файла, то сделать это можно с помощью параметра /OUTPUT. Если Вы задаете имя, но не оп ределяете путь для записи файла, то он будет сохранен вместе основным модулем.

40 Примеры использования параметра /OUTPUT 3. Загрузка кода в SoftICE В следующем примере путь к.NMS файлу изменен на общий каталог для.NMS файлов. NMSYM /output:c:\ntice\symbols\myproj.nms c:\myproj\myproject.exe /PROMPT NMSYM – это командная утилита, специально разработанная для автоматизации трансляции и загрузки отладочной информации. Скорее всего, Вам не захочется по лучать сообщения об отсутствии исходных файлов, однако в некоторых случаях это могло бы пригодиться. Параметр /PROMPT позволяет NMSYM определить, следует ли ее просить у Вас помощи для обнаружения файлов исходных кодов при использо вании параметров /TRANSLATE:PACKAGE, /LOAD или /SYMLOAD.

Использование NMSYM для загрузки модуля и отладочной информации Подобно режиму трансляции функционирование параметра /LOAD в утилите NMSYM спроектировано таким образом, чтобы иметь возможность работать с ка ждым конкретным модулем отдельно. Любой модуль будет оттранслирован и за гружен. Если Вы не собираетесь транслировать или загружать и исполнять модуль, то следует использовать параметр /SYMLOAD. Пример использования NMSYM для трансляции, загрузки и исполнения модуля: NMSYM /TRANS:PACKAGE /LOAD:EXECUTE myproj.exe Следующий пример показывает альтернативные возможности загрузки группы транслированных отладочных файлов с использованием параметра /SYMLOAD: NMSYM /SYMLOAD:ntdll.dll;

ntoskrnl.nms;

myproj.exe В этом примере будут загружены три символьные таблицы, однако трансляции не произойдет, даже если соответствующие.NMS файлы устарели. Также не про изойдет и запуска файла MYPROJ.EXE для отладки. /LOAD: Параметр /LOAD позволяет загружать файлы с отладочной информацией.NM32 в SoftICE, и, по желанию, запускать модуль для отладки. Параметр имеет следующие модификаторы. Модификаторы типов загрузки Данные модификаторы используются для определения того, каким образом бу дут загружены модуль и его отладочная информация. Значение модификатора по умолчанию зависит от типа модуля: для исполняемых программ — это EXECUTE, для неисполняемых — SYMBOLS. Модификатор SYMBOLS Описание Будет загружена только отладочная информация, с помо щью которой после загрузки модуля Вы можете устанавли вать в нем контрольные точки. Загружается и отладочная информация, и исполняемая про грамма с возможностью ее дальнейшей отладки.

EXECUTE Использование утилиты загрузчика символов командной строки Модификаторы остановки после загрузки Для управления режимом установки прерывания на входной точке модулей ис пользуется один из следующих модификаторов: Модификатор BREAK NOBREAK Описание Устанавливает команду прерывания на входной точке моду ля (WinMain, DllMain, илиDriverEntry). Не устанавливает контрольную точку на входе модуля.

Наличие этого модификатора обусловлено зависимостью значения этого пара метра по умолчанию от типа модуля: для прикладных программ оно равно "BREAK", а для всех остальных модулей — "NOBREAK". Модификатор NOSOURCE NOSOURCE запрещает загрузку файлов исходного кода, даже если в.NMS файл включен список файлов исходных текстов или информация о номерах строк. Примеры использования параметра /LOAD В следующем примере NMSYM загрузит и (по умолчанию) запустит модуль MYPROJ.EXE;

если таблица символов устарела, то будет выполнена трансляция для данного типа модуля: NMSYM /LOAD myproj.exe В следующем примере программа должна быть запущена, но контрольной точки на входе программы не устанавливается. В случае необходимости будет выполнен определенный для данного типа модуля вид трансляции. NMSYM /LOAD:NOBREAK myproj.exe В следующем примере будет загружена только символьная информация и явно определен тип трансляция — PUBLIC: NMSYM /TRANS:PUBLIC /LOAD:SYMBOLS myproj.dll /ARGS: Параметр /ARGS служит для передачи аргументов в исполняемый модуль. Эта оп ция полезна только при совместном использовании с параметром /LOAD:EXECUTE. — это строка, задающая передаваемые программе аргу менты. Если она содержит пробел, то вся строка должна быть заключена в двойные кавычки ("). Примеры использования параметра /ARGS В следующем примере модуль MYPROJ.EXE будет загружен для отладки, и в не го будет передан аргумент TEST.RTF. NMSYM /LOAD:EXECUTE /args:test.rtf myproj.exe В следующем примере командная строка немного усложнена, так что приходит ся заключать ее в двойные кавычки ("): NMSYM /LOAD:EXECUTE "/ARGS:/PRINT /NOLOGO test.rtf" myproj.exe Использование двойных кавычек предотвращает ошибку NMSYM при разборе командной строки из за при наличии пробела в параметрах программы: /PRINT_/NOLOGO_test.rtf (пробел отмечен знаком подчеркивания).

3. Загрузка кода в SoftICE Использование NMSYM для загрузки таблиц символов или экспортов Кроме трансляции и загрузки утилита NMSYM также предоставляет возмож ность пакетной загрузки и выгрузки таблиц символов и экспортируемой информа ции. Это чрезвычайно полезно при загрузке "окружения" или связанного набора файлов с отладочной информацией. Например, если Вы запускаете SoftICE вруч ную, то можете применить NMSYM для получения возможностей, аналогичных ис пользовании параметров настройки для загрузки символической и экспортируемой информации. Например, Вы можете создать пакетный файл, подобный приведенному ниже, для управления загрузкой отладочной информации. Пакет содержит один допол нительный параметр, который определяет принадлежность загружаемых файлов — для отладки драйвера или прикладной программы (по умолчанию — прикладная программа). В обоих случаях загружается информация, экспортируемая стандарт ными модулями Windows. net start ntice ECHO OFF if "%1" == "D" goto dodriver if "%1" == "d" goto dodriver REM *** *** set SYMBOLS=ntdll.dll;

shell32.dll;

ole32.dll;

win32k.sys goto doload :dodriver REM *** *** set SYMBOLS=hal.dll;

ntoskrnl.exe;

:doload NMSYM /SYMLOAD:%SYMBOLS% EXPORTS:kernel32.exe;

user32.exe;

gdi32.exe Другое преимущество использования NMSYM в том, что для поиска.NMS файлов и модулей не требуется указания полного пути поиска. Если Вы не определяете путь, а заданный модуль или.NMS файл не будет найден в текущем каталоге, то поиск бу дет продолжен по дополнительным путям поиска. /SYMLOAD: Параметр /SYMLOAD используется для загрузки отладочной информации в SoftICE. Символьные таблицы должны быть предварительно оттранслированы, так как в этом случае утилита трансляцию не выполняет. Модификатор задает необходимые.NMS файлы или модули с воз можностью явного указания их местонахождения. Если местонахождение модуля не определено, то NMSYM будет пытаться найти файл в текущем каталоге или по до полнительным путям поиска. Если Вы определяете абсолютный или относительный каталог модуля, затем никакого дополнительного поиска производится не будет. Примеры использования параметра /SYMLOAD В приведенном ниже примере параметр /SYMLOAD используется для загрузки таблицы символов, обычно используемых для отладки OLE программ. Здесь пути не задаются, так что при необходимости будет произведен дополнительный поиск. NMSYM /SYMLOAD:ole32.dll;

oleaut32.dll;

olecli32.dll Использование утилиты загрузчика символов командной строки /EXPORTS: Параметр /EXPORTS используется для загрузки информации, экспортируемой одним или несколькими модулями, в SoftICE. Экспортируемая информация — это облегченная версия символьной информации об API модуля (обычно из библиотек DLL, но и исполняемые.EXE файлы также могут экспортировать информацию). Модификатор задает необходимые модули возможностью явного указания их местонахождения. Если местонахождение модуля не определено, то NMSYM будет пытаться найти файл в текущем каталоге или по дополнительным путям поиска. Если Вы определяете абсолютный или относительный каталог моду ля, затем никакого дополнительного поиска производится не будет. Примеры использования параметра /EXPORTS Следующий пример демонстрирует применение параметра /EXPORTS для за грузки экспортируемой информации из программ, обычно используемых при от ладке OLE программ. Здесь пути не задаются, так что при необходимости будет произведен дополнительный поиск. NMSYM /EXPORTS:ole32.dll;

oleaut32.dll;

olecli32.dll Использование NMSYM для выгрузки отладочной информации NMSYM имеет параметр /UNLOAD, с помощью которого Вы можете программ ным путем удалять отладочную информацию для определенного набора таблиц символов и(или) экспорта. Это может использоваться для экономии оперативной памяти, занимаемой уже ненужными таблицами символов. /UNLOAD: Модификатор определяет таблицы символов или экспорта. Имя таблицы получается из имени основного модуля без пути или расширения. Для обеспечения гибкости и поддержки возможных в будущем изменений имен таб лиц, следует задавать пути или расширения, необходимых для однозначного опре деления таблицы. Примеры использования параметра /UNLOAD Следующий пример выполняет действие, обратное описанному в разделах /SYMLOAD и /EXPORTS: NMSYM /UNLOAD:ole32.dll;

oleaut32.dll;

olecli32.dll SoftICE найдет таблицу, которая соответствует заданному имени модуля и удалит ее, если это окажется возможным, освободив тем самым занимаемую ею память. Замечание: По умолчанию SoftICE пытается выгрузить таблицу символов. Если заданная таблица символов не существует, то SoftICE, пытается вы грузить экспортную таблицу с тем же именем.

Использование NMSYM для сохранения протокола работы в файл NMSYM предоставляет возможность сохранить буфер протокола SoftICE в фай ле при использовании параметр /LOGFILE. Эта операция эквивалентна возможно сти утилиты Symbol Loader "SAVE SOFTICE HISTORY AS…". NMSYM поддерживает возможность присоединения новых данных к существующему файлу с помощью модификатора APPEND.

44 /LOGFILE:[, logfile specifier list] 3. Загрузка кода в SoftICE Модификатор "filename" задает путь и имя файла, в котором будет сохранен бу фер протокола. Если путь не задан, то будет использован текущий каталог. Модификатор параметра /LOGFILE Модификатор APPEND позволяет Вам добавить текущее содержание буфера протокола работы SoftICE к уже существующему файлу предыдущих протоколов. По умолчанию файл переписывается заново. Примеры использования параметра /LOGFILE Следующий пример создаст (или перепишет) файл MYPROJ.LOG с текущим со держанием буфера протокола SoftICE: NMSYM /LOGFILE:myproj.log Следующий пример объединит текущее содержание буфера протокола SoftICE с файлом MYPROJ.LOG (или создаст файл заново): NMSYM /LOGFILE:myproj.log,APPEND Внимание: NMSYM не запрашивает разрешения на перезапись существующе го файла, а делает это автоматически.

Получение информации об утилите NMSYM Для получения информации об утилите NMSYM используются параметры /VERSION и /HELP. /VERSION Параметр /VERSION выдает номера версий NMSYM, SoftICE, также как транс лятора символьного обработчика. Для правильной работы SoftICE, LOADER32.EXE и NMSYM эти версии должны быть совместимы. Каждая из этих программ сверяет свой номер версии с другими для проверки возможности совместной работы. /HELP Параметр /HELP дает краткое описание синтаксиса командной строки, пара метров и их модификаторов.

Ошибки — великий учитель при условии, что человек достаточно честен, чтобы признать их, и имеет желание от них избавиться.

Неизвестный автор Mistakes are a great educator when one is honest enough to admit them and willing to learn from them.

Author Unknown 4. Интерфейс SoftICE Введение В данной главе описана структура экрана SoftICE и его окон, и управление ими. Если Вы новичок в SoftICE, то внимательно прочтите эту главу, а затем обра щайтесь к ней, как к справочнику. Если Вы уже знакомы с отладчиком, то прочи тайте в первую очередь раздел, касающийся окна стека.

Universal Video Driver Для вывода отладочной информации последние версии SoftICE используют универсальный видеодрайвер (UVD — Universal Video Driver), позволяющий отлад чику работать непосредственно с видеопамятью. Для использования UVD необхо димо, чтобы видеоадаптер и его драйверы поддерживали стандарт Direct Draw. Для настройки экрана SoftICE, управления его размером и положением на рабочем сто ле используются следующие команды: Команда LINES n WIDTH n SET FONT n SET ORIGIN x y SET FORCEPALETTE [ON|OFF] Описание Задает количество строк в экране SoftICE (от 25 до 128). Определяет ширину экрана в символах (от 80 до 160). Номер используемого шрифта (1, 2 или 3). Задает координаты верхнего левого угла экрана SoftICE на рабочем столе Windows в пикселях. Во включенном состоянии (ON) запрещает изменение системной палитры цветов (№№0 7 и 248 255) в 256 цвет ном режиме, что гарантирует постоянную видимость эк рана SoftICE. По умолчанию — выключено (OFF). Перемещение экрана SoftICE с шагом в 1 символ. Перемещение экрана SoftICE в верхний левый угол (0,0). Обновление содержимого экрана SoftICE, что полезно в тех редких случаях, когда экран портится операцией bitblt, исполняемой в момент активизации отладчика. Размещение экрана SoftICE в центре рабочего стола.

Ctrl Alt стрелки Ctrl Alt Home Ctrl L Ctrl Alt C 4. Интерфейс SoftICE Установка размера видеопамяти При использовании универсального видеодрайвера SoftICE должен сохранять со держимое видеобуфера для последующего восстановления изображения. По умол чанию SoftICE резервирует с этой целью 2 Мб. Точное же количество необходимой памяти зависит от видеорежима, размера экрана отладчика и (для приложений Di rectDraw) от сложности отображаемых поверхностей. В любом случае оно не больше объема видеопамяти Вашей видеокарты. Нужное Вам значение можно задать с по мощью утилиты Symbol Loader (выберите в меню "EDIT" пункт "SOFTICE INITIALIZATION SETTINGS" и установите требуемую величину параметра "Video memory size").

Вызов экрана SoftICE После загрузки отладчика экран SoftICE автоматически появляется на мониторе в следующих случаях: На этапе загрузки SoftICE. По умолчанию инициализационная строка содер жит команду X (Exit — Выход) с последующей точкой с запятой, поэтому на данном этапе экран исчезает сразу после возникновения. Подробности смот рите в разделе "Изменение начальных установок SoftICE" на странице 111. При нажатии клавиатурной комбинации вызова "Ctrl D". С ее же помощью экран SoftICE может быть снова закрыт. При срабатывании контрольной точки. При перехвате системной ошибки. При крахе Windows NT и появлении "Синего экрана смерти". При активизации SoftICE вся остальная активность Вашего компьютера пре кращается, все прерывания запрещаются, а SoftICE обеспечивает доступ к клавиа туре и вывод на монитор собственными средствами, непосредственно обращаясь к аппаратурному обеспечению компьютера. Совет: Комбинация вызова отладчика (Ctrl D) может быть изменена с по мощью команды ALTKEY.

Отключение SoftICE на этапе загрузки Если SoftICE был установлен под Windows NT в качестве загрузочного или систем ного драйвера, то Вы имеете возможность отключить его в момент старта системы, нажав клавишу ESC, когда в нижней части экрана появится следующее сообщение: Press Esc to cancel loading SoftICE ( Esc SoftICE) Если Вы установили SoftICE под Windows NT в качестве автоматического драй вера, то Вы можете отключить его, только изменив режим загрузки и перезагрузив компьютер. Если загрузка SoftICE вызовет сбой системы, выберите в загрузочном меню Windows NT пункт: Last known good configuration ( ) Содержимое экрана SoftICE Экран SoftICE — это Ваш основной инструмент при отладке приложения. Он подразделяется на несколько окон и строку подсказки, позволяющие контролиро вать различные стороны процесса отладки. В приведенной ниже таблице все окна перечислены в порядке убывания их значимости.

Содержимое экрана SoftICE Окно SoftICE Окно команд Окно кода Окно локальных переменных Окно слежения Окно регистров Окно данных Окно стека Окно регистров процессора PIII Окно стека сопроцессора Строка подсказки Описание Ввод команд и выдача сообщений Вывод машинных инструкций и/или исходных кодов Вывод содержимого текущего кадра стека Вывод значений переменных, указанных командой WATCH Вывод и изменение содержимого регистров и флагов Отображение и изменение содержимого участка памяти Вывод содержимого стека DOS программ, задач Windows и 32 битного кода Вывод содержимого регистров процессора Pentium III Вывод содержимого стека (регистров) сопроцессора или MMX регистров Краткая информация о командах SoftICE По умолчанию SoftICE выводит на экран строку подсказки и окна команд, кода и локальных переменных. В зависимости от Ваших задач Вы можете открывать и закрывать и другие необходимые Вам окна. На следующем рисунке показан ти пичный экран отладчика.

Окно регистров Окно локальных переменных Окно данных Окно кода Кнопки прокрутки окна Окно команд Имя текущего процесса Строка подсказки Изменение размера экрана SoftICE По умолчанию SoftICE выводит информацию на экран высотой в 25 строк, ис пользуя их для размещения всех своих окно. Если Вы используете цветной мони тор (и соответствующую видеокарту), с помощью команды LINES Вы можете изме нить размер экрана до 43, 50 или 60 строк. Вывод на монохромные мониторы всегда 4. Интерфейс SoftICE ограничен 25 строками. Команда WIDTH позволяет изменять длину строки экрана в пределах от 80 до 160 символов. Пример: LINES 60 WIDTH 80 Кроме того, экран SoftICE может быть размещен в любом месте в пределах ра бочего стола Windows. Перемещение осуществляется с помощью клавиш со стрел ками при одновременно нажатых Ctrl и Alt. Комбинация Ctrl Alt Home перемеща ет экран отладчика в верхний левый угол (с пиксельными координатами 0,0), а Ctrl Alt C размещает его в центре рабочего стола.

Управление окнами SoftICE С окнами отладчика можно выполнять следующие действия: открывать и закрывать все окна, кроме окна команд;

изменять размер окон кода, данных и локальных переменных;

листать содержимое окон кода, команд, данных, локальных переменных и слежения. Управление окнами может быть осуществлено с клавиатуры или с помощью мыши. Открытие и закрытие окон Чтобы открыть необходимое окно, используются команды, перечисленные в следующей таблице. Если окно уже открыто, то та же самая команда закрывает его. Чтобы закрыть окно с помощью мыши, протащите линию, ограничивающую его снизу, до верхней границы. Команда WC WD WF WL WR WW WS WX Окно Окно кода Окно данных Окно стека сопроцессора Окно локальных переменных Окно регистров Окно слежения Окно стека Окно регистров процессора Pentium III Изменение размеров окон Для изменения размера окна переместите мышью нижнюю границу окна так, как Вам это необходимо. С клавиатуры это можно сделать с помощью тех же ко манд открытия/закрытия окна, добавив после них десятичное число, означающее высоту окна в строках. Пример: WD 7 Обратите внимание, что окно команд автоматически увеличивается или умень шается при изменении размеров других окно. (Других способов изменить размер окна команд нет.) Содержимое экрана SoftICE Перемещение курсора из окна в окно По умолчанию курсор размещается в окне команд. Для его перемещения щелк ните мышью в нужном Вам окне. Если курсор находится в окнах команд или кода, то перечисленными ниже комбинациями клавиш его можно переместить в нужное окно (и вернуть назад). Окно Окно кода Окно данных Окно стека сопроцессора Окно локальных переменных Окно регистров Окно слежения Окно стека Комбинация клавиш Alt C Alt D Переместить курсор в это окно невозможно Alt L Alt R Alt W Alt S Пролистывание содержимого окна Вы можете листать содержимое окон кода, команд, данных, локальных пере менных и слежения. Для окон стека сопроцессора и регистров это невозможно, так как их размер всегда равен 3 и 4 строкам, соответственно. SoftICE позволяет листать содержимое как с клавиатуры, так и с помощью мы ши. Все эти способы описаны в следующей таблице. Замечание: Комбинации клавиш для некоторых окон могут меняться. Некото рые окна, например, не позволяют переходить к первой и послед ней строкам. Полное описание способов пролистывания информа ции в окнах дается в соответствующих разделах. Размер и направление листания окна На одну страницу назад На одну страницу вперед На одну строку назад На одну строку вперед Перейти к первой строке кода Перейти к последней строке кода На один символ влево На один символ вправо Комбинация Действие клавиш мышью PageUp PageDown Стрелка вверх Стрелка вниз Home End Стрелка влево Стрелка вправо Щелкните по внутренней стрелке вверх Щелкните по внутренней стрелке вниз Щелкните по наружной стрелке вверх Щелкните по наружной стрелке вниз Невозможно Невозможно Щелкните по стрелке влево Щелкните по стрелке вправо 4. Интерфейс SoftICE Копирование и вставка данных в окнах Если у Вас в системе есть мышь, то Вы можете копировать и переносить данные между окнами, что очень удобно, например, для копирования адресов и данных в выражения. Эти действия выполняются следующим образом: 1 Выделите данные, которые Вы хотите копировать. 2 Нажмите правую кнопку мыши, чтобы появилось контекстное меню. 3 Выберите левой кнопкой мыши необходимую команду. Команда Copy Copy and Paste Paste Описание Копирует выделенные данные в буфер Копирует выделенные данные и вставляет их в место, ука зываемое текущим положением курсора Вставляет данные из буфера в место, указываемое теку щим положением курсора Ввод команд с помощью мыши С помощью мыши можно ввести команды D, U и WHAT. (Подробное описание команд можно найти в "Справочнике по командам SoftICE".) Для ввода этих команд с помощью мыши выполните следующие действия: 1 Выделите данные, к которым Вы хотите применить команду. Например, вы делите выражение для выяснения его типа. 2 Нажмите правую кнопку мыши, чтобы появилось контекстное меню. 3 Выберите левой кнопкой мыши необходимую Вам команду. Сами команды кратко описаны в приведенной ниже таблице. Команда в меню Display Un Assemble What Previous Команда SoftICE D U WHAT нет Описание Показать содержимое памяти по указанному адресу Показать исходный либо дизассемблированный код по указанному адресу Определить, относится ли имя или выражение к из вестному типу Повторить последнюю команду Получение помощи SoftICE предоставляет 2 способа получения помощи во время отладки приложе ний: с использованием строки подсказки и по команде H. Использование строки подсказки В нижней части экрана SoftICE всегда имеется строка подсказки. Содержимое этой строки обновляется по мере того, как Вы вводите команды. В строке показы вается информация следующих видов: До тех пор, пока вводимая команда не завершена, в строке перечисляются все возможные команды, которые начинаются с уже введенных Вами символов.

Окно команд Если введенная Вами строка совпадает с командой SoftICE, в строке подсказки появляется краткое ее описание. Если после команды Вы введете пробел, то Вам будет показан синтаксис дан ной команды. При редактировании содержимого окна регистров или данных в строке под сказки указываются допустимые команды для этого окна. Использование команда H Команда H выдает общие сведения по всем командам SoftICE или более деталь ную информацию по какой либо конкретно указанной Вами команде. Для получе ния краткого описания всех команд необходимо выполнить команду H без пара метров. Для получения более детального описания какой либо конкретной команды не обходимо указать эту команду после H в качестве параметра. SoftICE покажет опи сание команды, синтаксис и пример ее использования. Приведенный ниже пример показывает получение подсказки о команде BPINT: :H BPINT Breakpoint on interrupt BPINT interrupt-number {IF expression] [DO bp-action] ex: BPINT 50 ( BPINT [IF ] [DO ] : BPINT 50) Окно команд Окно команд позволяет Вам вводить необходимые для управления работой от ладчика команды и выводит информацию о текущем процессе отладки. Содержи мое окна сохраняется в буфере протокола SoftICE. Окно команд всегда открыто и имеет по крайней мере 2 строки в высоту. Хотя Вы и не можете непосредственно изменить размер окна, тем не менее его высота автоматически меняется при изменении размеров других окон.

Листание содержимого окна команд Для листания содержимого окна команд используются следующие клавиатур ные комбинации. Функция Перейти к предыдущей странице содержимого буфера протокола Перейти к следующей странице содержимого буфера протокола Комбинация клавиш PageUp PageDown Перейти к предыдущей строке содержимого буфера протокола Стрелка вверх Перейти к предыдущей строке содержимого буфера протокола Стрелка вниз 4. Интерфейс SoftICE Ввод команд Команды SoftICE можно вводить, когда курсор находится в окне команд или кода. Для ввода команды наберите ее на клавиатуре и нажмите ENTER. Совет: По мере ввода команды в строке подсказки перечисляются все до пустимые команды, которые начинаются с уже введенных симво лов. Если в этой строке показывается только одна команда, то на жатием пробела можно автоматически завершить ввод. SoftICE са мостоятельно дополнит недостающие символы. После выполнения команды выдаваемая ею информация появляется непосред ственно после нее в окне команд. Если эта информация выводится в последней строке окна, то окно автоматически пролистывается. Если выдаваемая информа ция не умещается в окне, то появляется следующее сообщение: Any Key To Continue, ESC To Cancel ( ESC ) Для отключения этой подсказки можно ввести команду: SET PAUSE OFF Синтаксис команд Команды SoftICE имеют следующие общие правила построения: Все команды представляют собой нечувствительные к регистру строки дли ной от 1 до 6 символов. Все параметры представлены ASCII строками или выражениями. Адрес в SoftICE может быть представлен парой селектор:смещение или сег мент:смещение, либо одним смещением. В выражениях могут использоваться: символы группировки — круглые скобки '(', ')' числа в шестнадцатеричном или десятичном формате адреса номера строк строковые литералы идентификаторы операторы встроенные функции регистры Пример: Выражением является строка (1+2)*3 Любой команде, которая принимает в качестве параметра число или адрес, мо жет быть передано выражение любой сложности. Для вычисления выражения мо жет быть использована команда '?' (вопросительный знак). Кроме того, контроль ные точки могут содержать условия, основанные на результате вычисления выра жения, а именно, контрольная точка срабатывает только в том случае, когда результат имеет не нулевой значение (TRUE, Истина). Использование функциональных клавиш SoftICE присваивает некоторым функциональным клавишам (и их комбинаци ям) значения наиболее часто используемых команд. В следующей таблице приве ден список таких назначений.

Окно команд Клавиша Команда F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Shift F3 Alt F1 Alt F2 Alt F3 Alt F4 Alt F5 Alt F11 Alt F12 H WR SRC RS X EC HERE T BPX P G @SS:EIP P RET FORMAT WR WD WC WW CLS Функция Выдать подсказку Открыть/закрыть окно регистров Переключиться между режимами исходных кодов, смешанных кодов или только ассемблерных команд Показать экран отлаживаемого приложения Перейти Перевести курсор в окно кодов или из него Выполнить приложение до команды, на которую указывает курсор Шаг трассировки (с заходом в функции) Установить контрольную точку в текущей строке Выполнить один шаг программы (без захода в функции) Перейти в вызывающую функцию программу Выполнить функцию до выхода в вызывающую программу Изменить формат вывода информации в окне данных Открыть/закрыть окно регистров Открыть/закрыть окно данных Открыть/закрыть окно кодов Открыть/закрыть окно слежения Очистить содержимое окна команд вом двойном слове окна данных dd dataaddr->0 Показать данные по адресу, размещенному в пер dd dataaddr->4 Показать данные по адресу, размещенному во вто ром двойном слове окна данных Вы можете самостоятельно присвоить функциональным клавишам значения необходимых Вам команд. Подробности смотрите в разделе "Изменение назначе ний клавиатуре" на странице 118. Редактирование командных строк Для редактирования командных строк используются описанные ниже клавиши: Функция Перевести курсор в начало командной строки Перевести курсор в конец командной строки Переключение режимов вставки/замены. В режиме вставки вводимые символы вставляются на место курсора (мерцающий блок), сдвигая вправо остаток строки. В режиме замены вво димые символы заменяют символы, указываемые курсором Комбинация клавиш Home End Insert Продолжение на следующей странице 54 Функция 4. Интерфейс SoftICE Комбинация клавиш Delete Bksp Esc <, > Удалить указываемый курсором символ со сдвигом остатка строки влево Удалить предыдущий символ со сдвигом остатка строки влево Отменить использование вводимой командной строки Перемещение курсора влево/вправо в пределах строки Вызов предыдущих команд SoftICE помнит последние 32 введенные Вами команды. Любую из них можно вызвать для повторного исполнения или для редактирования с последующим ис полнением, как из окна команд, так и из окна кодов. В следующей таблице приведены способы вызова предыдущих команд из окна команд. Функция (курсор в окне команд) Получить предыдущую команду из буфера протокола Получить следующую команду из буфера протокола Комбинация клавиш Стрелка верх Стрелка вниз Замечание: Допускается использовать префиксы. Например, если Вы введете символ 'A', то нажатие стрелки вверх (или вниз) будет перемещать Вас только по командам, начинающихся с 'A'. В следующей таблице приведены способы вызова предыдущих команд из окна кодов. Функция (курсор в окне кодов) Получить предыдущую команду из буфера протокола Получить следующую команду из буфера протокола Комбинация клавиш Shift Стрелка верх Shift Стрелка вниз Использование макрокоманд времени исполнения Макрокоманды представляют собой разработанные пользователем команды, которые могут использоваться точно также, как и встроенные команды SoftICE. Определение, или тело макрокоманды, содержит последовательность вызовов дру гих команд, в том числе и иные макрокоманды и аргументы командной строки. Существует 2 способа создания макрокоманд. Можно создать макрокоманды времени исполнения, которые существуют до момента перезагрузки SoftICE, и по стоянные макрокоманды, которые автоматически загружаются при старте отлад чика. Создание и использование постоянных макрокоманд подробно описаны в разделе "Работа с постоянными макрокомандами" на странице 120. В приведенной ниже таблице описаны способы работы с макрокомандами вре мени исполнения.

Окно команд Действие Создание или изменение макрокоманды Удаление макрокоманды Удаление всех макрокоманд Редактирование макрокоманды Вывод списка всех макрокоманд Совет: Команда MACRO имя макроса = "команда1;

команда2;

…" MACRO имя макроса * MACRO * MACRO имя макроса MACRO Можно изменить постоянную макрокоманду только на время те кущего сеанса отладки. При новом запуске SoftICE эта макроко манда восстановит свое прежнее содержание. Тело макрокоманды состоит из последовательности команд SoftICE или других макросов, разделенных точками с запятой. При этом последняя команда не обя зательно должна заканчиваться точкой с запятой. На аргументы командной стро ки макрокоманды можно ссылать в любом месте тела макроса с помощью %< >, где номер параметра — это цифры от 1 до 8. Пример: Макрокоманда MACRO asm = "a %1" определяет псевдоним для команды A (команда ассемблера). Идентификатор "%1" заменяется на первый аргумент после имени макроса "asm" или просто удаля ется, если аргумента нет. Если требуется вставить в тело макрокоманды символ двойных кавычек (") или знак процента (%), то перед ними необходимо добавить символ обратной косой черты (\). Чтобы добавить собственно знак обратной косой черты, используется последовательность из двух таких символов (\\). Замечание: Рекурсивный вызов макрокоманд возможен, однако, польза от это го приема сомнительна, так как программного способа завершить его работу не существует. Если макрокоманда вызывает саму себя в последней команде тела макроса (так называемый "хвостовой вы зов"), то такая команда выполняется до тех пор, пока пользователь не нажмет 'ESC', чтобы прервать ее работу. Если рекурсивный вы зов является не последней командой макроса, то такой вызов вы полняется 32 раза (ограничение вложенности). В следующей таблице приведены примеры допустимых макрокоманд. Макрокоманда времени исполнения MACRO Qexp = "addr explorer;

Query %1" MACRO lshot = "bpx %1 do \”bc bpindex\”" MACRO ddt = "dd thread" MACRO ddp = "dd process" MACRO thr = "thread %1 tid" MACRO dmyfile = "macro myfile = \”TABLE %1;

file \%1\”" Пример вызова Qexp Qexp 140000 1shot eip 1shot @esp ddt ddp thr thr -x dmyfile mytable myfile myfile.c 4. Интерфейс SoftICE Сохранение содержимого буфера протокола окна команд в файл Буфер протокола окна команд содержит всю информацию, которая выводилась в окне команд. Его сохранение в файле может оказаться полезным по следующим причинам: выводились большие массивы данных или содержимого регистров;

выводились листинги дизассемблированных кодов;

необходимо сохранить протоколы исполнения контрольных точек, создавае мые командой BPLOG;

сохранение протоколов работы команды BMSG;

Pages:     || 2 | 3 | 4 |



© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.