Esta es una integración del descompilador de Ghidra y el desmontaje del trineo para Rizin. Se basa únicamente en la parte del descompilador de Ghidra, que se escribe completamente en C ++, por lo que no se requiere Ghidra en absoluto y el complemento se puede construir autónomo. Este proyecto fue presentado, inicialmente para Radare2, en R2Con 2019 como parte de la charla de corte: 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
Los siguientes vars de configuración (para el comando e ) se pueden usar para ajustar el comportamiento de RZ-Ghidra:
ghidra.cmt.cpp: C++ comment style
ghidra.cmt.indent: Comment indent
ghidra.indent: Indent increment
ghidra.lang: Custom Sleigh ID to override auto-detection (e.g. x86:LE:32:default)
ghidra.linelen: Max line length
ghidra.nl.brace: Newline before opening '{'
ghidra.nl.else: Newline before else
ghidra.sleighhome: SLEIGHHOME
Aquí, ghidra.sleighhome debe señalar un directorio que contenga los archivos *.sla , *.lspec , ... para las arquitecturas que deberían respaldar el descompilador. Sin embargo, esto se configura automáticamente cuando se usa el paquete RZ-PM o se instala como se muestra a continuación.
Primero, asegúrese de que el submódulo contenido en este repositorio sea obtenido y actualizado:
git submodule init
git submodule update
Luego, el complemento Rizin se puede construir e instalar de la siguiente manera:
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=~/.local ..
make
make install
Aquí, establezca el CMAKE_INSTALL_PREFIX en una ubicación donde Rizin puede cargar el complemento desde. El paso de instalación es necesario para que el complemento funcione porque incluye la instalación de los archivos de trineo necesarios. Si está utilizando Rizin de Git, también configure CMAKE_PREFIX_PATH en el directorio de instalación de Rizin.
Para construir también el complemento de cortador, debe tener un cortador instalado desde la fuente en algún prefijo, que se puede especificar opcionalmente con -DCMAKE_PREFIX_PATH=<path> , luego pasar -DBUILD_CUTTER_PLUGIN=ON Cmake para habilitar el complemento:
/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 complemento Cutter se instala en una ruta elegida automáticamente en el directorio de inicio del usuario actual. Esta ruta se puede anular con -DCUTTER_INSTALL_PLUGDIR .
Rizin tiene una API C rápidamente en evolución, por lo que es necesario ser explícito sobre qué versiones de RZ-Ghidra son compatibles con las que las versiones de Rizin:
Al usar Rizin y Rz-Ghidra de Git:
dev sigue a lo largo de Rizin Branch dev .stable de la rama de Rz-Ghidra sigue a lo largo de Rizin Branch stable . Con respecto a las versiones, RZ-Ghidra generalmente se libera simultáneamente con Rizin y a menudo usa los mismos números de versión (pero no garantizados, ¡no dependen de estos números!). Además, junto con cada lanzamiento de Rizin, una etiqueta como rz-0.1.2 se crea en RZ-Ghidra, que apunta exactamente a una versión de RZ-Ghidra e indica que esta versión es compatible con la versión Rizin especificada. Estas etiquetas pueden ser utilizadas por los mantenedores de distribución para buscar cómo configurar las dependencias.
¡Tenga en cuenta que este complemento está disponible en LGPLV3 , que es más estricto que la licencia de Ghidra!
Este programa es un software gratuito: puede redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General Lesser Lesser de GNU publicada por Free Software Foundation, ya sea la versión 3 de la licencia o (a su opció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 estado físico para un propósito particular. Vea la licencia pública general de GNU Lesser para obtener más detalles.
Debería haber recibido una copia de la Licencia Pública General Lesser de GNU junto con este programa. Si no, consulte https://www.gnu.org/licenses/.