Merge remote-tracking branch 'origin/Ghidra_11.4'

This commit is contained in:
Ryan Kurtz
2025-05-16 15:09:09 -04:00
3 changed files with 34 additions and 5 deletions
@@ -44,6 +44,13 @@ public class AnyToAnyFunctionComparisonModel extends AbstractFunctionComparisonM
} }
} }
public AnyToAnyFunctionComparisonModel(Function left, Function right) {
this.functions.add(left);
this.functions.add(right);
setActiveFunction(LEFT, left);
setActiveFunction(RIGHT, right);
}
public AnyToAnyFunctionComparisonModel(Function... functions) { public AnyToAnyFunctionComparisonModel(Function... functions) {
this(Arrays.asList(functions)); this(Arrays.asList(functions));
} }
@@ -24,7 +24,8 @@ import org.apache.commons.lang3.ArrayUtils;
import ghidra.app.plugin.processors.sleigh.SleighLanguage; import ghidra.app.plugin.processors.sleigh.SleighLanguage;
import ghidra.program.model.address.*; import ghidra.program.model.address.*;
import ghidra.program.model.data.*; import ghidra.program.model.data.DataType;
import ghidra.program.model.data.Undefined;
import ghidra.program.model.lang.*; import ghidra.program.model.lang.*;
import ghidra.program.model.listing.*; import ghidra.program.model.listing.*;
import ghidra.program.model.mem.MemoryAccessException; import ghidra.program.model.mem.MemoryAccessException;
@@ -35,7 +36,8 @@ import ghidra.program.model.scalar.Scalar;
import ghidra.program.model.symbol.Reference; import ghidra.program.model.symbol.Reference;
import ghidra.program.model.symbol.ReferenceIterator; import ghidra.program.model.symbol.ReferenceIterator;
import ghidra.util.Msg; import ghidra.util.Msg;
import ghidra.util.exception.*; import ghidra.util.exception.AssertException;
import ghidra.util.exception.DuplicateNameException;
public class VarnodeContext implements ProcessorContext { public class VarnodeContext implements ProcessorContext {
@@ -1863,7 +1865,7 @@ public class VarnodeContext implements ProcessorContext {
/** /**
* Check if this is a bad address, or offset from a bad address * Check if this is a bad address, or offset from a bad address
* *
* @param varnode to check * @param v to check
* @return true if should be treated as a constant for most purposes * @return true if should be treated as a constant for most purposes
*/ */
public boolean isBadAddress(Varnode v) { public boolean isBadAddress(Varnode v) {
@@ -25,8 +25,6 @@ import org.junit.Test;
import generic.test.AbstractGenericTest; import generic.test.AbstractGenericTest;
import ghidra.app.services.FunctionComparisonService; import ghidra.app.services.FunctionComparisonService;
import ghidra.features.base.codecompare.model.AnyToAnyFunctionComparisonModel;
import ghidra.features.base.codecompare.model.FunctionComparisonModelListener;
import ghidra.program.database.ProgramBuilder; import ghidra.program.database.ProgramBuilder;
import ghidra.program.model.data.ByteDataType; import ghidra.program.model.data.ByteDataType;
import ghidra.program.model.data.DataType; import ghidra.program.model.data.DataType;
@@ -97,6 +95,28 @@ public class AnyToAnyFunctionComparisonModelTest extends AbstractGhidraHeadedInt
assertEquals(b2, model.getActiveFunction(RIGHT)); assertEquals(b2, model.getActiveFunction(RIGHT));
} }
@Test
public void testPairOfFunctionsInNaturalOrder() throws Exception {
model = new AnyToAnyFunctionComparisonModel(b1, b2);
assertEquals(List.of(b1, b2), model.getFunctions(LEFT));
assertEquals(List.of(b1, b2), model.getFunctions(RIGHT));
assertEquals(b1, model.getActiveFunction(LEFT));
assertEquals(b2, model.getActiveFunction(RIGHT));
}
@Test
public void testPairOfFunctionsOutOfNaturalOrder() throws Exception {
model = new AnyToAnyFunctionComparisonModel(b2, b1);
assertEquals(List.of(b1, b2), model.getFunctions(LEFT));
assertEquals(List.of(b1, b2), model.getFunctions(RIGHT));
assertEquals(b2, model.getActiveFunction(LEFT));
assertEquals(b1, model.getActiveFunction(RIGHT));
}
@Test @Test
public void testMultipleFunctions() throws Exception { public void testMultipleFunctions() throws Exception {
assertEquals(List.of(a1, a2, b1, b2), model.getFunctions(LEFT)); assertEquals(List.of(a1, a2, b1, b2), model.getFunctions(LEFT));