
Ghidra에서 고수준 Pcode(PcodeAST) 출력
Ghidra는 Pcode라고 하는 프로세서 독립적 표현을 사용합니다. 스크립트에서 이를 쉽게 가져와 사용할 수 있습니다(Instruction.getPcode()). 덜 알려진 사실은 디컴파일러가 더 높은 수준의 Pcode 표현을 노출한다는 것입니다.
프로세서 독립적 알고리즘이나 AI 모델 훈련에 Pcode를 사용할 때의 문제는 저수준 Pcode가 그 기원이 된 어셈블리 언어와 매우 유사해 보인다는 점입니다. 저수준 Pcode는 각 어셈블리 명령어를 Pcode 언어로 구현한 것에 불과합니다.
Ghidra 디컴파일러는 본질적으로 Pcode 단순화기이자 Pcode-to-C 변환 엔진입니다. 더 장황한 저수준 Pcode를 단순화하고 정적 단일 할당(SSA) 형식(PcodeAST)으로 변환합니다. 그런 다음 이 Pcode AST를 C 코드로 출력합니다. 디컴파일러에는 PCodeAST를 출력하는 API가 있습니다. Ghidra에는 이 API를 사용하는 내장 스크립트가 몇 개 있지만, 해당 스크립트들은 그래프를 생성하도록 작성되었습니다(GraphAST.java, GraphASTandFlow.java). 이 스크립트는 대신 PCode AST를 텍스트 형식으로 그냥 출력합니다.