Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
pciem — Un framework Linux per abilitare shim di schede PCIe "Virtuali" definiti dallo spazio utente per consentire lo sviluppo di driver di schede PCIe all'interno dell'host. | Kitploit
Strumenti/GitHubGitHub/cakehonolulu/pciem
Sicurezza Sistemi EmbeddedVirtualizzazione per la SicurezzaFuzzingPenetration TestingSicurezza Hardware
GitHubcakehonolulu/pciem

pciem

Un framework Linux per abilitare shim di schede PCIe "Virtuali" definiti dallo spazio utente per consentire lo sviluppo di driver di schede PCIe all'interno dell'host.

Vedi Repository
3731851 mese faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

PCIem

Un framework per il kernel Linux che permette l'emulazione di dispositivi PCIe sintetici nello spazio utente. | Documentazione

Cos'è PCIem?

PCIem è un framework che crea dispositivi PCIe virtuali nel kernel Linux sfruttando alcune tecniche innovative per presentare schede sintetiche come dispositivi PCI legittimi al sistema operativo host.

Per riassumere cosa sia PCIem: un framework per (ma non limitato a) lo sviluppo e il test di driver per dispositivi PCIe senza richiedere hardware reale sull'host.

Confronto con libfvio-user

PCIem e libfvio-user sono due soluzioni diverse per esigenze diverse; potrebbe esserci confusione nel confrontarli, pertanto ecco le differenze (vedi figura 1 per maggiori dettagli).

La principale differenza è che libvfio-user solitamente si basa su un client (che implementa il protocollo vfio-user), di solito QEMU (tramite KVM, usando VM exit) per esporre il dispositivo PCIe emulato al guest. Tu scrivi il tuo server vfio (di solito con un meccanismo di callback) che poi interagisce con il client.

PCIem, invece, espone il dispositivo direttamente sull'host; niente KVM, niente guest, niente macchine virtuali. Il dispositivo appare sul bus PCIe dell'host come se fosse fisicamente collegato.

Architettura

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

Funzionalità attuali

  • Creazione di BAR: Creare e monitorare programmaticamente regioni BAR.
  • Tracciamento MMIO dei BAR: Rilevamento e notifica di letture/scritture MMIO per evitare polling.
  • Supporto interrupt: Iniezione di interrupt Legacy/MSI/MSI-X.
  • Framework per le capability PCI: Sistema di capability PCI (lista collegata sottostante).
  • Sistema DMA: Accessi DMA consapevoli dell'IOMMU da/per il dispositivo nello spazio utente.
    • Supporto P2P (Preliminare!): DMA peer-to-peer tra dispositivi con controllo degli accessi basato su whitelist.
  • Spazio utente: Implementa i tuoi dispositivi PCIe interamente nello spazio utente.

Ambiente minimo supportato

  • Versione del kernel Linux: 6.6
  • Compilatore C: gcc-12
  • Architettura: amd64/i386, aarch64, riscv

Nota per aarch64: Testato con Raspberry Pi 4b, device-tree (senza ACPI)

Nota per riscv: Testato con VisionFive 2 (Device-tree) e Muse Pi Pro (Device-tree e ACPI)


Stato CI

Esempi

Scheda Bochs BGA (drm)

Una scheda compatibile con Bochs BGA (bochs-drm) che può essere gestita da utilità nello spazio utente come Weston; utilizza SDL3.

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

Controller NVME

Controller NVME con 1 GB di storage collegato. L'utente può liberamente formattare, montare, creare e rimuovere file dalla memoria.

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

Scheda Intel HDA

Modello di emulazione compatibile con ICH6 in grado di riprodurre campioni audio in combinazione con pipewire.

NOTA: Un leggero crepitio audio è udibile solo nella registrazione, funziona correttamente altrimenti

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

Scheda Intel E1000

Un'implementazione piuttosto naïve della scheda E1000. Supporta il reindirizzamento delle comunicazioni da/verso la tua scheda di rete reale. Può anche utilizzare il Wi-Fi, ma è meno stabile.

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

Esempi legacy

Scheda ProtoPCIem

La scheda è programmata interamente in QEMU (in pratica una macchina a stati per la scheda), che esegue tutta l'inizializzazione nello spazio utente e la gestione dei comandi dal driver reale in esecuzione sull'host.

Può eseguire DOOM renderizzato via software (invia i frame completati con DMA alla scheda, che QEMU visualizza) e anche semplici giochi OpenGL 1.X (negli screenshot, tyr-glquake e xash3d; grazie a una macchina a stati OpenGL personalizzata implementata interamente in QEMU che renderizza via software le liste di comandi e aggiorna lo stato interno di conseguenza).

Screenshot

imagen

imagen

imagen

Licenza

  • Componenti kernel PCIem: GPLv2
  • Esempi: dual MIT/GPLv2.

Riferimenti

  • Post del blog: https://cakehonolulu.github.io/introducing-pciem/
  • Post su Hackernews: https://news.ycombinator.com/item?id=46689065
  • Specifica PCI Express: https://pcisig.com/specifications
Scarica lo strumento
CaratteristicaPCIemlibfvio-user
ConnessioneFile di dispositivo (/dev/pciem)Socket UNIX (protocollo vfio-user)
Il driver di destinazione esegue suHostSistema operativo guest
Il dispositivo emulato esegue suSpazio utenteSpazio utente
Accessi al dispositivoDiretti (all'interno dell'host)Virtualizzati (guest verso host)

Figura 1: Confronto tra framework

Distribuzione
Ubuntu Ultima --
Ubuntu 24.04 LTS
Debian Stabile --
Fedora Ultima --
openSUSE Tumbleweed --