From 9c5c8f4e609a22b49d19c0a659679fce036dfe2b Mon Sep 17 00:00:00 2001 From: Dan <46821332+nsadeveloper789@users.noreply.github.com> Date: Tue, 6 Apr 2021 13:25:23 -0400 Subject: [PATCH] GP-0: Fixed obvious issue static mapping across languages. --- .../DebuggerStaticMappingServicePlugin.java | 3 +- .../AbstractGhidraHeadedDebuggerGUITest.java | 14 +++++++--- .../DebuggerStaticMappingServiceTest.java | 28 +++++++++++++++++-- 3 files changed, 38 insertions(+), 7 deletions(-) diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/modules/DebuggerStaticMappingServicePlugin.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/modules/DebuggerStaticMappingServicePlugin.java index 5484ee9625..b0f89874de 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/modules/DebuggerStaticMappingServicePlugin.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/modules/DebuggerStaticMappingServicePlugin.java @@ -312,7 +312,8 @@ public class DebuggerStaticMappingServicePlugin extends Plugin Address minAddr = opened.getAddressFactory().getAddress(mapping.getStaticAddress()); Address maxAddr = addOrMax(minAddr, mapping.getLength() - 1); this.staticRange = new AddressRangeImpl(minAddr, maxAddr); - this.shift = mapping.getMinTraceAddress().subtract(staticRange.getMinAddress()); + this.shift = mapping.getMinTraceAddress().getOffset() - + staticRange.getMinAddress().getOffset(); return true; } return false; diff --git a/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/AbstractGhidraHeadedDebuggerGUITest.java b/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/AbstractGhidraHeadedDebuggerGUITest.java index 5d06a5b67e..5508f12c02 100644 --- a/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/AbstractGhidraHeadedDebuggerGUITest.java +++ b/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/gui/AbstractGhidraHeadedDebuggerGUITest.java @@ -508,17 +508,23 @@ public abstract class AbstractGhidraHeadedDebuggerGUITest } protected void createProgramFromTrace(Trace trace) throws IOException { - program = new ProgramDB(getProgramName(), trace.getBaseLanguage(), - trace.getBaseCompilerSpec(), this); + createProgram(trace.getBaseLanguage(), trace.getBaseCompilerSpec()); } protected void createProgramFromTrace() throws IOException { createProgramFromTrace(tb.trace); } + protected void createProgram(Language lang, CompilerSpec cSpec) throws IOException { + program = new ProgramDB(getProgramName(), lang, cSpec, this); + } + + protected void createProgram(Language lang) throws IOException { + createProgram(lang, lang.getDefaultCompilerSpec()); + } + protected void createProgram() throws IOException { - Language lang = getToyBE64Language(); - program = new ProgramDB(getProgramName(), lang, lang.getDefaultCompilerSpec(), this); + createProgram(getToyBE64Language()); } protected void createAndOpenProgramFromTrace() throws IOException { diff --git a/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/service/modules/DebuggerStaticMappingServiceTest.java b/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/service/modules/DebuggerStaticMappingServiceTest.java index e79e3164fd..600ba3c2ae 100644 --- a/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/service/modules/DebuggerStaticMappingServiceTest.java +++ b/Ghidra/Debug/Debugger/src/test/java/ghidra/app/plugin/core/debug/service/modules/DebuggerStaticMappingServiceTest.java @@ -28,6 +28,7 @@ import com.google.common.collect.Range; import ghidra.app.plugin.core.debug.gui.AbstractGhidraHeadedDebuggerGUITest; import ghidra.app.services.DebuggerStaticMappingService; +import ghidra.framework.model.DomainFile; import ghidra.program.model.address.*; import ghidra.program.model.listing.Program; import ghidra.program.util.ProgramLocation; @@ -46,7 +47,7 @@ public class DebuggerStaticMappingServiceTest extends AbstractGhidraHeadedDebugg protected TraceStaticMappingManager mappingManager; protected AddressSpace dynSpace; - protected AddressSpace stSpace;; + protected AddressSpace stSpace; @Before public void setUpStaticMappingService() throws Exception { @@ -59,7 +60,7 @@ public class DebuggerStaticMappingServiceTest extends AbstractGhidraHeadedDebugg mappingManager = tb.trace.getStaticMappingManager(); waitForDomainObject(tb.trace); - createProgramFromTrace(); + createProgram(); intoProject(program); programManager.openProgram(program); waitForProgram(program); @@ -119,6 +120,29 @@ public class DebuggerStaticMappingServiceTest extends AbstractGhidraHeadedDebugg assertEquals(0x1000, m.getLength()); } + @Test + public void testAddMappingSecondLanguage() throws Exception { + programManager.closeProgram(program, true); + DomainFile df = program.getDomainFile(); + program.release(this); + df.delete(); + + createProgram(getSLEIGH_X86_LANGUAGE()); + intoProject(program); + programManager.openProgram(program); + waitForProgram(program); + + stSpace = program.getAddressFactory().getDefaultAddressSpace(); + + addMapping(); + + assertEquals(1, mappingManager.getAllEntries().size()); + TraceStaticMapping m = mappingManager.findContaining(dynSpace.getAddress(0x00100000), 0); + assertTrue(m.getStaticProgramURL().toString().endsWith(getProgramName())); + assertEquals("ram:00200000", m.getStaticAddress()); + assertEquals(0x1000, m.getLength()); + } + @Test public void testAddMappingTruncateExisting() throws Exception { addMapping();