El trineo es un lenguaje utilizado para describir la semántica de los conjuntos de instrucciones de microprocesadores de uso general, con suficientes detalles para facilitar la ingeniería inversa del software compilado para estas arquitecturas. Es parte de la plataforma de ingeniería inversa de Ghidra y sustenta dos de sus componentes principales: sus motores de desmontaje y descompilación.
Este repositorio proporciona un proyecto de compilación basado en Cmake para trineo para que pueda construirse y empaquetarse como una biblioteca independiente y reutilizarse en proyectos distintos de Ghidra.
| Nombre | Apoyo |
|---|---|
| Linux | Sí |
| macosa | Sí |
| Windows | Sí |
| Nombre | Versión | Paquete de Linux para instalar | MacOS HomeBrew Paquete para instalar |
|---|---|---|---|
| (La cabeza construye) Zlib | Reciente | zlib1g-dev | zlib |
| Git | El último | git | N / A |
| CMake | 3.18+ | CMake | CMake |
Nota : Este proyecto CMake extrae el código fuente de Ghidra de Internet durante la configuración. Consulte la nota en la sección del código fuente de Ghidra para obtener más detalles.
Para la documentación de la construcción:
| Nombre | Versión | Paquete de Linux para instalar | MacOS HomeBrew Paquete para instalar |
|---|---|---|---|
| Doxígeno | El último | doxígeno | doxígeno |
| Graphviz | El último | 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 ./installEl código fuente de Ghidra no está realmente incluido en este repositorio GIT, y de manera predeterminada, CMake extraerá automáticamente una versión estable de Internet para usted.
Consulte src/README.md para obtener más información sobre cómo personalizar qué comisión de código fuente de Ghidra se utilizará/compilará, incluida la especificación de su propia copia local de la fuente de Ghidra.
La configuración de CMake también admite paquetes de construcción para trineo.
Por ejemplo:
# Package Sleigh
cmake --build build --target package Se ha incluido un programa de ejemplo llamado sleigh-lift para demostrar cómo usar la API de trineo. Se necesita una cadena hexadecimal de bytes y puede desmontarlo o levantarla al código P. El programa se puede invocar de la siguiente manera, donde el argumento action debe ser disassemble o pcode :
sleigh-lift [action] [sla_file] [bytes] [-a address] [-p root_sla_dir] [-s pspec_file]Por ejemplo, para desmontar la siguiente cadena de byte:
$ sleigh-lift disassemble x86-64.sla 4881ecc00f0000
0x00000000: SUB RSP,0xfc0Y para elevarlo al código 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 no desea construir sleigh-lift , debe establecer la opción CMAKE Variable sleigh_BUILD_EXTRATOOLS para OFF durante la configuración de CMake.
Este repositorio contiene un ayudante que no es parte del trineo/ghidra, que puede encontrar en el directorio support . Tiene la siguiente firma y puede ayudar al usuario a encontrar la ubicación de un archivo de especificaciones determinado en el sistema:
std::optional<std::filesystem::path>
FindSpecFile (std::string_view file_name,
const std::vector<std::filesystem::path> &search_paths =
gDefaultSearchPaths ); La función sleigh::FindSpecFile buscará las rutas proporcionadas por el usuario a través del argumento search_paths para un archivo de especificaciones con el nombre file_name . El argumento predeterminado para search_paths es sleigh::gDefaultSearchPaths que contiene los directorios de instalación/construcción generados durante la configuración de CMake y un conjunto de ubicaciones de instalación comunes.
Si no desea construir los ayudantes, debe establecer la opción CMAKE Variable sleigh_BUILD_SUPPORT para OFF durante la configuración de CMake.
Una instalación de Sleigh proporciona una interfaz CMake que puede usar al construir su proyecto.
Puede encontrar un ejemplo de cómo usar el archivo de configuración del paquete Cmake en el ejemplo find_package.
También proporcionamos una función de Helper CMake sleigh_compile para compilar sus archivos .slaspec utilizando un compilador de trineo.
Puede encontrar un ejemplo de CMake más complejo con las especificaciones de trineo de compilación en el directorio example , que utiliza el código fuente de ejemplo de trineo proporcionado por el marco aguas arriba.
Por último, puede ubicar los archivos de trineo compilados instalados a través de la variable CMAKE sleigh_INSTALL_SPECDIR , que es una ruta absoluta al directorio raíz para los archivos de trineo compilados, debe inspeccionar manualmente esto para saber qué esperar.
También se sugiere un referencia al archivo de configuración de CMake y al archivo CMake specfiles para aprender más sobre las variables y módulos expuestos de CMake.
Ver el archivo de licencia.