From 4dc6fb2176b565d9e1926233b898a5f0c02fbed1 Mon Sep 17 00:00:00 2001 From: Guus Waals <_@guusw.nl> Date: Mon, 2 Jun 2025 12:22:23 +0800 Subject: [PATCH] Annotations & fix DumpCurrentFunctionRecursive script --- GhidraScripts/DumpCurrentFunctionN.java | 2 +- GhidraScripts/DumpCurrentFunctionRecursive.java | 16 ++++++++++++++-- GhidraScripts/DumpGlobals.java | 1 + GhidraScripts/DumpTypes.java | 1 + GhidraScripts/FindRelocations.java | 1 + GhidraScripts/RedumpStubFunctions.java | 1 + GhidraScripts/SanitizeGlobalSymbols.java | 1 + GhidraScripts/re3lib/RemanConfig.java | 2 +- 8 files changed, 21 insertions(+), 4 deletions(-) diff --git a/GhidraScripts/DumpCurrentFunctionN.java b/GhidraScripts/DumpCurrentFunctionN.java index 57be89fe..630a5f2d 100644 --- a/GhidraScripts/DumpCurrentFunctionN.java +++ b/GhidraScripts/DumpCurrentFunctionN.java @@ -1,6 +1,7 @@ // Decompile selected function recursively (until a given number of new functions is reached) // @category _Reman3 // @menupath Reman3.Dump N Functions +// @importpackage org.sqlite import java.util.ArrayList; import java.util.HashSet; @@ -50,7 +51,6 @@ public class DumpCurrentFunctionN extends GhidraScript { try (FunctionDatabase functionDatabase = new FunctionDatabase(this)) { GlobalDumper globalDumper = new GlobalDumper(this, functionDatabase); - globalDumper.loadGlobalManifest(); FunctionDumper functionDumper = new FunctionDumper(this, functionDatabase, globalDumper); diff --git a/GhidraScripts/DumpCurrentFunctionRecursive.java b/GhidraScripts/DumpCurrentFunctionRecursive.java index 960701b9..568517e5 100644 --- a/GhidraScripts/DumpCurrentFunctionRecursive.java +++ b/GhidraScripts/DumpCurrentFunctionRecursive.java @@ -1,6 +1,7 @@ // Decompile selected function recursively // @category _Reman3 // @menupath Reman3.Dump Current Function (recursive) +// @importpackage org.sqlite import java.util.ArrayList; import java.util.List; @@ -32,13 +33,24 @@ public class DumpCurrentFunctionRecursive extends GhidraScript { List functionsToDump = new ArrayList<>(); List functionsToDumpNew = new ArrayList<>(); for (Function func : tracer.out) { - if (FunctionDumper.isDumpedFix(func)) + List entries = functionDatabase.findEntriesByAddress(func.getEntryPoint()); + boolean shouldDump = true; + boolean isNew = true; + for (FunctionDatabase.FunctionEntry entry : entries) { + if (entry.type == FunctionDatabase.Type.Fix) { + shouldDump = false; + } + if (entry.type == FunctionDatabase.Type.Fix || entry.type == FunctionDatabase.Type.Auto) { + isNew = false; + } + } + if (!shouldDump) continue; println("Dump: " + func.getName()); functionsToDump.add(func); - if (!FunctionDumper.isDumpedAuto(func)) + if (isNew) functionsToDumpNew.add(func); } diff --git a/GhidraScripts/DumpGlobals.java b/GhidraScripts/DumpGlobals.java index d769ded1..4e23551a 100644 --- a/GhidraScripts/DumpGlobals.java +++ b/GhidraScripts/DumpGlobals.java @@ -1,6 +1,7 @@ // Script to refresh all custom globals & types from Ghidra // @category _Reman3 // @menupath Reman3.Redump Globals and Types +// @importpackage org.sqlite import ghidra.app.script.GhidraScript; import re3lib.GlobalDumper; diff --git a/GhidraScripts/DumpTypes.java b/GhidraScripts/DumpTypes.java index 079976cd..75cb9515 100644 --- a/GhidraScripts/DumpTypes.java +++ b/GhidraScripts/DumpTypes.java @@ -1,6 +1,7 @@ // Script to dump all custom types from Ghidra // @category _Reman3 // @menupath Reman3.Dump Types +// @importpackage org.sqlite import ghidra.app.script.GhidraScript; import ghidra.program.model.data.DataType; diff --git a/GhidraScripts/FindRelocations.java b/GhidraScripts/FindRelocations.java index a5a71c21..a6bb5e0e 100644 --- a/GhidraScripts/FindRelocations.java +++ b/GhidraScripts/FindRelocations.java @@ -1,6 +1,7 @@ // Script to find hardcoded addresses in the binary that need to be relocated // @category _Reman3 // @menupath Reman3.Find and dump Relocations +// @importpackage org.sqlite import ghidra.app.script.GhidraScript; import ghidra.program.model.listing.*; diff --git a/GhidraScripts/RedumpStubFunctions.java b/GhidraScripts/RedumpStubFunctions.java index a2c01f08..4b93a5fb 100644 --- a/GhidraScripts/RedumpStubFunctions.java +++ b/GhidraScripts/RedumpStubFunctions.java @@ -1,6 +1,7 @@ // Script to regenerate all dumped stub functions // @category _Reman3 // @menupath Reman3.Redump Stub Functions +// @importpackage org.sqlite import java.util.List; diff --git a/GhidraScripts/SanitizeGlobalSymbols.java b/GhidraScripts/SanitizeGlobalSymbols.java index 5a7238b7..785a0232 100644 --- a/GhidraScripts/SanitizeGlobalSymbols.java +++ b/GhidraScripts/SanitizeGlobalSymbols.java @@ -1,6 +1,7 @@ // Script to sanitize global symbols in Ghidra // @category _Reman3 // @menupath Reman3.Sanitize Global Symbols +// @importpackage org.sqlite import ghidra.app.script.GhidraScript; import re3lib.GlobalDumper; diff --git a/GhidraScripts/re3lib/RemanConfig.java b/GhidraScripts/re3lib/RemanConfig.java index 97755c24..d44b9e3b 100644 --- a/GhidraScripts/re3lib/RemanConfig.java +++ b/GhidraScripts/re3lib/RemanConfig.java @@ -66,7 +66,7 @@ public class RemanConfig { this.script = script; - rootDir = new File(script.getSourceFile().getAbsolutePath()).getParentFile().getParentFile().getParentFile().toString(); + rootDir = new File(script.getSourceFile().getAbsolutePath()).getParentFile().getParentFile().toString(); outputDir = new File(rootDir, RECOMPILE_PREFIX).toString(); script.println("Output path: " + outputDir);