diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/PeLoader.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/PeLoader.java index 231a08593c..d94bfed7df 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/PeLoader.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/PeLoader.java @@ -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) {