Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
pciem — 一个Linux框架,允许用户空间定义"虚拟"PCIe卡垫片,以支持在主机内进行PCIe卡驱动开发。 | Kitploit
工具/GitHubGitHub/cakehonolulu/pciem
嵌入式系统安全安全虚拟化模糊测试渗透测试硬件安全
GitHubcakehonolulu/pciem

pciem

一个Linux框架,允许用户空间定义"虚拟"PCIe卡垫片,以支持在主机内进行PCIe卡驱动开发。

查看仓库
3731829天前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

PCIem

一个 Linux 内核框架,支持合成用户空间 PCIe 设备模拟。 | 文档

PCIem 是什么?

PCIem 是一个框架,通过利用一些新颖技术,在 Linux 内核中创建虚拟 PCIe 设备,将合成卡作为合法的 PCI 设备呈现给主机操作系统。

简而言之,PCIem 是一个用于(但不限于)开发和测试 PCIe 设备驱动程序的框架,无需主机上的实际硬件。

与 libfvio-user 的比较

PCIem 和 libfvio-user 是两种针对不同需求的解决方案,比较两者时可能会产生混淆,因此此处说明差异(更多信息请参见图1)。

主要区别在于,libvfio-user 通常依赖一个客户端(实现 vfio-user 协议),通常是 QEMU(通过 KVM,使用 VM 退出)将模拟的 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 区域。
  • BAR MMIO 跟踪:MMIO 读/写检测和通知,避免轮询访问。
  • 中断支持:支持 Legacy/MSI/MSI-X 中断注入。
  • PCI 能力框架:PCI 能力系统(底层链表结构)。
  • DMA 系统:支持 IOMMU 感知的 DMA 访问,从/向用户空间设备。
    • P2P 支持(初步!):基于白名单访问控制的设备间点对点 DMA。
  • 用户空间:完全在用户空间实现你的 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 控制器,附带 1GB 存储空间。用户可以自由格式化、挂载、创建和删除内存中的文件。

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 网卡实现。支持与真实 NIC 之间的通信重定向。也可以使用 Wi-Fi,但稳定性较差。

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

遗留示例

ProtoPCIem 卡

该卡完全在 QEMU 中编程(基本上是卡的状态机),QEMU 处理所有用户空间初始化以及来自主机上运行的真实驱动程序的命令处理。

可以运行软件渲染的 DOOM(通过 DMA 将完成的帧提交给卡,由 QEMU 显示),以及简单的 OpenGL 1.X 游戏(截图中为 tyr-glquake 和 xash3d;这要归功于完全在 QEMU 中实现的自定义 OpenGL 状态机,它可以软件渲染命令列表并相应地更新内部状态)。

截图

图像

图像

图像

许可协议

  • 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 稳定版 --
Fedora 最新版 --
openSUSE Tumbleweed --