إضافة WinDbg x64 تفكّك الدوال الحية وتستخدم نموذج LLM لإنتاج شبه كود متحقق منه.


هذا المشروع هو هيكل أساسي لملحق WinDbg لأنظمة Windows x64 يحل دالة بالاسم أو العنوان، ويعيد بناء عرض تدفق تحكم حتمي، ويطلب من LLM مباشرة من الملحق لإنتاج شبه كود.
src/extension: ملف DLL لملحق WinDbg وأمر !decomp.src/shared: كود JSON والمحلل والبروتوكول والمدقق المشترك بين الملحق.scripts: أدوات البناء ونسخ المورّدين.third_party/dbgeng: نسخة اختيارية مضمّنة من dbgeng.h وdbgeng.lib.third_party/zydis: شجرة مصادر Zydis المستقرة المضمّنة المستخدمة افتراضيًا عند وجودها.xmm0 إلى xmm3، مع حراسات لصيغة الصفر المتجهة لتجنب الوسائط الواردة الخاطئة/deobf:on|off في ما إذا كانت حقائق الإرباك المستعادة قد توجه إعادة كتابة شبه-Cقم بتحميل الملحق من مخرجات البناء، ثم قم بتشغيل !decomp على رمز أو عنوان:```text
.load C:\path\to\decomp.dll
!decomp /doctor
!decomp module!FunctionName
!decomp 0x7ffb`12345678
استخدم `/doctor` عندما يبدو الإعداد خاطئًا أو قبل تمكين مزوّد LLM:```text
!decomp /doctor
!decomp /doctor:net
/doctor لا يتطلب هدفًا ولا يستدعي المزوّد. بل يُبلغ عن مسار التكوين/حالة التحميل، وملخص المزوّد/النموذج/نقطة النهاية، ووجود المصادقة دون الأسرار، وإعدادات المهلة/الرمز/التقسيم، ودعم DML، وفئة الجلسة/المؤهل، ونوع المعالج، ومحاذير PDB./doctor:net كطلب صريح للتحقق من الشبكة، لكنه يُبلغ حاليًا بأن فحص اتصال المزوّد (ping) يتم تخطيه. لا تقوم الإضافة بإجراء فحص شبكة من وضع doctor.يمكن أن تكون الأهداف رموزًا عامة/خاصة، أو أسماء دوال مُصدَّرة، أو عناوين. إذا تم تحليل الهدف إلى عنوان داخل دالة، تحاول الإضافة استعادة نطاق الدالة الحاوية من الرموز، وبيانات unwind، واستدلالات تدفق التحكم. ضع علامات اقتباس حول الأهداف التي تحتوي على مسافات:```text !decomp "my module!Function With Spaces"
مسار الأمر العادي يقوم بالتحليل المحلي، ويبني حقائق المحلل، ويستدعي اختياريًا نقطة نهاية LLM المكوّنة، ويتحقق من الاستجابة مقابل الأدلة المسترجعة، ويطبع كود C الزائف مع الثقة والتحذيرات وملاحظات عدم اليقين:```text
!decomp ntdll!RtlAllocateHeap
!decomp kernel32!Sleep
!decomp game.exe!CheckIntegrity
يتضمن الإخراج العادي، وbrief، وexplain تدفق تقدم مضغوط حتى بدون /verbose. تُظهر عمليات تشغيل LLM الطويلة اكتمال التحليل المحلي، وتقدّم الأجزاء، وإشعارات إعادة المحاولة، وبدء الدمج، والتحقق، وتلميح الإلغاء عبر Ctrl+Break. تعمل الأوضاع القابلة للقراءة آليًا مثل /view:json و/view:facts و/view:prompt و/view:data على إخفاء خطوط التقدم وروابط مساعد DML بحيث تستقبل البرامج النصية الحمولة المطلوبة فقط.
استخدم /view:* لاختيار ما تريد رؤيته. هذا يُبقي سطح الأوامر صغيرًا: خيار واحد يتحكم في جميع أوضاع الإخراج.```text
!decomp /view:brief module!HotPath
!decomp /view:explain module!BranchyFunction
!decomp /view:json module!FunctionName
!decomp /view:facts module!FunctionName
!decomp /view:prompt module!FunctionName
!decomp /view:data module!FunctionName
!decomp /view:analyzer module!FunctionName
!decomp /view:plan module!FunctionName
- `brief` يطبع الهدف، والثقة، والملخص، وأول تحذير عدم يقين أو تحذير من المُتحقِّق.
- `explain` يضيف أقسام الأدلة، وتدفق التحكم، وتلميحات الأنواع، والسلوك الملاحَظ، وأهداف الاستدعاء.
- `json` يطبع JSON للطلب والاستجابة قابلًا للقراءة آليًا.
- `facts` يطبع حقائق المُحلِّل فقط ويعطّل مسار LLM.
- `prompt` يطبع موجّه النظام وموجّه المستخدم وحقائق الموجّه بالضبط. ويعطّل استدعاء LLM.
- `data` يطبع لقطة JSON ثابتة مخصّصة للأتمتة بأسلوب WinDbg JavaScript/NatVis.
- `analyzer` يعرض مسار الكود الزائف الحتمي الخاص بالمُحلِّل فقط دون استدعاء LLM.
- `plan` ينفّذ تحليلًا محليًا ويطبع خطة فحص مسبق دون استدعاء LLM أو تحديث ذاكرة التخزين المؤقت للنتائج. ويتضمن أعداد الأهداف/الوحدات/النطاقات، وتوفّر PDB، وسياسة الجلسة، والتقسيم التقديري، والأعداد ذات الصلة بحجم الموجّه، وتوصيات عملية.