Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
pciem — 사용자 공간에서 정의된 '가상' PCIe 카드 셤(shim)을 지원하여 호스트 내 PCIe 카드 드라이버 개발을 가능하게 하는 Linux 프레임워크입니다. | Kitploit
도구/GitHubGitHub/cakehonolulu/pciem
Embedded Systems SecuritySecurity VirtualizationFuzzingPenetration TestingHardware Security
GitHubcakehonolulu/pciem

pciem

사용자 공간에서 정의된 '가상' PCIe 카드 셤(shim)을 지원하여 호스트 내 PCIe 카드 드라이버 개발을 가능하게 하는 Linux 프레임워크입니다.

저장소 보기
373181개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

PCIem

Linux 커널에서 합성 사용자 공간 PCIe 디바이스 에뮬레이션을 가능하게 하는 프레임워크입니다. | 문서

PCIem이란 무엇인가?

PCIem은 몇 가지 새로운 기술을 활용하여 합성 카드를 호스트 OS에 합법적인 PCI 디바이스로 노출시킴으로써 Linux 커널에 가상 PCIe 디바이스를 생성하는 프레임워크입니다.

간단히 말하면, PCIem은 호스트의 실제 하드웨어 없이도 PCIe 디바이스 드라이버를 개발하고 테스트하기 위한(이에 국한되지 않는) 프레임워크입니다.

libfvio-user와의 비교

PCIem과 libfvio-user는 서로 다른 요구에 대응하는 서로 다른 솔루션입니다. 둘을 비교할 때 혼동이 있을 수 있으므로, 차이점을 여기에 정리합니다(그림 1 참조).

가장 큰 차이는 libvfio-user가 에뮬레이션된 PCIe 디바이스를 게스트에 노출하기 위해 일반적으로 클라이언트(vfio-user 프로토콜을 구현하며, 보통 KVM을 통한 VM exit를 사용하는 QEMU)에 의존한다는 것입니다. 여러분은 (일반적으로 콜백 메커니즘을 사용하는) 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 읽기/쓰기 감지 및 알림을 제공합니다.
  • 인터럽트 지원: 레거시/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) 카드

Weston과 같은 사용자 공간 유틸리티로 구동할 수 있는 Bochs BGA 호환(bochs-drm) 카드입니다. SDL3를 사용합니다.

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

NVME 컨트롤러

1GB의 저장 공간이 연결된 NVME 컨트롤러입니다. 사용자는 메모리에서 파일을 자유롭게 포맷, 마운트, 생성 및 삭제할 수 있습니다.

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

Intel HDA 카드

pipewire와 함께 샘플을 재생할 수 있는 ICH6 호환 에뮬레이션 모델입니다.

참고: 약간의 오디오 잡음은 녹음 시에만 들리며, 그 외에는 정상 작동합니다

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에서 프로그래밍됩니다(기본적으로 카드의 상태 머신). 호스트에서 실행 중인 실제 드라이버의 모든 사용자 공간 초기화 및 명령 처리를 담당합니다.

소프트웨어 렌더링 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 프로토콜)
대상 드라이버 실행 위치호스트게스트 OS
에뮬레이션 디바이스 실행 위치사용자 공간사용자 공간
디바이스 접근직접 (호스트 내)가상화 (게스트 → 호스트)

그림 1: 프레임워크 간 비교

배포판
Ubuntu Latest --
Ubuntu 24.04 LTS
Debian Stable --
Fedora Latest --
openSUSE Tumbleweed --