From f7495daea1293b7853b7d3bcbf81f2868cdc3ad1 Mon Sep 17 00:00:00 2001 From: emteere <47253321+emteere@users.noreply.github.com> Date: Mon, 25 Jul 2022 05:30:30 +0000 Subject: [PATCH] GP-2122_emteere protect use of tmodeReg on processors without one --- ...rmAggressiveInstructionFinderAnalyzer.java | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/prototype/analysis/ArmAggressiveInstructionFinderAnalyzer.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/prototype/analysis/ArmAggressiveInstructionFinderAnalyzer.java index fb3991375f..b7f0bc6d3c 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/prototype/analysis/ArmAggressiveInstructionFinderAnalyzer.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/prototype/analysis/ArmAggressiveInstructionFinderAnalyzer.java @@ -1,6 +1,5 @@ /* ### * IP: GHIDRA - * REVIEWED: YES * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -215,15 +214,17 @@ public class ArmAggressiveInstructionFinderAnalyzer extends AbstractAnalyzer { new PseudoDisassemblerContext(curProgram.getProgramContext()); // get the current value from the program context - curValue = curProgram.getProgramContext().getValue(tmodeReg, entry, false); - // if it doesn't have one set, try to get it the last context from the instruction before - if (curValue == null) { - Instruction instr = listing.getInstructionBefore(entry); - if (instr != null) { - curValue = - curProgram.getProgramContext().getValue(tmodeReg, instr.getMinAddress(), false); - if (curValue != null) { - pseudoContext.setValue(tmodeReg, entry, curValue); + if (tmodeReg != null) { + curValue = curProgram.getProgramContext().getValue(tmodeReg, entry, false); + // if it doesn't have one set, try to get it the last context from the instruction before + if (curValue == null) { + Instruction instr = listing.getInstructionBefore(entry); + if (instr != null) { + curValue = + curProgram.getProgramContext().getValue(tmodeReg, instr.getMinAddress(), false); + if (curValue != null) { + pseudoContext.setValue(tmodeReg, entry, curValue); + } } } } @@ -257,7 +258,9 @@ public class ArmAggressiveInstructionFinderAnalyzer extends AbstractAnalyzer { addsInfo = true; } pseudoContext = new PseudoDisassemblerContext(curProgram.getProgramContext()); - pseudoContext.setValue(tmodeReg, entry, curValue); + if (tmodeReg != null) { + pseudoContext.setValue(tmodeReg, entry, curValue); + } AddressSet body = pseudo.followSubFlows(entry, pseudoContext, 1000, new PseudoFlowProcessor() { Object lastResults[] = null;