Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
pciem — إطار عمل لنظام لينكس يُمكِّن من تعريف "شيم" (Shims) افتراضية لبطاقات PCIe من مساحة المستخدم، بهدف تمكين تطوير برامج تشغيل بطاقات PCIe داخل المضيف. | Kitploit
أدوات/GitHubGitHub/cakehonolulu/pciem
أمان الأنظمة المدمجةالمحاكاة الافتراضية للأمانالاختبار العشوائياختبار الاختراقأمن الأجهزة
GitHubcakehonolulu/pciem

pciem

إطار عمل لنظام لينكس يُمكِّن من تعريف "شيم" (Shims) افتراضية لبطاقات PCIe من مساحة المستخدم، بهدف تمكين تطوير برامج تشغيل بطاقات PCIe داخل المضيف.

عرض المستودع
373185منذ يوم واحدتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

PCIem

إطار عمل لنواة لينكس يتيح محاكاة أجهزة PCIe اصطناعية داخل مساحة المستخدم. | التوثيق

ما هو PCIem؟

PCIem هو إطار عمل ينشئ أجهزة PCIe افتراضية داخل نواة لينكس عبر توظيف بضع تقنيات مبتكرة لعرض بطاقات اصطناعية كأجهزة PCI شرعية على نظام التشغيل المضيف.

باختصار: PCIem هو إطار عمل لتطوير واختبار برامج تشغيل أجهزة PCIe (وإن لم يقتصر على ذلك) دون الحاجة إلى عتاد فعلي على المضيف.

المقارنة مع libfvio-user

PCIem وlibfvio-user حلّان مختلفان يلبيان احتياجات مختلفة، وقد يحدث بعض الالتباس عند المقارنة بينهما، لذا نورد هنا الفروق (انظر الشكل 1 لمزيد من التفاصيل).

الفارق الرئيسي هو أن libvfio-user يعتمد عادةً على عميل (يطبّق بروتوكول vfio-user)، وغالبًا ما يكون QEMU (عبر KVM، باستخدام VM exits) لكشف الجهاز PCIe المُحاكى أمام الضيف. أنت تكتب خادم vfio خاصًا بك (عادةً بآلية استدعاء callback) يتفاعل بعد ذلك مع العميل.

أما ما يفعله 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 برمجيًا.
  • تتبّع MMIO لمناطق BAR: كشف عمليات قراءة/كتابة MMIO والإشعار بها لتجنّب الاستقصاء (polling) عن الوصولات.
  • دعم المقاطعات: حقن مقاطعات Legacy/MSI/MSI-X.
  • إطار قدرات PCI: نظام قدرات PCI (يعتمد على قائمة مرتبطة في جوهره).
  • نظام DMA: وصولات DMA واعية بـ IOMMU من وإلى جهاز مساحة المستخدم.
    • دعم P2P (أوّلي!): DMA من نظير إلى نظير بين الأجهزة مع تحكم بالوصول قائم على قائمة السماح.
  • مساحة المستخدم: نفّذ أجهزة PCIe الخاصة بك بالكامل في مساحة المستخدم.

الحد الأدنى للبيئة المدعومة

  • إصدار نواة لينكس: 6.6
  • مترجم C: gcc-12
  • البنية: amd64/i386، aarch64، riscv

ملاحظة aarch64: تم الاختبار مع Raspberry Pi 4b، عبر device-tree (بدون ACPI)

ملاحظة riscv: تم الاختبار مع VisionFive 2 (عبر device-tree) وMuse Pi Pro (عبر device-tree و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. يدعم إعادة توجيه الاتصالات من وإلى بطاقة الشبكة الحقيقية لديك. يمكن أيضًا استخدام Wi-Fi لكنه أقل استقرارًا.

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

أمثلة قديمة

بطاقة ProtoPCIem

تُبرمج البطاقة بالكامل داخل QEMU (وهي في الأساس آلة حالات للبطاقة)، والتي تتولى كل تهيئة مساحة المستخدم ومعالجة الأوامر الصادرة من برنامج التشغيل الحقيقي العامل على المضيف.

يمكنها تشغيل DOOM المُصيَّر برمجيًا (حيث تُرسل الإطارات المكتملة عبر DMA إلى البطاقة ليعرضها QEMU)، وكذلك ألعاب OpenGL 1.X البسيطة (في لقطات الشاشة: tyr-glquake وxash3d؛ وذلك بفضل آلة حالات OpenGL مخصصة مُنفذة بالكامل داخل QEMU تُصيّر قوائم الأوامر برمجيًا وتحدّث الحالة الداخلية وفقًا لذلك).

لقطات الشاشة

imagen

imagen

imagen

الترخيص

  • مكونات نواة PCIem: GPLv2
  • الأمثلة: ترخيص مزدوج MIT/GPLv2.

المراجع

  • مقالة المدونة: https://cakehonolulu.github.io/introducing-pciem/
  • منشور Hacker News: https://news.ycombinator.com/item?id=46689065
  • مواصفات PCI Express: https://pcisig.com/specifications
تنزيل الأداة
الميزةPCIemlibfvio-user
الاتصالملف جهاز (/dev/pciem)مقابس UNIX (بروتوكول vfio-user)
بيئة تشغيل برنامج التشغيل المستهدفالمضيفنظام تشغيل الضيف
بيئة تشغيل الجهاز المُحاكىمساحة المستخدممساحة المستخدم
وصولات الجهازمباشرة (داخل المضيف)افتراضية (من الضيف إلى المضيف)

الشكل 1: مقارنة بين الأطر

التوزيعة
Ubuntu Latest --
Ubuntu 24.04 LTS
Debian Stable --
Fedora Latest --
openSUSE Tumbleweed --