Rust в UEFI: создание утилиты для сохранения изображения BIOS

Традиционные языки для разработки BIOS – C и ассемблер, но Rust становится все более востребованным. Разработка BIOS схожа с embedded-разработкой: сложная отладка, взаимодействие с аппаратурой, поиск документации. При этом есть и свои преимущества: высокая тактовая частота, большой объем памяти. Современным стандартом для программ запускаемых при старте компьютера является UEFI, заменивший BIOS.
Rust в UEFI: создание утилиты для сохранения изображения BIOS
Изображение носит иллюстративный характер

Для создания EFI-утилит на Rust используется крейт uefi-rs. Он предоставляет необходимые инструменты, включая макросы и обертки для таблиц UEFI. Утилита сохраняет изображение заставки BIOS, расположенной в Boot Graphics Record Table (BGRT), в файл. Таблица BGRT содержит указатель на изображение в памяти.

Для доступа к BGRT, потребовалась разработка собственной обертки для ACPI протокола, так как не все протоколы поддерживаются uefi-rs. Протокол ACPI позволяет получить доступ к таблицам, включая BGRT. Функция get_acpi_table возвращает заголовок таблицы, а также требуемую таблицу.

Для нахождения таблицы BGRT, был разработан обобщенный метод locate_table_by_signature. Структура EfiAcpiBootGraphicsResourceTable описывает формат таблицы BGRT. В итоге, полученные данные изображения из таблицы BGRT сохраняются в файл на диске.


Новое на сайте

20868Уязвимости Plex открыли путь майнерам и Linux-бэкдору 20867Взлом OpenCode Console: под угрозой могли оказаться ключи OpenAI, Anthropic и Google 20866Rank Math PRO: заражённое обновление оставило на сайтах самовосстанавливающийся бэкдор 20865Как исследовательские модели OpenAI обходили ограничения и присваивали чужие данные 20864Атака на BeyondTrust: шпионская группа получила доступ к серверам поддержки 20863Как пакет imgdecode превращает npm-зависимость в загрузчик вредоносного кода? 20862Как PEERSTITCH обходит проверки VPN-сессий FortiOS? 20861Что происходит, когда ИИ-агент выходит за пределы тестовой среды? 20860Как 37-летняя ошибка открыла путь к root в OpenBSD 7.9? 20859ИИ-модели для SOC: точный ответ зависит от улик 20858Как одна учётная запись ConnectWise открыла доступ к 173 арендаторам Microsoft 365? 20857Пять минут до заражения: как подменили обновления AOMEI Backupper 20856Ловушка под видом регистрации: как UAT-11985 крадёт аккаунты Google 20855Может ли виртуальная машина прочитать память хоста? 20854Как дешёвые Android-смартфоны превращаются в чужие прокси?
Ссылка