Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
pciem — Фреймворк для Linux, позволяющий определять в пользовательском пространстве «виртуальные» прослойки (shims) PCIe-карт для разработки драйверов PCIe на хосте. | Kitploit
Инструменты/GitHubGitHub/cakehonolulu/pciem
Безопасность встроенных системВиртуализация для безопасностиФаззингТестирование на ПроникновениеАппаратная Безопасность
GitHubcakehonolulu/pciem

pciem

Фреймворк для Linux, позволяющий определять в пользовательском пространстве «виртуальные» прослойки (shims) PCIe-карт для разработки драйверов PCIe на хосте.

Репозиторий
3731829 дней назадПроверено Kitploit

Популярное

Смотреть все →

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

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

PCIem

Фреймворк ядра Linux для эмуляции синтетических PCIe-устройств из пользовательского пространства. | Документация

Что такое PCIem?

PCIem — это фреймворк, создающий виртуальные PCIe-устройства в ядре Linux с использованием нескольких новых методик для представления синтетических карт в качестве легитимных PCI-устройств для хост-ОС.

Если кратко: PCIem — это фреймворк для (хотя и не ограничиваясь) разработки и тестирования драйверов PCIe-устройств без необходимости наличия реального оборудования на хосте.

Сравнение с libfvio-user

PCIem и libfvio-user — это два разных решения для разных задач; между ними может возникнуть путаница, поэтому ниже приведены различия (см. рисунок 1 для подробностей).

Основное отличие в том, что libvfio-user обычно полагается на клиент (реализующий протокол vfio-user), обычно QEMU (через KVM, с использованием VM-exit'ов), чтобы предоставить эмулированное PCIe-устройство гостевой системе. Вы пишете свой vfio-сервер (обычно с механизмом обратных вызовов), который взаимодействует с клиентом.

PCIem же делает следующее: выставляет устройство напрямую на хосте; никакого KVM, гостей, виртуальных машин — ничего. Устройство появляется на шине PCIe хоста так, как если бы оно было физически подключено.

Архитектура

root@kitploit:~
graph LR
    subgraph Kernel ["Host Linux Kernel"]
        direction TB

        RealDriver["Real PCIe Driver"]

        subgraph Framework ["PCIem Framework"]
            direction TB
            Config["PCI Config Space"]
            BARs["BARs"]
            IRQ["Interrupts"]
            DMA["DMA / IOMMU"]
        end

    end

    Interface(("/dev/pciem"))

    subgraph User ["Linux Userspace"]
        direction TB
        Shim["Device Emulation"]
    end

    Framework <==> Interface
    Interface <==> Shim

Текущие возможности

  • Создание BAR: Программное создание и мониторинг областей BAR.
  • Трассировка MMIO BAR: Обнаружение операций чтения/записи MMIO и уведомление о них для избежания опроса на предмет доступа.
  • Поддержка прерываний: Внедрение прерываний Legacy/MSI/MSI-X.
  • Фреймворк возможностей PCI: Система возможностей PCI (основана на связном списке).
  • Система DMA: DMA-доступы с учётом IOMMU из/в пользовательское пространство устройства.
    • Предварительная поддержка P2P: Прямой доступ к памяти между устройствами с контролем доступа на основе белого списка.
  • Пользовательское пространство: Реализуйте свои PCIe-устройства полностью в пользовательском пространстве.

Минимальная поддерживаемая среда

  • Версия ядра Linux: 6.6
  • Компилятор C: gcc-12
  • Архитектура: amd64/i386, aarch64, riscv

Примечание для aarch64: Протестировано на Raspberry Pi 4b, дерево устройств (без ACPI)

Примечание для riscv: Протестировано на VisionFive 2 (дерево устройств) и Muse Pi Pro (дерево устройств и ACPI)


Статус CI

Примеры

Bochs BGA (drm) Карта

Карта, совместимая с Bochs BGA (bochs-drm), которая может управляться утилитами пользовательского пространства, такими как Weston; использует SDL3.

https://github.com/user-attachments/assets/d2f7abe4-aef4-4d3a-a30b-ab7ec793faed

Контроллер NVME

Контроллер NVME с подключенным хранилищем на 1 ГБ. Пользователь может свободно форматировать, монтировать, создавать и удалять файлы в памяти.

https://github.com/user-attachments/assets/29ce370a-7317-4fd4-9d1d-c3e868e1083d

Intel HDA Карта

Модель эмуляции, совместимая с ICH6, способная воспроизводить сэмплы совместно с pipewire.

ПРИМЕЧАНИЕ: Небольшое потрескивание звука слышно только на записи, в остальном работает нормально

https://github.com/user-attachments/assets/7264a18c-6fcb-46c4-acde-9531b0be7ff6

Intel E1000 Карта

Довольно простая реализация карты E1000. Поддерживает перенаправление связи на/с вашей реальной сетевой карты. Также может использовать Wi-Fi, но менее стабильно.

https://github.com/user-attachments/assets/b6b9862c-349c-49da-8a79-4769dfa31915

Устаревшие примеры

Карта ProtoPCIem

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

Может запускать DOOM с программным рендерингом (отправляет готовые кадры через DMA на карту, которую QEMU отображает), а также простые игры OpenGL 1.X (на скриншотах: tyr-glquake и xash3d; благодаря собственной машине состояний OpenGL, полностью реализованной в QEMU, которая программно рендерит списки команд и соответствующим образом обновляет внутреннее состояние).

Скриншоты

imagen

imagen

imagen

Лицензия

  • Компоненты ядра PCIem: GPLv2
  • Примеры: двойная MIT/GPLv2.

Ссылки

  • Пост в блоге: https://cakehonolulu.github.io/introducing-pciem/
  • Пост на Hackernews: https://news.ycombinator.com/item?id=46689065
  • Спецификация PCI Express: https://pcisig.com/specifications
Скачать инструмент
ВозможностьPCIemlibfvio-user
СоединениеФайл устройства (/dev/pciem)UNIX-сокеты (протокол vfio-user)
Целевой драйвер выполняется наХостГостевая ОС
Эмулируемое устройство выполняется наПользовательское пространствоПользовательское пространство
Доступы к устройствуПрямые (на хосте)Виртуализированные (гость → хост)

Рисунок 1: Сравнение фреймворков

Дистрибутив
Ubuntu Последний --
Ubuntu 24.04 LTS
Debian Stable --
Fedora Последний --
openSUSE Tumbleweed --