
مكوّن إضافي لاستكشاف تغطية الكود في Ghidra
تم التطوير بواسطة Austin Peavy - https://github.com/aus10pv
صدر كمصدر مفتوح بواسطة NCC Group Plc - https://www.nccgroup.com/
صدر بموجب رخصة Apache 2.0 (انظر LICENSE لمزيد من المعلومات)

Cartographer هو إضافة لرسم خرائط تغطية الكود (code coverage) لـ Ghidra، تتيح للباحثين معرفة أي أجزاء من البرنامج تم تنفيذها دون الحاجة إلى الكود المصدري.
يمكن تنزيل أحدث إصدار مستقر من Cartographer من صفحة Releases.
File -> Install Extensions...بمجرد تحميل الإضافة، ستظهر عناصر تحكم إضافية في نافذة CodeBrowser للعمل مع بيانات تغطية الكود.
يمكن تحميل ملفات تغطية الكود عبر قائمة Tools: Tools -> Code Coverage -> Load Code Coverage File(s)...
عند تحميل ملف تغطية الكود، يتم تمييز جميع بيانات التغطية فورًا في عرض القائمة (Listing) وعرض المفكك (Decompiler).

يمكن العثور على معلومات مفصّلة حول بيانات التغطية لكل دالة في نافذة Code Coverage.
يمكن فتح نافذة Code Coverage بالانتقال إلى Window -> Code Coverage، أو بالضغط على Ctrl-Shift-C في Windows (Cmd-Shift-C في Mac).
تعرض هذه النافذة تفاصيل متنوعة عن كل دالة في البرنامج:
سيؤدي النقر على أي دالة إلى الانتقال إلى تلك الدالة في عرض القائمة وعرض المفكك.

يمكن استخدام مربع الإدخال Filter للبحث عن دالة بالاسم.
يمكن استخدام أي من البيانات المعروضة في جدول التغطية كمرشح للأعمدة.

يمكن استخدام القائمة المنسدلة في أسفل يمين نافذة Code Coverage للتبديل بسرعة وسهولة بين ملفات تغطية الكود المحمّلة.

يمكن استخدام مربع النص في أسفل نافذة Code Coverage لإجراء عمليات منطقية على ملفات تغطية الكود المحمّلة.
يمكن أن يكون هذا مفيدًا للغاية لفحص الاختلافات وأوجه التشابه بين عمليات تشغيل مختلفة للبرنامج.

فيما يلي العوامل المنطقية التي يمكن استخدامها داخل محلل التعبيرات.
&: الحصول على فقط الكود الذي تم تنفيذه بواسطة كلتا التغطيتين|: الحصول على أي كود تم تنفيذه بواسطة إحدى التغطيتين^: الحصول على فقط الكود المنفَّذ الذي يختلف بين التغطيتين-: الحصول على فقط الكود المنفَّذ الفريد في التغطية اليسرىيتم الإشارة إلى التغطيات بواسطة معرّفاتها الأبجدية في القائمة المنسدلة، مثل A وB وXY وما إلى ذلك.
يتم تجميع كل عملية منطقية باستخدام الأقواس، ويمكن أن تكون التعبيرات بأي طول أو درجة تعقيد.
اعرض الكود الذي تم تنفيذه في كلتا التغطيتين A وB:
A & B
اعرض الكود المنفَّذ الذي كان مختلفًا بين التغطيتين A وB:
A ^ B
اعرض الكود الذي تم تنفيذه فقط في B:
B - A
ادمج جميع بيانات التغطية الموجودة في A وB، ثم ابحث عن أي اختلافات عن C:
(A | B) ^ C
يمكن استخدام Gradle لبناء Cartographer من الكود المصدري الخاص به.
استنسخ مستودع Cartographer على GitHub.
$ git clone https://github.com/nccgroup/Cartographer.git
ادخل إلى المستودع وقم بالبناء باستخدام gradle.
$ cd Cartographer
$ gradle -PGHIDRA_INSTALL_DIR=<ghidra_install_dir>
<ghidra_install_dir> بمسار تثبيت Ghidra المحلي لديك.بعد البناء، سيكون ملف ZIP الخاص بالإضافة في مجلد dist/.
إذا وجدت خطأً في Cartographer، يرجى فتح Issue عبر GitHub.
مستوحى في الأصل من Lighthouse - https://github.com/gaasedelen/lighthouse