
Tiefe Integration des Ghidra-Dekompilierers und des Sleigh-Disassemblers für rizin
Dies ist eine Integration des Ghidra-Decompilers und des Sleigh-Disassemblers für Rizin. Es basiert ausschließlich auf dem Decompiler-Teil von Ghidra, der vollständig in C++ geschrieben ist, sodass Ghidra selbst überhaupt nicht benötigt wird und das Plugin eigenständig gebaut werden kann. Dieses Projekt wurde ursprünglich für radare2 auf der r2con 2019 im Rahmen des Cutter-Vortrags vorgestellt: 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
Die folgenden Konfigurationsvariablen (für den e-Befehl) können verwendet werden, um das Verhalten von rz-ghidra anzupassen:
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
Hier muss ghidra.sleighhome auf ein Verzeichnis zeigen, das die *.sla, *.lspec, ...-Dateien für die Architekturen enthält, die vom Decompiler unterstützt werden sollen. Dies wird jedoch automatisch eingerichtet, wenn das rz-pm-Paket verwendet wird oder die Installation wie unten gezeigt erfolgt.
Stellen Sie zunächst sicher, dass das in diesem Repository enthaltene Submodul abgerufen und auf dem neuesten Stand ist:
git submodule init
git submodule update
Dann kann das Rizin-Plugin wie folgt gebaut und installiert werden:
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=~/.local ..
make
make install
Setzen Sie hier CMAKE_INSTALL_PREFIX auf einen Speicherort, von dem Rizin das Plugin laden kann. Der Installationsschritt ist für die Funktion des Plugins erforderlich, da er die Installation der erforderlichen Sleigh-Dateien umfasst. Wenn Sie Rizin aus Git verwenden, setzen Sie auch CMAKE_PREFIX_PATH auf das Rizin-Installationsverzeichnis.
Um auch das Cutter-Plugin zu bauen, muss Cutter aus dem Quellcode unter einem bestimmten Prefix installiert sein, das optional mit -DCMAKE_PREFIX_PATH=<path> angegeben werden kann. Übergeben Sie dann -DBUILD_CUTTER_PLUGIN=ON an cmake, um das Plugin zu aktivieren:
/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
Standardmäßig wird das Cutter-Plugin in einem automatisch gewählten Pfad im Home-Verzeichnis des aktuellen Benutzers installiert. Dieser Pfad kann mit -DCUTTER_INSTALL_PLUGDIR überschrieben werden.
Rizin hat eine sich schnell entwickelnde C-API, daher ist es notwendig, explizit anzugeben, welche Versionen von rz-ghidra mit welchen Versionen von Rizin kompatibel sind:
Bei Verwendung von Rizin und rz-ghidra aus Git:
dev folgt dem Rizin-Branch dev.stable folgt dem Rizin-Branch stable.Bezüglich der Releases wird rz-ghidra in der Regel gleichzeitig mit Rizin veröffentlicht und verwendet oft die gleichen Versionsnummern (aber nicht garantiert, verlassen Sie sich nicht auf diese Zahlen!). Außerdem wird mit jedem Rizin-Release ein Tag wie rz-0.1.2 auf rz-ghidra erstellt, das genau auf ein rz-ghidra-Release verweist und anzeigt, dass dieses Release mit der angegebenen Rizin-Version kompatibel ist. Diese Tags können von Distributionsbetreuern verwendet werden, um nachzuschlagen, wie Abhängigkeiten eingerichtet werden.
Bitte beachten Sie, dass dieses Plugin unter der LGPLv3 verfügbar ist, die strenger ist als die Lizenz von Ghidra!
Dieses Programm ist freie Software: Sie können es unter den Bedingungen der GNU Lesser General Public License, wie von der Free Software Foundation veröffentlicht, entweder Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren Version weitergeben und/oder modifizieren.
Dieses Programm wird in der Hoffnung verteilt, dass es nützlich sein wird, aber OHNE JEDE GEWÄHRLEISTUNG; ohne sogar die stillschweigende Garantie der MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Weitere Einzelheiten finden Sie in der GNU Lesser General Public License.
Sie sollten eine Kopie der GNU Lesser General Public License zusammen mit diesem Programm erhalten haben. Wenn nicht, siehe https://www.gnu.org/licenses/.