
بناء CMake لمكتبة مواصفات معالج SLEIGH الخاصة بـ Ghidra، مما يوفر محركات تفكيك مستقلة ومحركات رفع p-code لأدوات الهندسة العكسية.
Sleigh هي لغة تُستخدم لوصف دلالات مجموعات تعليمات المعالجات الدقيقة ذات الأغراض العامة، بتفصيل كافٍ لتسهيل الهندسة العكسية للبرمجيات المُجمَّعة لهذه المعماريات. وهي جزء من منصة Ghidra للهندسة العكسية وتدعم اثنين من مكوناتها الرئيسية: محركي التفكيك وإزالة الترجمة.
يوفر هذا المستودع مشروع بناء قائم على CMake لـ Sleigh بحيث يمكن بناؤه وتغليفه كمكتبة مستقلة وإعادة استخدامه في مشاريع أخرى غير Ghidra.
| الاسم | الدعم |
|---|---|
| Linux | نعم |
| macOS | نعم |
| Windows | نعم |
| الاسم | الإصدار | حزمة Linux للتثبيت | حزمة macOS Homebrew للتثبيت |
|---|---|---|---|
| (بنيات HEAD) zlib | حديث | zlib1g-dev | zlib |
| Git | الأحدث | git | N/A |
| CMake | 3.18+ | cmake | cmake |
ملاحظة: يقوم مشروع CMake هذا بسحب الكود المصدري لـ Ghidra من الإنترنت أثناء التهيئة. راجع الملاحظة حول الكود المصدري لـ Ghidra لمزيد من التفاصيل.
لبناء التوثيق:
| الاسم | الإصدار | حزمة Linux للتثبيت | حزمة macOS Homebrew للتثبيت |
|---|---|---|---|
| Doxygen | الأحدث | doxygen | doxygen |
| GraphViz | الأحدث | graphviz | graphviz |
# Clone this repository (CMake project for sleigh)
git clone https://github.com/lifting-bits/sleigh.git
cd sleigh
# Configure CMake
cmake -B build -S .
# Build Sleigh
cmake --build build --parallel 8
# Install Sleigh
cmake --install build --prefix ./install
الكود المصدري لـ Ghidra غير مُضمَّن فعليًا في مستودع git هذا، وبشكل افتراضي، سيقوم CMake تلقائيًا بسحب إصدار مستقر من الإنترنت نيابةً عنك.
يرجى الاطلاع على src/README.md لمزيد من المعلومات حول كيفية تخصيص أي commit من الكود المصدري لـ Ghidra سيتم استخدامه/تجميعه، بما في ذلك تحديد نسختك المحلية الخاصة من الكود المصدري لـ Ghidra.
تدعم تهيئة CMake أيضًا بناء حزم لـ Sleigh.
على سبيل المثال:
# Package Sleigh
cmake --build build --target package
تم تضمين برنامج مثال يُسمى sleigh-lift لتوضيح كيفية استخدام Sleigh API. يأخذ سلسلة سداسية عشرية من البايتات ويمكنه تفكيكها أو رفعها إلى p-code. يمكن استدعاء البرنامج كما يلي، حيث يجب أن تكون وسيطة action إما disassemble أو pcode:
sleigh-lift [action] [sla_file] [bytes] [-a address] [-p root_sla_dir] [-s pspec_file]
على سبيل المثال، لتفكيك سلسلة البايتات التالية:
$ sleigh-lift disassemble x86-64.sla 4881ecc00f0000
0x00000000: SUB RSP,0xfc0
ولرفعها إلى p-code:
$ sleigh-lift pcode x86-64.sla 4881ecc00f0000
(register,0x200,1) = INT_LESS (register,0x20,8) (const,0xfc0,8)
(register,0x20b,1) = INT_SBORROW (register,0x20,8) (const,0xfc0,8)
(register,0x20,8) = INT_SUB (register,0x20,8) (const,0xfc0,8)
(register,0x207,1) = INT_SLESS (register,0x20,8) (const,0x0,8)
(register,0x206,1) = INT_EQUAL (register,0x20,8) (const,0x0,8)
(unique,0x12c00,8) = INT_AND (register,0x20,8) (const,0xff,8)
(unique,0x12c80,1) = POPCOUNT (unique,0x12c00,8)
(unique,0x12d00,1) = INT_AND (unique,0x12c80,1) (const,0x1,1)
(register,0x202,1) = INT_EQUAL (unique,0x12d00,1) (const,0x0,1)
إذا كنت لا ترغب في بناء sleigh-lift، يجب عليك تعيين خيار متغير CMake sleigh_BUILD_EXTRATOOLS إلى OFF أثناء تهيئة CMake.
يحتوي هذا المستودع على أداة مساعدة ليست جزءًا من Sleigh/Ghidra، ويمكنك العثور عليها في دليل support. لها التوقيع التالي ويمكنها مساعدة المستخدم في العثور على موقع ملف مواصفات معين على النظام:
std::optional<std::filesystem::path>
FindSpecFile(std::string_view file_name,
const std::vector<std::filesystem::path> &search_paths =
gDefaultSearchPaths);
ستبحث دالة sleigh::FindSpecFile في المسارات التي يوفرها المستخدم عبر وسيطة search_paths عن ملف مواصفات باسم file_name. الوسيطة الافتراضية لـ search_paths هي sleigh::gDefaultSearchPaths التي تحتوي على أدلة التثبيت/البناء المُنشأة أثناء تهيئة CMake ومجموعة من مواقع التثبيت الشائعة.
إذا كنت لا ترغب في بناء الأدوات المساعدة، يجب عليك تعيين خيار متغير CMake sleigh_BUILD_SUPPORT إلى OFF أثناء تهيئة CMake.
يوفر تثبيت Sleigh واجهة CMake يمكنك استخدامها عند بناء مشروعك.
يمكنك العثور على مثال لكيفية استخدام ملف تهيئة حزمة CMake في مثال find_package.
نوفر أيضًا دالة مساعدة في CMake وهي sleigh_compile لتجميع ملفات .slaspec الخاصة بك باستخدام مُجمِّع sleigh.
يمكنك العثور على مثال CMake أكثر تعقيدًا مع تجميع مواصفات Sleigh في دليل example، والذي يستخدم الكود المصدري لمثال sleigh المقدم من المنبع.
أخيرًا، يمكنك تحديد موقع ملفات sleigh المُجمَّعة المثبتة عبر متغير CMake sleigh_INSTALL_SPECDIR، وهو مسار مطلق إلى الدليل الجذر لملفات sleigh المُجمَّعة---يجب عليك فحص هذا يدويًا لمعرفة ما يمكن توقعه.
يُقترح أيضًا الرجوع إلى ملف تهيئة CMake وملف CMake الخاص بـ specfiles لمعرفة المزيد حول متغيرات ووحدات CMake المكشوفة.
راجع ملف LICENSE.