def run_manyfloatsum_symbolic(arch): global type_cache if type_cache is None: type_cache = parse_defns( open(os.path.join(location, 'tests_src', 'manyfloatsum.c')).read()) p = angr.Project(os.path.join(location, 'tests', arch, 'manyfloatsum')) function = 'sum_doubles' cc = p.factory.cc(func_ty=type_cache[function]) args = [ claripy.FPS('arg_%d' % i, claripy.FSORT_DOUBLE) for i in range(len(type_cache[function].args)) ] addr = p.loader.main_object.get_symbol(function).rebased_addr my_callable = p.factory.callable(addr, cc=cc) result = my_callable(*args) nose.tools.assert_true(result.symbolic) s = claripy.Solver() for arg in args: s.add(arg > claripy.FPV(1.0, claripy.FSORT_DOUBLE)) s.add(result == claripy.FPV(27.7, claripy.FSORT_DOUBLE)) args_conc = s.batch_eval(args, 1)[0] nose.tools.assert_equal(s.eval(result, 1)[0], 27.7) # not almost equal!! totally equal!!! z3 is magic, if kinda slow!!!!! for arg_conc in args_conc: nose.tools.assert_greater(arg_conc, 1.0) nose.tools.assert_equal(sum(args_conc), 27.7)
def run_manyfloatsum_symbolic(arch): global type_cache if type_cache is None: type_cache = parse_defns(open(os.path.join(location, '..', 'tests_src', 'manyfloatsum.c')).read()) p = angr.Project(location + '/' + arch + '/manyfloatsum') function = 'sum_doubles' cc = p.factory.cc(func_ty=type_cache[function]) args = [claripy.FPS('arg_%d' % i, claripy.FSORT_DOUBLE) for i in range(len(type_cache[function].args))] addr = p.loader.main_object.get_symbol(function).rebased_addr my_callable = p.factory.callable(addr, cc=cc) result = my_callable(*args) nose.tools.assert_true(result.symbolic) s = claripy.Solver() for arg in args: s.add(arg > claripy.FPV(1.0, claripy.FSORT_DOUBLE)) s.add(result == claripy.FPV(27.7, claripy.FSORT_DOUBLE)) args_conc = s.batch_eval(args, 1)[0] nose.tools.assert_equal(s.eval(result, 1)[0], 27.7) # not almost equal!! totally equal!!! z3 is magic, if kinda slow!!!!! for arg_conc in args_conc: nose.tools.assert_greater(arg_conc, 1.0) nose.tools.assert_equal(sum(args_conc), 27.7)
def run_manyfloatsum_symbolic(self, arch): global type_cache if type_cache is None: with open(os.path.join(location, 'tests_src', 'manyfloatsum.c')) as fp: type_cache = parse_defns(fp.read()) p = angr.Project(os.path.join(location, 'tests', arch, 'manyfloatsum')) function = 'sum_doubles' args = [ claripy.FPS('arg_%d' % i, claripy.FSORT_DOUBLE) for i in range(len(type_cache[function].args)) ] addr = p.loader.main_object.get_symbol(function).rebased_addr my_callable = p.factory.callable(addr, prototype=type_cache[function]) result = my_callable(*args) assert result.symbolic s = claripy.Solver(timeout=15 * 60 * 1000) for arg in args: s.add(arg > claripy.FPV(1.0, claripy.FSORT_DOUBLE)) s.add(result == claripy.FPV(27.7, claripy.FSORT_DOUBLE)) args_conc = s.batch_eval(args, 1)[0] assert s.eval(result, 1)[0] == 27.7 # not almost equal!! totally equal!!! z3 is magic, if kinda slow!!!!! for arg_conc in args_conc: assert arg_conc > 1.0 assert sum(args_conc) == 27.7
def run_manyfloatsum(arch): global type_cache if type_cache is None: type_cache = parse_defns(open(os.path.join(location, '..', 'tests_src', 'manyfloatsum.c')).read()) p = angr.Project(location + '/' + arch + '/manyfloatsum') for function in ('sum_floats', 'sum_combo', 'sum_segregated', 'sum_doubles', 'sum_combo_doubles', 'sum_segregated_doubles'): cc = p.factory.cc(func_ty=type_cache[function]) args = list(range(len(cc.func_ty.args))) answer = float(sum(args)) addr = p.loader.main_bin.get_symbol(function).rebased_addr my_callable = p.factory.callable(addr, cc=cc) result = my_callable(*args) nose.tools.assert_false(result.symbolic) result_concrete = result.args[0] nose.tools.assert_equal(answer, result_concrete)
def run_manyfloatsum(arch): global type_cache if type_cache is None: type_cache = parse_defns(open(os.path.join(location, '..', 'tests_src', 'manyfloatsum.c')).read()) p = angr.Project(location + '/' + arch + '/manyfloatsum') for function in ('sum_floats', 'sum_combo', 'sum_segregated', 'sum_doubles', 'sum_combo_doubles', 'sum_segregated_doubles'): cc = p.factory.cc(func_ty=type_cache[function]) args = list(range(len(cc.func_ty.args))) answer = float(sum(args)) addr = p.loader.main_object.get_symbol(function).rebased_addr my_callable = p.factory.callable(addr, cc=cc) result = my_callable(*args) nose.tools.assert_false(result.symbolic) result_concrete = result.args[0] nose.tools.assert_equal(answer, result_concrete)
def run_manyfloatsum(arch): global type_cache if type_cache is None: with open(os.path.join(location, 'tests_src', 'manyfloatsum.c')) as fp: type_cache = parse_defns(fp.read()) p = angr.Project(os.path.join(location, 'tests', arch, 'manyfloatsum')) for function in ('sum_floats', 'sum_combo', 'sum_segregated', 'sum_doubles', 'sum_combo_doubles', 'sum_segregated_doubles'): args = list(range(len(type_cache[function].args))) answer = float(sum(args)) addr = p.loader.main_object.get_symbol(function).rebased_addr my_callable = p.factory.callable(addr, prototype=type_cache[function]) result = my_callable(*args) nose.tools.assert_false(result.symbolic) result_concrete = result.args[0] nose.tools.assert_equal(answer, result_concrete)