Upload
iosif-itkin
View
1.654
Download
0
Embed Size (px)
Citation preview
Мультиплатформенный метод обратной отладки виртуальных
машин
П. М. Довгалюк, М. А. Климушенкова,
Д. С. Дмитриев В. А. Макаров
Новгородский государственный университет
Отладка операционных систем
2
Падение системы
Замедление работы
Изменение поведения из-за отладочных методов
Отладка ОС с помощью кода внутри машины
3
Система должна функционировать
Нельзя отладить любой выполняемый код
Загрузочный код
BIOS
Нужно настраивать заранее
Влияет на работу отлаживаемого кода
Отладка ОС через gdbserver в симуляторе
4
Не нужно сохранять дампы, чтобы их анализировать
Можно подключиться в любой момент
Даже при критическом сбое
Даже до загрузки ОС
Отладка без реального оборудования
Отладка прошивки
Отладка моделей оборудования
Работает медленнее из-за виртуализации
Ход работы может измениться из-за остановок
Идея воспроизведения работы системы
5
QEMU
QEMU
Результаты анализа
Фаза записи Фаза воспроизведения ВМ
Реальный мир
Применение детерминированного воспроизведения
6
Нет воздействия на гостевую систему при анализе
Профилирование
Анализ помеченных данных
Отладка
Трассировка
Запись/воспроизведение работы
7
Не нужно перенастраивать окружение
Отладка редко проявляющихся ошибок
Разделение записи и анализа
Можно анализировать сетевые приложения, критичные к временным параметрам
Обратная отладка через gdb
Отладчик не влияет на ход работы гостевого кода
Файл журнала можно переносить между машинами
Воспроизведение ошибочных сценариев
Распараллеливание анализа
Отладка моделей устройств
Детерминированное воспроизведение и обратная отладка
8
Должна работать на всех платформах QEMU
Протестирована для x86, x64, ARM, MIPS
Отладка и анализ всей системы
Ядро и BIOS
Виртуальные устройства
Во время воспроизведения можно переключиться на обычную работу
Воспроизведение в симуляторе
9
ЦП ОЗУ
Диски Таймеры
Виртуальные устройства
Детерминированная часть
TAP
Socket
libusb
Журнал
Winaudio
Видео вывод
Воспроизведение
Запись
Часы
Slirp
Мышь
Клавиатура
Реальный мир
Виртуальный таймер
10
Базовая реализация есть в QEMU
Считает число выполненных инструкций
Интерфейс не зависит от ЦП
Увеличивается в начале каждого блока
Корректно работало не на всех платформах
Виртуальное время гостевой системы привязано к этому таймеру
Замедление виртуальной машины замедляет и ход гостевого времени
Обратная отладка
11
Нужна для изучения того, что уже было
Делаются снимки системы для возврата назад
Ход воспроизведения
“Перемотка” к раннему снимку
Обратная отладка
12
Команды GDB
reverse-continue
reverse-step
reverse-stepi
reverse-next
reverse-nexti
reverse-finish
Обратная отладка
13
int *p = malloc(sizeof(int));
………….
p = NULL;
………….
int a = *p;
Обратная отладка
14
int *p = malloc(sizeof(int));
………….
p = NULL;
………….
int a = *p;
gdb> watch p
gdb> reverse-continue
Обратная отладка
15
int *p = malloc(sizeof(int));
………….
p = NULL;
………….
int a = *p;
gdb> watch p
gdb> reverse-continue
1 2 3 4
Показатели работы записи/воспроизведения
16
Замедление при записи
Замедление при воспроизведении
Размер журнала, байт на 1000 инструкций
i386 (Win) 31% 156%
i386 (Debian) 41% 136% 21.9
ARM (Debian) 32% 191% 17.9
MIPS (Debian) 14% 139% 75.4
Результаты
17
Исправлены ошибки в реализации счетчика инструкций
Найдено несколько ошибок реализации виртуальных процессоров с помощью воспроизведения
Опубликованы патчи
около 6000 LOC
В QEMU 2.5 включено ядро воспроизведения
Без блочных устройств, gdb, сети, USB
Зачем это нужно?
18
Детерминированная отладка виртуальных устройств
ROR r8/r16
Некорректная обработка MMU faults
Моделирование «железа»
Зачем это нужно?
19
Обратная отладка через GDB
пользовательские приложения
драйверы
ядро ОС
BIOS
Зачем это нужно?
20
Сбор данных
трассировка инструкций
обращения к памяти
сетевой трафик
Динамический анализ
помеченные данные
символьное выполнение