diff --git a/Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeInterval.java b/Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeInterval.java index 1c9ac3d7bf..e599c2310f 100644 --- a/Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeInterval.java +++ b/Ghidra/Extensions/Lisa/src/main/java/ghidra/lisa/pcode/analyses/PcodeInterval.java @@ -413,6 +413,11 @@ public class PcodeInterval MathNumber max = starting.interval.getHigh().max(eval.interval.getHigh()); yield new PcodeInterval(min, max); } + case LogicalAnd op -> { + MathNumber min = starting.interval.getLow().max(eval.interval.getLow()); + MathNumber max = starting.interval.getHigh().min(eval.interval.getHigh()); + yield new PcodeInterval(min, max); + } default -> throw new AssertionError(); }; diff --git a/Ghidra/Extensions/Lisa/src/test/java/ghidra/lisa/DataflowAnalysesTest.java b/Ghidra/Extensions/Lisa/src/test/java/ghidra/lisa/DataflowAnalysesTest.java index 17d6935097..91de94fa3c 100644 --- a/Ghidra/Extensions/Lisa/src/test/java/ghidra/lisa/DataflowAnalysesTest.java +++ b/Ghidra/Extensions/Lisa/src/test/java/ghidra/lisa/DataflowAnalysesTest.java @@ -28,12 +28,12 @@ public class DataflowAnalysesTest extends AbstractLisaTest { public void testAvailable() { lisaOptions.setValueDomain(ValueDomainOption.DDATA_AVAILABLE); runTest(); - equalsAssert(valueOf("0040000b:1:register:00000000"), "register:00000000 < 5"); //SUB AX, 0x5 + equalsAssert(valueOf("0040000b:1:register:00000000"), "register:00000000 < 5"); //SUB AX, 0x5 equalsAssert(valueOf("0040000b:5:register:00000000"), - "[register:00000000 == 0, register:00000000 INT_SLESS 0]"); //SUB AX, 0x5 + "[register:00000000 < 0, register:00000000 == 0]"); //SUB AX, 0x5 equalsAssert(valueOf("0040000f:0:register:00000000"), - "[register:00000000 == 0, register:00000000 INT_AND 255, register:00000000 INT_SLESS 0]"); //MOV RDX, RAX - equalsAssert(valueOf("00400012:0:register:00000010"), null); //RET + "[register:00000000 < 0, register:00000000 == 0, register:00000000 INT_AND 255]"); //MOV RDX, RAX + equalsAssert(valueOf("00400012:0:register:00000010"), null); //RET } @Category(AbstractLisaTest.class) @@ -42,8 +42,8 @@ public class DataflowAnalysesTest extends AbstractLisaTest { lisaOptions.setValueDomain(ValueDomainOption.DDATA_CONSTPROP); runTest(); equalsAssert(valueOf("0040000b:0:register:00000000"), "4"); //SUB AX, 0x5 - equalsAssert(valueOf("0040000f:0:register:00000000"), "ffff"); //MOV RDX, RAX - equalsAssert(valueOf("00400012:0:register:00000010"), "ffff"); //RET + equalsAssert(valueOf("0040000f:0:register:00000000"), "-1"); //MOV RDX, RAX + equalsAssert(valueOf("00400012:0:register:00000010"), "-1"); //RET } @Category(AbstractLisaTest.class) diff --git a/Ghidra/Extensions/Lisa/src/test/java/ghidra/lisa/MiscAnalysesTest.java b/Ghidra/Extensions/Lisa/src/test/java/ghidra/lisa/MiscAnalysesTest.java index 29db6e262e..2e315a1ae2 100644 --- a/Ghidra/Extensions/Lisa/src/test/java/ghidra/lisa/MiscAnalysesTest.java +++ b/Ghidra/Extensions/Lisa/src/test/java/ghidra/lisa/MiscAnalysesTest.java @@ -30,7 +30,7 @@ public class MiscAnalysesTest extends AbstractLisaTest { lisaOptions.setInterproceduralOption(InterproceduralOption.CONTEXT); runTest(); equalsAssert(valueOf("0040000b:0:register:00000000"), "="); //SUB AX, 0x5 - equalsAssert(valueOf("0040000b:3:register:00000000"), "≠"); //SUB AX, 0x5 + equalsAssert(valueOf("0040000b:3:register:00000000"), "#TOP#"); //SUB AX, 0x5 equalsAssert(valueOf("0040000f:0:register:00000000"), "="); //MOV RDX, RAX equalsAssert(valueOf("0040000f:0:register:00000010"), null); //MOV RDX, RAX equalsAssert(valueOf("00400012:0:register:00000010"), "="); //RET diff --git a/Ghidra/Extensions/Lisa/src/test/java/ghidra/lisa/NumericAnalysesTest.java b/Ghidra/Extensions/Lisa/src/test/java/ghidra/lisa/NumericAnalysesTest.java index b74e9f6623..12d0dc6499 100644 --- a/Ghidra/Extensions/Lisa/src/test/java/ghidra/lisa/NumericAnalysesTest.java +++ b/Ghidra/Extensions/Lisa/src/test/java/ghidra/lisa/NumericAnalysesTest.java @@ -49,7 +49,7 @@ public class NumericAnalysesTest extends AbstractLisaTest { lisaOptions.setValueDomain(ValueDomainOption.VALUE_POWERSET); lisaOptions.setDescendingPhaseOption(DescendingPhaseOption.GLB); runTest(); - equalsAssert(valueOf("0040000b:0:register:00000000"), "[-Inf, +Inf]"); //SUB AX, 0x5 + equalsAssert(valueOf("0040000b:0:register:00000000"), "[4, 4]"); //SUB AX, 0x5 equalsAssert(valueOf("0040000f:0:register:00000000"), "[-Inf, +Inf]"); //MOV RDX, RAX equalsAssert(valueOf("00400012:0:register:00000010"), "[-Inf, +Inf]"); //RET } @@ -104,8 +104,8 @@ public class NumericAnalysesTest extends AbstractLisaTest { runTest(); equalsAssert(valueOf("0040000e:37:register:00000000"), null); equalsAssert(valueOf("00400010:13:register:00000000"), "[-Inf, +Inf]"); - equalsAssert(valueOf("00400018:47:register:00000000"), "[0, +Inf]"); // [3, +Inf] optimized out - equalsAssert(valueOf("00400012:46:register:00000000"), "[-Inf, 2]"); + equalsAssert(valueOf("00400018:41:register:00000000"), "[0, +Inf]"); // [3, +Inf] optimized out + equalsAssert(valueOf("00400012:18:register:00000000"), "[-Inf, 2]"); } @Category(AbstractLisaTest.class)