2015_лекции / Лекция №6_2015
.pdfОтладка в режиме ядра
Инструменты SoftICE (не поддерживается с 2007)
Windbg
Локальная отладка в режиме ядра
Ядро
Ntoskrnl.exe
Windbg.exe
Пространство пользователя
Базовые приемы работы с отладчиками
пошагово
используется флаг EFLAGS.TF (Trace Flag), если он включен, то процессор генерирует прерывание после каждой выполненной инструкции
с заходом внутрь функций
без захода внутрь функций
программные остановы (брейк-поинты)
Точки останова программы
(breakpoints)
используются для анализа текущего состояния программы
например, узнать адрес вызываемой процедуры
узнать название создаваемого файла в функции
CreateFile
00401008 mov ecx, [ebp+arg_0]
0040100B mov eax, [edx]
0040100D call eax
Виды точек останова
Программные остановы
условные и безусловные
GetProcAddress при вызове RegSetValue.
Аппаратные остановы
Программные остановы
0xCC ( инструкция INT 3 ) Достоинства :
нет ограничений на число устанавливаемых программных остановах
Недостатки
изменение программного кода
не может срабатывать на операциях записи или чтения по адресам, только на выполнении инструкций.
Аппаратные остановы
8 отладочных регистра DR0-DR7
DR0-DR3 для хранения адресов точек остановов
DR7 для конфигурации типа события (для каждого из 4 адресов)
останов при выполнении, на операции чтения, чтения/записи
длина контролируемых данных (1, 2или 4 байта)
Флаг General Detect DR7 = 1
программный останов при каждой операции записи в отладочные регистры
Аппаратные остановы
Достоинства
исходный код без изменения
Недостатки
ограниченной число точек останова
ограниченная длина контролируемых данных
под Windows с помощью структурных обработчиков может быть изменено содержимое отладочных регистров
Особенности отладчиков
Чтение памяти и запись в память
Отладчик должен уметь читать адреса виртуальной помяти отлаживаемого процесса и записывать по ним
Реализцется с помощью обычных функций
Windows API
ReadProcessMemory()
WriteProcessMemory()
Особенности отладчиков
Исходные точки останова = первые точки останова, когда отладчик получает управление над отлаживаемом процессом
3 исходные точки останова OllyDbg• системные точки останова
загрузчик останавливается до того как будет запущен код
приложения
точка входа приложения
Точка входа определяется согласно заголовку PE
Win Main (если известна)
Помните, что код может начать исполняться до того, как будет выполнен программный останов:
Спецификация PE/COFF и секция TLS
Поддержка вызовов функций TLS в Ollydbg2.0
Windows API для отладки
реализовано в dbghelp.dll
наиболее интересные функции:
DebugActiveProcess() подключение к существующему процессу
WaitForDebugEvent() получение событий
DebugBreakProcess() точка останова в активном отлаживаемом процессе