
Gera Pcode de alto nível (PcodeAST) no Ghidra
O Ghidra usa uma representação independente de processador chamada Pcode. É fácil obtê-la e trabalhar com ela em scripts (Instruction.getPcode()). Menos conhecido é que o decompilador expõe uma representação Pcode de nível mais alto.
O problema de usar Pcode para algoritmos independentes de processador ou treinamento de modelos de IA é que o Pcode de baixo nível se parece muito com a linguagem assembly da qual se originou. O Pcode de baixo nível é apenas uma implementação de cada instrução de assembly na linguagem Pcode.
O decompilador do Ghidra é essencialmente um simplificador de Pcode e um mecanismo de tradução de Pcode para C. Ele simplifica o Pcode de baixo nível mais verboso e o converte para a forma de atribuição estática única (SSA) (PcodeAST). Em seguida, ele gera esse AST de Pcode como código C. O decompilador possui uma API para gerar o PCodeAST. O Ghidra tem alguns scripts integrados que usam a API, mas foram escritos para gerar grafos (GraphAST.java, GraphASTandFlow.java). Este script, em vez disso, apenas imprime o AST de Pcode em forma de texto.