mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-04 18:29:37 +02:00
Change from review
This commit is contained in:
parent
3ac3694226
commit
b2853d40f3
2 changed files with 8 additions and 55 deletions
|
@ -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}";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue