Dies ist eine Integration des Ghidra -Dekompilers und des Schlittendisassemblers für Rizin. Es basiert ausschließlich auf dem Dekompilerteil von Ghidra, der vollständig in C ++ geschrieben ist, sodass Ghidra selbst überhaupt nicht benötigt wird und das Plugin in sich geschlossen ist. Dieses Projekt wurde zunächst für Radare2 auf R2CON 2019 als Teil des Cutter Talk 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 Konfigurationsvars (für den Befehl e ) 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 verweisen, das die Dateien *.sla , *.lspec , ... für die Architekturen, die vom Dekompiler unterstützt werden sollten, enthalten. Dies wird jedoch automatisch eingerichtet, wenn das RZ-PM-Paket verwendet oder wie unten gezeigt installiert wird.
Stellen Sie zunächst sicher, dass das in diesem Repository enthaltene Submodul abgerufen und aktuell ist:
git submodule init
git submodule update
Anschließend kann das Rizin -Plugin wie folgt erstellt und installiert werden:
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=~/.local ..
make
make install
Setzen Sie hier die CMAKE_INSTALL_PREFIX auf einen Ort, an dem Riziin das Plugin laden kann. Der Installationsschritt ist erforderlich, damit das Plugin funktioniert, da es die Installation der erforderlichen Schlittendateien umfasst. Wenn Sie Rizin von Git verwenden, setzen Sie auch CMAKE_PREFIX_PATH auf das Rizin -Installationsverzeichnis.
Um auch das Cutter -Plugin zu erstellen, müssen Sie Cutter von Quelle unter -DBUILD_CUTTER_PLUGIN=ON Präfix installiert haben -DCMAKE_PREFIX_PATH=<path>
/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 ist das Cutter -Plugin in einem automatisch ausgewä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, sodass es notwendig ist, explizit darüber zu sein, welche Versionen von Rz-Ghidra kompatibel sind, mit welchen Versionen von Riziin:
Bei Verwendung von Razin und Rz-Ghidra von Git:
dev folgt entlang Rizin Branch dev .stable folgt entlang stable Rizin Branch. In Bezug auf Veröffentlichungen wird RZ-GHIDRA im Allgemeinen gleichzeitig mit Riziin veröffentlicht und verwendet häufig dieselben Versionsnummern (aber nicht garantiert, hängen nicht von diesen Zahlen ab!). Zusammen mit jedem Razin wird ein Tag wie rz-0.1.2 auf RZ-GHIDRA erstellt, das genau auf eine RZ-GHIDRA-Veröffentlichung hinweist und angibt, dass diese Version mit der angegebenen Rizin-Version kompatibel ist. Diese Tags können von Distributionswartenden verwendet werden, um nachzuschlagen, wie abhängig eingerichtet werden kann.
Bitte beachten Sie, dass dieses Plugin unter dem LGPLV3 erhältlich ist, was strenger ist als die Lizenz von Ghidra!
Dieses Programm ist kostenlose Software: Sie können es neu verteilt und/oder unter den Bedingungen der GNU Lesser allgemeinen öffentlichen Lizenz wie von der Free Software Foundation, entweder Version 3 der Lizenz veröffentlicht, oder (nach Ihrer Option) jede spätere Version ändern.
Dieses Programm wird in der Hoffnung verteilt, dass es nützlich sein wird, jedoch ohne Garantie; Ohne die implizite Garantie für Handelsfähigkeit oder Eignung für einen bestimmten Zweck. Weitere Informationen finden Sie in der GNU Lesser General Public Lizenz.
Sie sollten zusammen mit diesem Programm eine Kopie der GNU Lesser -allgemeinen öffentlichen Lizenz erhalten haben. Wenn nicht, siehe https://www.gnu.org/licenses/.