From 7125cc4171bdcc39b08c70904c87e489740500d9 Mon Sep 17 00:00:00 2001
From: caheckman <48068198+caheckman@users.noreply.github.com>
Date: Tue, 27 Aug 2019 14:27:19 -0400
Subject: [PATCH] fixed bug detecting segmented addressing, new 16-bit start
patterns
---
.../app/cmd/function/FunctionPurgeAnalysisCmd.java | 9 ++++-----
.../x86/data/patterns/x86-16_default_patterns.xml | 4 +++-
2 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/cmd/function/FunctionPurgeAnalysisCmd.java b/Ghidra/Features/Base/src/main/java/ghidra/app/cmd/function/FunctionPurgeAnalysisCmd.java
index a16f5847f3..58bb7a2ba7 100644
--- a/Ghidra/Features/Base/src/main/java/ghidra/app/cmd/function/FunctionPurgeAnalysisCmd.java
+++ b/Ghidra/Features/Base/src/main/java/ghidra/app/cmd/function/FunctionPurgeAnalysisCmd.java
@@ -17,8 +17,7 @@ package ghidra.app.cmd.function;
import ghidra.framework.cmd.BackgroundCommand;
import ghidra.framework.model.DomainObject;
-import ghidra.program.model.address.AddressSet;
-import ghidra.program.model.address.AddressSetView;
+import ghidra.program.model.address.*;
import ghidra.program.model.lang.Processor;
import ghidra.program.model.lang.PrototypeModel;
import ghidra.program.model.listing.*;
@@ -62,14 +61,14 @@ public class FunctionPurgeAnalysisCmd extends BackgroundCommand {
program = (Program) obj;
Processor processor = program.getLanguage().getProcessor();
- int processorSize = program.getLanguage().getDefaultSpace().getSize();
- if (processorSize > 32 ||
+ AddressSpace defaultSpace = program.getLanguage().getDefaultSpace();
+ if (defaultSpace.getSize() > 32 ||
!processor.equals(Processor.findOrPossiblyCreateProcessor("x86"))) {
Msg.error(this,
"Unsupported operation for language " + program.getLanguage().getLanguageID());
return false;
}
- if (processorSize < 32) { // For 16-bit x86, prepare to establish near/fear calling convention models
+ if (defaultSpace instanceof SegmentedAddressSpace) { // For 16-bit x86, prepare to establish near/fear calling convention models
setupNearFarModels();
}
diff --git a/Ghidra/Processors/x86/data/patterns/x86-16_default_patterns.xml b/Ghidra/Processors/x86/data/patterns/x86-16_default_patterns.xml
index b6830d43f1..17c74a8ec9 100644
--- a/Ghidra/Processors/x86/data/patterns/x86-16_default_patterns.xml
+++ b/Ghidra/Processors/x86/data/patterns/x86-16_default_patterns.xml
@@ -6,7 +6,8 @@
0x4dcb
0.011... 1100.011
1100.010 .0.....0 0x00
- 0xc390
+ 1100.010 .0.....0 0x00 0x90
+ 0xc390
0xcb90
@@ -14,6 +15,7 @@
0x5589e5
0xc8 000....0 0x0000
0x8cd89045
+ 0x8cd055