Sleigh เป็นภาษาที่ใช้อธิบายความหมายของชุดคำสั่งของไมโครโปรเซสเซอร์ที่มีวัตถุประสงค์ทั่วไปพร้อมรายละเอียดเพียงพอที่จะอำนวยความสะดวกด้านวิศวกรรมย้อนกลับของซอฟต์แวร์ที่รวบรวมสำหรับสถาปัตยกรรมเหล่านี้ มันเป็นส่วนหนึ่งของแพลตฟอร์มวิศวกรรม Reverse Ghidra และเป็นรากฐานขององค์ประกอบหลักสองประการ: เครื่องยนต์ถอดแยกชิ้นส่วนและการสลายตัว
ที่เก็บนี้ให้โครงการสร้างที่ใช้ CMake สำหรับการเลื่อนเพื่อให้สามารถสร้างและบรรจุเป็นห้องสมุดแบบสแตนด์อโลนและนำกลับมาใช้ใหม่ในโครงการอื่นนอกเหนือจาก Ghidra
| ชื่อ | สนับสนุน |
|---|---|
| ลินเวกซ์ | ใช่ |
| แม็กอส | ใช่ |
| หน้าต่าง | ใช่ |
| ชื่อ | รุ่น | แพ็คเกจ Linux ที่จะติดตั้ง | แพ็คเกจ MacOS Homebrew เพื่อติดตั้ง |
|---|---|---|---|
| (หัวสร้าง) zlib | ล่าสุด | zlib1g-dev | zlib |
| กระตวน | ล่าสุด | กระตวน | 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 repo นี้และโดยค่าเริ่มต้น CMAKE จะดึงเวอร์ชันที่เสถียรจากอินเทอร์เน็ตโดยอัตโนมัติสำหรับคุณ
โปรดดู src/README.md สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการปรับแต่งซอร์สโค้ด GHIDRA ที่จะใช้/คอมไพล์รวมถึงการระบุสำเนาของแหล่งกำเนิด Ghidra ในท้องถิ่นของคุณเอง
การกำหนดค่า CMAKE ยังรองรับแพ็คเกจอาคารสำหรับเลื่อน
ตัวอย่างเช่น:
# Package Sleigh
cmake --build build --target package โปรแกรมตัวอย่างที่เรียกว่า sleigh-lift ได้รับการรวมเพื่อสาธิตวิธีการใช้ 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 package config ในตัวอย่าง find_package
นอกจากนี้เรายังมีฟังก์ชั่น CMAKE HELPER sleigh_compile เพื่อรวบรวมไฟล์ .slaspec ของคุณโดยใช้คอมไพเลอร์เลื่อน
คุณสามารถค้นหาตัวอย่าง CMake ที่ซับซ้อนมากขึ้นด้วยการรวบรวมข้อกำหนดการเลื่อนในไดเรกทอรี example ซึ่งใช้ซอร์สโค้ดตัวอย่างเลื่อนที่ให้ไว้ต้นน้ำ
สุดท้ายคุณสามารถค้นหาไฟล์เลื่อนที่รวบรวมได้ผ่านตัวแปร CMAKE sleigh_INSTALL_SPECDIR ซึ่งเป็นเส้นทางที่แน่นอนไปยังไดเรกทอรีรากสำหรับไฟล์เลื่อนที่รวบรวมได้ --- คุณควรตรวจสอบสิ่งนี้ด้วยตนเองเพื่อรู้ว่าจะคาดหวังอะไร
การอ้างอิงไฟล์ cmake config และไฟล์ cmake specfiles ยังแนะนำสำหรับการเรียนรู้เพิ่มเติมเกี่ยวกับตัวแปรและโมดูล CMake ที่เปิดเผยเพิ่มเติม
ดูไฟล์ใบอนุญาต