// Export functions as a risc-v-gsp-rm-debugger-compatible symbol TSV. // // Usage (Ghidra headless): // analyzeHeadless -process -noanalysis \ // -scriptPath debug/risc-v-gsp-rm-vm/ghidra \ // -postScript ExportForGreenEye.java /abs/path/ghidra-symbols.tsv // // Columns: addr (program address) name size. // risc-v-gsp-rm-debugger's `symbols export --index` accepts this form directly. // //@category OpenIOV //@menupath Tools.OpenIOV.Export for risc-v-gsp-rm-debugger import java.io.File; import java.io.PrintWriter; import ghidra.app.script.GhidraScript; import ghidra.program.model.listing.Function; import ghidra.program.model.listing.FunctionIterator; public class ExportForGreenEye extends GhidraScript { @Override public void run() throws Exception { String[] args = getScriptArgs(); if (args.length < 1) { println("usage: ExportForGreenEye.java "); return; } File out = new File(args[0]); int count = 0; try (PrintWriter pw = new PrintWriter(out, "UTF-8")) { pw.println("addr\tname\tsize"); FunctionIterator functions = currentProgram.getFunctionManager().getFunctions(true); while (functions.hasNext()) { Function function = functions.next(); long addr = function.getEntryPoint().getOffset(); long size = function.getBody().getNumAddresses(); pw.printf("0x%08x\t%s\t%d%n", addr, function.getName(), size); count++; } } println("risc-v-gsp-rm-debugger: exported " + count + " functions to " + out.getAbsolutePath()); } }