
High-Level-Pcode (PcodeAST) in Ghidra ausgeben
Ghidra verwendet eine prozessorunabhängige Darstellung namens Pcode. Sie lässt sich in Skripten leicht abrufen und verarbeiten (Instruction.getPcode()). Weniger bekannt ist, dass der Dekompilierer eine höherstufige Pcode-Darstellung bereitstellt.
Das Problem bei der Verwendung von Pcode für prozessorunabhängige Algorithmen oder das Training von KI-Modellen besteht darin, dass Low-level-Pcode der Assemblersprache, aus der er stammt, sehr ähnlich sieht. Der Low-level-Pcode ist lediglich eine Implementierung jeder Assembleranweisung in der Pcode-Sprache.
Der Ghidra-Dekompilierer ist im Wesentlichen ein Pcode-Vereinfacher und eine Pcode-zu-C-Übersetzungs-Engine. Er vereinfacht den ausführlicheren Low-level-Pcode und überführt ihn in eine Single-Static-Assignment-Form (SSA) (PcodeAST). Anschließend gibt er diesen Pcode-AST als C-Code aus. Der Dekompilierer verfügt über eine API zur Ausgabe des PCodeAST. Ghidra enthält einige integrierte Skripte, die diese API verwenden, aber sie sind zur Erzeugung von Graphen geschrieben (GraphAST.java, GraphASTandFlow.java). Dieses Skript gibt stattdessen lediglich den PCode-AST in Textform aus.