angr 9.2.120__py3-none-manylinux2014_aarch64.whl → 9.2.122__py3-none-manylinux2014_aarch64.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 +1 -1
- angr/analyses/cfg/cfg_fast.py +2 -1
- angr/analyses/cfg/indirect_jump_resolvers/__init__.py +2 -0
- angr/analyses/cfg/indirect_jump_resolvers/default_resolvers.py +2 -0
- angr/analyses/cfg/indirect_jump_resolvers/jumptable.py +10 -6
- angr/analyses/cfg/indirect_jump_resolvers/mips_elf_fast.py +138 -367
- angr/analyses/cfg/indirect_jump_resolvers/mips_elf_got.py +148 -0
- angr/analyses/decompiler/callsite_maker.py +11 -1
- angr/analyses/decompiler/ccall_rewriters/amd64_ccalls.py +20 -0
- angr/analyses/typehoon/typevars.py +37 -16
- angr/angrdb/db.py +1 -1
- angr/block.py +9 -1
- angr/calling_conventions.py +1 -1
- angr/engines/engine.py +8 -15
- angr/engines/pcode/lifter.py +8 -0
- angr/engines/successors.py +1 -1
- angr/engines/vex/claripy/ccall.py +1 -1
- angr/engines/vex/claripy/datalayer.py +7 -10
- angr/engines/vex/heavy/actions.py +19 -24
- angr/engines/vex/heavy/heavy.py +7 -1
- angr/engines/vex/lifter.py +3 -1
- angr/engines/vex/light/light.py +2 -2
- angr/factory.py +5 -0
- angr/knowledge_plugins/cfg/memory_data.py +1 -0
- angr/lib/angr_native.so +0 -0
- angr/protos/cfg_pb2.py +23 -15
- angr/protos/function_pb2.py +19 -21
- angr/protos/primitives_pb2.py +46 -112
- angr/protos/variables_pb2.py +38 -114
- angr/protos/xrefs_pb2.py +17 -18
- angr/sim_state.py +2 -78
- angr/sim_type.py +53 -18
- angr/state_plugins/solver.py +72 -15
- angr/storage/__init__.py +1 -2
- angr/storage/memory_mixins/__init__.py +5 -160
- angr/storage/memory_mixins/actions_mixin.py +1 -1
- angr/storage/memory_mixins/address_concretization_mixin.py +1 -1
- angr/storage/memory_mixins/bvv_conversion_mixin.py +1 -1
- angr/storage/memory_mixins/clouseau_mixin.py +2 -1
- angr/storage/memory_mixins/conditional_store_mixin.py +1 -1
- angr/storage/memory_mixins/convenient_mappings_mixin.py +1 -1
- angr/storage/memory_mixins/default_filler_mixin.py +1 -1
- angr/storage/memory_mixins/dirty_addrs_mixin.py +2 -1
- angr/storage/memory_mixins/hex_dumper_mixin.py +1 -1
- angr/storage/memory_mixins/javavm_memory_mixin.py +1 -1
- angr/storage/memory_mixins/keyvalue_memory_mixin.py +1 -1
- angr/storage/memory_mixins/label_merger_mixin.py +1 -1
- angr/storage/memory_mixins/memory_mixin.py +163 -0
- angr/storage/memory_mixins/multi_value_merger_mixin.py +1 -1
- angr/storage/memory_mixins/name_resolution_mixin.py +3 -1
- angr/storage/memory_mixins/paged_memory/paged_memory_mixin.py +1 -1
- angr/storage/memory_mixins/paged_memory/paged_memory_multivalue_mixin.py +2 -1
- angr/storage/memory_mixins/paged_memory/pages/__init__.py +1 -1
- angr/storage/memory_mixins/paged_memory/pages/history_tracking_mixin.py +1 -1
- angr/storage/memory_mixins/paged_memory/pages/ispo_mixin.py +2 -1
- angr/storage/memory_mixins/paged_memory/pages/permissions_mixin.py +1 -1
- angr/storage/memory_mixins/paged_memory/pages/refcount_mixin.py +2 -1
- angr/storage/memory_mixins/paged_memory/pages/ultra_page.py +1 -1
- angr/storage/memory_mixins/regioned_memory/abstract_merger_mixin.py +1 -2
- angr/storage/memory_mixins/regioned_memory/region_category_mixin.py +2 -1
- angr/storage/memory_mixins/regioned_memory/region_meta_mixin.py +1 -1
- angr/storage/memory_mixins/regioned_memory/regioned_address_concretization_mixin.py +1 -1
- angr/storage/memory_mixins/regioned_memory/regioned_memory_mixin.py +2 -2
- angr/storage/memory_mixins/simple_interface_mixin.py +2 -1
- angr/storage/memory_mixins/simplification_mixin.py +2 -1
- angr/storage/memory_mixins/size_resolution_mixin.py +1 -1
- angr/storage/memory_mixins/slotted_memory.py +2 -2
- angr/storage/memory_mixins/smart_find_mixin.py +1 -1
- angr/storage/memory_mixins/symbolic_merger_mixin.py +2 -1
- angr/storage/memory_mixins/top_merger_mixin.py +3 -2
- angr/storage/memory_mixins/underconstrained_mixin.py +4 -2
- angr/storage/memory_mixins/unwrapper_mixin.py +2 -1
- {angr-9.2.120.dist-info → angr-9.2.122.dist-info}/METADATA +7 -7
- {angr-9.2.120.dist-info → angr-9.2.122.dist-info}/RECORD +78 -76
- {angr-9.2.120.dist-info → angr-9.2.122.dist-info}/LICENSE +0 -0
- {angr-9.2.120.dist-info → angr-9.2.122.dist-info}/WHEEL +0 -0
- {angr-9.2.120.dist-info → angr-9.2.122.dist-info}/entry_points.txt +0 -0
- {angr-9.2.120.dist-info → angr-9.2.122.dist-info}/top_level.txt +0 -0
angr/protos/variables_pb2.py
CHANGED
|
@@ -1,126 +1,50 @@
|
|
|
1
1
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
2
|
+
# NO CHECKED-IN PROTOBUF GENCODE
|
|
2
3
|
# source: protos/variables.proto
|
|
4
|
+
# Protobuf Python Version: 5.28.2
|
|
3
5
|
"""Generated protocol buffer code."""
|
|
6
|
+
|
|
4
7
|
from google.protobuf import descriptor as _descriptor
|
|
5
8
|
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
6
|
-
from google.protobuf import
|
|
7
|
-
from google.protobuf import reflection as _reflection
|
|
9
|
+
from google.protobuf import runtime_version as _runtime_version
|
|
8
10
|
from google.protobuf import symbol_database as _symbol_database
|
|
11
|
+
from google.protobuf.internal import builder as _builder
|
|
12
|
+
|
|
13
|
+
_runtime_version.ValidateProtobufRuntimeVersion(_runtime_version.Domain.PUBLIC, 5, 28, 2, "", "protos/variables.proto")
|
|
9
14
|
# @@protoc_insertion_point(imports)
|
|
10
15
|
|
|
11
16
|
_sym_db = _symbol_database.Default()
|
|
12
17
|
|
|
13
18
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
RegisterVariable = _reflection.GeneratedProtocolMessageType('RegisterVariable', (_message.Message,), {
|
|
46
|
-
'DESCRIPTOR' : _REGISTERVARIABLE,
|
|
47
|
-
'__module__' : 'protos.variables_pb2'
|
|
48
|
-
# @@protoc_insertion_point(class_scope:angr.protos.RegisterVariable)
|
|
49
|
-
})
|
|
50
|
-
_sym_db.RegisterMessage(RegisterVariable)
|
|
51
|
-
|
|
52
|
-
MemoryVariable = _reflection.GeneratedProtocolMessageType('MemoryVariable', (_message.Message,), {
|
|
53
|
-
'DESCRIPTOR' : _MEMORYVARIABLE,
|
|
54
|
-
'__module__' : 'protos.variables_pb2'
|
|
55
|
-
# @@protoc_insertion_point(class_scope:angr.protos.MemoryVariable)
|
|
56
|
-
})
|
|
57
|
-
_sym_db.RegisterMessage(MemoryVariable)
|
|
58
|
-
|
|
59
|
-
StackVariable = _reflection.GeneratedProtocolMessageType('StackVariable', (_message.Message,), {
|
|
60
|
-
'DESCRIPTOR' : _STACKVARIABLE,
|
|
61
|
-
'__module__' : 'protos.variables_pb2'
|
|
62
|
-
# @@protoc_insertion_point(class_scope:angr.protos.StackVariable)
|
|
63
|
-
})
|
|
64
|
-
_sym_db.RegisterMessage(StackVariable)
|
|
65
|
-
|
|
66
|
-
VariableAccess = _reflection.GeneratedProtocolMessageType('VariableAccess', (_message.Message,), {
|
|
67
|
-
'DESCRIPTOR' : _VARIABLEACCESS,
|
|
68
|
-
'__module__' : 'protos.variables_pb2'
|
|
69
|
-
# @@protoc_insertion_point(class_scope:angr.protos.VariableAccess)
|
|
70
|
-
})
|
|
71
|
-
_sym_db.RegisterMessage(VariableAccess)
|
|
72
|
-
|
|
73
|
-
VariableType = _reflection.GeneratedProtocolMessageType('VariableType', (_message.Message,), {
|
|
74
|
-
'DESCRIPTOR' : _VARIABLETYPE,
|
|
75
|
-
'__module__' : 'protos.variables_pb2'
|
|
76
|
-
# @@protoc_insertion_point(class_scope:angr.protos.VariableType)
|
|
77
|
-
})
|
|
78
|
-
_sym_db.RegisterMessage(VariableType)
|
|
79
|
-
|
|
80
|
-
Var2Unified = _reflection.GeneratedProtocolMessageType('Var2Unified', (_message.Message,), {
|
|
81
|
-
'DESCRIPTOR' : _VAR2UNIFIED,
|
|
82
|
-
'__module__' : 'protos.variables_pb2'
|
|
83
|
-
# @@protoc_insertion_point(class_scope:angr.protos.Var2Unified)
|
|
84
|
-
})
|
|
85
|
-
_sym_db.RegisterMessage(Var2Unified)
|
|
86
|
-
|
|
87
|
-
Phi2Var = _reflection.GeneratedProtocolMessageType('Phi2Var', (_message.Message,), {
|
|
88
|
-
'DESCRIPTOR' : _PHI2VAR,
|
|
89
|
-
'__module__' : 'protos.variables_pb2'
|
|
90
|
-
# @@protoc_insertion_point(class_scope:angr.protos.Phi2Var)
|
|
91
|
-
})
|
|
92
|
-
_sym_db.RegisterMessage(Phi2Var)
|
|
93
|
-
|
|
94
|
-
VariableManagerInternal = _reflection.GeneratedProtocolMessageType('VariableManagerInternal', (_message.Message,), {
|
|
95
|
-
'DESCRIPTOR' : _VARIABLEMANAGERINTERNAL,
|
|
96
|
-
'__module__' : 'protos.variables_pb2'
|
|
97
|
-
# @@protoc_insertion_point(class_scope:angr.protos.VariableManagerInternal)
|
|
98
|
-
})
|
|
99
|
-
_sym_db.RegisterMessage(VariableManagerInternal)
|
|
100
|
-
|
|
101
|
-
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
102
|
-
|
|
103
|
-
DESCRIPTOR._options = None
|
|
104
|
-
_VARIABLEBASE._serialized_start=40
|
|
105
|
-
_VARIABLEBASE._serialized_end=184
|
|
106
|
-
_TEMPORARYVARIABLE._serialized_start=186
|
|
107
|
-
_TEMPORARYVARIABLE._serialized_end=262
|
|
108
|
-
_REGISTERVARIABLE._serialized_start=264
|
|
109
|
-
_REGISTERVARIABLE._serialized_end=350
|
|
110
|
-
_MEMORYVARIABLE._serialized_start=352
|
|
111
|
-
_MEMORYVARIABLE._serialized_end=437
|
|
112
|
-
_STACKVARIABLE._serialized_start=439
|
|
113
|
-
_STACKVARIABLE._serialized_end=556
|
|
114
|
-
_VARIABLEACCESS._serialized_start=559
|
|
115
|
-
_VARIABLEACCESS._serialized_end=843
|
|
116
|
-
_VARIABLEACCESS_VARIABLEACCESSSORT._serialized_start=762
|
|
117
|
-
_VARIABLEACCESS_VARIABLEACCESSSORT._serialized_end=818
|
|
118
|
-
_VARIABLETYPE._serialized_start=845
|
|
119
|
-
_VARIABLETYPE._serialized_end=892
|
|
120
|
-
_VAR2UNIFIED._serialized_start=894
|
|
121
|
-
_VAR2UNIFIED._serialized_end=953
|
|
122
|
-
_PHI2VAR._serialized_start=955
|
|
123
|
-
_PHI2VAR._serialized_end=1002
|
|
124
|
-
_VARIABLEMANAGERINTERNAL._serialized_start=1005
|
|
125
|
-
_VARIABLEMANAGERINTERNAL._serialized_end=1619
|
|
19
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(
|
|
20
|
+
b'\n\x16protos/variables.proto\x12\x0b\x61ngr.protos"\x90\x01\n\x0cVariableBase\x12\r\n\x05ident\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x13\n\x06region\x18\x03 \x01(\x04H\x00\x88\x01\x01\x12\x15\n\x08\x63\x61tegory\x18\x04 \x01(\tH\x01\x88\x01\x01\x12\x0f\n\x07renamed\x18\x05 \x01(\x08\x12\x0e\n\x06is_phi\x18\x06 \x01(\x08\x42\t\n\x07_regionB\x0b\n\t_category"L\n\x11TemporaryVariable\x12\'\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x19.angr.protos.VariableBase\x12\x0e\n\x06tmp_id\x18\x02 \x01(\r"V\n\x10RegisterVariable\x12\'\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x19.angr.protos.VariableBase\x12\x0b\n\x03reg\x18\x02 \x01(\r\x12\x0c\n\x04size\x18\x03 \x01(\r"U\n\x0eMemoryVariable\x12\'\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x19.angr.protos.VariableBase\x12\x0c\n\x04\x61\x64\x64r\x18\x02 \x01(\x04\x12\x0c\n\x04size\x18\x03 \x01(\r"u\n\rStackVariable\x12\'\n\x04\x62\x61se\x18\x01 \x01(\x0b\x32\x19.angr.protos.VariableBase\x12\x0c\n\x04\x61\x64\x64r\x18\x02 \x01(\x04\x12\x0c\n\x04size\x18\x03 \x01(\r\x12\x0f\n\x07sp_base\x18\x04 \x01(\x08\x12\x0e\n\x06offset\x18\x05 \x01(\x05"\x9c\x02\n\x0eVariableAccess\x12\r\n\x05ident\x18\x01 \x01(\t\x12\x12\n\nblock_addr\x18\x02 \x01(\x04\x12\x10\n\x08stmt_idx\x18\x03 \x01(\x05\x12\x10\n\x08ins_addr\x18\x04 \x01(\x04\x12\x13\n\x06offset\x18\x05 \x01(\x03H\x00\x88\x01\x01\x12\x43\n\x0b\x61\x63\x63\x65ss_type\x18\x06 \x01(\x0e\x32..angr.protos.VariableAccess.VariableAccessSort\x12\x16\n\tatom_hash\x18\x07 \x01(\rH\x01\x88\x01\x01"8\n\x12VariableAccessSort\x12\t\n\x05WRITE\x10\x00\x12\x08\n\x04READ\x10\x01\x12\r\n\tREFERENCE\x10\x02\x42\t\n\x07_offsetB\x0c\n\n_atom_hash"/\n\x0cVariableType\x12\r\n\x05ident\x18\x01 \x01(\t\x12\x10\n\x08var_type\x18\x02 \x01(\t";\n\x0bVar2Unified\x12\x11\n\tvar_ident\x18\x01 \x01(\t\x12\x19\n\x11unified_var_ident\x18\x02 \x01(\t"/\n\x07Phi2Var\x12\x11\n\tphi_ident\x18\x01 \x01(\t\x12\x11\n\tvar_ident\x18\x02 \x01(\t"\xe6\x04\n\x17VariableManagerInternal\x12\x30\n\x08tempvars\x18\x01 \x03(\x0b\x32\x1e.angr.protos.TemporaryVariable\x12.\n\x07regvars\x18\x02 \x03(\x0b\x32\x1d.angr.protos.RegisterVariable\x12,\n\x07memvars\x18\x03 \x03(\x0b\x32\x1b.angr.protos.MemoryVariable\x12-\n\tstackvars\x18\x04 \x03(\x0b\x32\x1a.angr.protos.StackVariable\x12-\n\x08\x61\x63\x63\x65sses\x18\x05 \x03(\x0b\x32\x1b.angr.protos.VariableAccess\x12\x38\n\x10unified_tempvars\x18\x06 \x03(\x0b\x32\x1e.angr.protos.TemporaryVariable\x12\x36\n\x0funified_regvars\x18\x07 \x03(\x0b\x32\x1d.angr.protos.RegisterVariable\x12\x34\n\x0funified_memvars\x18\x08 \x03(\x0b\x32\x1b.angr.protos.MemoryVariable\x12\x35\n\x11unified_stackvars\x18\t \x03(\x0b\x32\x1a.angr.protos.StackVariable\x12-\n\x0bvar2unified\x18\n \x03(\x0b\x32\x18.angr.protos.Var2Unified\x12(\n\x05types\x18\x0b \x03(\x0b\x32\x19.angr.protos.VariableType\x12%\n\x07phi2var\x18\x0c \x03(\x0b\x32\x14.angr.protos.Phi2Varb\x06proto3'
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
_globals = globals()
|
|
24
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
25
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "protos.variables_pb2", _globals)
|
|
26
|
+
if not _descriptor._USE_C_DESCRIPTORS:
|
|
27
|
+
DESCRIPTOR._loaded_options = None
|
|
28
|
+
_globals["_VARIABLEBASE"]._serialized_start = 40
|
|
29
|
+
_globals["_VARIABLEBASE"]._serialized_end = 184
|
|
30
|
+
_globals["_TEMPORARYVARIABLE"]._serialized_start = 186
|
|
31
|
+
_globals["_TEMPORARYVARIABLE"]._serialized_end = 262
|
|
32
|
+
_globals["_REGISTERVARIABLE"]._serialized_start = 264
|
|
33
|
+
_globals["_REGISTERVARIABLE"]._serialized_end = 350
|
|
34
|
+
_globals["_MEMORYVARIABLE"]._serialized_start = 352
|
|
35
|
+
_globals["_MEMORYVARIABLE"]._serialized_end = 437
|
|
36
|
+
_globals["_STACKVARIABLE"]._serialized_start = 439
|
|
37
|
+
_globals["_STACKVARIABLE"]._serialized_end = 556
|
|
38
|
+
_globals["_VARIABLEACCESS"]._serialized_start = 559
|
|
39
|
+
_globals["_VARIABLEACCESS"]._serialized_end = 843
|
|
40
|
+
_globals["_VARIABLEACCESS_VARIABLEACCESSSORT"]._serialized_start = 762
|
|
41
|
+
_globals["_VARIABLEACCESS_VARIABLEACCESSSORT"]._serialized_end = 818
|
|
42
|
+
_globals["_VARIABLETYPE"]._serialized_start = 845
|
|
43
|
+
_globals["_VARIABLETYPE"]._serialized_end = 892
|
|
44
|
+
_globals["_VAR2UNIFIED"]._serialized_start = 894
|
|
45
|
+
_globals["_VAR2UNIFIED"]._serialized_end = 953
|
|
46
|
+
_globals["_PHI2VAR"]._serialized_start = 955
|
|
47
|
+
_globals["_PHI2VAR"]._serialized_end = 1002
|
|
48
|
+
_globals["_VARIABLEMANAGERINTERNAL"]._serialized_start = 1005
|
|
49
|
+
_globals["_VARIABLEMANAGERINTERNAL"]._serialized_end = 1619
|
|
126
50
|
# @@protoc_insertion_point(module_scope)
|
angr/protos/xrefs_pb2.py
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
2
|
+
# NO CHECKED-IN PROTOBUF GENCODE
|
|
2
3
|
# source: protos/xrefs.proto
|
|
4
|
+
# Protobuf Python Version: 5.28.2
|
|
3
5
|
"""Generated protocol buffer code."""
|
|
6
|
+
|
|
4
7
|
from google.protobuf import descriptor as _descriptor
|
|
5
8
|
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
6
|
-
from google.protobuf import
|
|
7
|
-
from google.protobuf import reflection as _reflection
|
|
9
|
+
from google.protobuf import runtime_version as _runtime_version
|
|
8
10
|
from google.protobuf import symbol_database as _symbol_database
|
|
11
|
+
from google.protobuf.internal import builder as _builder
|
|
12
|
+
|
|
13
|
+
_runtime_version.ValidateProtobufRuntimeVersion(_runtime_version.Domain.PUBLIC, 5, 28, 2, "", "protos/xrefs.proto")
|
|
9
14
|
# @@protoc_insertion_point(imports)
|
|
10
15
|
|
|
11
16
|
_sym_db = _symbol_database.Default()
|
|
@@ -14,21 +19,15 @@ _sym_db = _symbol_database.Default()
|
|
|
14
19
|
from . import primitives_pb2 as protos_dot_primitives__pb2
|
|
15
20
|
|
|
16
21
|
|
|
17
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
_XREFS = DESCRIPTOR.message_types_by_name['XRefs']
|
|
22
|
-
XRefs = _reflection.GeneratedProtocolMessageType('XRefs', (_message.Message,), {
|
|
23
|
-
'DESCRIPTOR' : _XREFS,
|
|
24
|
-
'__module__' : 'protos.xrefs_pb2'
|
|
25
|
-
# @@protoc_insertion_point(class_scope:angr.protos.XRefs)
|
|
26
|
-
})
|
|
27
|
-
_sym_db.RegisterMessage(XRefs)
|
|
28
|
-
|
|
29
|
-
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
22
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(
|
|
23
|
+
b'\n\x12protos/xrefs.proto\x12\x0b\x61ngr.protos\x1a\x17protos/primitives.proto"2\n\x05XRefs\x12)\n\x05xrefs\x18\x01 \x03(\x0b\x32\x1a.angr.protos.CodeReferenceb\x06proto3'
|
|
24
|
+
)
|
|
30
25
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
26
|
+
_globals = globals()
|
|
27
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
28
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, "protos.xrefs_pb2", _globals)
|
|
29
|
+
if not _descriptor._USE_C_DESCRIPTORS:
|
|
30
|
+
DESCRIPTOR._loaded_options = None
|
|
31
|
+
_globals["_XREFS"]._serialized_start = 60
|
|
32
|
+
_globals["_XREFS"]._serialized_end = 110
|
|
34
33
|
# @@protoc_insertion_point(module_scope)
|
angr/sim_state.py
CHANGED
|
@@ -485,92 +485,18 @@ class SimState(PluginHub):
|
|
|
485
485
|
"""
|
|
486
486
|
return self.solver.simplify(*args)
|
|
487
487
|
|
|
488
|
-
def add_constraints(self, *
|
|
488
|
+
def add_constraints(self, *constraints):
|
|
489
489
|
"""
|
|
490
490
|
Add some constraints to the state.
|
|
491
491
|
|
|
492
492
|
You may pass in any number of symbolic booleans as variadic positional arguments.
|
|
493
493
|
"""
|
|
494
|
-
|
|
495
|
-
raise Exception("Tuple or list passed to add_constraints!")
|
|
496
|
-
|
|
497
|
-
if o.TRACK_CONSTRAINTS in self.options and len(args) > 0:
|
|
498
|
-
constraints = [self.simplify(a) for a in args] if o.SIMPLIFY_CONSTRAINTS in self.options else args
|
|
499
|
-
|
|
500
|
-
self._inspect("constraints", BP_BEFORE, added_constraints=constraints)
|
|
501
|
-
constraints = self._inspect_getattr("added_constraints", constraints)
|
|
502
|
-
added = self.solver.add(*constraints)
|
|
503
|
-
self._inspect("constraints", BP_AFTER)
|
|
504
|
-
|
|
505
|
-
# add actions for the added constraints
|
|
506
|
-
if o.TRACK_CONSTRAINT_ACTIONS in self.options:
|
|
507
|
-
for c in added:
|
|
508
|
-
sac = SimActionConstraint(self, c)
|
|
509
|
-
self.history.add_action(sac)
|
|
510
|
-
else:
|
|
511
|
-
# preserve the old action logic for when we don't track constraints (why?)
|
|
512
|
-
if "action" in kwargs and kwargs["action"] and o.TRACK_CONSTRAINT_ACTIONS in self.options and len(args) > 0:
|
|
513
|
-
for arg in args:
|
|
514
|
-
if self.solver.symbolic(arg):
|
|
515
|
-
sac = SimActionConstraint(self, arg)
|
|
516
|
-
self.history.add_action(sac)
|
|
517
|
-
|
|
518
|
-
if o.ABSTRACT_SOLVER in self.options and len(args) > 0:
|
|
519
|
-
for arg in args:
|
|
520
|
-
if self.solver.is_false(arg):
|
|
521
|
-
self._satisfiable = False
|
|
522
|
-
return
|
|
523
|
-
|
|
524
|
-
if self.solver.is_true(arg):
|
|
525
|
-
continue
|
|
526
|
-
|
|
527
|
-
# It's neither True or False. Let's try to apply the condition
|
|
528
|
-
|
|
529
|
-
# We take the argument, extract a list of constrained SIs out of it (if we could, of course), and
|
|
530
|
-
# then replace each original SI the intersection of original SI and the constrained one.
|
|
531
|
-
|
|
532
|
-
_, converted = claripy.constraint_to_si(arg)
|
|
533
|
-
|
|
534
|
-
for original_expr, constrained_si in converted:
|
|
535
|
-
if not original_expr.variables:
|
|
536
|
-
l.error(
|
|
537
|
-
"Incorrect original_expression to replace in add_constraints(). "
|
|
538
|
-
"This is due to defects in VSA logics inside claripy. Please report "
|
|
539
|
-
"to Fish and he will fix it if he's free."
|
|
540
|
-
)
|
|
541
|
-
continue
|
|
542
|
-
|
|
543
|
-
new_expr = constrained_si
|
|
544
|
-
self.registers.replace_all(original_expr, new_expr)
|
|
545
|
-
self.memory.replace_all(original_expr, new_expr)
|
|
546
|
-
# tmps
|
|
547
|
-
temps = self.scratch.temps
|
|
548
|
-
for idx in range(len(temps)): # pylint:disable=consider-using-enumerate
|
|
549
|
-
t = temps[idx]
|
|
550
|
-
if t is None:
|
|
551
|
-
continue
|
|
552
|
-
if t.variables.intersection(original_expr.variables):
|
|
553
|
-
# replace
|
|
554
|
-
temps[idx] = t.replace(original_expr, new_expr)
|
|
555
|
-
|
|
556
|
-
l.debug("SimState.add_constraints: Applied to final state.")
|
|
557
|
-
elif o.SYMBOLIC not in self.options and len(args) > 0:
|
|
558
|
-
for arg in args:
|
|
559
|
-
if self.solver.is_false(arg):
|
|
560
|
-
self._satisfiable = False
|
|
561
|
-
return
|
|
494
|
+
return self.solver.add(*constraints)
|
|
562
495
|
|
|
563
496
|
def satisfiable(self, **kwargs):
|
|
564
497
|
"""
|
|
565
498
|
Whether the state's constraints are satisfiable
|
|
566
499
|
"""
|
|
567
|
-
if o.ABSTRACT_SOLVER in self.options or o.SYMBOLIC not in self.options:
|
|
568
|
-
extra_constraints = kwargs.pop("extra_constraints", ())
|
|
569
|
-
for e in extra_constraints:
|
|
570
|
-
if self.solver.is_false(e):
|
|
571
|
-
return False
|
|
572
|
-
|
|
573
|
-
return self._satisfiable
|
|
574
500
|
return self.solver.satisfiable(**kwargs)
|
|
575
501
|
|
|
576
502
|
def downsize(self):
|
|
@@ -975,5 +901,3 @@ default_state_plugin_preset = PluginPreset()
|
|
|
975
901
|
SimState.register_preset("default", default_state_plugin_preset)
|
|
976
902
|
|
|
977
903
|
from .state_plugins.history import SimStateHistory
|
|
978
|
-
from .state_plugins.inspect import BP_AFTER, BP_BEFORE
|
|
979
|
-
from .state_plugins.sim_action import SimActionConstraint
|
angr/sim_type.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# pylint:disable=abstract-method,line-too-long,missing-class-docstring,wrong-import-position
|
|
1
|
+
# pylint:disable=abstract-method,line-too-long,missing-class-docstring,wrong-import-position,too-many-positional-arguments
|
|
2
2
|
from __future__ import annotations
|
|
3
3
|
|
|
4
4
|
import contextlib
|
|
@@ -19,7 +19,6 @@ from angr.sim_state import SimState
|
|
|
19
19
|
from .misc.ux import deprecated
|
|
20
20
|
|
|
21
21
|
if TYPE_CHECKING:
|
|
22
|
-
import pycparser
|
|
23
22
|
from angr.procedures.definitions import SimTypeCollection
|
|
24
23
|
from angr.storage.memory_mixins import _Coerce
|
|
25
24
|
|
|
@@ -120,7 +119,8 @@ class SimType:
|
|
|
120
119
|
if self._arch is None:
|
|
121
120
|
raise ValueError("Can't tell my alignment without an arch!")
|
|
122
121
|
if self.size is None:
|
|
123
|
-
|
|
122
|
+
l.debug("The size of the type %r is unknown; assuming word size of the arch.", self)
|
|
123
|
+
return self._arch.bytes
|
|
124
124
|
return self.size // self._arch.byte_width
|
|
125
125
|
|
|
126
126
|
def with_arch(self, arch: Arch | None):
|
|
@@ -214,7 +214,9 @@ class TypeRef(SimType):
|
|
|
214
214
|
self.type = self.type.with_arch(arch)
|
|
215
215
|
return self
|
|
216
216
|
|
|
217
|
-
def c_repr(
|
|
217
|
+
def c_repr(
|
|
218
|
+
self, name=None, full=0, memo=None, indent=0, name_parens: bool = True
|
|
219
|
+
): # pylint: disable=unused-argument
|
|
218
220
|
if not full:
|
|
219
221
|
if name is not None:
|
|
220
222
|
return f"{self.name} {name}"
|
|
@@ -265,7 +267,9 @@ class SimTypeBottom(SimType):
|
|
|
265
267
|
def __repr__(self):
|
|
266
268
|
return self.label or "BOT"
|
|
267
269
|
|
|
268
|
-
def c_repr(
|
|
270
|
+
def c_repr(
|
|
271
|
+
self, name=None, full=0, memo=None, indent=0, name_parens: bool = True
|
|
272
|
+
): # pylint: disable=unused-argument
|
|
269
273
|
if name is None:
|
|
270
274
|
return "int"
|
|
271
275
|
return f'{"int" if self.label is None else self.label} {name}'
|
|
@@ -408,7 +412,9 @@ class SimTypeInt(SimTypeReg):
|
|
|
408
412
|
super().__init__(None, label=label)
|
|
409
413
|
self.signed = signed
|
|
410
414
|
|
|
411
|
-
def c_repr(
|
|
415
|
+
def c_repr(
|
|
416
|
+
self, name=None, full=0, memo=None, indent=0, name_parens: bool = True
|
|
417
|
+
): # pylint: disable=unused-argument
|
|
412
418
|
out = self._base_name
|
|
413
419
|
if not self.signed:
|
|
414
420
|
out = "unsigned " + out
|
|
@@ -736,7 +742,9 @@ class SimTypePointer(SimTypeReg):
|
|
|
736
742
|
def __repr__(self):
|
|
737
743
|
return f"{self.pts_to}*"
|
|
738
744
|
|
|
739
|
-
def c_repr(
|
|
745
|
+
def c_repr(
|
|
746
|
+
self, name=None, full=0, memo=None, indent=0, name_parens: bool = True
|
|
747
|
+
): # pylint: disable=unused-argument
|
|
740
748
|
# if pts_to is SimTypeBottom, we return a void*
|
|
741
749
|
if isinstance(self.pts_to, SimTypeBottom):
|
|
742
750
|
out = "void*"
|
|
@@ -803,7 +811,9 @@ class SimTypeReference(SimTypeReg):
|
|
|
803
811
|
def __repr__(self):
|
|
804
812
|
return f"{self.refs}&"
|
|
805
813
|
|
|
806
|
-
def c_repr(
|
|
814
|
+
def c_repr(
|
|
815
|
+
self, name=None, full=0, memo=None, indent=0, name_parens: bool = True
|
|
816
|
+
): # pylint: disable=unused-argument
|
|
807
817
|
name = "&" if name is None else f"&{name}"
|
|
808
818
|
return self.refs.c_repr(name, full, memo, indent)
|
|
809
819
|
|
|
@@ -869,7 +879,9 @@ class SimTypeArray(SimType):
|
|
|
869
879
|
def __repr__(self):
|
|
870
880
|
return "{}[{}]".format(self.elem_type, "" if self.length is None else self.length)
|
|
871
881
|
|
|
872
|
-
def c_repr(
|
|
882
|
+
def c_repr(
|
|
883
|
+
self, name=None, full=0, memo=None, indent=0, name_parens: bool = True
|
|
884
|
+
): # pylint: disable=unused-argument
|
|
873
885
|
if name is None:
|
|
874
886
|
return repr(self)
|
|
875
887
|
|
|
@@ -958,7 +970,9 @@ class SimTypeString(NamedTypeMixin, SimType):
|
|
|
958
970
|
def __repr__(self):
|
|
959
971
|
return "string_t"
|
|
960
972
|
|
|
961
|
-
def c_repr(
|
|
973
|
+
def c_repr(
|
|
974
|
+
self, name=None, full=0, memo=None, indent=0, name_parens: bool = True
|
|
975
|
+
): # pylint: disable=unused-argument
|
|
962
976
|
if name is None:
|
|
963
977
|
return repr(self)
|
|
964
978
|
|
|
@@ -1034,7 +1048,9 @@ class SimTypeWString(NamedTypeMixin, SimType):
|
|
|
1034
1048
|
def __repr__(self):
|
|
1035
1049
|
return "wstring_t"
|
|
1036
1050
|
|
|
1037
|
-
def c_repr(
|
|
1051
|
+
def c_repr(
|
|
1052
|
+
self, name=None, full=0, memo=None, indent=0, name_parens: bool = True
|
|
1053
|
+
): # pylint: disable=unused-argument
|
|
1038
1054
|
if name is None:
|
|
1039
1055
|
return repr(self)
|
|
1040
1056
|
|
|
@@ -1339,15 +1355,27 @@ class SimTypeDouble(SimTypeFloat):
|
|
|
1339
1355
|
|
|
1340
1356
|
|
|
1341
1357
|
class SimStruct(NamedTypeMixin, SimType):
|
|
1342
|
-
_fields = ("name", "fields")
|
|
1358
|
+
_fields = ("name", "fields", "anonymous")
|
|
1343
1359
|
|
|
1344
|
-
def __init__(
|
|
1360
|
+
def __init__(
|
|
1361
|
+
self,
|
|
1362
|
+
fields: dict[str, SimType] | OrderedDict[str, SimType],
|
|
1363
|
+
name=None,
|
|
1364
|
+
pack=False,
|
|
1365
|
+
align=None,
|
|
1366
|
+
anonymous: bool = False,
|
|
1367
|
+
):
|
|
1345
1368
|
super().__init__(None, name="<anon>" if name is None else name)
|
|
1346
1369
|
|
|
1347
1370
|
self._pack = pack
|
|
1348
1371
|
self._align = align
|
|
1372
|
+
self.anonymous = anonymous
|
|
1349
1373
|
self.fields: OrderedDict[str, SimType] = OrderedDict(fields)
|
|
1350
1374
|
|
|
1375
|
+
# FIXME: Hack for supporting win32 struct definitions
|
|
1376
|
+
if self.name == "_Anonymous_e__Struct":
|
|
1377
|
+
self.anonymous = True
|
|
1378
|
+
|
|
1351
1379
|
self._arch_memo = {}
|
|
1352
1380
|
|
|
1353
1381
|
@property
|
|
@@ -1363,7 +1391,7 @@ class SimStruct(NamedTypeMixin, SimType):
|
|
|
1363
1391
|
offset_so_far = 0
|
|
1364
1392
|
for name, ty in self.fields.items():
|
|
1365
1393
|
if ty.size is None:
|
|
1366
|
-
l.
|
|
1394
|
+
l.debug(
|
|
1367
1395
|
"Found a bottom field in struct %s. Ignore and increment the offset using the default "
|
|
1368
1396
|
"element size.",
|
|
1369
1397
|
self.name,
|
|
@@ -1418,7 +1446,9 @@ class SimStruct(NamedTypeMixin, SimType):
|
|
|
1418
1446
|
def __repr__(self):
|
|
1419
1447
|
return f"struct {self.name}"
|
|
1420
1448
|
|
|
1421
|
-
def c_repr(
|
|
1449
|
+
def c_repr(
|
|
1450
|
+
self, name=None, full=0, memo=None, indent=0, name_parens: bool = True
|
|
1451
|
+
): # pylint: disable=unused-argument
|
|
1422
1452
|
if not full or (memo is not None and self in memo):
|
|
1423
1453
|
return super().c_repr(name, full, memo, indent)
|
|
1424
1454
|
|
|
@@ -1632,7 +1662,9 @@ class SimUnion(NamedTypeMixin, SimType):
|
|
|
1632
1662
|
self.name, "\n\t".join(f"{name} {ty!s};" for name, ty in self.members.items())
|
|
1633
1663
|
)
|
|
1634
1664
|
|
|
1635
|
-
def c_repr(
|
|
1665
|
+
def c_repr(
|
|
1666
|
+
self, name=None, full=0, memo=None, indent=0, name_parens: bool = True
|
|
1667
|
+
): # pylint: disable=unused-argument
|
|
1636
1668
|
if not full or (memo is not None and self in memo):
|
|
1637
1669
|
return super().c_repr(name, full, memo, indent)
|
|
1638
1670
|
|
|
@@ -1875,7 +1907,9 @@ class SimTypeRef(SimType):
|
|
|
1875
1907
|
def set_size(self, v: int):
|
|
1876
1908
|
self._size = v
|
|
1877
1909
|
|
|
1878
|
-
def c_repr(
|
|
1910
|
+
def c_repr(
|
|
1911
|
+
self, name=None, full=0, memo=None, indent=0, name_parens: bool = True
|
|
1912
|
+
) -> str: # pylint: disable=unused-argument
|
|
1879
1913
|
prefix = "unknown"
|
|
1880
1914
|
if self.original_type is SimStruct:
|
|
1881
1915
|
prefix = "struct"
|
|
@@ -3537,7 +3571,8 @@ def dereference_simtype(
|
|
|
3537
3571
|
return memo[t.name]
|
|
3538
3572
|
|
|
3539
3573
|
real_type = t.copy()
|
|
3540
|
-
|
|
3574
|
+
if not t.anonymous:
|
|
3575
|
+
memo[t.name] = real_type
|
|
3541
3576
|
fields = OrderedDict((k, dereference_simtype(v, type_collections, memo=memo)) for k, v in t.fields.items())
|
|
3542
3577
|
real_type.fields = fields
|
|
3543
3578
|
elif isinstance(t, SimTypePointer):
|
angr/state_plugins/solver.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
|
+
|
|
2
3
|
import functools
|
|
3
4
|
import time
|
|
4
5
|
import logging
|
|
@@ -10,8 +11,10 @@ import claripy
|
|
|
10
11
|
from angr import sim_options as o
|
|
11
12
|
from angr.errors import SimValueError, SimUnsatError, SimSolverModeError, SimSolverOptionError
|
|
12
13
|
from angr.sim_state import SimState
|
|
14
|
+
from .inspect import BP_AFTER, BP_BEFORE
|
|
13
15
|
from .plugin import SimStatePlugin
|
|
14
16
|
from .sim_action_object import ast_stripping_decorator, SimActionObject
|
|
17
|
+
from .sim_action import SimActionConstraint
|
|
15
18
|
|
|
16
19
|
l = logging.getLogger(name=__name__)
|
|
17
20
|
|
|
@@ -407,26 +410,18 @@ class SimSolver(SimStatePlugin):
|
|
|
407
410
|
if key is not None and eternal and key in self.eternal_tracked_variables:
|
|
408
411
|
r = self.eternal_tracked_variables[key]
|
|
409
412
|
# pylint: disable=too-many-boolean-expressions
|
|
410
|
-
if (
|
|
411
|
-
size != r.length
|
|
412
|
-
or min != r.args[1]
|
|
413
|
-
or max != r.args[2]
|
|
414
|
-
or stride != r.args[3]
|
|
415
|
-
or uninitialized != r.uninitialized
|
|
416
|
-
or bool(explicit_name) ^ (r.args[0] == name)
|
|
417
|
-
):
|
|
413
|
+
if size != r.length or uninitialized != r.uninitialized or bool(explicit_name) ^ (r.args[0] == name):
|
|
418
414
|
l.warning("Variable %s being retrieved with different settings than it was tracked with", name)
|
|
419
415
|
else:
|
|
420
416
|
r = claripy.BVS(
|
|
421
417
|
name,
|
|
422
418
|
size,
|
|
423
|
-
min=min,
|
|
424
|
-
max=max,
|
|
425
|
-
stride=stride,
|
|
426
419
|
uninitialized=uninitialized,
|
|
427
420
|
explicit_name=explicit_name,
|
|
428
421
|
**kwargs,
|
|
429
422
|
)
|
|
423
|
+
if any(x is not None for x in (min, max, stride)):
|
|
424
|
+
r = r.annotate(claripy.annotation.StridedIntervalAnnotation(stride, min, max))
|
|
430
425
|
if key is not None:
|
|
431
426
|
self.register_variable(r, key, eternal)
|
|
432
427
|
|
|
@@ -692,6 +687,9 @@ class SimSolver(SimStatePlugin):
|
|
|
692
687
|
|
|
693
688
|
:return: True if sat, otherwise false
|
|
694
689
|
"""
|
|
690
|
+
if o.ABSTRACT_SOLVER in self.state.options or o.SYMBOLIC not in self.state.options:
|
|
691
|
+
return all(not self.is_false(e) for e in extra_constraints)
|
|
692
|
+
|
|
695
693
|
if exact is False and o.VALIDATE_APPROXIMATIONS in self.state.options:
|
|
696
694
|
er = self._solver.satisfiable(extra_constraints=self._adjust_constraint_list(extra_constraints))
|
|
697
695
|
ar = self._solver.satisfiable(
|
|
@@ -711,8 +709,69 @@ class SimSolver(SimStatePlugin):
|
|
|
711
709
|
|
|
712
710
|
:param constraints: Pass any constraints that you want to add (ASTs) as varargs.
|
|
713
711
|
"""
|
|
714
|
-
|
|
715
|
-
|
|
712
|
+
if len(constraints) > 0 and isinstance(constraints[0], (list, tuple)):
|
|
713
|
+
raise Exception("Tuple or list passed to add!")
|
|
714
|
+
|
|
715
|
+
if o.TRACK_CONSTRAINTS in self.state.options and len(constraints) > 0:
|
|
716
|
+
constraints = (
|
|
717
|
+
[self.simplify(a) for a in constraints] if o.SIMPLIFY_CONSTRAINTS in self.state.options else constraints
|
|
718
|
+
)
|
|
719
|
+
|
|
720
|
+
self.state._inspect("constraints", BP_BEFORE, added_constraints=constraints)
|
|
721
|
+
constraints = self.state._inspect_getattr("added_constraints", constraints)
|
|
722
|
+
cc = self._adjust_constraint_list(constraints)
|
|
723
|
+
added = self._solver.add(cc)
|
|
724
|
+
self.state._inspect("constraints", BP_AFTER)
|
|
725
|
+
|
|
726
|
+
# add actions for the added constraints
|
|
727
|
+
if o.TRACK_CONSTRAINT_ACTIONS in self.state.options:
|
|
728
|
+
for c in added:
|
|
729
|
+
sac = SimActionConstraint(self.state, c)
|
|
730
|
+
self.state.history.add_action(sac)
|
|
731
|
+
|
|
732
|
+
if o.ABSTRACT_SOLVER in self.state.options and len(constraints) > 0:
|
|
733
|
+
for arg in constraints:
|
|
734
|
+
if self.is_false(arg):
|
|
735
|
+
return
|
|
736
|
+
|
|
737
|
+
if self.is_true(arg):
|
|
738
|
+
continue
|
|
739
|
+
|
|
740
|
+
# It's neither True or False. Let's try to apply the condition
|
|
741
|
+
|
|
742
|
+
# We take the argument, extract a list of constrained SIs out of
|
|
743
|
+
# it (if we could, of course), and then replace each original SI
|
|
744
|
+
# the intersection of original SI and the constrained one.
|
|
745
|
+
|
|
746
|
+
_, converted = claripy.constraint_to_si(arg)
|
|
747
|
+
|
|
748
|
+
for original_expr, constrained_si in converted:
|
|
749
|
+
if not original_expr.variables:
|
|
750
|
+
l.error(
|
|
751
|
+
"Incorrect original_expression to replace in add(). "
|
|
752
|
+
"This is due to defects in VSA logics inside claripy. "
|
|
753
|
+
"Please report to Fish and he will fix it if he's free."
|
|
754
|
+
)
|
|
755
|
+
continue
|
|
756
|
+
|
|
757
|
+
new_expr = constrained_si
|
|
758
|
+
self.state.registers.replace_all(original_expr, new_expr)
|
|
759
|
+
self.state.memory.replace_all(original_expr, new_expr)
|
|
760
|
+
# tmps
|
|
761
|
+
temps = self.state.scratch.temps
|
|
762
|
+
for idx in range(len(temps)): # pylint:disable=consider-using-enumerate
|
|
763
|
+
t = temps[idx]
|
|
764
|
+
if t is None:
|
|
765
|
+
continue
|
|
766
|
+
if t.variables.intersection(original_expr.variables):
|
|
767
|
+
# replace
|
|
768
|
+
temps[idx] = claripy.replace(t, original_expr, new_expr)
|
|
769
|
+
|
|
770
|
+
l.debug("SimSolver.add: Applied to final state.")
|
|
771
|
+
elif o.SYMBOLIC not in self.state.options and len(constraints) > 0:
|
|
772
|
+
for arg in constraints:
|
|
773
|
+
if self.is_false(arg):
|
|
774
|
+
return
|
|
716
775
|
|
|
717
776
|
#
|
|
718
777
|
# And some convenience stuff
|
|
@@ -1063,5 +1122,3 @@ class SimSolver(SimStatePlugin):
|
|
|
1063
1122
|
|
|
1064
1123
|
|
|
1065
1124
|
SimState.register_default("solver", SimSolver)
|
|
1066
|
-
|
|
1067
|
-
from .inspect import BP_AFTER
|
angr/storage/__init__.py
CHANGED
|
@@ -4,13 +4,12 @@ DUMMY_SYMBOLIC_READ_VALUE = 0xC0DEB4BE
|
|
|
4
4
|
|
|
5
5
|
from .file import SimFile
|
|
6
6
|
from .memory_object import SimMemoryObject
|
|
7
|
-
from .memory_mixins import
|
|
7
|
+
from .memory_mixins import DefaultMemory
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
__all__ = (
|
|
11
11
|
"DUMMY_SYMBOLIC_READ_VALUE",
|
|
12
12
|
"SimFile",
|
|
13
13
|
"SimMemoryObject",
|
|
14
|
-
"MemoryMixin",
|
|
15
14
|
"DefaultMemory",
|
|
16
15
|
)
|