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变量和模块的更多信息。
请参阅许可证文件。