Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
pciem — Un framework de Linux para permitir shims de tarjetas PCIe 'Virtuales' definidos en espacio de usuario para habilitar el desarrollo de controladores de tarjetas PCIe dentro del host. | Kitploit
Herramientas/GitHubGitHub/cakehonolulu/pciem
Seguridad de Sistemas EmbebidosVirtualización de SeguridadFuzzingPruebas de PenetraciónSeguridad de Hardware
GitHubcakehonolulu/pciem

pciem

Un framework de Linux para permitir shims de tarjetas PCIe 'Virtuales' definidos en espacio de usuario para habilitar el desarrollo de controladores de tarjetas PCIe dentro del host.

Ver Repositorio
3731832hace 21 díasRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

PCIem

Un framework del kernel de Linux que permite la emulación sintética de dispositivos PCIe en espacio de usuario. | Documentación

¿Qué es PCIem?

PCIem es un framework que crea dispositivos PCIe virtuales en el kernel de Linux aprovechando algunas técnicas novedosas para presentar tarjetas sintéticas como dispositivos PCI legítimos al sistema operativo anfitrión.

Para resumir qué es PCIem: un framework para (aunque no limitado a) desarrollar y probar controladores de dispositivos PCIe sin necesidad de hardware real en el anfitrión.

Comparación con libfvio-user

PCIem y libfvio-user son dos soluciones diferentes para necesidades distintas, puede haber confusión al compararlas, por lo que aquí están las diferencias (Véase figura 1 para más detalles).

La principal es que libvfio-user normalmente depende de un cliente (que implementa el protocolo vfio-user), generalmente QEMU (a través de KVM, usando salidas de VM) para exponer el dispositivo PCIe emulado al invitado. Escribe su servidor vfio (con un mecanismo de devolución de llamada generalmente) que luego interactúa con el cliente.

Lo que hace PCIem en cambio es exponer el dispositivo directamente en el anfitrión; sin KVM, sin invitados, sin máquinas virtuales, nada. El dispositivo aparece en el bus PCIe del anfitrión como si estuviera conectado físicamente.

CaracterísticaPCIemlibfvio-user
ConexiónArchivo de dispositivo (/dev/pciem)Sockets UNIX (protocolo vfio-user)
El controlador objetivo se ejecuta enAnfitriónOS Invitado
El dispositivo emulado se ejecuta enEspacio de usuarioEspacio de usuario
Accesos al dispositivoDirecto (Dentro del anfitrión)Virtualizado (Invitado a Anfitrión)

Figura 1: Comparación entre frameworks

Arquitectura

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

Funcionalidades Actuales

  • Creación de BAR: Crear y monitorear regiones BAR programáticamente.
  • Seguimiento MMIO de BAR: Detección y notificación de lectura/escritura MMIO para evitar sondeo de accesos.
  • Soporte de interrupciones: Inyección de interrupciones Legacy/MSI/MSI-X.
  • Framework de capacidades PCI: Sistema de capacidades PCI (lista enlazada internamente).
  • Sistema DMA: Accesos DMA con conocimiento de IOMMU desde/hacia el dispositivo en espacio de usuario.
    • Soporte P2P (¡Preliminar!): DMA peer-to-peer entre dispositivos con control de acceso basado en listas blancas.
  • Espacio de usuario: Implementa tus dispositivos PCIe completamente en espacio de usuario.

Entorno mínimo soportado

  • Linux Kernel Version: 6.6
  • C Compiler: gcc-12
  • Architecture: amd64/i386, aarch64, riscv

Nota aarch64: Probado con Raspberry Pi 4b, device-tree (Sin ACPI)

Nota riscv: Probado con VisionFive 2 (Device-tree) y Muse Pi Pro (Device-tree y ACPI)


Estado de CI

Distribución
Ubuntu Última --
Ubuntu 24.04 LTS
Debian Estable --
Fedora Última --
openSUSE Tumbleweed --

Ejemplos

Tarjeta Bochs BGA (drm)

Una tarjeta compatible con Bochs BGA (bochs-drm) que puede ser manejada por utilidades de espacio de usuario como Weston; usa SDL3.

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

Controlador NVME

Descargar herramienta