Sleigh是一種用於描述通用微處理器的教學集的語言,並具有足夠的細節,以促進為這些體系結構編譯的軟件的反向工程。它是Ghidra反向工程平台的一部分,並支撐了其兩個主要組成部分:其拆卸和倒數發動機。
該存儲庫為Sleigh提供了一個基於CMAKE的構建項目,因此可以作為獨立庫來構建和包裝,並在Ghidra以外的其他項目中重複使用。
| 姓名 | 支持 |
|---|---|
| Linux | 是的 |
| macos | 是的 |
| 視窗 | 是的 |
| 姓名 | 版本 | Linux軟件包安裝 | Macos Homebrew套件安裝 |
|---|---|---|---|
| (頭部構建)Zlib | 最近的 | zlib1g-dev | Zlib |
| git | 最新的 | git | N/A。 |
| cmake | 3.18+ | cmake | cmake |
注意:此CMAKE項目在配置期間從Internet中摘取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 ./installGHIDRA源代碼實際上並未包含在此GIT回購中,默認情況下,CMake將自動從Internet為您提取穩定版本。
有關如何自定義將使用/編譯的Ghidra源代碼提交的更多信息,包括指定您自己的Ghidra源本地副本,請參閱src/README.md
Cmake配置還支持雪橇的建築包。
例如:
# Package Sleigh
cmake --build build --target package包括一個名為sleigh-lift的示例程序,以演示如何使用雪橇API。它需要一個字節的十六進製字符串,可以將其拆卸或將其提升為p代碼。該程序可以如下調用,其中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代碼:
$ 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選項設置為在CMake配置期間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變量sleigh_BUILD_SUPPORT選項設置為在CMAKE配置期間OFF 。
雪橇的安裝提供了一個CMAKE接口,在構建項目時可以使用。
您可以在Find_package示例中找到如何使用CMAKE軟件包配置文件的示例。
我們還提供CMAKE助手功能sleigh_compile ,以使用雪橇編譯器來編譯您的.slaspec文件。
您可以在example目錄中找到一個更複雜的CMAKE示例,其中使用上游提供的Sleigh示例源代碼。
最後,您可以通過CMAKE變量sleigh_INSTALL_SPECDIR找到已安裝的編譯後的雪橇文件,這是通往編譯的雪橇文件的根目錄的絕對路徑 - 您應該手動檢查一下以了解期望的內容。
還建議參考CMake配置文件和specfiles CMake文件,以了解有關裸露的CMAKE變量和模塊的更多信息。
請參閱許可證文件。