Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
pciem — Un framework Linux permettant de définir des shims de cartes PCIe "virtuelles" définis par l'espace utilisateur pour faciliter le développement de pilotes de cartes PCIe dans l'hôte. | Kitploit
Outils/GitHubGitHub/cakehonolulu/pciem
Sécurité des Systèmes EmbarquésVirtualisation de SécuritéFuzzingTests d'IntrusionSécurité Matérielle
GitHubcakehonolulu/pciem

pciem

Un framework Linux permettant de définir des shims de cartes PCIe "virtuelles" définis par l'espace utilisateur pour faciliter le développement de pilotes de cartes PCIe dans l'hôte.

Voir le dépôt
37318il y a 29 joursVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

PCIem

Un framework noyau Linux permettant l'émulation synthétique de périphériques PCIe dans l'espace utilisateur. | Documentation

Qu'est-ce que PCIem ?

PCIem est un framework qui crée des périphériques PCIe virtuels dans le noyau Linux en exploitant quelques techniques novatrices pour peupler des cartes synthétiques en tant que périphériques PCI légitimes pour l'OS hôte.

Pour résumer ce qu'est PCIem : un framework pour (bien que non limité à) développer et tester des pilotes de périphériques PCIe sans nécessiter de matériel réel sur l'hôte.

Comparaison avec libfvio-user

PCIem et libfvio-user sont deux solutions différentes pour des besoins différents, il peut y avoir une confusion lors de la comparaison des deux, voici donc les différences (Voir figure 1 pour plus de détails).

La principale est que libvfio-user repose généralement sur un client (qui implémente le protocole vfio-user), généralement QEMU (via KVM, en utilisant des sorties de VM) pour exposer le périphérique PCIe émulé à l'invité. Vous écrivez votre serveur (avec un mécanisme de rappel généralement) qui interagit ensuite avec le client.

vfio

Ce que fait PCIem à la place, c'est exposer le périphérique directement sur l'hôte ; pas de KVM, pas d'invités, pas de machines virtuelles, rien. Le périphérique apparaît sur le bus PCIe de l'hôte comme s'il était physiquement connecté.

FonctionnalitéPCIemlibfvio-user
ConnexionFichier de périphérique (/dev/pciem)Sockets UNIX (protocole vfio-user)
Pilote cible s'exécute surHôteOS invité
Périphérique émulé s'exécute surEspace utilisateurEspace utilisateur
Accès au périphériqueDirect (sur l'hôte)Virtualisé (invité vers hôte)

Figure 1 : Comparaison entre les frameworks

Architecture

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

Fonctionnalités actuelles

  • Création de BAR : Créer et surveiller programmatiquement des régions BAR.
  • Traçage MMIO BAR : Détection et notification des lectures/écritures MMIO pour éviter le polling.
  • Prise en charge des interruptions : Injection d'interruptions Legacy/MSI/MSI-X.
  • Framework de capacités PCI : Système de capacités PCI (liste chaînée en dessous).
  • Système DMA : Accès DMA prenant en compte IOMMU depuis/vers un périphérique espace utilisateur.
    • Support P2P (Preliminaire !) : DMA peer-to-peer entre périphériques avec contrôle d'accès basé sur une liste blanche.
  • Espace utilisateur : Implémenter vos périphériques PCIe entièrement dans l'espace utilisateur.

Environnement minimum pris en charge

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

Note aarch64 : Testé avec Raspberry Pi 4b, device-tree (pas d'ACPI)

Note riscv : Testé avec VisionFive 2 (Device-tree) et Muse Pi Pro (Device-tree et ACPI)


Statut CI

Distribution
Ubuntu Dernière --
Ubuntu 24.04 LTS
Debian Stable

Exemples

Carte Bochs BGA (drm)

Une carte compatible Bochs BGA (bochs-drm) qui peut être pilotée par des utilitaires espace utilisateur tels que Weston ; utilise SDL3.

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

Contrôleur NVME

Contrôleur NVME avec 1 Go de stockage attaché. L'utilisateur peut librement formater, monter, créer et supprimer des fichiers depuis la mémoire.

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

Carte Intel HDA

Modèle d'émulation compatible ICH6 capable de jouer des échantillons en conjonction avec pipewire.

NOTE : Légers craquements audio uniquement entendus sur l'enregistrement, fonctionne parfaitement autrement.

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

Carte Intel E1000

Une implémentation assez naïve de la carte E1000. Prend en charge la redirection des communications vers/depuis votre vraie carte réseau. Peut également utiliser le Wi-Fi mais c'est moins stable.

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

Exemple(s) hérité(s)

Carte ProtoPCIem

La carte est programmée entièrement dans QEMU (machine d'état pour la carte, en gros), qui effectue toute l'initialisation de l'espace utilisateur et la gestion des commandes à partir du vrai pilote s'exécutant sur l'hôte.

Peut exécuter DOOM rendu par logiciel (soumet les images terminées via DMA à la carte que QEMU affiche) et aussi des jeux simples OpenGL 1.X (sur les captures d'écran, tyr-glquake et xash3d ; grâce à une machine d'état OpenGL personnalisée implémentée entièrement dans QEMU qui rend les listes de commandes par logiciel et met à jour l'état interne en conséquence).

Captures d'écran

imagen

imagen

imagen

Licence

  • Composants noyau PCIem : GPLv2
  • Exemples : double licence MIT/GPLv2.

Références

  • Blog post : https://cakehonolulu.github.io/introducing-pciem/
  • Hackernews post : https://news.ycombinator.com/item?id=46689065
  • Spécification PCI Express : https://pcisig.com/specifications
Télécharger l’outil
-
-
Fedora Dernière --
openSUSE Tumbleweed --