def run():
        parser1 = Parser()
        parser1.parse_file(PositiveCombinationTest.testfile1)

        backend1 = Z3Backend(name=PositiveCombinationTest.testfile1,
                             voi="variable")
        backend1.log.setLevel(logging.ERROR)
        backend1.exec_statements(parser1.statements)

        parser2 = Parser()
        parser2.parse_file(PositiveCombinationTest.testfile2)

        backend2 = Z3Backend(name=PositiveCombinationTest.testfile2,
                             voi="variable")
        backend2.log.setLevel(logging.ERROR)
        backend2.exec_statements(parser2.statements)

        backend = backend1 & backend2
        backend.log.setLevel(logging.ERROR)
        solver = backend.solver
        model = backend.model

        assert model, "Model unsat. Test failed"

        testcase = backend.generate_testcase("variable")
        testcase = unpack(testcase, 'all')
        assert(testcase > 15)
        assert(testcase & 0xffff == 0)
        assert((testcase & (testcase - 1) != 0))
        return True
Exemplo n.º 2
0
    def run():
        parser = Parser()
        parser.parse_file(AlgebraTest.testfile)
        backend = Z3Backend()
        backend.log.setLevel(logging.ERROR)
        backend.exec_statements(parser.statements)
        solver = backend.generate_solver()
        variables = backend.variables
        input = variables['VARIABLE']
        v1 = variables['VARA']
        v2 = variables['VARB']
        v3 = variables['VARC']
        v4 = variables['VARD']
        v5 = variables['VARE']
        v6 = variables['VARF']

        solver.add(input == 10)
        assert (solver.check() == z3.sat)
        model = solver.model()
        assert (model.eval(v1).as_long() == 15)
        assert (model.eval(v2).as_long() == 5)
        assert (model.eval(v3).as_long() == 50)
        assert (model.eval(v4).as_long() == 2)
        assert (model.eval(v5).as_long() == 2)
        assert (model.eval(v6).as_long() == 0)
Exemplo n.º 3
0
 def run():
     parser = Parser()
     parser.parse_file(AlignmentTest.testfile)
     backend = Z3Backend()
     backend.log.setLevel(logging.ERROR)
     backend.exec_statements(parser.statements)
     solver = backend.generate_solver()
     assert (solver.check() == z3.sat)
Exemplo n.º 4
0
 def run():
     parser = Parser()
     parser.parse_file(StringCompareTest.testfile)
     backend = Z3Backend()
     backend.log.setLevel(logging.ERROR)
     backend.exec_statements(parser.statements)
     solver = backend.generate_solver()
     assert (solver.check() == z3.sat)
     model = solver.model()
     outvar = backend.variables['out']
     assert (model.eval(outvar).as_long() == 0x5241424f4f4600)
    def run():
        parser = Parser()
        parser.parse_file(ConditionalLoopTest.testfile)

        backend = Z3Backend()
        backend.log.setLevel(logging.ERROR)
        backend.exec_statements(parser.statements)
        solver = backend.solver
        model = backend.model

        assert model, "Model unsat. Test failed"

        testcase = backend.generate_testcase()
        expected = b'\x01' * 4
        assert (testcase[4:8] == expected)
Exemplo n.º 6
0
    def run():
        parser = Parser(pwd=os.path.dirname(os.path.realpath(__file__)))
        parser.parse_file(FromFileTest.testfile)

        backend = Z3Backend()
        backend.log.setLevel(logging.ERROR)
        backend.exec_statements(parser.statements)
        solver = backend.solver
        model = backend.model

        assert model, "Model unsat. Test failed"

        testcase = backend.generate_testcase(varname="file")
        assert (testcase[5:5 + 10] == b"1337133713")

        return True
Exemplo n.º 7
0
    def run():
        parser = Parser()
        parser.parse_file(OverflowTest.testfile)
        backend = Z3Backend()
        backend.log.setLevel(logging.ERROR)
        backend.exec_statements(parser.statements)
        solver = backend.generate_solver()
        variables = backend.variables

        ### Check sat
        assert(backend.model)

        model = backend.model
        var4 = model.eval(variables['VAR4']).as_long()
        var5 = model.eval(variables['VAR5']).as_long()
        assert(var4 + var5 >= 0x100000000)
Exemplo n.º 8
0
    def run():
        parser = Parser()
        parser.parse_file(BitwiseTest.testfile)
        backend = Z3Backend()
        backend.log.setLevel(logging.ERROR)
        backend.exec_statements(parser.statements)
        solver = backend.generate_solver()
        input = backend.variables['VARIABLE']
        v1 = backend.variables['VARA']
        v2 = backend.variables['VARB']
        v3 = backend.variables['VARC']

        solver.add(input == 0xdeadbeef)
        assert(solver.check() == z3.sat)
        model = solver.model()
        assert(model.eval(v1).as_long() == 0x11001)
        assert(model.eval(v2).as_long() == 0xdfadbeef)
        assert(model.eval(v3).as_long() == 0x21524110)
Exemplo n.º 9
0
    def run():
        parser = Parser(pwd=os.path.dirname(os.path.realpath(__file__)))
        parser.parse_file(OptimizationTest.testfile)

        backend = Z3Backend()
        backend.log.setLevel(logging.ERROR)
        backend.exec_statements(parser.statements)
        solver = backend.solver
        model = backend.model

        assert model, "Model unsat. Test failed"

        var1 = backend.generate_testcase(varname="var1")
        var2 = backend.generate_testcase(varname="var2")
        var1 = unpack(var1, 'all', endianness="little")
        var2 = unpack(var2, 'all', endianness="little")
        assert var1 == var2 == 10

        return True
Exemplo n.º 10
0
    def run():
        parser = Parser()
        parser.parse_file(VLoopTest.testfile)

        backend = Z3Backend()
        backend.log.setLevel(logging.ERROR)
        backend.exec_statements(parser.statements)
        solver = backend.solver
        model = backend.model

        assert model, "Model unsat. Test failed"

        testcase = backend.generate_testcase()
        expected = b''.join([x.to_bytes(1, 'little') for x in range(0x10)])
        assert testcase[:
                        0x10] == expected, "First part of the testcase not as expected"
        assert all(
            x == 0 for x in
            testcase[0x10:]), "Second part of the testcase not as expected"
        return True