Павел Довгалюк

Avatar1

Павел Довгалюк, кандидат технических наук, доцент Новгородского государственного университета.
Более 15 лет работает в сфере системного программирования. Участвовал в проектах по разработке компиляторов и виртуальных машин.
Сейчас занимается разработкой средств анализа и отладки на базе симулятора QEMU в лаборатории системного программирования, созданной Институтом системного программирования РАН на базе Новгородского государственного университета.


Программный эмулятор QEMU – платформа для разработки и анализа операционных систем

Платформа QEMU предназначена для эмуляции множества аппаратных платформ (например x86, ARM, PowerPC, MIPS). Благодаря открытому исходному коду, QEMU можно использовать как основу для построения систем динамического анализа программ. В докладе будут представлены разработки, посвященные отладке, динамическому инструментированию и интроспекции с помощью QEMU.



Программный эмулятор QEMU – платформа для разработки и анализа операционных систем

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

Детерминированное воспроизведение и обратная отладка

При отладке и анализе программного обеспечения необходимо минимизировать воздействие средств анализа на изучаемую программу.

Код, позволяющий записывать и воспроизводить ход выполнения работы виртуальной машины был добавлен в QEMU начиная с версии 2.5. Работа этого механизма была протестирована для платформ x86, ARM и MIPS.

Многократное воспроизведение работы виртуальной машины можно использовать для детерминированной и обратной отладки. QEMU поддерживает отладку гостевого кода через удаленное подключение отладчика GDB. Команды reverse step и reverse continue отладчика позволяют перемещаться назад к выполненным прежде инструкциям и искать точки останова, которые могли сработать в предшествующем коде. Для обратной отладки необходимо сохранять снимки гостевой системы, чтобы можно было вернуться к ним позднее. Состояния системы между снимками восстанавливаются с помощью детерминированного воспроизведения. Эмулятор автоматически восстанавливает нужное состояние виртуальной машины. Пользователь через интерфейс отладчика может вернуться в любой момент времени от начала выполнения программы и изучить состояние гостевой системы.

Инструментирование и интроспекция

При воспроизведении работы системы мы не можем загрузить в нее дополнительных программ, которые могли бы выполнять мониторинг гостевого кода. Поэтому мы реализовали механизм интроспекции, позволяющий наблюдать за ходом выполнения гостевой системы. С помощью этого механизма можно выполнять трассировку инструкций, трассировку системных вызовов, отслеживание работы с файлами, вызовы именованных функций. При этом отслеживаться могут как события какого-то одного процесса, так и всей системы целиком. Трассировка системных вызовов работает для гостевых систем Windows XP/7/8 и Linux для платформы i386. Все эти модули работают как динамически загружаемых плагины для QEMU. Программная прослойка для взаимодействия ядра эмулятора и подключаемых модулей состоит из небольшого объема кода, поэтому легко переносится на новые версии эмулятора.

Модуль для поддержки WinDbg

QEMU поддерживает только подключение отладчиков по GDB-совместимому протоколу для пошаговой отладки и изучения внутренностей ОС и программ. Используемый в Windows отладчик WinDbg работает только в режиме взаимодействия с ядром ОС и не может использоваться для скрытой отладки или отладки в режиме воспроизведения работы системы.

Чтобы скрытая отладка с помощью WinDbg стала возможной, мы разработали модуль для QEMU, который эмулирует работу отладочного модуля ядра Windows. Теперь WinDbg подключается напрямую к QEMU никак не взаимодействуя с гостевой ОС.

Организаторы

При поддержке