Sleigh est une langue utilisée pour décrire la sémantique des ensembles d'instructions des microprocesseurs à usage général, avec suffisamment de détails pour faciliter l'ingénierie inverse des logiciels compilés pour ces architectures. Il fait partie de la plate-forme d'ingénierie inverse de Ghidra et sous-tend deux de ses principaux composants: ses moteurs de démontage et de décompilation.
Ce référentiel fournit un projet de construction basé sur CMake pour Sleigh afin qu'il puisse être construit et emballé en tant que bibliothèque autonome et être réutilisé dans des projets autres que Ghidrera.
| Nom | Soutien |
|---|---|
| Linux | Oui |
| macos | Oui |
| Fenêtre | Oui |
| Nom | Version | Package Linux à installer | Package MacOS Homebrew à installer |
|---|---|---|---|
| (Builds de tête) Zlib | Récent | ZLIB1G-DEV | zrib |
| Git | Dernier | git | N / A |
| Cmake | 3.18+ | cmake | cmake |
Remarque : Ce projet CMake extrait le code source Ghidra depuis Internet pendant la configuration. Voir la note sur la section du code source Ghidra pour plus de détails.
Pour la documentation de la construction:
| Nom | Version | Package Linux à installer | Package MacOS Homebrew à installer |
|---|---|---|---|
| Doxygène | Dernier | doxygène | doxygène |
| Graphiquement | Dernier | graphiquement | graphiquement |
# 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 ./installLe code source Ghidra n'est pas réellement inclus dans ce dépôt git, et par défaut, CMake tirera automatiquement une version stable d'Internet pour vous.
Veuillez consulter src/README.md pour plus d'informations sur la façon de personnaliser le codage source Ghidra qui sera utilisé / compilé, notamment en spécifiant votre propre copie locale de la source Ghidra.
La configuration CMake prend également en charge les forfaits de construction pour le traîneau.
Par exemple:
# Package Sleigh
cmake --build build --target package Un exemple de programme appelé sleigh-lift a été inclus pour montrer comment utiliser l'API Sleigh. Il prend une chaîne hexadécimale d'octets et peut la démonter ou la soulever en code p. Le programme peut être invoqué comme suit, où l'argument action doit être disassemble ou pcode :
sleigh-lift [action] [sla_file] [bytes] [-a address] [-p root_sla_dir] [-s pspec_file]Par exemple, pour démonter la chaîne d'octet suivante:
$ sleigh-lift disassemble x86-64.sla 4881ecc00f0000
0x00000000: SUB RSP,0xfc0Et pour le soulever en code 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) Si vous ne souhaitez pas construire sleigh-lift , vous devez définir l'option CMake Variable sleigh_BUILD_EXTRATOOLS sur OFF lors de la configuration CMake.
Ce référentiel contient une aide ne faisant pas partie de Sleigh / Ghidra, que vous pouvez trouver dans le répertoire support . Il a la signature suivante et peut aider l'utilisateur à trouver l'emplacement d'un fichier de spécifications donné sur le système:
std::optional<std::filesystem::path>
FindSpecFile (std::string_view file_name,
const std::vector<std::filesystem::path> &search_paths =
gDefaultSearchPaths ); La fonction sleigh::FindSpecFile recherchera les chemins fournis par l'utilisateur via l'argument search_paths pour un fichier de spécifications avec le nom file_name . L'argument par défaut pour search_paths est sleigh::gDefaultSearchPaths qui contient les répertoires d'installation / build générés lors de la configuration CMake et un ensemble d'emplacements d'installation courants.
Si vous ne souhaitez pas construire les assistants, vous devez définir l'option CMake Variable sleigh_BUILD_SUPPORT sur OFF lors de la configuration CMake.
Une installation de Sleigh fournit une interface CMake que vous pouvez utiliser lors de la construction de votre projet.
Vous pouvez trouver un exemple d'utilisation du fichier de configuration du package CMake dans l'exemple find_package.
Nous fournissons également une fonction CMake Helper sleigh_compile pour compiler vos fichiers .slaspec à l'aide d'un compilateur de traîneau.
Vous pouvez trouver un exemple CMake plus complexe avec la compilation de spécifications de traîneau dans l' example du répertoire, qui utilise le code source d'exemple de traîneau fourni en amont.
Enfin, vous pouvez localiser les fichiers de traîneaux compilés installés via la variable CMake sleigh_INSTALL_SPECDIR , qui est un chemin absolu vers le répertoire racine pour les fichiers de traîneaux compilés --- vous devez inspecter manuellement cela pour savoir à quoi s'attendre.
La référence du fichier CMake Config et du fichier CMake specfiles est également suggérée pour en savoir plus sur les variables et modules CMake exposés.
Voir le fichier de licence.