
Integración profunda del descompilador ghidra y el desensamblador sleigh para rizin
Esta es una integración del descompilador de Ghidra y el desensamblador Sleigh para Rizin. Está basada únicamente en la parte del descompilador de Ghidra, que está escrita completamente en C++, por lo que Ghidra en sí no es necesario en absoluto y el plugin se puede compilar de forma autónoma. Este proyecto se presentó, inicialmente para radare2, en r2con 2019 como parte de la charla de Cutter: https://youtu.be/eHtMiezr7l8?t=950
Usage:
pdg # Native Ghidra decompiler plugin
| pdg # Decompile current function with the Ghidra decompiler
| pdgd # Dump the debug XML Dump
| pdgx # Dump the XML of the current decompiled function
| pdgj # Dump the current decompiled function as JSON
| pdgo # Decompile current function side by side with offsets
| pdgs # Display loaded Sleigh Languages
| pdg* # Decompiled code is returned to rizin as comment
Las siguientes variables de configuración (para el comando e) se pueden usar para ajustar el comportamiento de rz-ghidra:
ghidra.cmt.cpp: Estilo de comentario C++
ghidra.cmt.indent: Sangría de comentario
ghidra.indent: Incremento de sangría
ghidra.lang: ID de Sleigh personalizado para anular la detección automática (p. ej., x86:LE:32:default)
ghidra.linelen: Longitud máxima de línea
ghidra.nl.brace: Nueva línea antes de abrir '{'
ghidra.nl.else: Nueva línea antes de else
ghidra.sleighhome: SLEIGHHOME
Aquí, ghidra.sleighhome debe apuntar a un directorio que contenga los archivos *.sla, *.lspec, ... para las arquitecturas que deben ser soportadas por el descompilador. Sin embargo, esto se configura automáticamente al usar el paquete rz-pm o al instalar como se muestra a continuación.
Primero, asegúrate de que el submódulo contenido en este repositorio esté descargado y actualizado:
git submodule init
git submodule update
Luego, el plugin de Rizin se puede compilar e instalar de la siguiente manera:
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=~/.local ..
make
make install
Aquí, establece CMAKE_INSTALL_PREFIX en una ubicación desde la cual Rizin pueda cargar el plugin. El paso de instalación es necesario para que el plugin funcione porque incluye la instalación de los archivos Sleigh necesarios. Si estás usando Rizin desde git, también establece CMAKE_PREFIX_PATH en el directorio de instalación de Rizin.
Para compilar también el plugin de Cutter, debes tener Cutter instalado desde la fuente bajo algún prefijo, que se puede especificar opcionalmente con -DCMAKE_PREFIX_PATH=<path>, luego pasa -DBUILD_CUTTER_PLUGIN=ON a cmake para habilitar el plugin:
/my/path/rz-ghidra> mkdir build && cd build
/my/path/rz-ghidra/build> cmake -DBUILD_CUTTER_PLUGIN=ON -DCMAKE_PREFIX_PATH=/path/to/cutter/prefix -DCMAKE_INSTALL_PREFIX=~/.local ..
/my/path/rz-ghidra/build> make && make install
Por defecto, el plugin de Cutter se instala en una ruta elegida automáticamente en el directorio home del usuario actual. Esta ruta se puede sobrescribir con -DCUTTER_INSTALL_PLUGDIR.
Rizin tiene una API de C que evoluciona rápidamente, por lo que es necesario ser explícito sobre qué versiones de rz-ghidra son compatibles con qué versiones de Rizin:
dev de rz-ghidra sigue la rama dev de Rizin.stable de rz-ghidra sigue la rama stable de Rizin.En cuanto a los lanzamientos, rz-ghidra generalmente se lanza simultáneamente con Rizin y a menudo usa los mismos números de versión (pero no está garantizado, ¡no dependas de estos números!). Además, junto con cada lanzamiento de Rizin se crea una etiqueta como rz-0.1.2 en rz-ghidra, que apunta exactamente a un lanzamiento de rz-ghidra e indica que este lanzamiento es compatible con la versión especificada de Rizin. Estas etiquetas pueden ser utilizadas por los mantenedores de distribuciones para buscar cómo configurar las dependencias.
Ten en cuenta que este plugin está disponible bajo la LGPLv3, que es más estricta que la licencia de Ghidra.
Este programa es software libre: puedes redistribuirlo y/o modificarlo bajo los términos de la GNU Lesser General Public License publicada por la Free Software Foundation, ya sea la versión 3 de la Licencia, o (a tu elección) cualquier versión posterior.
Este programa se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulta la GNU Lesser General Public License para más detalles.
Deberías haber recibido una copia de la GNU Lesser General Public License junto con este programa. Si no es así, consulta https://www.gnu.org/licenses/.