25

Технология динамической модификации кода для диспетчера виртуальных машин

Юрий Овчинников

Диспетчер виртуальных машин (Virtual Machine Monitor — VMM) это полностью независимый исполняемый файл, запускающийся вне контекста операционной системы и скомпилированный без использования стандартных библиотек.

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

Результатом работы должна являться автономная библиотека на языке C для динамической модификации кода, скомпилированного с помощью clang для архитектуры x86_64, которой будут доступны внешние интерфейсы для выделения памяти, декодирования инструкций, и модификации исполняемого кода. Сама она должна предоставлять интерфейс для регистрации информации об исполняемом файле и интерфейс для того, чтобы начать исполнять дополнительный код и отменить его исполнение в определенных точках этого файла. Также должен быть создан механизм разметки исходного кода для создания этих точек, например, в форме макроса.