
Genera Pcode de alto nivel (PcodeAST) en Ghidra
Ghidra utiliza una representación independiente del procesador llamada Pcode. Es fácil de obtener y trabajar con ella en scripts (Instruction.getPcode()). Es menos conocido que el descompilador expone una representación de Pcode de mayor nivel.
El problema de usar Pcode para algoritmos independientes del procesador o para el entrenamiento de modelos de IA es que el Pcode de bajo nivel se parece mucho al lenguaje ensamblador del que proviene. El Pcode de bajo nivel es solo una implementación de cada instrucción ensambladora en el lenguaje Pcode.
El descompilador de Ghidra es esencialmente un simplificador de Pcode y un motor de traducción de Pcode a C. Simplifica el Pcode de bajo nivel más verboso y lo convierte a una forma de asignación estática única (SSA) (PcodeAST). Luego genera este AST de Pcode como código C. El descompilador tiene una API para generar el PCodeAST. Ghidra tiene un par de scripts integrados que usan la API, pero están escritos para generar gráficos (GraphAST.java, GraphASTandFlow.java). En cambio, este script simplemente imprime el AST de Pcode en forma de texto.