GT-2880 add PeLoader.setProcessorContext() with thumb logic

This commit is contained in:
ghizard
2019-06-05 13:16:21 -04:00
parent 525f0057c8
commit 64c5f7bd24

View File

@@ -16,6 +16,7 @@
package ghidra.app.util.opinion;
import java.io.IOException;
import java.math.BigInteger;
import java.util.*;
import generic.continues.GenericFactory;
@@ -36,6 +37,8 @@ import ghidra.framework.options.Options;
import ghidra.program.database.mem.FileBytes;
import ghidra.program.model.address.*;
import ghidra.program.model.data.*;
import ghidra.program.model.lang.Register;
import ghidra.program.model.lang.RegisterValue;
import ghidra.program.model.listing.*;
import ghidra.program.model.mem.Memory;
import ghidra.program.model.mem.MemoryAccessException;
@@ -133,6 +136,8 @@ public class PeLoader extends AbstractPeDebugLoader {
}
}
setProcessorContext(fileHeader, program, monitor, log);
processExports(optionalHeader, program, monitor, log);
processImports(optionalHeader, program, monitor, log);
processRelocations(optionalHeader, program, monitor, log);
@@ -465,6 +470,20 @@ public class PeLoader extends AbstractPeDebugLoader {
}
}
private void setProcessorContext(FileHeader fileHeader, Program program, TaskMonitor monitor,
MessageLog log) {
String machineName = fileHeader.getMachineName();
if ("450".equals(machineName) || "452".equals(machineName)) {
Register tmodeReg = program.getProgramContext().getRegister("TMode");
if (tmodeReg == null) {
return;
}
RegisterValue thumbMode = new RegisterValue(tmodeReg, BigInteger.ONE);
program.getProgramContext().setDefaultDisassemblyContext(thumbMode);
}
}
private void processExports(OptionalHeader optionalHeader, Program program, TaskMonitor monitor,
MessageLog log) {