Sleigh ist eine Sprache, mit der die Semantik von Anweisungssätzen allgemeiner Mikroprozessoren beschrieben wird, mit genügend Details, um die für diese Architekturen zusammengestellte Reverse-Engineering von Software zu erleichtern. Es ist Teil der Ghidra Reverse Engineering -Plattform und untermauert zwei ihrer Hauptkomponenten: ihre Deaktivierung und Dekompilierungsmotoren.
Dieses Repository bietet ein CMake-basiertes Build-Projekt für Schlitten, damit es als eigenständige Bibliothek erstellt und verpackt und in anderen Projekten als Ghidra wiederverwendet werden kann.
| Name | Unterstützung |
|---|---|
| Linux | Ja |
| macos | Ja |
| Fenster | Ja |
| Name | Version | Linux -Paket zur Installation | MacOS Homebrew -Paket zur Installation |
|---|---|---|---|
| (Kopfbau) Zlib | Jüngste | Zlib1g-dev | Zlib |
| Git | Letzte | Git | N / A |
| Cmake | 3.18+ | cmake | cmake |
Hinweis : Dieses CMake -Projekt zieht den Ghidra -Quellcode während der Konfiguration aus dem Internet. Weitere Informationen finden Sie im Abschnitt "Anmerkung im Abschnitt" Ghidra Quellcode ".
Zum Erstellen von Dokumentation:
| Name | Version | Linux -Paket zur Installation | MacOS Homebrew -Paket zur Installation |
|---|---|---|---|
| Doxygen | Letzte | Doxygen | Doxygen |
| Graphviz | Letzte | 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 ./installDer Ghidra -Quellcode ist in diesem Git -Repo nicht enthalten, und standardmäßig zieht CMake automatisch eine stabile Version aus dem Internet für Sie.
Weitere Informationen zum Anpassen des Ghidra -Quellcode -Commits finden Sie src/README.md .
Die CMAKE -Konfiguration unterstützt auch das Erstellen von Paketen für Schlitten.
Zum Beispiel:
# Package Sleigh
cmake --build build --target package Ein Beispielprogramm namens sleigh-lift wurde aufgenommen, um zu demonstrieren, wie man die Schlitten-API benutzt. Es braucht eine hexadezimale Reihe von Bytes und kann es zerlegen oder auf P-Code heben. Das Programm kann wie folgt aufgerufen werden, wobei das action entweder disassemble oder pcode sein muss:
sleigh-lift [action] [sla_file] [bytes] [-a address] [-p root_sla_dir] [-s pspec_file]Zum Beispiel, um die folgende Byte -Zeichenfolge zu zerlegen:
$ sleigh-lift disassemble x86-64.sla 4881ecc00f0000
0x00000000: SUB RSP,0xfc0Und um es auf P-Code zu heben:
$ 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 kein sleigh-lift erstellen möchten, müssen Sie die Option CMake Variable sleigh_BUILD_EXTRATOOLS während der CMAKE-Konfiguration OFF .
Dieses Repository enthält einen Helfer, der nicht Teil von Schlitten/Ghidra ist, den Sie im support -Verzeichnis finden. Es hat die folgende Signatur und kann dem Benutzer helfen, den Speicherort einer bestimmten Spezifikationsdatei im System zu finden:
std::optional<std::filesystem::path>
FindSpecFile (std::string_view file_name,
const std::vector<std::filesystem::path> &search_paths =
gDefaultSearchPaths ); Die sleigh::FindSpecFile -Funktion durchsucht die vom Benutzer bereitgestellten Pfade über das Argument search_paths für eine Spezifikationsdatei mit dem Namen file_name . Das Standardargument für search_paths lautet sleigh::gDefaultSearchPaths , das die während der CMAKE -Konfiguration generierten Installations-/Build -Verzeichnisse und eine Reihe gängiger Installationsorte enthält.
Wenn Sie die Helfer nicht erstellen möchten, müssen Sie die Option CMake Variable sleigh_BUILD_SUPPORT während der CMAKE -Konfiguration OFF .
Eine Installation von Schlitten bietet eine CMAKE -Schnittstelle, die Sie beim Erstellen Ihres Projekts verwenden können.
Sie finden ein Beispiel für die Verwendung der CMAKE -Paket -Konfigurationsdatei im Beispiel für find_package.
Wir bieten auch eine CMake -Helfer -Funktion sleigh_compile um Ihre .slaspec -Dateien mit einem Schlittenkompiler zu kompilieren.
In dem example finden Sie ein komplexeres CMAKE-Beispiel mit Kompilienspezifikationen im Beispiel, das den vorgelagerten Sleigh-Beispiel-Quellcode verwendet.
Zuletzt können Sie die installierten kompilierten Schlittendateien über die CMAKE-Variable sleigh_INSTALL_SPECDIR finden. Dies ist ein absoluter Weg zum Stammverzeichnis für die kompilierten Schlittendateien-Sie sollten manuell inspizieren, um zu wissen, was Sie erwarten können.
Verweisen auf die CMake -Konfigurationsdatei und die CMake -Datei specfiles wird auch vorgeschlagen, um mehr über die exponierten CMake -Variablen und -Module zu erfahren.
Siehe die Lizenzdatei.