
Выводит высокоуровневый Pcode (PcodeAST) в Ghidra
Ghidra использует независимое от процессора представление, называемое Pcode. Его легко получать и работать с ним в скриптах (Instruction.getPcode()). Менее известно, что декомпилятор предоставляет представление Pcode более высокого уровня.
Проблема использования Pcode для независимых от процессора алгоритмов или обучения моделей ИИ заключается в том, что низкоуровневый Pcode очень похож на ассемблерный язык, из которого он произошёл. Низкоуровневый Pcode — это просто реализация каждой инструкции ассемблера на языке Pcode.
Декомпилятор Ghidra — это, по сути, упроститель Pcode и движок перевода Pcode в C. Он упрощает более многословный низкоуровневый Pcode и преобразует его в форму single-static-assignment (SSA) (PcodeAST). Затем он выводит этот Pcode AST в виде кода на C. Декомпилятор имеет API для вывода PCodeAST. В Ghidra есть пара встроенных скриптов, использующих этот API, но они написаны для генерации графов (GraphAST.java, GraphASTandFlow.java). Этот скрипт вместо этого просто выводит PCode AST в текстовом виде.