Задачу идентификации операционной среды решает информационно-диагностическая утилита UEFIInfo, способная не только определить версию используемого UEFI-интерфейса и его производителя, но также с помощью расширенных функций инструкции CPUID факт наличия виртуализационной среды. Алгоритм распознавания построен на анализе виртуальных функций, реализуемых гипервизорами хост-машин, которую ведут свою нумерацию от 40000000h. Напомним, что инструкция CPUID, получает в регистре EAX номера функций в качестве входного параметра, нумерация которых стандартно начинается с нуля. Для расширенных функций, предложенных компанией AMD, используются значения, начиная с 80000000h.

Скриншот выполнения утилиты UEFIINFO в 64-битной среде Oracle VirtualBox

Каталог исходных кодов утилиты UEFIInfo

Предлагаемый вашему вниманию исходный код утилиты UEFIInfo написан для дальнейшей компиляции в среде FASM. Полную картину подготовки к работе с исходным кодом и особенностями выравнивания стека можно получить в статье «EFI Byte Code: первые шаги». Каталог исходных кодов доступен в виде ZIP-архива, либо может быть получен в виде текстовых листингов в разделе программ с исходным кодом.

UEFIINFO

Каталог исходных текстов информационно-диагностической утилиты.

EBCPATCH32

Каталог исходных текстов дополнительной утилиты (патчера), выполняющей корректировку сигнатуры, определяющей тип модуля. Данная утилита необходима, так как транслятор FASM не поддерживает генерацию EBC-приложений.

asm_uefiinfo.bat

Пакетный файл для трансляции приложения. Запускает FASM, затем утилиту-патчер. В этом файле может потребоваться корректировка путей для запуска FASM и указания каталога INCLUDE для FASM.

asm_ebcpatch32.bat

Пакетный файл для трансляции дополнительной утилиты. В этом файле может потребоваться корректировка путей для запуска FASM и указания каталога INCLUDE для FASM.

clear.bat

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

EbcPatch32.exe

Дополнительная утилита-патчер. Этот файл генерируется в результате работы пакетного файла asm_ebcpatch32.bat.

uefiinfo.tmp

Транзитный файл. Является результатом работы FASM и входным файлом для утилиты EbcPatch32.

uefiinfo.efi

Конечный результат трансляции. Информационно-диагностическая утилита, UEFI-приложение в системе команд EFI Byte Code. Этот файл генерируется в результате работы пакетного файла asm_uefiinfo.bat.


20.01.2018