示例#1
0
def test_solver_branching():
    yield raw_solver_branching, lambda: claripy.FullFrontend(claripy.backends.
                                                             z3)
    yield raw_solver_branching, lambda: claripy.HybridFrontend(claripy.backends
                                                               .z3)
    yield raw_solver_branching, lambda: claripy.CompositeFrontend(
        claripy.FullFrontend(claripy.backends.z3))
示例#2
0
def test_hybrid_solver():
    s = claripy.HybridFrontend(claripy.backends.z3)

    x = claripy.BVS('x', 32, min=0, max=10, stride=2)
    y = claripy.BVS('y', 32, min=20, max=30, stride=5)

    # TODO: for now, the stride isn't respected in symbolic mode, but we'll fix that next.
    # until we do, let's add constraints
    s.add(x <= 10)
    s.add(x % 2 == 0)
    s.add(y >= 20)
    s.add(y <= 30)
    s.add((y - 20) % 5 == 0)

    nose.tools.assert_equal(s.eval(x, 20, exact=False), (0, 2, 4, 6, 8, 10))
    nose.tools.assert_equal(s.eval(x, 20), (0, 2, 4, 6, 8, 10))
    nose.tools.assert_equal(s.eval(y, 20, exact=False), (20, 25, 30))
    nose.tools.assert_equal(s.eval(y, 20), (20, 25, 30))

    # now constrain things further so that the VSA overapproximates
    s.add(x <= 4)
    nose.tools.assert_equal(s.eval(x, 20, exact=False), (0, 2, 4, 6, 8, 10))
    nose.tools.assert_equal(s.eval(x, 20), (0, 2, 4))

    s.add(y >= 27)
    nose.tools.assert_equal(s.eval(y, 20, exact=False), (20, 25, 30))
    nose.tools.assert_equal(s.eval(y, 20), (30, ))
示例#3
0
def test_replacement_solver():
    sr = claripy.ReplacementFrontend(
        claripy.HybridFrontend(claripy.backends.z3))
    x = claripy.BVS('x', 32)
    nose.tools.assert_equals(len(sr.eval(x, 10)), 10)
    sr.result = None
    sr.add_replacement(x, claripy.BVV(0x101, 32))
    nose.tools.assert_items_equal(sr.eval(x, 10), [0x101])

    y = claripy.BVS('y', 32)
    sr.add([y + 1 == 200])
    assert (y + 1).cache_key in sr._replacements
    assert sr._replacement(y + 1) is claripy.BVV(200, 32)

    srb = sr.branch()
    assert len(srb.constraints) == len(sr.constraints)
    assert (y + 1).cache_key in sr._replacements
    assert sr._replacement(y + 1) is claripy.BVV(200, 32)
示例#4
0
def test_ite():
    yield raw_ite, lambda: claripy.FullFrontend(claripy.backends.z3)
    yield raw_ite, lambda: claripy.HybridFrontend(claripy.backends.z3)
    yield raw_ite, lambda: claripy.CompositeFrontend(
        claripy.FullFrontend(claripy.backends.z3))
示例#5
0
def test_simple_merging():
    yield raw_simple_merging, lambda: claripy.FullFrontend(claripy.backends.z3)
    yield raw_simple_merging, lambda: claripy.HybridFrontend(claripy.backends.z3)
    yield raw_simple_merging, lambda: claripy.CompositeFrontend(claripy.FullFrontend(claripy.backends.z3))