From 98d88cc2122f0ea753f69027ccc43758a8060439 Mon Sep 17 00:00:00 2001 From: KeybadeBlox Date: Fri, 20 Mar 2026 13:20:51 -0400 Subject: [PATCH] Support earlier Java releases Existing code was written for Java 25, which is more recent than many people have on hand. The modified scripts appear to run well on Java 21. --- ghidra/ghidra_scripts/ClassFixup.java | 2 +- ghidra/ghidra_scripts/EnhancedImport.java | 7 ++--- ghidra/ghidra_scripts/MSVC7Mangle.java | 38 +++++++++++------------ 3 files changed, 22 insertions(+), 25 deletions(-) diff --git a/ghidra/ghidra_scripts/ClassFixup.java b/ghidra/ghidra_scripts/ClassFixup.java index fa11bc5..d47d5a7 100644 --- a/ghidra/ghidra_scripts/ClassFixup.java +++ b/ghidra/ghidra_scripts/ClassFixup.java @@ -1,4 +1,4 @@ -// Creates classes out namespaces with matching structs, and if they have a +// Creates classes out of namespaces with matching structs, and if they have a // vtable, sets the calling convention of the contained function typdefs to // __thiscall. // diff --git a/ghidra/ghidra_scripts/EnhancedImport.java b/ghidra/ghidra_scripts/EnhancedImport.java index 935ee87..6d1f117 100644 --- a/ghidra/ghidra_scripts/EnhancedImport.java +++ b/ghidra/ghidra_scripts/EnhancedImport.java @@ -20,20 +20,17 @@ import ghidra.program.model.symbol.SourceType; import ghidra.program.model.symbol.Symbol; import ghidra.util.StringUtilities; -import java.io.FileReader; +import java.nio.file.Files; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Optional; - public class EnhancedImport extends GhidraScript { @Override public void run() throws Exception { - final FileReader in = new FileReader(askFile("Select input file", "OK")); - final List lines = in.readAllLines(); - in.close(); + final List lines = Files.readAllLines(askFile("Select input file", "OK").toPath()); for (int i = 0; i < lines.size(); i++) { final String[] parts = lines.get(i).split("\t");; diff --git a/ghidra/ghidra_scripts/MSVC7Mangle.java b/ghidra/ghidra_scripts/MSVC7Mangle.java index f913567..ca55321 100644 --- a/ghidra/ghidra_scripts/MSVC7Mangle.java +++ b/ghidra/ghidra_scripts/MSVC7Mangle.java @@ -422,34 +422,34 @@ public class MSVC7Mangle extends GhidraScript { ); return switch(t) { - case SignedCharDataType _ -> "C"; - case UnsignedCharDataType _ -> "E"; - case CharDataType _ -> "D"; // Must come after its child types - case ShortDataType _ -> "F"; - case UnsignedShortDataType _ -> "G"; - case IntegerDataType _ -> "H"; - case UnsignedIntegerDataType _ -> "I"; - case LongDataType _ -> "J"; - case UnsignedLongDataType _ -> "K"; - case FloatDataType _ -> "M"; - case DoubleDataType _ -> "N"; - case LongDoubleDataType _ -> "O"; + case SignedCharDataType x -> "C"; + case UnsignedCharDataType x -> "E"; + case CharDataType x -> "D"; // Must come after its child types + case ShortDataType x -> "F"; + case UnsignedShortDataType x -> "G"; + case IntegerDataType x -> "H"; + case UnsignedIntegerDataType x -> "I"; + case LongDataType x -> "J"; + case UnsignedLongDataType x -> "K"; + case FloatDataType x -> "M"; + case DoubleDataType x -> "N"; + case LongDoubleDataType x -> "O"; case Pointer p -> "P" + (p.getDataType() instanceof FunctionSignature ? "6" : "A") + mangleType(p.getDataType(), dict, loc); case Union u -> "T" + mangleIdentifier(u.getName(), false, null, dict); case Structure s -> "U" + mangleIdentifier(s.getName(), false, null, dict); case Enum e -> "W4" + mangleIdentifier(e.getName(), false, null, dict); - case VoidDataType _ -> "X"; - case LongLongDataType _ -> "_J"; - case UnsignedLongLongDataType _ -> "_K"; - case BooleanDataType _ -> "_N"; - case WideCharDataType _ -> "_W"; + case VoidDataType x -> "X"; + case LongLongDataType x -> "_J"; + case UnsignedLongLongDataType x -> "_K"; + case BooleanDataType x -> "_N"; + case WideCharDataType x -> "_W"; case Array a -> "PA" + mangleArrDims(a) + mangleType(arrType(a), dict, loc); case FunctionSignature f -> mangleFnType(f, dict, "function typedef \"" + f.getName() + "\""); case TypeDef d -> mangleType(d.getBaseDataType(), dict, "typedef \"" + d.getName() + "\""); - case DefaultDataType _ -> throw new Exception ("Encountered data marked \"undefined\" at " + loc + ". Ensure that all data types in the code/data to mangle have been defined."); - case Undefined _ -> throw new Exception ("Encountered data marked \"undefined\" at " + loc + ". Ensure that all data types in the code/data to mangle have been defined."); + case DefaultDataType x -> throw new Exception ("Encountered data marked \"undefined\" at " + loc + ". Ensure that all data types in the code/data to mangle have been defined."); + case Undefined x -> throw new Exception ("Encountered data marked \"undefined\" at " + loc + ". Ensure that all data types in the code/data to mangle have been defined."); default -> throw new Exception ("Unknown type \"" + t.getClass().getName() + "\" at " + loc); }; }