
CMake-Build von Ghidras SLEIGH-Prozessorspezifikationsbibliothek, die eigenständige Disassemblierungs- und P-Code-Lifting-Engines für Reverse-Engineering-Tools bereitstellt.
Sleigh ist eine Sprache zur Beschreibung der Semantik von Befehlssätzen universeller Mikroprozessoren, mit ausreichendem Detaillierungsgrad, um das Reverse Engineering von für diese Architekturen kompilierter Software zu erleichtern. Sie ist Teil der Ghidra Reverse Engineering Platform und bildet die Grundlage für zwei ihrer Hauptkomponenten: ihre Disassemblierungs- und Dekompilierungs-Engines.
Dieses Repository stellt ein CMake-basiertes Build-Projekt für Sleigh bereit, damit es als eigenständige Bibliothek gebaut und paketiert und in anderen Projekten als Ghidra wiederverwendet werden kann.
| Name | Unterstützung |
|---|---|
| Linux | Ja |
| macOS | Ja |
| Windows | Ja |
| Name | Version | Unter Linux zu installierendes Paket | Unter macOS mit Homebrew zu installierendes Paket |
|---|---|---|---|
| (HEAD-Builds) zlib | Aktuell | zlib1g-dev | zlib |
| Git | Neueste | git | N/A |
| CMake | 3.18+ | cmake | cmake |
HINWEIS: Dieses CMake-Projekt lädt den Ghidra-Quellcode während der Konfiguration aus dem Internet herunter. Weitere Details finden Sie im Abschnitt mit Hinweisen zum Ghidra-Quellcode.
Zum Erstellen der Dokumentation:
| Name | Version | Unter Linux zu installierendes Paket | Unter macOS mit Homebrew zu installierendes Paket |
|---|---|---|---|
| Doxygen | Neueste | doxygen | doxygen |
| GraphViz | Neueste | 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
Der Ghidra-Quellcode ist nicht tatsächlich in diesem Git-Repository enthalten, und standardmäßig lädt CMake automatisch eine stabile Version aus dem Internet für Sie herunter.
Weitere Informationen dazu, wie Sie anpassen können, welcher Ghidra-Quellcode-Commit verwendet/kompiliert wird, einschließlich der Angabe Ihrer eigenen lokalen Kopie des Ghidra-Quellcodes, finden Sie in src/README.md.
Die CMake-Konfiguration unterstützt auch das Erstellen von Paketen für Sleigh.
Zum Beispiel:
# Package Sleigh
cmake --build build --target package
Ein Beispielprogramm namens sleigh-lift wurde beigefügt, um die Verwendung der Sleigh-API zu demonstrieren. Es nimmt eine hexadezimale Byte-Zeichenkette entgegen und kann diese disassemblieren oder in P-Code überführen. Das Programm kann wie folgt aufgerufen werden, wobei das Argument action entweder disassemble oder pcode sein muss:
sleigh-lift [action] [sla_file] [bytes] [-a address] [-p root_sla_dir] [-s pspec_file]
Um beispielsweise die folgende Byte-Zeichenkette zu disassemblieren:
$ sleigh-lift disassemble x86-64.sla 4881ecc00f0000
0x00000000: SUB RSP,0xfc0
Und um sie in P-Code zu überführen:
$ 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)
Wenn Sie sleigh-lift nicht bauen möchten, müssen Sie die CMake-Variable sleigh_BUILD_EXTRATOOLS während der CMake-Konfiguration auf OFF setzen.
Dieses Repository enthält ein Hilfsprogramm, das nicht Teil von Sleigh/Ghidra ist und das Sie im Verzeichnis support finden. Es hat die folgende Signatur und kann dem Benutzer helfen, den Speicherort einer bestimmten Spezifikationsdatei auf dem System zu finden:
std::optional<std::filesystem::path>
FindSpecFile(std::string_view file_name,
const std::vector<std::filesystem::path> &search_paths =
gDefaultSearchPaths);
Die Funktion sleigh::FindSpecFile durchsucht die vom Benutzer über das Argument search_paths angegebenen Pfade nach einer Spezifikationsdatei mit dem Namen file_name. Das Standardargument für search_paths ist sleigh::gDefaultSearchPaths, das die während der CMake-Konfiguration generierten Installations-/Build-Verzeichnisse sowie eine Reihe gängiger Installationsorte enthält.
Wenn Sie die Hilfsprogramme nicht bauen möchten, müssen Sie die CMake-Variable sleigh_BUILD_SUPPORT während der CMake-Konfiguration auf OFF setzen.
Eine Installation von Sleigh stellt eine CMake-Schnittstelle bereit, die Sie beim Bauen Ihres Projekts verwenden können.
Ein Beispiel für die Verwendung der CMake-Paketkonfigurationsdatei finden Sie im find_package-Beispiel.
Wir stellen außerdem eine CMake-Hilfsfunktion sleigh_compile bereit, um Ihre .slaspec-Dateien mit einem Sleigh-Compiler zu kompilieren.
Ein komplexeres CMake-Beispiel mit dem Kompilieren von Sleigh-Spezifikationen finden Sie im Verzeichnis example, das den vom Upstream bereitgestellten Sleigh-Beispielquellcode verwendet.
Schließlich können Sie die installierten kompilierten Sleigh-Dateien über die CMake-Variable sleigh_INSTALL_SPECDIR lokalisieren, die ein absoluter Pfad zum Stammverzeichnis für die kompilierten Sleigh-Dateien ist – Sie sollten dies manuell überprüfen, um zu wissen, was Sie erwarten können.
Es wird auch empfohlen, die CMake-Konfigurationsdatei und die specfiles CMake-Datei zu konsultieren, um mehr über die verfügbar gemachten CMake-Variablen und -Module zu erfahren.
Siehe die LICENSE-Datei.