
ghidra デコンパイラと sleigh ディスアセンブラの rizin への深い統合
これは、Rizin用のGhidraデコンパイラおよびSleighディスアセンブラの統合です。 Ghidraのデコンパイラ部分のみに基づいており、すべてC++で書かれているため、Ghidra自体は必要なく、プラグインは自己完結型でビルドできます。 このプロジェクトは、もともとradare2向けにr2con 2019で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
以下の設定変数(eコマンド用)を使用して、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
ここで、ghidra.sleighhomeは、デコンパイラがサポートするアーキテクチャの*.sla、*.lspecなどのファイルが含まれるディレクトリを指している必要があります。ただし、rz-pmパッケージを使用する場合や、以下に示すようにインストールする場合は、自動的に設定されます。
まず、このリポジトリに含まれるサブモジュールを取得して最新の状態にしてください:
git submodule init
git submodule update
次に、Rizinプラグインを以下のようにビルドしてインストールできます:
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=~/.local ..
make
make install
ここで、CMAKE_INSTALL_PREFIXは、Rizinがプラグインをロードできる場所に設定してください。
プラグインが動作するためにはインストール手順が必要です。これには必要なSleighファイルのインストールが含まれます。
gitからRizinを使用している場合は、CMAKE_PREFIX_PATHもRizinのインストールディレクトリに設定してください。
Cutterプラグインもビルドするには、Cutterをソースから何らかのプレフィックスにインストールしておく必要があります。これはオプションで-DCMAKE_PREFIX_PATH=<パス>で指定でき、さらに-DBUILD_CUTTER_PLUGIN=ONをcmakeに渡してプラグインを有効にします:
/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
デフォルトでは、Cutterプラグインは現在のユーザーのホームディレクトリ内の自動的に選択されたパスにインストールされます。このパスは-DCUTTER_INSTALL_PLUGDIRで上書きできます。
RizinのC APIは急速に進化しているため、どのバージョンのrz-ghidraがどのバージョンのRizinと互換性があるかを明示する必要があります:
gitからRizinとrz-ghidraを使用する場合:
devはRizinブランチdevに追従します。stableはRizinブランチstableに追従します。リリースに関しては、rz-ghidraは通常Rizinと同時にリリースされ、同じバージョン番号を使用することがよくあります(ただし保証はされません。これらの番号に依存しないでください!)。また、各Rizinリリースと同時に、rz-ghidra上にrz-0.1.2のようなタグが作成されます。これはrz-ghidraのリリースを正確に指し、そのリリースが指定されたRizinバージョンと互換性があることを示します。これらのタグは、ディストリビューションのメンテナが依存関係の設定方法を調べるために使用できます。
このプラグインはLGPLv3の下で利用可能であることに注意してください。これはGhidraのライセンスよりも厳しいものです!
このプログラムはフリーソフトウェアです。あなたはこれを、フリーソフトウェア財団によって発行されたGNU Lesser General Public License(バージョン3、または(あなたのオプションで)それ以降のバージョン)の条件の下で再配布または変更することができます。
このプログラムは有用であることを期待して配布されていますが、いかなる保証もありません。暗黙の商品性や特定目的への適合性の保証もありません。詳細については、GNU Lesser General Public Licenseを参照してください。
あなたはこのプログラムと一緒にGNU Lesser General Public Licenseのコピーを受け取ったはずです。受け取っていない場合は、https://www.gnu.org/licenses/を参照してください。