Содержание
Введение. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Краткое описание . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Отладчик SoftICE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Установка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Использование отладчика SoftICE . . . . . . . . . . . . . . . . . . . . . 6
Пользовательский интерфейс в SoftICE . . . . . . . . . . . . . . . . . . . 7
Утилита Symbol Loader . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Утилита SIWSYM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Установка утилиты SIWSYM. . . . . . . . . . . . . . . . . . . . . . . . 9
ICEPACK.EXE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Глава 1. Настройка SoftICE . . . . . . . . . . . . . . . . . . . . . . . . 10
1.1. Изменение настроек инициализации SoftICE . . . . . . . . . . . . . . . . 10
1.1.1. Общие настройки . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1.2. Предварительная загрузка символов и исходного кода. . . . . . . . . 13
1.1.3. Предварительная загрузка экспорта . . . . . . . . . . . . . . . . . 14
1.1.4. Настройка удаленной отладки по последовательному соединению . . . 15
1.1.5. Настройка удаленной отладки по сети . . . . . . . . . . . . . . . . 16
1.1.6. Назначение действий функциональным клавишам. . . . . . . . . . . 17
1.1.7. Постоянные макрокоманды . . . . . . . . . . . . . . . . . . . . . 20
1.1.8. Временные макрокоманды. . . . . . . . . . . . . . . . . . . . . . 22
1.1.9. Задание параметров для устранения неисправностей . . . . . . . . . 23
1.1.10. Дополнительные настройки (Advanced) . . . . . . . . . . . . . . . 24
1.2. Настройка экрана . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.2.1. Универсальный видеодрайвер . . . . . . . . . . . . . . . . . . . . 25
1.2.2. Установка размера видеопамяти . . . . . . . . . . . . . . . . . . . 26
1.2.3. Изменение размеров экрана SoftICE . . . . . . . . . . . . . . . . . 27
1.2.4. Изменение цветов на экране отладчика . . . . . . . . . . . . . . . 28
1.3. Настройка принтера . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Глава II. Загрузка кода в SoftICE . . . . . . . . . . . . . . . . . . . . . 30
2.1. Общие представления об отладке . . . . . . . . . . . . . . . . . . . . . 30
2.2. Загрузка SoftICE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.3. Создание приложений с отладочной информацией . . . . . . . . . . . . . 33
2.4. Использование Symbol Loader для трансляции и загрузки файлов. . . . . . . 35
2.4.1. Изменение настроек Symbol Loader . . . . . . . . . . . . . . . . . 36
2.4.1.1. Изменение общих параметров настройки (вкладка General) . . . . 37
2.4.1.2. Изменение параметров настроек трансляции
(вкладка Translation) . . . . . . . . . . . . . . . . . . . . . . 38
2.4.2. Задание исходных файлов программы . . . . . . . . . . . . . . . . 40
2.4.3. Удаление таблицы символов. . . . . . . . . . . . . . . . . . . . . 41
2.4.4. Использование утилиты Symbol Loader из командной строки DOS . . . 41
2.5. Утилита NMSYM (загрузчик символов командной строки). . . . . . . . . . 42
2.5.1. Синтаксис утилиты NMSYM . . . . . . . . . . . . . . . . . . . . 43
2.5.2. Трансляция отладочной информации. . . . . . . . . . . . . . . . . 44
2.5.3. Загрузка модулей и отладочной информации . . . . . . . . . . . . . 47
2.5.4. Загрузка таблиц символов и экспорта . . . . . . . . . . . . . . . . 48
2.5.4.1. Пакетная загрузка и выгрузка таблиц символов и экспорта . . . . 49
2.5.5. Выгрузка отладочной информации . . . . . . . . . . . . . . . . . . 50
2.5.6. Сохранение протокола работы в файл . . . . . . . . . . . . . . . . 51
2.5.7. Получение информации о номерах версий и помощи . . . . . . . . . 51
2.6. Загрузка символов для системных компонентов. . . . . . . . . . . . . . . 51
2.6.1. Загрузка символов для динамических библиотек
и исполняемых файлов . . . . . . . . . . . . . . . . . . . . . . . 51
2.6.2. Использование неименованных точек входа. . . . . . . . . . . . . . 52
2.6.3. Использование экспортируемых имен в выражениях . . . . . . . . . 53
2.7. Отладка нескольких программ одновременно. . . . . . . . . . . . . . . . 54
Глава III. Интерфейс отладчика SoftICE. Работа с окнами . . . . . . . . 59
3.1. Активизация экрана SoftICE . . . . . . . . . . . . . . . . . . . . . . . 59
3.1.1. Экран отладчика SoftICE . . . . . . . . . . . . . . . . . . . . . . 60
3.2. Управление окнами отладчика . . . . . . . . . . . . . . . . . . . . . . 61
3.2.1. Перемещение курсора из одного окна в другое . . . . . . . . . . . . 62
3.2.2. Прокручивание содержимого окон . . . . . . . . . . . . . . . . . . 62
Глава IV. Использование выражений . . . . . . . . . . . . . . . . . . . 95
Выражения. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
4.1. Операторы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
4.1.1. Приоритет операторов . . . . . . . . . . . . . . . . . . . . . . . 97
4.2. Формирование выражений . . . . . . . . . . . . . . . . . . . . . . . . 98
4.3. Типы выражений. . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
4.4. Косвенная адресация . . . . . . . . . . . . . . . . . . . . . . . . . . 106
4.5. Размеры операндов. . . . . . . . . . . . . . . . . . . . . . . . . . . 106
4.6. Приведение типов . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
4.7. Вычисление значений идентификаторов . . . . . . . . . . . . . . . . . 108
4.8. Использование операторов косвенной адресации с идентификаторами . . . . 109
Глава V. Брейкпоинты . . . . . . . . . . . . . . . . . . . . . . . . . . 110
5.1. Типы брейкпоинтов. . . . . . . . . . . . . . . . . . . . . . . . . . . 111
5.1.2. Контекст брейкпоинта . . . . . . . . . . . . . . . . . . . . . . . 119
5.1.3. Виртуальные брейкпоинты . . . . . . . . . . . . . . . . . . . . . 120
5.1.4. Действия, выполняемые при срабатывании брейкпоинтов. . . . . . . 120
5.1.5. Условные брейкпоинты . . . . . . . . . . . . . . . . . . . . . . 121
5.1.6. Функции статистики условных брейкпоинтов . . . . . . . . . . . . 123
5.1.7. Использование локальных переменных в условных выражениях. . . . 125
5.1.8. Обращение к стеку в условных брейкпоинтах . . . . . . . . . . . . 126
5.1.9. Производительность. . . . . . . . . . . . . . . . . . . . . . . . 128
5.1.10. Двойные брейкпоинты . . . . . . . . . . . . . . . . . . . . . . 128
5.1.11. Затраченное время . . . . . . . . . . . . . . . . . . . . . . . . 128
5.1.12. Статистика брейкпоинтов. . . . . . . . . . . . . . . . . . . . . 129
Содержание 301
5.1.13. Обращение к брейкпоинтам в выражениях . . . . . . . . . . . . . 130
5.1.14. Управление брейкпоинтами . . . . . . . . . . . . . . . . . . . . 130
5.1.15. Использование встроенных брейкпоинтов . . . . . . . . . . . . . 133
5.1.16. Область видимости брейкпоинта. . . . . . . . . . . . . . . . . . 135
5.2. Аппаратное отладочное окружение процессоров Intel. . . . . . . . . . . . 136
5.2.1. Аппаратные средства отладки . . . . . . . . . . . . . . . . . . . 136
5.2.2. Отладочные регистры . . . . . . . . . . . . . . . . . . . . . . . 137
5.2.3. Распознавание поля брейкпоинта. . . . . . . . . . . . . . . . . . 141
5.2.4. Типы отладочных исключений . . . . . . . . . . . . . . . . . . . 142
5.2.5. Отладочные машинно-специфичные регистры . . . . . . . . . . . . 146
Глава VI. Исследование Windows NT с помощью отладчика SoftICE . . . 148
Подсистема Win32 . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Функции управления кучами. . . . . . . . . . . . . . . . . . . . . . . 199
Глава VII. Тандем отладчиков BoundsChecker Driver Edition и SoftICE . . 221
7.1. Что такое BoundsChecker Driver Edition? . . . . . . . . . . . . . . . . . 221
7.2. Настройка отладчика BoundsChecker . . . . . . . . . . . . . . . . . . . 221
7.3. Просмотр событий . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
7.3.1. Просмотр событий в окне событий . . . . . . . . . . . . . . . . . 226
7.3.2. Просмотр событий в окне команд. . . . . . . . . . . . . . . . . . 228
7.3.3. Просмотр результатов наблюдений . . . . . . . . . . . . . . . . . 228
7.3.4. Поиск событий . . . . . . . . . . . . . . . . . . . . . . . . . . 228
7.4. Отображение информации о событиях . . . . . . . . . . . . . . . . . . 229
7.4.1. Отображение общей информации о событиях . . . . . . . . . . . . 229
7.4.2. Отображение детальной информации о событиях . . . . . . . . . . 229
7.5. Фильтрация событий . . . . . . . . . . . . . . . . . . . . . . . . . . 230
7.5.1. Фильтрация по типу события. . . . . . . . . . . . . . . . . . . . 231
7.5.2. Фильтрация по параметрам . . . . . . . . . . . . . . . . . . . . 231
7.6. События, отслеживаемые отладчиком BoundsChecker . . . . . . . . . . . 235
7.6.1. Стандартные процедуры драйверов и функции обратного вызова . . . 236
7.6.2. Системные события . . . . . . . . . . . . . . . . . . . . . . . . 237
7.6.3. Ошибки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
7.6.3.1. Ошибки возврата из API-функций . . . . . . . . . . . . . . . 238
7.6.3.2. Ошибки при передаче параметров . . . . . . . . . . . . . . . 239
7.6.3.3. Нарушение IRQL . . . . . . . . . . . . . . . . . . . . . . . 239
7.6.3.4. Ошибки при работе со стеком . . . . . . . . . . . . . . . . . 239
Глава VIII. Удаленная отладка . . . . . . . . . . . . . . . . . . . . . 240
8.1. Типы поддерживаемых соединений. . . . . . . . . . . . . . . . . . . . 240
8.2. Какой тип удаленного соединения выбрать?. . . . . . . . . . . . . . . . 241
8.3. Специализированный сетевой драйвер (Specialized Network Driver) . . . . . 243
8.4. Универсальный сетевой драйвер (Universal Network Driver). . . . . . . . . 244
8.5. Установка сетевого соединения . . . . . . . . . . . . . . . . . . . . . 246
8.5.1. Команда NET (целевая машина) . . . . . . . . . . . . . . . . . . 247
8.5.2. Утилита SIREMOTE (хост-машина). . . . . . . . . . . . . . . . . 249
8.6. Удаленная отладка через последовательное соединение . . . . . . . . . . 250
8.7. Удаленная отладка с помощью модема . . . . . . . . . . . . . . . . . . 252
302 Содержание
Глава IX. Дополнительные возможности отладчика SoftICE . . . . . . . 256
9.1. Перехват ошибок. . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
9.1.1. 32-битный код защищенного режима кольца 3 (программы Win32). . . 256
9.1.2. Драйверы кольца 0 (драйверы устройств режима ядра) . . . . . . . 257
9.1.3. 16-битный код защищенного режима кольца 3 (16-битные
Windows программы) . . . . . . . . . . . . . . . . . . . . . . . 257
9.2. Переход из 3 кольца защиты в 0 кольцо—общие сведения . . . . . . . . . 258
9.3. Адресный контекст . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
9.4. Использование .DOT (точка)-команд . . . . . . . . . . . . . . . . . . . 260
9.5. Расширения отладчика на уровне ядра . . . . . . . . . . . . . . . . . . 261
9.5.1. Написание собственных расширений . . . . . . . . . . . . . . . . 262
9.6. Режим эмуляции трассировки (trace simulation mode) . . . . . . . . . . . 265
Глава X. Обнаружение отладчика SoftICE . . . . . . . . . . . . . . . . 267
10.1. Обнаружение отладчика SoftICE в среде Windows 9x . . . . . . . . . . . 268
10.2. Обнаружение отладчика SoftICE в среде Windows 9x
и Windows NT/2000/XP . . . . . . . . . . . . . . . . . . . . . . . 276
10.3. Аппаратные способы обнаружения отладчика SoftICE. . . . . . . . . . . 286
Приложение 1. Глоссарий . . . . . . . . . . . . . . . . . . . . . . . . 290
Приложение 2. Сообщения об ошибках . . . . . . . . . . . . . . . . . 294
Приложение 3. Пример практического использования
отладчика SoftICE . . . . . . . . . . . . . . . . . . . . 297