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