Use enhanced for loops in Ghidra mangler script

This commit is contained in:
KeybadeBlox 2026-02-16 00:21:22 -05:00
parent 1e8ae0f72f
commit e0c9fc4c83

View file

@ -59,7 +59,6 @@ import ghidra.program.model.symbol.Namespace;
import ghidra.program.model.symbol.Reference; import ghidra.program.model.symbol.Reference;
import ghidra.program.model.symbol.SourceType; import ghidra.program.model.symbol.SourceType;
import ghidra.program.model.symbol.Symbol; import ghidra.program.model.symbol.Symbol;
import ghidra.program.model.symbol.SymbolIterator;
import java.util.Arrays; import java.util.Arrays;
import java.util.ArrayList; import java.util.ArrayList;
@ -86,12 +85,8 @@ public class MSVC7Mangle extends GhidraScript{
setCurrentSelection(addr); setCurrentSelection(addr);
} }
final SymbolIterator iter = currentProgram.getSymbolTable() for (final Symbol s : currentProgram.getSymbolTable()
.getPrimarySymbolIterator(currentSelection, true); .getPrimarySymbolIterator(currentSelection, true)) {
while (iter.hasNext() && !monitor.isCancelled()) {
final Symbol s = iter.next();
mangle(s); mangle(s);
// Also mangle everything referenced inside functions // Also mangle everything referenced inside functions
@ -303,9 +298,9 @@ public class MSVC7Mangle extends GhidraScript{
scalar deleting destructor. scalar deleting destructor.
*/ */
final Reference[] refs = getReferencesTo(f.getEntryPoint()); final Reference[] refs = getReferencesTo(f.getEntryPoint());
for (int i = 0; i < refs.length; i++) { for (final Reference ref : refs) {
final Data data = getDataContaining (refs[i].getFromAddress()); final Data data = getDataContaining (ref.getFromAddress());
final Function func = getFunctionContaining(refs[i].getFromAddress()); final Function func = getFunctionContaining(ref.getFromAddress());
if (data != null) { if (data != null) {
final Symbol s = getSymbolAt(data.getRoot() final Symbol s = getSymbolAt(data.getRoot()
@ -481,12 +476,12 @@ public class MSVC7Mangle extends GhidraScript{
// freaks out at is actually useful (and Optional still // freaks out at is actually useful (and Optional still
// helped us out here) // helped us out here)
String mangledArgs = ""; String mangledArgs = "";
for (int i = 0; i < args.length; i++) { for (final DataType arg : args) {
final String mangledArg = mangleType(args[i], dict, loc); final String mangledArg = mangleType(arg, dict, loc);
mangledArgs += mangledArg.length() == 1 ? mangledArgs += mangledArg.length() == 1 ?
mangledArg : mangledArg :
backref(args[i], argDict).orElse(mangledArg); backref(arg, argDict).orElse(mangledArg);
} }
return mangledArgs + (f.hasVarArgs() ? "Z" : "@"); return mangledArgs + (f.hasVarArgs() ? "Z" : "@");
} }
@ -592,8 +587,8 @@ public class MSVC7Mangle extends GhidraScript{
ins = ins.getNext() ins = ins.getNext()
) { ) {
final Reference[] refs = ins.getReferencesFrom(); final Reference[] refs = ins.getReferencesFrom();
for (int i = 0; i < refs.length; i++) { for (final Reference ref : refs) {
final Symbol symbol = getSymbolAt(refs[i].getToAddress()); final Symbol symbol = getSymbolAt(ref.getToAddress());
// Guard against spurious references to nonexisting things // Guard against spurious references to nonexisting things
if ( if (
@ -605,10 +600,10 @@ public class MSVC7Mangle extends GhidraScript{
d.getBaseDataType() instanceof Undefined || d.getBaseDataType() instanceof Undefined ||
d.getBaseDataType() instanceof DefaultDataType d.getBaseDataType() instanceof DefaultDataType
) && ) &&
refs[i].getSource() != SourceType.USER_DEFINED ref.getSource() != SourceType.USER_DEFINED
) )
) { ) {
removeReference(refs[i]); removeReference(ref);
continue; continue;
} }