GP-0: Fixed obvious issue static mapping across languages.

This commit is contained in:
Dan 2021-04-06 13:25:23 -04:00
parent d9476f62e7
commit 9c5c8f4e60
3 changed files with 38 additions and 7 deletions

View file

@ -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;

View file

@ -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 {

View file

@ -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();