
Emette Pcode di alto livello (PcodeAST) in Ghidra
Ghidra utilizza una rappresentazione indipendente dal processore chiamata Pcode. È facile recuperarla e utilizzarla negli script (Instruction.getPcode()). Meno noto è che il decompilatore espone una rappresentazione Pcode di livello superiore.
Il problema nell'usare Pcode per algoritmi indipendenti dal processore o per l'addestramento di modelli di IA è che il Pcode di basso livello assomiglia molto al linguaggio assembly da cui deriva. Il Pcode di basso livello è semplicemente un'implementazione di ogni istruzione assembly nel linguaggio Pcode.
Il decompilatore di Ghidra è essenzialmente un semplificatore di Pcode e un motore di traduzione da Pcode a C. Semplifica il Pcode di basso livello, più verboso, e lo converte in una forma a singola assegnazione statica (SSA) (PcodeAST). Emette quindi questo AST Pcode come codice C. Il decompilatore dispone di un'API per emettere il PCodeAST. Ghidra ha un paio di script integrati che utilizzano l'API, ma sono scritti per generare grafi (GraphAST.java, GraphASTandFlow.java). Questo script, invece, si limita a stampare l'AST PCode in forma testuale.