Институт системного программирования им. В.П. Иванникова РАН


Платформа для анализа программ на основе эмулятора QEMU

Платформа для анализа программ на основе эмулятора QEMU Среди эмуляторов с открытым исходным кодом QEMU занимает особое место, поскольку в практике промышленного программирования именно ему отдают предпочтение, когда требуется вести кросс-разработку (различные процессорные архитектуры целевого устройства и компьютера, на котором ведется разработка). На основе Qemu крупные IT-компании, такие как Google и Samsung, разрабатывают специализированные эмуляторы для мобильных устройств.

Qemu в режиме полносистемной эмуляции поддерживает более 10 семейств процессоров, в число которых входят x86, PowerPC, Sparc, MIPS, ARM.

Открытость исходного кода позволяет свободно расширять возможности Qemu и использовать его для:

  • создания новых виртуальных платформ,
  • отладки загрузчиков и ядерного кода ОС, в том числе драйверов эмулирумого оборудования,
  • анализа вредоносного ПО,
  • записи работы виртуальной машины для последующего воспроизведения.

Запись и воспроизведение сценариев работы

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

Разработанная технология фактически не ограничивает продолжительность записи и гарантирует воспроизведение работы всей виртуальной платформы с точностью до машинной команды. Однажды записанный сценарий можно воспроизводить и анализировать многократно без изменения поведения программы. Средства анализа, например, отладчик, и изменившееся внешнее окружение не могут повлиять на работу кода, воспроизводящегося в гостевой системе. Механизм записи/воспроизведения уже включен в QEMU 2.8 и работает для гостевых систем на платформах x86, ARM и MIPS.

Удалённая отладка

QEMU поддерживает интерфейс удаленной отладки виртуальной машины.

Архитектура современного отладчика разделяет пользовательский интерфейс и сам механизм отладки программы. В отладчике GDB есть возможность установить связь между интерфейсом и сервером на основе сетевых сокетов. Реализация gdb-сервера в эмуляторе Qemu позволяет отлаживать программы и код ядра в виртуальной машине с помощью GDB, IDA, Eclipse.

Обратная отладка

С помощью обратной отладки можно возвращаться назад к прежним состояниям программы. Разработчик во время отладки достигает точки срабатывания ошибки, после чего пытается определить, как в прошлом происходила работа с переменными, повлиявшими на сбой. Классическая отладка для поиска таких моментов «в прошлом» требует перезапуска программы, часто – многократного.

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

Платформа для анализа программ на основе эмулятора QEMU

Анализ гостевой системы

Отладка всей виртуальной машины требует знаний о размещении программ и модулей в памяти. Мы реализовали механизмы интроспекции, которые позволяют извлекать эту информацию из виртуальных машин на Windows и Linux. Интроспекция может извлекать из гостевой системы:

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

Эмуляция новых платформ и периферии

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

Разработка новой платформы в эмуляторе Qemu «с нуля» требует реализации:

  • нового виртуального процессора и транслятора его команд в промежуточное представление TCG;
  • виртуального устройства управления памятью (MMU);
  • виртуальных периферийных устройств;
  • интеграции всего перечисленного в новой виртуальной платформе;
  • при необходимости – расширение внутренних интерфейсов Qemu.

В Qemu могут быть реализованы нужный процессор, транслятор TCG, MMU, часть периферийных устройств. Но даже в этом случае необходима интеграция компонент платформы и последующая отладка ее конфигурации.

К сожалению, документация не всегда доступна, не всегда полна, а иногда содержит ошибки. Исполняемый код ПО для разрабатываемой виртуальной платформы становится единственным источником информации: ошибки и неточности в эмулируемой аппаратуре выявляются через сбои в работе ПО.

Разработку приходится организовывать в виде чередующихся этапов разработки (отладки) виртуальной аппаратуры и исследования кода, работающего на этой аппаратуре.

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

Один из инструментов – генератор платформ, предоставляющий декларативное API на языке Python для описания конфигурации платформы. Для упрощения проектирования платформ и устройств разработан графический пользовательский интерфейс.

Платформа для анализа программ на основе эмулятора QEMU

Разработчик/участник

Компиляторные технологии

Перейти к списку всех технологий