From 43f4d10461a7b5d29c3f9f7f62c59335a77cdf68 Mon Sep 17 00:00:00 2001 From: KeybadeBlox Date: Sat, 14 Feb 2026 23:02:55 -0500 Subject: [PATCH] Begin enhanced export Ghidra script --- ghidra/ghidra_scripts/EnhancedExport.java | 65 +++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 ghidra/ghidra_scripts/EnhancedExport.java diff --git a/ghidra/ghidra_scripts/EnhancedExport.java b/ghidra/ghidra_scripts/EnhancedExport.java new file mode 100644 index 0000000..de693af --- /dev/null +++ b/ghidra/ghidra_scripts/EnhancedExport.java @@ -0,0 +1,65 @@ +// TODO +// +// @category Export + +import ghidra.app.script.GhidraScript; +import ghidra.program.flatapi.FlatProgramAPI; +import ghidra.program.model.listing.Data; +import ghidra.program.model.listing.Function; +import ghidra.program.model.symbol.SourceType; +import ghidra.program.model.symbol.Symbol; +import ghidra.program.model.symbol.SymbolIterator; + +import java.io.FileWriter; +import java.util.Arrays; + + +public class EnhancedExport extends GhidraScript{ + @Override + public void run() throws Exception { + final FileWriter out = new FileWriter(askFile("Specify output file", "OK")); + + final SymbolIterator iter = currentProgram.getSymbolTable() + .getPrimarySymbolIterator(true); + while (iter.hasNext() && !monitor.isCancelled()) { + final Symbol s = iter.next(); + if (s.getSource() != SourceType.USER_DEFINED) continue; + + final Object obj = s.getObject(); + if (obj != null) switch (obj) { + case Data d: + out.write( + "0x" + s.getAddress().toString() + "\t" + + "d" + "\t" + + d.getDataType().getDisplayName() + "\t" + + s.getName(true) + "\n" + ); + break; + + case Function f: + out.write( + "0x" + s.getAddress().toString() + "\t" + + "f" + "\t" + + f.getSignature(true).getReturnType() + .getDisplayName() + "\t" + + f.getCallingConventionName() + "\t" + + f.getName(true) + + String.join( + "\t", + Arrays.stream(f.getSignature(true).getArguments()) + .map(arg -> "\t" + + arg.getDataType().getDisplayName() + "\t" + + arg.getName() + ).toArray(String[]::new) + ) + + (f.hasVarArgs() ? "\t..." : "") + "\n" + ); + break; + + default: {} + } + } + + out.close(); + } +}