GP-1658 - Updated success/failure status of the DemanglerCmd

This commit is contained in:
dragonmacher 2022-01-07 12:01:51 -05:00
parent 56a8346e78
commit 22b0d2dfa5
2 changed files with 8 additions and 6 deletions

View file

@ -18,6 +18,7 @@
//Works for both Microsoft and Gnu mangled symbols //Works for both Microsoft and Gnu mangled symbols
//@category Symbol //@category Symbol
import docking.*;
import ghidra.app.cmd.label.DemanglerCmd; import ghidra.app.cmd.label.DemanglerCmd;
import ghidra.app.context.ProgramSymbolActionContext; import ghidra.app.context.ProgramSymbolActionContext;
import ghidra.app.script.GhidraScript; import ghidra.app.script.GhidraScript;
@ -26,7 +27,6 @@ import ghidra.program.model.listing.Data;
import ghidra.program.model.listing.Function; import ghidra.program.model.listing.Function;
import ghidra.program.model.symbol.Symbol; import ghidra.program.model.symbol.Symbol;
import ghidra.program.util.*; import ghidra.program.util.*;
import docking.*;
public class DemangleSymbolScript extends GhidraScript { public class DemangleSymbolScript extends GhidraScript {
@ -101,10 +101,10 @@ public class DemangleSymbolScript extends GhidraScript {
DemanglerCmd cmd = new DemanglerCmd(address, name); DemanglerCmd cmd = new DemanglerCmd(address, name);
boolean success = cmd.applyTo(currentProgram, monitor); boolean success = cmd.applyTo(currentProgram, monitor);
if (success) { if (success) {
println("Successfully demangled!\n" + name + '\n' + cmd.getResult()); println("Successfully demangled\n" + name + '\n' + cmd.getResult());
} }
else { else {
println(cmd.getStatusMsg()); println("Failed to demangle\n" + name + '\n' + cmd.getStatusMsg());
} }
} }
} }

View file

@ -50,8 +50,9 @@ public class DemanglerCmd extends BackgroundCommand {
@Override @Override
public boolean applyTo(DomainObject obj, TaskMonitor monitor) { public boolean applyTo(DomainObject obj, TaskMonitor monitor) {
Program prog = (Program) obj;
// search until we find a demangler that can handle the given mangled input
Program prog = (Program) obj;
for (Demangler demangler : getDemanglers()) { for (Demangler demangler : getDemanglers()) {
if (!demangler.canDemangle(prog)) { if (!demangler.canDemangle(prog)) {
continue; continue;
@ -62,11 +63,11 @@ public class DemanglerCmd extends BackgroundCommand {
} }
if (result != null) { if (result != null) {
break; // successful; don't try a different demangler return true; // successful; don't try a different demangler
} }
} }
return true; return false;
} }
private boolean doDemangle(Demangler demangler, Program program, TaskMonitor monitor) { private boolean doDemangle(Demangler demangler, Program program, TaskMonitor monitor) {
@ -77,6 +78,7 @@ public class DemanglerCmd extends BackgroundCommand {
catch (DemangledException e) { catch (DemangledException e) {
if (e.isInvalidMangledName()) { if (e.isInvalidMangledName()) {
//ignore invalid names, consider as not an error //ignore invalid names, consider as not an error
setStatusMsg("Invalid mangled name");
return true; // no real error return true; // no real error
} }