Exemplo n.º 1
0
  @Test
  public void testConditionals() {

    RTLExpression c =
        ExpressionFactory.createConditionalExpression(
            ExpressionFactory.createGreaterThan(esp, ExpressionFactory.createNumber(10, 32)),
            ExpressionFactory.createNumber(10, 32),
            ExpressionFactory.createNumber(5, 32));
    RTLExpression f = ExpressionFactory.createEqual(ExpressionFactory.createVariable("x", 32), c);
    solver.addAssertion(f);
    assertTrue(solver.isSatisfiable());
  }
Exemplo n.º 2
0
 /** @throws java.lang.Exception */
 @Before
 public void setUp() throws Exception {
   solver = new YicesSolver();
   esp = ExpressionFactory.createVariable("esp", 32);
   m1 =
       ExpressionFactory.createMemoryLocation(
           ExpressionFactory.createPlus(esp, ExpressionFactory.createNumber(4, 32)), 32);
   m2 =
       ExpressionFactory.createMemoryLocation(
           ExpressionFactory.createPlus(esp, ExpressionFactory.createNumber(8, 32)), 32);
   m3 =
       ExpressionFactory.createMemoryLocation(
           ExpressionFactory.createPlus(esp, ExpressionFactory.createNumber(4, 32)), 32);
 }
Exemplo n.º 3
0
 /** Test method for {@link org.jakstab.solver.yices.YicesSolver#isSatisfiable()}. */
 @Test
 public void testMemoryLocations() {
   solver.push();
   RTLExpression f = ExpressionFactory.createEqual(m1, ExpressionFactory.createNumber(254823, 32));
   solver.addAssertion(f);
   f = ExpressionFactory.createEqual(m2, ExpressionFactory.createNumber(53223, 32));
   solver.addAssertion(f);
   assertTrue(solver.isSatisfiable());
   f = ExpressionFactory.createEqual(m3, ExpressionFactory.createNumber(53223, 32));
   solver.addAssertion(f);
   assertFalse(solver.isSatisfiable());
   solver.pop();
   solver.push();
   f = ExpressionFactory.createNotEqual(m1, m2);
   solver.addAssertion(f);
   assertTrue(solver.isSatisfiable());
   f = ExpressionFactory.createEqual(m1, m2);
   solver.addAssertion(f);
   assertFalse(solver.isSatisfiable());
   solver.pop();
 }
Exemplo n.º 4
0
  public RTLExpression getStateFormula(ValuationState state) {
    RTLExpression result = null;

    for (Iterator<Map.Entry<RTLVariable, AbstractDomainElement>> entryIt = state.variableIterator();
        entryIt.hasNext(); ) {
      Map.Entry<RTLVariable, AbstractDomainElement> entry = entryIt.next();
      RTLVariable var = entry.getKey();
      IntervalElement interval = (IntervalElement) entry.getValue();

      if (interval.size() == 1) {
        result =
            addClause(
                result,
                ExpressionFactory.createEqual(
                    var, ExpressionFactory.createNumber(interval.getLeft(), var.getBitWidth())));
      } else {
        if (!interval.leftOpen()) {
          result =
              addClause(
                  result,
                  ExpressionFactory.createLessOrEqual(
                      ExpressionFactory.createNumber(interval.getLeft(), var.getBitWidth()), var));
        }

        if (!interval.rightOpen()) {
          result =
              addClause(
                  result,
                  ExpressionFactory.createLessOrEqual(
                      var, ExpressionFactory.createNumber(interval.getRight(), var.getBitWidth())));
        }
      }
    }

    if (result == null) {
      result = ExpressionFactory.TRUE;
    }

    return result;
  }
 @Override
 public RTLNumber readMemoryLocation(RTLMemoryLocation m) throws IOException {
   if (!(m.getAddress() instanceof RTLNumber)) return null;
   AbsoluteAddress va = new AbsoluteAddress((RTLNumber) m.getAddress());
   long fp = getFilePointer(va);
   if (getSectionNumber(fp) >= 0) {
     assert m.getBitWidth() % 8 == 0 : "Non-byte-aligned memory reference!";
     long val = 0;
     int bytes = m.getBitWidth() / 8;
     // OR together the least significant bytes
     inBuf.seek(fp);
     for (int i = 0; i < bytes - 1; i++) {
       val = val | ((long) inBuf.readBYTE()) << (i * 8);
     }
     // do not mask the MSB with 0xFF, so we get sign extension for free
     val = val | (((long) inBuf.readINT8()) << (bytes - 1) * 8);
     // logger.debug("Read constant value " + val + " from address " + m + " (file offset: " +
     // Long.toHexString(fp) + ") in image.");
     return ExpressionFactory.createNumber(val, m.getBitWidth());
   }
   logger.debug("No value can be read from image for address " + m);
   return null;
 }