
Ghidraで高レベルのPcode(PcodeAST)を出力する
Ghidra は、Pcode と呼ばれるプロセッサに依存しない表現を使用します。これはスクリプト内で簡単に取得して操作できます(Instruction.getPcode())。あまり知られていませんが、デコンパイラはより高レベルの Pcode 表現を公開しています。
プロセッサに依存しないアルゴリズムや AI モデルのトレーニングに Pcode を使用する場合の問題は、低レベル Pcode がその元となったアセンブリ言語によく似ていることです。低レベル Pcode は、Pcode 言語で記述された各アセンブリ命令の実装にすぎません。
Ghidra デコンパイラは、本質的には Pcode の単純化と Pcode から C への変換エンジンです。より冗長な低レベル Pcode を単純化し、単一代入(SSA)形式(PcodeAST)に変換します。そして、この Pcode AST を C コードとして出力します。デコンパイラには PCodeAST を出力する API があります。Ghidra にはこの API を使用する組み込みスクリプトがいくつかありますが、それらはグラフを生成するために書かれています(GraphAST.java、GraphASTandFlow.java)。このスクリプトは代わりに PCode AST をテキスト形式で出力するだけです。