
Ghidra की SLEIGH प्रोसेसर स्पेसिफिकेशन लाइब्रेरी का CMake बिल्ड, जो रिवर्स इंजीनियरिंग टूल्स के लिए स्टैंडअलोन डिसअसेम्बली और p-code लिफ्टिंग इंजन प्रदान करता है।
Sleigh एक भाषा है जिसका उपयोग सामान्य-उद्देश्य वाले माइक्रोप्रोसेसरों के निर्देश सेटों की शब्दार्थ का वर्णन करने के लिए किया जाता है, जिसमें इन आर्किटेक्चरों के लिए संकलित सॉफ़्टवेयर के रिवर्स इंजीनियरिंग की सुविधा के लिए पर्याप्त विवरण होता है। यह Ghidra रिवर्स इंजीनियरिंग प्लेटफ़ॉर्म का हिस्सा है और इसके दो प्रमुख घटकों: इसके डिसअसेम्बली और डीकंपाइलेशन इंजनों का आधार है।
यह रिपॉज़िटरी Sleigh के लिए एक CMake-आधारित बिल्ड प्रोजेक्ट प्रदान करती है ताकि इसे एक स्टैंडअलोन लाइब्रेरी के रूप में बनाया और पैकेज किया जा सके और 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 देखें कि कौन सा 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 कॉन्फ़िगरेशन के दौरान CMake वेरिएबल sleigh_BUILD_EXTRATOOLS विकल्प को OFF पर सेट करना होगा।
इस रिपॉज़िटरी में एक हेल्पर है जो 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 कॉन्फ़िगरेशन के दौरान CMake वेरिएबल sleigh_BUILD_SUPPORT विकल्प को OFF पर सेट करना होगा।
Sleigh की एक इंस्टॉलेशन एक CMake इंटरफ़ेस प्रदान करती है जिसका उपयोग आप अपने प्रोजेक्ट को बिल्ड करते समय कर सकते हैं।
CMake पैकेज कॉन्फ़िग फ़ाइल का उपयोग कैसे करें इसका एक उदाहरण आप find_package उदाहरण में पा सकते हैं।
हम एक CMake हेल्पर फ़ंक्शन sleigh_compile भी प्रदान करते हैं ताकि आप एक sleigh कंपाइलर का उपयोग करके अपनी .slaspec फ़ाइलों को संकलित कर सकें।
आप Sleigh स्पेसिफिकेशन्स को संकलित करने के साथ एक अधिक जटिल CMake उदाहरण example डायरेक्टरी में पा सकते हैं, जो अपस्ट्रीम-प्रदत्त sleigh उदाहरण स्रोत कोड का उपयोग करता है।
अंत में, आप CMake वेरिएबल sleigh_INSTALL_SPECDIR के माध्यम से इंस्टॉल की गई संकलित sleigh फ़ाइलों का पता लगा सकते हैं, जो संकलित sleigh फ़ाइलों के लिए रूट डायरेक्टरी का एक एब्सोल्यूट पाथ है---आपको यह जानने के लिए कि क्या अपेक्षा करनी है, इसे मैन्युअल रूप से निरीक्षण करना चाहिए।
उजागर किए गए CMake वेरिएबल्स और मॉड्यूल्स के बारे में अधिक जानने के लिए CMake कॉन्फ़िग फ़ाइल और specfiles CMake फ़ाइल को संदर्भित करना भी सुझाया जाता है।
LICENSE फ़ाइल देखें।