//Exports decompiled C for all functions //@category Export import ghidra.app.script.GhidraScript; import ghidra.app.decompiler.*; import ghidra.program.model.listing.*; import java.io.*; public class ExportDecompiled extends GhidraScript { @Override public void run() throws Exception { String[] args = getScriptArgs(); String outPath = args.length > 0 ? args[0] : "/opt/work/ddr_decompiled.c"; DecompInterface decompiler = new DecompInterface(); decompiler.openProgram(currentProgram); PrintWriter pw = new PrintWriter(new File(outPath)); pw.println("// RK3588 DDR Init Blob - Decompiled by Ghidra"); pw.println("// Source: " + currentProgram.getName()); pw.println("// Processor: ARM Cortex LE 32-bit"); pw.println(); FunctionManager fm = currentProgram.getFunctionManager(); FunctionIterator fi = fm.getFunctions(true); int count = 0; while (fi.hasNext()) { Function func = fi.next(); DecompileResults results = decompiler.decompileFunction(func, 30, monitor); DecompiledFunction decomp = results.getDecompiledFunction(); if (decomp != null) { pw.println("// " + func.getName() + " @ " + func.getEntryPoint()); pw.println(decomp.getC()); pw.println(); count++; } } pw.close(); decompiler.dispose(); println("Exported " + count + " functions to " + outPath); } }