angr 9.2.87__py3-none-manylinux2014_x86_64.whl → 9.2.89__py3-none-manylinux2014_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of angr might be problematic. Click here for more details.
- angr/__init__.py +4 -1
- angr/analyses/decompiler/clinic.py +16 -0
- angr/analyses/decompiler/decompiler.py +3 -0
- angr/analyses/decompiler/optimization_passes/__init__.py +5 -0
- angr/analyses/decompiler/optimization_passes/cross_jump_reverter.py +108 -0
- angr/analyses/decompiler/optimization_passes/optimization_pass.py +17 -4
- angr/analyses/decompiler/optimization_passes/return_duplicator.py +4 -32
- angr/analyses/decompiler/structured_codegen/c.py +12 -2
- angr/analyses/decompiler/utils.py +13 -0
- angr/analyses/typehoon/dfa.py +108 -0
- angr/analyses/typehoon/lifter.py +34 -2
- angr/analyses/typehoon/simple_solver.py +1043 -503
- angr/analyses/typehoon/translator.py +13 -4
- angr/analyses/typehoon/typeconsts.py +117 -36
- angr/analyses/typehoon/typehoon.py +31 -11
- angr/analyses/typehoon/typevars.py +88 -21
- angr/analyses/typehoon/variance.py +10 -0
- angr/analyses/variable_recovery/engine_ail.py +28 -9
- angr/analyses/variable_recovery/engine_base.py +50 -43
- angr/analyses/variable_recovery/variable_recovery_base.py +16 -3
- angr/analyses/variable_recovery/variable_recovery_fast.py +14 -5
- angr/exploration_techniques/tracer.py +2 -0
- angr/misc/autoimport.py +26 -0
- angr/procedures/definitions/__init__.py +32 -3
- angr/utils/constants.py +1 -0
- angr/utils/graph.py +20 -1
- {angr-9.2.87.dist-info → angr-9.2.89.dist-info}/METADATA +7 -6
- {angr-9.2.87.dist-info → angr-9.2.89.dist-info}/RECORD +32 -244
- angr-9.2.89.dist-info/top_level.txt +1 -0
- angr/procedures/definitions/ntdll.py +0 -12
- angr-9.2.87.dist-info/top_level.txt +0 -2
- tests/__init__.py +0 -0
- tests/analyses/__init__.py +0 -0
- tests/analyses/cfg/__init__.py +0 -0
- tests/analyses/cfg/test_cfg_clflush.py +0 -43
- tests/analyses/cfg/test_cfg_get_any_node.py +0 -34
- tests/analyses/cfg/test_cfg_manager.py +0 -32
- tests/analyses/cfg/test_cfg_model.py +0 -55
- tests/analyses/cfg/test_cfg_patching.py +0 -378
- tests/analyses/cfg/test_cfg_rust_got_resolution.py +0 -36
- tests/analyses/cfg/test_cfg_thumb_firmware.py +0 -50
- tests/analyses/cfg/test_cfg_vex_postprocessor.py +0 -27
- tests/analyses/cfg/test_cfgemulated.py +0 -634
- tests/analyses/cfg/test_cfgfast.py +0 -1123
- tests/analyses/cfg/test_cfgfast_soot.py +0 -38
- tests/analyses/cfg/test_const_resolver.py +0 -38
- tests/analyses/cfg/test_iat_resolver.py +0 -37
- tests/analyses/cfg/test_jumptables.py +0 -3008
- tests/analyses/cfg/test_noop_blocks.py +0 -54
- tests/analyses/cfg_slice_to_sink/__init__.py +0 -0
- tests/analyses/cfg_slice_to_sink/test_cfg_slice_to_sink.py +0 -93
- tests/analyses/cfg_slice_to_sink/test_graph.py +0 -114
- tests/analyses/cfg_slice_to_sink/test_transitions.py +0 -28
- tests/analyses/decompiler/__init__.py +0 -0
- tests/analyses/decompiler/test_baseptr_save_simplifier.py +0 -80
- tests/analyses/decompiler/test_decompiler.py +0 -3336
- tests/analyses/decompiler/test_peephole_optimizations.py +0 -48
- tests/analyses/decompiler/test_propagator_loops.py +0 -101
- tests/analyses/decompiler/test_structurer.py +0 -275
- tests/analyses/reaching_definitions/__init__.py +0 -0
- tests/analyses/reaching_definitions/test_dep_graph.py +0 -432
- tests/analyses/reaching_definitions/test_function_handler.py +0 -131
- tests/analyses/reaching_definitions/test_heap_allocator.py +0 -46
- tests/analyses/reaching_definitions/test_rd_state.py +0 -78
- tests/analyses/reaching_definitions/test_reachingdefinitions.py +0 -463
- tests/analyses/reaching_definitions/test_subject.py +0 -76
- tests/analyses/test_bindiff.py +0 -52
- tests/analyses/test_block_simplifier.py +0 -112
- tests/analyses/test_boyscout.py +0 -104
- tests/analyses/test_calling_convention_analysis.py +0 -352
- tests/analyses/test_callsite_maker.py +0 -60
- tests/analyses/test_cdg.py +0 -165
- tests/analyses/test_cfb.py +0 -37
- tests/analyses/test_class_identifier.py +0 -46
- tests/analyses/test_clinic.py +0 -30
- tests/analyses/test_codetagging.py +0 -32
- tests/analyses/test_constantpropagation.py +0 -88
- tests/analyses/test_ddg.py +0 -95
- tests/analyses/test_ddg_global_var_dependencies.py +0 -83
- tests/analyses/test_ddg_memvar_addresses.py +0 -40
- tests/analyses/test_disassembly.py +0 -121
- tests/analyses/test_find_objects_static.py +0 -35
- tests/analyses/test_flirt.py +0 -49
- tests/analyses/test_identifier.py +0 -33
- tests/analyses/test_init_finder.py +0 -38
- tests/analyses/test_proximitygraph.py +0 -31
- tests/analyses/test_reassembler.py +0 -295
- tests/analyses/test_regionidentifier.py +0 -27
- tests/analyses/test_slicing.py +0 -164
- tests/analyses/test_stack_pointer_tracker.py +0 -74
- tests/analyses/test_static_hooker.py +0 -28
- tests/analyses/test_typehoon.py +0 -55
- tests/analyses/test_variablerecovery.py +0 -464
- tests/analyses/test_vfg.py +0 -221
- tests/analyses/test_vtable.py +0 -31
- tests/analyses/test_xrefs.py +0 -77
- tests/common.py +0 -128
- tests/engines/__init__.py +0 -0
- tests/engines/light/__init__.py +0 -0
- tests/engines/light/test_data.py +0 -17
- tests/engines/pcode/__init__.py +0 -0
- tests/engines/pcode/test_emulate.py +0 -607
- tests/engines/pcode/test_pcode.py +0 -84
- tests/engines/test_actions.py +0 -27
- tests/engines/test_hook.py +0 -112
- tests/engines/test_java.py +0 -697
- tests/engines/test_unicorn.py +0 -518
- tests/engines/vex/__init__.py +0 -0
- tests/engines/vex/test_lifter.py +0 -124
- tests/engines/vex/test_vex.py +0 -574
- tests/exploration_techniques/__init__.py +0 -0
- tests/exploration_techniques/test_cacher.py +0 -45
- tests/exploration_techniques/test_director.py +0 -67
- tests/exploration_techniques/test_driller_core.py +0 -48
- tests/exploration_techniques/test_loop_seer.py +0 -158
- tests/exploration_techniques/test_memory_watcher.py +0 -46
- tests/exploration_techniques/test_oppologist.py +0 -65
- tests/exploration_techniques/test_spiller.py +0 -82
- tests/exploration_techniques/test_stochastic.py +0 -40
- tests/exploration_techniques/test_tech_builder.py +0 -61
- tests/exploration_techniques/test_tracer.py +0 -856
- tests/exploration_techniques/test_unique.py +0 -40
- tests/exploration_techniques/test_veritesting.py +0 -120
- tests/factory/__init__.py +0 -0
- tests/factory/block/__init__.py +0 -0
- tests/factory/block/test_block_cache.py +0 -33
- tests/factory/block/test_keystone.py +0 -106
- tests/factory/test_argc.py +0 -101
- tests/factory/test_argc_sym.py +0 -110
- tests/factory/test_argv.py +0 -158
- tests/factory/test_callable.py +0 -266
- tests/factory/test_windows_args.py +0 -36
- tests/knowledge_plugins/__init__.py +0 -0
- tests/knowledge_plugins/cfg/__init__.py +0 -0
- tests/knowledge_plugins/cfg/test_cfg_manager.py +0 -36
- tests/knowledge_plugins/functions/__init__.py +0 -0
- tests/knowledge_plugins/functions/test_function.py +0 -91
- tests/knowledge_plugins/functions/test_function2.py +0 -79
- tests/knowledge_plugins/functions/test_function_manager.py +0 -139
- tests/knowledge_plugins/functions/test_prototypes.py +0 -53
- tests/knowledge_plugins/key_definitions/__init__.py +0 -0
- tests/knowledge_plugins/key_definitions/test_atoms.py +0 -24
- tests/knowledge_plugins/key_definitions/test_environment.py +0 -126
- tests/knowledge_plugins/key_definitions/test_heap_address.py +0 -27
- tests/knowledge_plugins/key_definitions/test_live_definitions.py +0 -72
- tests/knowledge_plugins/test_dwarf_variables.py +0 -240
- tests/knowledge_plugins/test_kb_plugins.py +0 -91
- tests/knowledge_plugins/test_kb_plugins_dwarf.py +0 -36
- tests/knowledge_plugins/test_patches.py +0 -48
- tests/misc/__init__.py +0 -0
- tests/misc/test_hookset.py +0 -57
- tests/perf/__init__.py +0 -0
- tests/perf/perf_cfgemulated.py +0 -19
- tests/perf/perf_cfgfast.py +0 -18
- tests/perf/perf_concrete_execution.py +0 -41
- tests/perf/perf_siminspect_nop.py +0 -36
- tests/perf/perf_state_copy.py +0 -33
- tests/perf/perf_unicorn_0.py +0 -27
- tests/perf/perf_unicorn_1.py +0 -23
- tests/procedures/__init__.py +0 -0
- tests/procedures/glibc/__init__.py +0 -0
- tests/procedures/glibc/test_ctype_locale.py +0 -164
- tests/procedures/libc/__init__.py +0 -0
- tests/procedures/libc/test_fgets.py +0 -53
- tests/procedures/libc/test_scanf.py +0 -205
- tests/procedures/libc/test_sprintf.py +0 -44
- tests/procedures/libc/test_sscanf.py +0 -63
- tests/procedures/libc/test_strcasecmp.py +0 -37
- tests/procedures/libc/test_string.py +0 -1102
- tests/procedures/libc/test_strtol.py +0 -78
- tests/procedures/linux_kernel/__init__.py +0 -0
- tests/procedures/linux_kernel/test_lseek.py +0 -174
- tests/procedures/posix/__init__.py +0 -0
- tests/procedures/posix/test_chroot.py +0 -33
- tests/procedures/posix/test_getenv.py +0 -78
- tests/procedures/posix/test_pwrite_pread.py +0 -57
- tests/procedures/posix/test_sim_time.py +0 -46
- tests/procedures/posix/test_unlink.py +0 -46
- tests/procedures/test_project_resolve_simproc.py +0 -43
- tests/procedures/test_sim_procedure.py +0 -117
- tests/procedures/test_stub_procedure_args.py +0 -53
- tests/serialization/__init__.py +0 -0
- tests/serialization/test_db.py +0 -197
- tests/serialization/test_pickle.py +0 -95
- tests/serialization/test_serialization.py +0 -132
- tests/serialization/test_vault.py +0 -169
- tests/sim/__init__.py +0 -3
- tests/sim/exec_func/__init__.py +0 -0
- tests/sim/exec_func/test_mem_funcs.py +0 -55
- tests/sim/exec_func/test_str_funcs.py +0 -93
- tests/sim/exec_func/test_syscall_result.py +0 -39
- tests/sim/exec_insn/__init__.py +0 -0
- tests/sim/exec_insn/test_adc.py +0 -44
- tests/sim/exec_insn/test_ops.py +0 -83
- tests/sim/exec_insn/test_rcr.py +0 -26
- tests/sim/exec_insn/test_rol.py +0 -51
- tests/sim/exec_insn/test_signed_div.py +0 -34
- tests/sim/exec_insn/test_sqrt.py +0 -56
- tests/sim/options/__init__.py +0 -0
- tests/sim/options/test_0div.py +0 -54
- tests/sim/options/test_symbolic_fd.py +0 -59
- tests/sim/options/test_unsupported.py +0 -34
- tests/sim/test_accuracy.py +0 -137
- tests/sim/test_checkbyte.py +0 -53
- tests/sim/test_echo.py +0 -36
- tests/sim/test_fauxware.py +0 -202
- tests/sim/test_self_modifying_code.py +0 -65
- tests/sim/test_simple_api.py +0 -36
- tests/sim/test_simulation_manager.py +0 -147
- tests/sim/test_stack_alignment.py +0 -65
- tests/sim/test_state.py +0 -303
- tests/sim/test_state_customization.py +0 -54
- tests/sim/test_symbol_hooked_by.py +0 -49
- tests/simos/__init__.py +0 -0
- tests/simos/windows/__init__.py +0 -0
- tests/simos/windows/test_windows_stack_cookie.py +0 -58
- tests/state_plugins/__init__.py +0 -0
- tests/state_plugins/inspect/__init__.py +0 -0
- tests/state_plugins/inspect/test_inspect.py +0 -310
- tests/state_plugins/inspect/test_syscall_override.py +0 -90
- tests/state_plugins/posix/__init__.py +0 -0
- tests/state_plugins/posix/test_file_struct_funcs.py +0 -56
- tests/state_plugins/posix/test_files.py +0 -69
- tests/state_plugins/posix/test_posix.py +0 -72
- tests/state_plugins/solver/__init__.py +0 -0
- tests/state_plugins/solver/test_simsolver.py +0 -58
- tests/state_plugins/solver/test_symbolic.py +0 -153
- tests/state_plugins/solver/test_variable_registration.py +0 -46
- tests/state_plugins/test_callstack.py +0 -54
- tests/state_plugins/test_gdb_plugin.py +0 -35
- tests/state_plugins/test_multi_open_file.py +0 -47
- tests/state_plugins/test_symbolization.py +0 -38
- tests/storage/__init__.py +0 -0
- tests/storage/test_memory.py +0 -960
- tests/storage/test_memory_merge.py +0 -114
- tests/storage/test_memview.py +0 -205
- tests/storage/test_mmap.py +0 -26
- tests/storage/test_multivalues.py +0 -44
- tests/storage/test_permissions.py +0 -32
- tests/storage/test_ptmalloc.py +0 -291
- tests/storage/test_relro_perm.py +0 -49
- tests/test_calling_conventions.py +0 -86
- tests/test_types.py +0 -329
- tests/utils/__init__.py +0 -0
- tests/utils/test_graph.py +0 -41
- {angr-9.2.87.dist-info → angr-9.2.89.dist-info}/LICENSE +0 -0
- {angr-9.2.87.dist-info → angr-9.2.89.dist-info}/WHEEL +0 -0
- {angr-9.2.87.dist-info → angr-9.2.89.dist-info}/entry_points.txt +0 -0
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# pylint: disable=missing-class-docstring,no-self-use,line-too-long
|
|
3
|
-
__package__ = __package__ or "tests.state_plugins.solver" # pylint:disable=redefined-builtin
|
|
4
|
-
|
|
5
|
-
import unittest
|
|
6
|
-
|
|
7
|
-
import angr
|
|
8
|
-
|
|
9
|
-
from ...common import broken
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class TestSymbolic(unittest.TestCase):
|
|
13
|
-
# @broken
|
|
14
|
-
# def test_symvalue(self):
|
|
15
|
-
# # concrete symvalue
|
|
16
|
-
# zero = SimValue(se.BVV(0, 64))
|
|
17
|
-
# assert not zero.is_symbolic()
|
|
18
|
-
# assert zero.eval() == 0
|
|
19
|
-
#
|
|
20
|
-
# # symbolic symvalue
|
|
21
|
-
# x = se.BVS('x', 64)
|
|
22
|
-
# sym = SimValue(x, constraints = [ x > 100, x < 200 ])
|
|
23
|
-
# assert sym.is_symbolic()
|
|
24
|
-
# assert sym.min_int() == 101
|
|
25
|
-
# assert sym.max_int() == 199
|
|
26
|
-
# assert sym.eval_upto(99) == range(101, 200)
|
|
27
|
-
|
|
28
|
-
def test_concretization_strategies(self):
|
|
29
|
-
initial_memory = {0: b"A", 1: b"B", 2: b"C", 3: b"D"}
|
|
30
|
-
|
|
31
|
-
s = angr.SimState(arch="AMD64", dict_memory_backer=initial_memory)
|
|
32
|
-
|
|
33
|
-
# sanity check
|
|
34
|
-
assert s.solver.eval_upto(s.memory.load(3, size=1), 2, cast_to=bytes) == [b"D"]
|
|
35
|
-
|
|
36
|
-
x = s.solver.BVS("x", s.arch.bits)
|
|
37
|
-
s.add_constraints(x >= 1)
|
|
38
|
-
s.add_constraints(x <= 3)
|
|
39
|
-
|
|
40
|
-
ss = s.copy()
|
|
41
|
-
assert tuple(sorted(ss.solver.eval_upto(ss.memory.load(x, 1), 10, cast_to=bytes))) == (b"B", b"C", b"D")
|
|
42
|
-
|
|
43
|
-
ss = s.copy()
|
|
44
|
-
x = s.solver.BVS("x", s.arch.bits)
|
|
45
|
-
s.add_constraints(x >= 1)
|
|
46
|
-
ss.options.add(angr.options.CONSERVATIVE_READ_STRATEGY)
|
|
47
|
-
ss.memory._create_default_read_strategies()
|
|
48
|
-
assert "symbolic" in next(iter(ss.memory.load(x, 1).variables))
|
|
49
|
-
|
|
50
|
-
# def test_concretization(self):
|
|
51
|
-
# s = angr.SimState(arch="AMD64", mode="symbolic")
|
|
52
|
-
# dst = s.solver.BVV(0x41424300, 32)
|
|
53
|
-
# dst_addr = s.solver.BVV(0x1000, 64)
|
|
54
|
-
# s.memory.store(dst_addr, dst, 4)
|
|
55
|
-
|
|
56
|
-
# print "MEM KEYS", s.memory.mem.keys()
|
|
57
|
-
# print "REG KEYS", s.registers.mem.keys()
|
|
58
|
-
|
|
59
|
-
# print "TO NATIVE..."
|
|
60
|
-
# s.set_native(True)
|
|
61
|
-
# print "... done"
|
|
62
|
-
|
|
63
|
-
# vv = s.native_env.vexecute(pyvex.IRExpr.Load("Iend_BE", "Ity_I32",
|
|
64
|
-
# pyvex.IRExpr.Const(pyvex.IRConst.U64(0x1000))))
|
|
65
|
-
# assert vv.str[:4] == 'ABC\x00'
|
|
66
|
-
# s.native_env.vexecute(pyvex.IRSB(bytes='\xb8\x41\x42\x43\x44'))
|
|
67
|
-
|
|
68
|
-
# #import IPython; IPython.embed()
|
|
69
|
-
# print "FROM NATIVE..."
|
|
70
|
-
# s.set_native(False)
|
|
71
|
-
# print "... done"
|
|
72
|
-
|
|
73
|
-
# assert s.reg_value(16).solver.eval() == 0x44434241
|
|
74
|
-
# print "YEAH"
|
|
75
|
-
|
|
76
|
-
@broken
|
|
77
|
-
def test_symbolic_write(self):
|
|
78
|
-
s = angr.SimState(arch="AMD64", mode="symbolic")
|
|
79
|
-
|
|
80
|
-
addr = s.solver.BVS("addr", 64)
|
|
81
|
-
s.add_constraints(s.solver.Or(addr == 10, addr == 20, addr == 30))
|
|
82
|
-
assert len(s.solver.eval_upto(addr, 10)) == 3
|
|
83
|
-
|
|
84
|
-
s.memory.store(10, s.solver.BVV(1, 8))
|
|
85
|
-
s.memory.store(20, s.solver.BVV(2, 8))
|
|
86
|
-
s.memory.store(30, s.solver.BVV(3, 8))
|
|
87
|
-
|
|
88
|
-
assert s.solver.unique(s.memory.load(10, 1))
|
|
89
|
-
assert s.solver.unique(s.memory.load(20, 1))
|
|
90
|
-
assert s.solver.unique(s.memory.load(30, 1))
|
|
91
|
-
|
|
92
|
-
# print "CONSTRAINTS BEFORE:", s.constraints._solver.constraints
|
|
93
|
-
# s.memory.store(addr, s.solver.BVV(255, 8), strategy=['symbolic','any'], limit=100)
|
|
94
|
-
s.memory.store(addr, s.solver.BVV(255, 8))
|
|
95
|
-
assert s.satisfiable()
|
|
96
|
-
|
|
97
|
-
assert len(s.solver.eval_upto(addr, 10)) == 3
|
|
98
|
-
assert s.solver.eval_upto(s.memory.load(10, 1), 3) == [1, 255]
|
|
99
|
-
assert s.solver.eval_upto(s.memory.load(20, 1), 3) == [2, 255]
|
|
100
|
-
assert s.solver.eval_upto(s.memory.load(30, 1), 3) == [3, 255]
|
|
101
|
-
assert len(s.solver.eval_upto(addr, 10)) == 3
|
|
102
|
-
|
|
103
|
-
# see if it works when constraining the write address
|
|
104
|
-
sa = s.copy()
|
|
105
|
-
sa.add_constraints(addr == 20)
|
|
106
|
-
assert sa.satisfiable()
|
|
107
|
-
assert sa.solver.eval_upto(sa.memory.load(10, 1), 3) == [1]
|
|
108
|
-
assert sa.solver.eval_upto(sa.memory.load(20, 1), 3) == [255]
|
|
109
|
-
assert sa.solver.eval_upto(sa.memory.load(30, 1), 3) == [3]
|
|
110
|
-
assert sa.solver.eval_upto(addr, 10) == [20]
|
|
111
|
-
|
|
112
|
-
# see if it works when constraining a value to the written one
|
|
113
|
-
sv = s.copy()
|
|
114
|
-
sv.add_constraints(sv.memory.load(30, 1) == 255)
|
|
115
|
-
assert sv.satisfiable()
|
|
116
|
-
assert sv.solver.eval_upto(sv.memory.load(10, 1), 3) == [1]
|
|
117
|
-
assert sv.solver.eval_upto(sv.memory.load(20, 1), 3) == [2]
|
|
118
|
-
assert sv.solver.eval_upto(sv.memory.load(30, 1), 3) == [255]
|
|
119
|
-
assert sv.solver.eval_upto(addr, 10) == [30]
|
|
120
|
-
|
|
121
|
-
# see if it works when constraining a value to the unwritten one
|
|
122
|
-
sv = s.copy()
|
|
123
|
-
sv.add_constraints(sv.memory.load(30, 1) == 3)
|
|
124
|
-
assert sv.satisfiable()
|
|
125
|
-
assert sv.solver.eval_upto(sv.memory.load(10, 1), 3) == [1, 255]
|
|
126
|
-
assert sv.solver.eval_upto(sv.memory.load(20, 1), 3) == [2, 255]
|
|
127
|
-
assert sv.solver.eval_upto(sv.memory.load(30, 1), 3) == [3]
|
|
128
|
-
assert sv.solver.eval_upto(addr, 10) == [10, 20]
|
|
129
|
-
|
|
130
|
-
s = angr.SimState(arch="AMD64", mode="symbolic")
|
|
131
|
-
s.memory.store(0, s.solver.BVV(0x4141414141414141, 64))
|
|
132
|
-
length = s.solver.BVS("length", 32)
|
|
133
|
-
# s.memory.store(0, s.solver.BVV(0x4242424242424242, 64), symbolic_length=length)
|
|
134
|
-
s.memory.store(0, s.solver.BVV(0x4242424242424242, 64))
|
|
135
|
-
|
|
136
|
-
for i in range(8):
|
|
137
|
-
ss = s.copy()
|
|
138
|
-
ss.add_constraints(length == i)
|
|
139
|
-
assert ss.solver.eval(s.memory.load(0, 8), cast_to=bytes) == b"B" * i + b"A" * (8 - i)
|
|
140
|
-
|
|
141
|
-
def test_unsat_core(self):
|
|
142
|
-
s = angr.SimState(arch="AMD64", mode="symbolic", add_options={angr.options.CONSTRAINT_TRACKING_IN_SOLVER})
|
|
143
|
-
x = s.solver.BVS("x", 32)
|
|
144
|
-
s.add_constraints(s.solver.BVV(0, 32) == x)
|
|
145
|
-
s.add_constraints(s.solver.BVV(1, 32) == x)
|
|
146
|
-
|
|
147
|
-
assert not s.satisfiable()
|
|
148
|
-
unsat_core = s.solver.unsat_core()
|
|
149
|
-
assert len(unsat_core) == 2
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
if __name__ == "__main__":
|
|
153
|
-
unittest.main()
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# pylint: disable=missing-class-docstring,no-self-use,line-too-long
|
|
3
|
-
|
|
4
|
-
import unittest
|
|
5
|
-
|
|
6
|
-
import angr
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class TestVariableRegistration(unittest.TestCase):
|
|
10
|
-
def test_registration(self):
|
|
11
|
-
s = angr.SimState(arch="AMD64")
|
|
12
|
-
|
|
13
|
-
a1 = s.solver.BVS("a", 64, key=(1,), eternal=True)
|
|
14
|
-
a2 = s.solver.BVS("a", 64, key=(1,), eternal=True)
|
|
15
|
-
assert a1 is a2
|
|
16
|
-
|
|
17
|
-
b1 = s.solver.BVS("b", 64, key=(2,), eternal=False)
|
|
18
|
-
s1 = s.copy()
|
|
19
|
-
s2 = s.copy()
|
|
20
|
-
|
|
21
|
-
b2 = s1.solver.BVS("b", 64, key=(2,), eternal=False)
|
|
22
|
-
b3 = s2.solver.BVS("b", 64, key=(2,), eternal=False)
|
|
23
|
-
assert b1 is not b2
|
|
24
|
-
assert b2 is not b3
|
|
25
|
-
assert b1 is not b3
|
|
26
|
-
|
|
27
|
-
a3 = s1.solver.BVS("a", 64, key=(1,), eternal=True)
|
|
28
|
-
a4 = s2.solver.BVS("a", 64, key=(1,), eternal=True)
|
|
29
|
-
assert a2 is a3
|
|
30
|
-
assert a3 is a4
|
|
31
|
-
|
|
32
|
-
assert len(list(s.solver.get_variables(1))) == 1
|
|
33
|
-
assert len(list(s1.solver.get_variables(1))) == 1
|
|
34
|
-
assert len(list(s2.solver.get_variables(1))) == 1
|
|
35
|
-
|
|
36
|
-
assert len(list(s.solver.get_variables(2))) == 1
|
|
37
|
-
assert len(list(s1.solver.get_variables(2))) == 2
|
|
38
|
-
assert len(list(s2.solver.get_variables(2))) == 2
|
|
39
|
-
|
|
40
|
-
assert list(s.solver.describe_variables(a1)) == [(1,)]
|
|
41
|
-
assert list(s.solver.describe_variables(b1)) == [(2, 1)]
|
|
42
|
-
assert sorted(list(s.solver.describe_variables(a1 + b1))) == [(1,), (2, 1)]
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
if __name__ == "__main__":
|
|
46
|
-
unittest.main()
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
import unittest
|
|
3
|
-
|
|
4
|
-
from angr.state_plugins.callstack import CallStack
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
# pylint: disable=missing-class-docstring
|
|
8
|
-
# pylint: disable=no-self-use
|
|
9
|
-
class TestCallstack(unittest.TestCase):
|
|
10
|
-
def test_empty_stack(self):
|
|
11
|
-
cs = CallStack()
|
|
12
|
-
|
|
13
|
-
# Initial setting: just assume the control flow starts from 0x300000
|
|
14
|
-
cs = cs.call(None, 0x300000, None, 0xFFFFFFF0)
|
|
15
|
-
|
|
16
|
-
# Calling 0x401000 from 0x400000. When it returns, it should return to 0x400004.
|
|
17
|
-
# The stack pointer after entering the new function should be 0xffffff00
|
|
18
|
-
# Note: this means on platforms like x86 and AMD64 where CALL instruction actually pushes the ret address on to
|
|
19
|
-
# the stack and modifies the stack pointer, the user should adjust stack pointer accordingly (minus 4 or 8, for
|
|
20
|
-
# example) before passing to CallStack.call(). CallStack has no way to know what the architecture it is used on.
|
|
21
|
-
cs = cs.call(0x400000, 0x401000, 0x400004, 0xFFFFFF00)
|
|
22
|
-
|
|
23
|
-
cs = cs.call(0x401008, 0x402000, 0x40100C, 0xFFFFFE80)
|
|
24
|
-
|
|
25
|
-
assert cs.current_function_address == 0x402000
|
|
26
|
-
assert cs.current_stack_pointer == 0xFFFFFE80
|
|
27
|
-
|
|
28
|
-
# Return to 0x40100c
|
|
29
|
-
cs = cs.ret(0x40100C)
|
|
30
|
-
|
|
31
|
-
assert cs.current_function_address == 0x401000
|
|
32
|
-
assert cs.current_stack_pointer == 0xFFFFFF00
|
|
33
|
-
|
|
34
|
-
cs = cs.ret(0x400004)
|
|
35
|
-
|
|
36
|
-
assert cs.current_function_address == 0x300000
|
|
37
|
-
assert cs.current_stack_pointer == 0xFFFFFFF0
|
|
38
|
-
|
|
39
|
-
# We return one more time to see what happens
|
|
40
|
-
# Ideally nothing should be popped out
|
|
41
|
-
cs = cs.ret(0x200000)
|
|
42
|
-
|
|
43
|
-
assert cs.current_function_address == 0x300000
|
|
44
|
-
assert cs.current_stack_pointer == 0xFFFFFFF0
|
|
45
|
-
|
|
46
|
-
# Final return!
|
|
47
|
-
cs = cs.ret(None)
|
|
48
|
-
|
|
49
|
-
assert cs.current_function_address == 0
|
|
50
|
-
assert cs.current_stack_pointer == 0
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if __name__ == "__main__":
|
|
54
|
-
unittest.main()
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# pylint: disable=missing-class-docstring,disable=no-self-use
|
|
3
|
-
__package__ = __package__ or "tests.state_plugins" # pylint:disable=redefined-builtin
|
|
4
|
-
|
|
5
|
-
import os
|
|
6
|
-
import unittest
|
|
7
|
-
|
|
8
|
-
import angr
|
|
9
|
-
|
|
10
|
-
from ..common import bin_location
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
test_location = os.path.join(bin_location, "tests")
|
|
14
|
-
data_location = os.path.join(bin_location, "tests_data", "test_gdb_plugin")
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class TestGdbPlugin(unittest.TestCase):
|
|
18
|
-
def test_gdb(self):
|
|
19
|
-
p = angr.Project(os.path.join(test_location, "x86_64", "test_gdb_plugin"), auto_load_libs=False)
|
|
20
|
-
st = p.factory.blank_state()
|
|
21
|
-
|
|
22
|
-
st.gdb.set_stack(os.path.join(data_location, "stack"), stack_top=0x7FFFFFFFF000)
|
|
23
|
-
st.gdb.set_heap(os.path.join(data_location, "heap"), heap_base=0x601000)
|
|
24
|
-
st.gdb.set_regs(os.path.join(data_location, "regs"))
|
|
25
|
-
|
|
26
|
-
assert st.solver.eval(st.regs.rip) == 0x4005B4
|
|
27
|
-
|
|
28
|
-
# Read the byte in memory at $sp + 8
|
|
29
|
-
loc = st.solver.eval(st.regs.rsp) + 8
|
|
30
|
-
val = st.memory.load(loc, 8, endness=st.arch.memory_endness)
|
|
31
|
-
assert st.solver.eval(val) == 0x00601010
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
if __name__ == "__main__":
|
|
35
|
-
unittest.main()
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# pylint: disable=missing-class-docstring,no-self-use,line-too-long
|
|
3
|
-
__package__ = __package__ or "tests.state_plugins" # pylint:disable=redefined-builtin
|
|
4
|
-
|
|
5
|
-
import os
|
|
6
|
-
import unittest
|
|
7
|
-
|
|
8
|
-
import angr
|
|
9
|
-
|
|
10
|
-
from ..common import bin_location
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
test_location = os.path.join(bin_location, "tests")
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
class TestMultiOpenFile(unittest.TestCase):
|
|
17
|
-
def test_multi_open_file(self):
|
|
18
|
-
test_bin = os.path.join(test_location, "x86_64", "test_multi_open_file")
|
|
19
|
-
# auto_load_libs cannot be disabled as the test fails
|
|
20
|
-
b = angr.Project(test_bin)
|
|
21
|
-
|
|
22
|
-
pg = b.factory.simulation_manager()
|
|
23
|
-
pg.active[0].options.discard("LAZY_SOLVES")
|
|
24
|
-
pg.explore()
|
|
25
|
-
|
|
26
|
-
assert len(pg.deadended) == 1
|
|
27
|
-
|
|
28
|
-
# See the source file in binaries/tests_src/test_multi_open_file.c
|
|
29
|
-
# for the tests run
|
|
30
|
-
for p in pg.deadended:
|
|
31
|
-
assert p.posix.dumps(2) == b""
|
|
32
|
-
|
|
33
|
-
# Check that the temp file was deleted
|
|
34
|
-
assert p.fs._files == {}
|
|
35
|
-
|
|
36
|
-
# Check that the deleted temp file contained the appropriate string
|
|
37
|
-
for event in p.history.events:
|
|
38
|
-
if event.type == "fs_unlink":
|
|
39
|
-
simfile = p.fs.unlinks[event.objects["unlink_idx"]][1]
|
|
40
|
-
assert simfile.concretize() == b"foobar and baz"
|
|
41
|
-
break
|
|
42
|
-
else:
|
|
43
|
-
assert False
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
if __name__ == "__main__":
|
|
47
|
-
unittest.main()
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# pylint: disable=missing-class-docstring,no-self-use,line-too-long
|
|
3
|
-
__package__ = __package__ or "tests.state_plugins" # pylint:disable=redefined-builtin
|
|
4
|
-
|
|
5
|
-
import os
|
|
6
|
-
import unittest
|
|
7
|
-
|
|
8
|
-
import angr
|
|
9
|
-
|
|
10
|
-
from ..common import bin_location
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
test_location = os.path.join(bin_location, "tests")
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
class TestSymbolization(unittest.TestCase):
|
|
17
|
-
def test_fauxware_symbolization(self):
|
|
18
|
-
p = angr.Project(os.path.join(test_location, "x86_64", "fauxware"), auto_load_libs=False)
|
|
19
|
-
sm = p.factory.simulation_manager()
|
|
20
|
-
|
|
21
|
-
assert not sm.one_active.regs.rsp.symbolic
|
|
22
|
-
|
|
23
|
-
sm.one_active.symbolizer.set_symbolization_for_all_pages()
|
|
24
|
-
sm.one_active.symbolizer.resymbolize()
|
|
25
|
-
|
|
26
|
-
# assert sm.one_active.regs.rsp.symbolic
|
|
27
|
-
assert sm.one_active.symbolizer.symbolized_count
|
|
28
|
-
|
|
29
|
-
# make sure pointers get symbolized at runtime
|
|
30
|
-
n = sm.one_active.symbolizer.symbolized_count
|
|
31
|
-
sm.run()
|
|
32
|
-
assert not sm.errored
|
|
33
|
-
assert not sm.active
|
|
34
|
-
assert sm.one_deadended.symbolizer.symbolized_count > n
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
if __name__ == "__main__":
|
|
38
|
-
unittest.main()
|
tests/storage/__init__.py
DELETED
|
File without changes
|