Change from review

This commit is contained in:
caheckman 2022-02-01 14:29:24 -05:00
parent 3ac3694226
commit b2853d40f3
2 changed files with 8 additions and 55 deletions

View file

@ -15,12 +15,8 @@
*/ */
import ghidra.app.script.GhidraScript; import ghidra.app.script.GhidraScript;
import ghidra.program.database.ProgramDB; import ghidra.program.database.ProgramDB;
import ghidra.program.model.lang.*; import ghidra.program.model.lang.Language;
import ghidra.program.model.listing.IncompatibleLanguageException;
import ghidra.program.util.LanguageTranslator;
import ghidra.program.util.LanguageTranslatorAdapter;
import ghidra.util.Msg; import ghidra.util.Msg;
import ghidra.util.exception.AssertException;
public class ForceRedisassembly extends GhidraScript { public class ForceRedisassembly extends GhidraScript {
@ -33,50 +29,8 @@ public class ForceRedisassembly extends GhidraScript {
} }
ProgramDB program = (ProgramDB) currentProgram; ProgramDB program = (ProgramDB) currentProgram;
Language lang = program.getLanguage(); Language lang = null;
LanguageTranslator translator = program.setLanguage(lang, null, true, monitor);
new MyLanguageTranslator(lang.getLanguageID(), lang.getVersion());
if (!translator.isValid()) {
return;
}
program.setLanguage(translator, program.getCompilerSpec().getCompilerSpecID(), true,
monitor);
}
private static class MyLanguageTranslator extends LanguageTranslatorAdapter {
protected MyLanguageTranslator(LanguageID languageId, int version) {
super(languageId, version, languageId, version);
}
@Override
public boolean isValid() {
if (super.isValid()) {
try {
validateDefaultSpaceMap();
}
catch (IncompatibleLanguageException e) {
throw new AssertException();
}
Register newContextReg = getNewLanguage().getContextBaseRegister();
if (newContextReg != Register.NO_CONTEXT) {
Register oldContextReg = getOldLanguage().getContextBaseRegister();
if (oldContextReg != Register.NO_CONTEXT ||
!isSameRegisterConstruction(oldContextReg, newContextReg)) {
throw new AssertException();
}
}
return true;
}
return false;
}
@Override
public String toString() {
return "[" + getOldLanguageID() + " (Version " + getOldVersion() + ")] -> [" +
getNewLanguageID() + " (Version " + getNewVersion() +
")] {Forced Re-Disassembly Translator}";
}
} }
} }

View file

@ -121,21 +121,20 @@ public class ProgramCompilerSpec extends BasicCompilerSpec {
ArrayList<PrototypeModel> finalList = new ArrayList<>(); ArrayList<PrototypeModel> finalList = new ArrayList<>();
TreeSet<String> currentNames = new TreeSet<>(); TreeSet<String> currentNames = new TreeSet<>();
for (PrototypeModel model : allmodels) { for (PrototypeModel model : allmodels) {
currentNames.add(model.getName());
if (usermodels.containsKey(model.getName())) { if (usermodels.containsKey(model.getName())) {
continue; continue;
} }
currentNames.add(model.getName());
finalList.add(model); // Add original non-userdef models finalList.add(model); // Add original non-userdef models
} }
usermodels.clear();
for (PrototypeModel model : extensions) { for (PrototypeModel model : extensions) {
if (currentNames.contains(model.getName())) { if (currentNames.contains(model.getName())) {
if (!usermodels.containsKey(model.getName())) {
Msg.warn(this, Msg.warn(this,
"Cannot override prototype model " + model.getName() + " with extension"); "Cannot override prototype model " + model.getName() + " with extension");
continue; continue;
} }
}
markPrototypeAsExtension(model); markPrototypeAsExtension(model);
finalList.add(model); finalList.add(model);
usermodels.put(model.getName(), model); usermodels.put(model.getName(), model);