angr 9.2.88__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 +1 -1
- angr/analyses/decompiler/decompiler.py +3 -0
- angr/analyses/decompiler/optimization_passes/__init__.py +3 -0
- angr/analyses/decompiler/optimization_passes/cross_jump_reverter.py +29 -27
- angr/analyses/decompiler/optimization_passes/optimization_pass.py +17 -4
- angr/analyses/typehoon/lifter.py +13 -4
- angr/analyses/typehoon/simple_solver.py +5 -0
- angr/analyses/typehoon/translator.py +7 -3
- angr/analyses/typehoon/typeconsts.py +4 -3
- angr/exploration_techniques/tracer.py +2 -0
- angr/procedures/definitions/__init__.py +4 -0
- angr/utils/graph.py +20 -1
- {angr-9.2.88.dist-info → angr-9.2.89.dist-info}/METADATA +6 -6
- {angr-9.2.88.dist-info → angr-9.2.89.dist-info}/RECORD +18 -18
- {angr-9.2.88.dist-info → angr-9.2.89.dist-info}/LICENSE +0 -0
- {angr-9.2.88.dist-info → angr-9.2.89.dist-info}/WHEEL +0 -0
- {angr-9.2.88.dist-info → angr-9.2.89.dist-info}/entry_points.txt +0 -0
- {angr-9.2.88.dist-info → angr-9.2.89.dist-info}/top_level.txt +0 -0
angr/__init__.py
CHANGED
|
@@ -349,6 +349,9 @@ class Decompiler(Analysis):
|
|
|
349
349
|
# only for post region id opts
|
|
350
350
|
if pass_.STAGE != OptimizationPassStage.DURING_REGION_IDENTIFICATION:
|
|
351
351
|
continue
|
|
352
|
+
if pass_.STRUCTURING:
|
|
353
|
+
if self._recursive_structurer_params["structurer_cls"].NAME not in pass_.STRUCTURING:
|
|
354
|
+
continue
|
|
352
355
|
|
|
353
356
|
a = pass_(
|
|
354
357
|
self.func,
|
|
@@ -45,6 +45,9 @@ _all_optimization_passes = [
|
|
|
45
45
|
(FlipBooleanCmp, True),
|
|
46
46
|
]
|
|
47
47
|
|
|
48
|
+
# these passes may duplicate code to remove gotos or improve the structure of the graph
|
|
49
|
+
DUPLICATING_OPTS = [ReturnDuplicator, CrossJumpReverter]
|
|
50
|
+
|
|
48
51
|
|
|
49
52
|
def get_optimization_passes(arch, platform):
|
|
50
53
|
if isinstance(arch, Arch):
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from collections import defaultdict
|
|
1
2
|
from itertools import count
|
|
2
3
|
import copy
|
|
3
4
|
import logging
|
|
@@ -24,6 +25,7 @@ class CrossJumpReverter(StructuringOptimizationPass):
|
|
|
24
25
|
PLATFORMS = None
|
|
25
26
|
STAGE = OptimizationPassStage.DURING_REGION_IDENTIFICATION
|
|
26
27
|
NAME = "Duplicate linear blocks with gotos"
|
|
28
|
+
STRUCTURING = ["phoenix"]
|
|
27
29
|
DESCRIPTION = inspect.cleandoc(__doc__).strip()
|
|
28
30
|
|
|
29
31
|
def __init__(
|
|
@@ -36,7 +38,7 @@ class CrossJumpReverter(StructuringOptimizationPass):
|
|
|
36
38
|
max_call_duplications: int = 2,
|
|
37
39
|
**kwargs,
|
|
38
40
|
):
|
|
39
|
-
super().__init__(func, max_opt_iters=max_opt_iters, **kwargs)
|
|
41
|
+
super().__init__(func, max_opt_iters=max_opt_iters, strictly_less_gotos=True, **kwargs)
|
|
40
42
|
|
|
41
43
|
self.node_idx = count(start=node_idx_start)
|
|
42
44
|
self._max_call_dup = max_call_duplications
|
|
@@ -46,14 +48,15 @@ class CrossJumpReverter(StructuringOptimizationPass):
|
|
|
46
48
|
return True, None
|
|
47
49
|
|
|
48
50
|
def _analyze(self, cache=None):
|
|
49
|
-
to_update =
|
|
51
|
+
to_update = defaultdict(list)
|
|
50
52
|
for node in self.out_graph.nodes:
|
|
51
53
|
gotos = self._goto_manager.gotos_in_block(node)
|
|
52
54
|
# TODO: support if-stmts
|
|
53
55
|
if not gotos or len(gotos) >= 2:
|
|
54
56
|
continue
|
|
55
57
|
|
|
56
|
-
# only single
|
|
58
|
+
# only blocks that have a single outgoing goto are candidates
|
|
59
|
+
# for duplicates
|
|
57
60
|
goto = list(gotos)[0]
|
|
58
61
|
for goto_target in self.out_graph.successors(node):
|
|
59
62
|
if goto_target.addr == goto.dst_addr:
|
|
@@ -61,46 +64,45 @@ class CrossJumpReverter(StructuringOptimizationPass):
|
|
|
61
64
|
else:
|
|
62
65
|
goto_target = None
|
|
63
66
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
if self.out_graph.out_degree(goto_target) != 1:
|
|
67
|
+
# the target goto block should only have a single outgoing edge
|
|
68
|
+
# this prevents duplication of conditions
|
|
69
|
+
if goto_target is None or self.out_graph.out_degree(goto_target) != 1:
|
|
68
70
|
continue
|
|
69
71
|
|
|
72
|
+
# minimize the number of calls in the target block that can be duplicated
|
|
73
|
+
# to prevent duplication of big blocks
|
|
70
74
|
counter = AILBlockCallCounter()
|
|
71
75
|
counter.walk(goto_target)
|
|
72
76
|
if counter.calls > self._max_call_dup:
|
|
73
77
|
continue
|
|
74
78
|
|
|
75
|
-
#
|
|
76
|
-
to_update[node
|
|
79
|
+
# [goto_target] = (pred1, pred2, ...)
|
|
80
|
+
to_update[goto_target].append(node)
|
|
77
81
|
|
|
78
82
|
if not to_update:
|
|
79
83
|
return False
|
|
80
84
|
|
|
81
85
|
updates = False
|
|
82
|
-
|
|
83
|
-
|
|
86
|
+
sorted_targets = sorted(to_update.items(), key=lambda x: x[0].addr)
|
|
87
|
+
for goto_target, pred_to_update in sorted_targets:
|
|
88
|
+
pred_to_update = sorted(pred_to_update, key=lambda x: x.addr)
|
|
89
|
+
# do some sanity checks
|
|
90
|
+
update_edges = [(pred, goto_target) for pred in pred_to_update]
|
|
91
|
+
if not all(self.out_graph.has_edge(*edge) for edge in update_edges):
|
|
84
92
|
continue
|
|
85
93
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
cp.idx = next(self.node_idx)
|
|
89
|
-
|
|
90
|
-
# remove this goto edge from original
|
|
91
|
-
self.out_graph.remove_edge(target_node, goto_node)
|
|
92
|
-
|
|
93
|
-
# add a new edge to the copy
|
|
94
|
-
self.out_graph.add_edge(target_node, cp)
|
|
95
|
-
|
|
96
|
-
# make sure the copy has the same successor as before!
|
|
97
|
-
suc = list(self.out_graph.successors(goto_node))[0]
|
|
98
|
-
self.out_graph.add_edge(cp, suc)
|
|
94
|
+
current_preds = list(self.out_graph.predecessors(goto_target))
|
|
95
|
+
delete_original = len(current_preds) == len(pred_to_update)
|
|
99
96
|
|
|
100
|
-
#
|
|
101
|
-
|
|
102
|
-
|
|
97
|
+
# update the edges
|
|
98
|
+
for src, goto_blk in update_edges:
|
|
99
|
+
cp = copy.deepcopy(goto_blk)
|
|
100
|
+
cp.idx = next(self.node_idx)
|
|
101
|
+
self.out_graph.remove_edge(src, goto_blk)
|
|
102
|
+
self.out_graph.add_edge(src, cp)
|
|
103
103
|
|
|
104
104
|
updates = True
|
|
105
|
+
if delete_original:
|
|
106
|
+
self.out_graph.remove_node(goto_target)
|
|
105
107
|
|
|
106
108
|
return updates
|
|
@@ -249,10 +249,18 @@ class StructuringOptimizationPass(OptimizationPass):
|
|
|
249
249
|
STAGE = OptimizationPassStage.DURING_REGION_IDENTIFICATION
|
|
250
250
|
|
|
251
251
|
def __init__(
|
|
252
|
-
self,
|
|
252
|
+
self,
|
|
253
|
+
func,
|
|
254
|
+
prevent_new_gotos=True,
|
|
255
|
+
strictly_less_gotos=False,
|
|
256
|
+
recover_structure_fails=True,
|
|
257
|
+
max_opt_iters=1,
|
|
258
|
+
simplify_ail=True,
|
|
259
|
+
**kwargs,
|
|
253
260
|
):
|
|
254
261
|
super().__init__(func, **kwargs)
|
|
255
262
|
self._prevent_new_gotos = prevent_new_gotos
|
|
263
|
+
self._strictly_less_gotos = strictly_less_gotos
|
|
256
264
|
self._recover_structure_fails = recover_structure_fails
|
|
257
265
|
self._max_opt_iters = max_opt_iters
|
|
258
266
|
self._simplify_ail = simplify_ail
|
|
@@ -298,9 +306,14 @@ class StructuringOptimizationPass(OptimizationPass):
|
|
|
298
306
|
# this should not (TM) change the structure of the graph but is needed for later optimizations
|
|
299
307
|
self.out_graph = self._simplify_ail_graph(self.out_graph)
|
|
300
308
|
|
|
301
|
-
if self._prevent_new_gotos
|
|
302
|
-
|
|
303
|
-
|
|
309
|
+
if self._prevent_new_gotos:
|
|
310
|
+
prev_gotos = len(initial_gotos)
|
|
311
|
+
new_gotos = len(self._goto_manager.gotos)
|
|
312
|
+
if (self._strictly_less_gotos and (new_gotos >= prev_gotos)) or (
|
|
313
|
+
not self._strictly_less_gotos and (new_gotos > prev_gotos)
|
|
314
|
+
):
|
|
315
|
+
self.out_graph = None
|
|
316
|
+
return
|
|
304
317
|
|
|
305
318
|
def _fixed_point_analyze(self, cache=None):
|
|
306
319
|
for _ in range(self._max_opt_iters):
|
angr/analyses/typehoon/lifter.py
CHANGED
|
@@ -9,8 +9,9 @@ from ...sim_type import (
|
|
|
9
9
|
SimTypeLongLong,
|
|
10
10
|
SimTypePointer,
|
|
11
11
|
SimStruct,
|
|
12
|
+
SimTypeArray,
|
|
12
13
|
)
|
|
13
|
-
from .typeconsts import BottomType, Int8, Int16, Int32, Int64, Pointer32, Pointer64, Struct
|
|
14
|
+
from .typeconsts import BottomType, Int8, Int16, Int32, Int64, Pointer32, Pointer64, Struct, Array
|
|
14
15
|
|
|
15
16
|
if TYPE_CHECKING:
|
|
16
17
|
from .typeconsts import TypeConstant
|
|
@@ -56,11 +57,18 @@ class TypeLifter:
|
|
|
56
57
|
|
|
57
58
|
def _lift_SimStruct(self, ty: SimStruct) -> Union["TypeConstant", BottomType]:
|
|
58
59
|
converted_fields = {}
|
|
60
|
+
field_names = {}
|
|
61
|
+
ty_offsets = ty.offsets
|
|
59
62
|
for field_name, simtype in ty.fields.items():
|
|
60
|
-
if field_name not in
|
|
63
|
+
if field_name not in ty_offsets:
|
|
61
64
|
return BottomType()
|
|
62
|
-
converted_fields[
|
|
63
|
-
|
|
65
|
+
converted_fields[ty_offsets[field_name]] = self.lift(simtype)
|
|
66
|
+
field_names[ty_offsets[field_name]] = field_name
|
|
67
|
+
return Struct(fields=converted_fields, name=ty.name, field_names=field_names)
|
|
68
|
+
|
|
69
|
+
def _lift_SimTypeArray(self, ty: SimTypeArray) -> Array:
|
|
70
|
+
elem_type = self.lift(ty.elem_type)
|
|
71
|
+
return Array(elem_type, count=ty.length)
|
|
64
72
|
|
|
65
73
|
|
|
66
74
|
_mapping = {
|
|
@@ -71,4 +79,5 @@ _mapping = {
|
|
|
71
79
|
SimTypeLongLong: TypeLifter._lift_SimTypeLongLong,
|
|
72
80
|
SimTypePointer: TypeLifter._lift_SimTypePointer,
|
|
73
81
|
SimStruct: TypeLifter._lift_SimStruct,
|
|
82
|
+
SimTypeArray: TypeLifter._lift_SimTypeArray,
|
|
74
83
|
}
|
|
@@ -37,6 +37,7 @@ from .typeconsts import (
|
|
|
37
37
|
Pointer32,
|
|
38
38
|
Pointer64,
|
|
39
39
|
Struct,
|
|
40
|
+
Array,
|
|
40
41
|
Function,
|
|
41
42
|
int_type,
|
|
42
43
|
)
|
|
@@ -57,6 +58,7 @@ PRIMITIVE_TYPES = {
|
|
|
57
58
|
Pointer64(),
|
|
58
59
|
BottomType(),
|
|
59
60
|
Struct(),
|
|
61
|
+
Array(),
|
|
60
62
|
}
|
|
61
63
|
|
|
62
64
|
Top_ = TopType()
|
|
@@ -69,6 +71,7 @@ Bottom_ = BottomType()
|
|
|
69
71
|
Pointer64_ = Pointer64()
|
|
70
72
|
Pointer32_ = Pointer32()
|
|
71
73
|
Struct_ = Struct()
|
|
74
|
+
Array_ = Array()
|
|
72
75
|
|
|
73
76
|
# lattice for 64-bit binaries
|
|
74
77
|
BASE_LATTICE_64 = networkx.DiGraph()
|
|
@@ -869,6 +872,8 @@ class SimpleSolver:
|
|
|
869
872
|
SimpleSolver._typevar_inside_set(field_typevar, typevar_set)
|
|
870
873
|
for field_typevar in typevar.fields.values()
|
|
871
874
|
)
|
|
875
|
+
if isinstance(typevar, Array) and Array_ in typevar_set:
|
|
876
|
+
return SimpleSolver._typevar_inside_set(typevar.element, typevar_set)
|
|
872
877
|
if isinstance(typevar, Pointer) and (Pointer32_ in typevar_set or Pointer64_ in typevar_set):
|
|
873
878
|
return SimpleSolver._typevar_inside_set(typevar.basetype, typevar_set)
|
|
874
879
|
return False
|
|
@@ -91,11 +91,11 @@ class TypeTranslator:
|
|
|
91
91
|
internal = self._tc2simtype(tc.basetype)
|
|
92
92
|
return sim_type.SimTypePointer(internal).with_arch(self.arch)
|
|
93
93
|
|
|
94
|
-
def _translate_Array(self, tc: typeconsts.Array):
|
|
94
|
+
def _translate_Array(self, tc: typeconsts.Array) -> sim_type.SimTypeArray:
|
|
95
95
|
elem_type = self._tc2simtype(tc.element)
|
|
96
96
|
return sim_type.SimTypeArray(elem_type, length=tc.count).with_arch(self.arch)
|
|
97
97
|
|
|
98
|
-
def _translate_Struct(self, tc):
|
|
98
|
+
def _translate_Struct(self, tc: typeconsts.Struct):
|
|
99
99
|
if tc in self.structs:
|
|
100
100
|
return self.structs[tc]
|
|
101
101
|
|
|
@@ -122,7 +122,11 @@ class TypeTranslator:
|
|
|
122
122
|
# for now, we replace it with an unsigned char
|
|
123
123
|
translated_type = sim_type.SimTypeChar(signed=False).with_arch(self.arch)
|
|
124
124
|
|
|
125
|
-
|
|
125
|
+
if tc.field_names and offset in tc.field_names:
|
|
126
|
+
field_name = tc.field_names[offset]
|
|
127
|
+
else:
|
|
128
|
+
field_name = f"field_{offset:x}"
|
|
129
|
+
s.fields[field_name] = translated_type
|
|
126
130
|
|
|
127
131
|
if isinstance(translated_type, SimTypeTempRef):
|
|
128
132
|
next_offset = self.arch.bytes + offset
|
|
@@ -170,8 +170,8 @@ class Pointer64(Pointer, Int64):
|
|
|
170
170
|
|
|
171
171
|
|
|
172
172
|
class Array(TypeConstant):
|
|
173
|
-
def __init__(self, element, count=None):
|
|
174
|
-
self.element: TypeConstant = element
|
|
173
|
+
def __init__(self, element=None, count=None):
|
|
174
|
+
self.element: Optional[TypeConstant] = element
|
|
175
175
|
self.count: Optional[int] = count
|
|
176
176
|
|
|
177
177
|
@memoize
|
|
@@ -195,9 +195,10 @@ class Array(TypeConstant):
|
|
|
195
195
|
|
|
196
196
|
|
|
197
197
|
class Struct(TypeConstant):
|
|
198
|
-
def __init__(self, fields=None, name=None):
|
|
198
|
+
def __init__(self, fields=None, name=None, field_names=None):
|
|
199
199
|
self.fields = {} if fields is None else fields # offset to type
|
|
200
200
|
self.name = name
|
|
201
|
+
self.field_names = field_names
|
|
201
202
|
|
|
202
203
|
def _hash(self, visited: Set[int]):
|
|
203
204
|
if id(self) in visited:
|
|
@@ -1041,6 +1041,8 @@ class Tracer(ExplorationTechnique):
|
|
|
1041
1041
|
|
|
1042
1042
|
# now remove our breakpoints since other people might not want them
|
|
1043
1043
|
for s in [last_state, crash_state]:
|
|
1044
|
+
if s is None:
|
|
1045
|
+
continue
|
|
1044
1046
|
s.inspect.remove_breakpoint("address_concretization", bp1)
|
|
1045
1047
|
s.inspect.remove_breakpoint("address_concretization", bp2)
|
|
1046
1048
|
|
|
@@ -647,6 +647,10 @@ def load_external_definitions():
|
|
|
647
647
|
l.warning("External library definitions directory %s does not exist or is not a directory.", d)
|
|
648
648
|
|
|
649
649
|
if _EXTERNAL_DEFINITIONS_DIRS:
|
|
650
|
+
# we must load all definitions prior to any external definitions are loaded. otherwise external definitions may
|
|
651
|
+
# be overwritten by embedded definitions in angr, which is undesirable
|
|
652
|
+
load_all_definitions()
|
|
653
|
+
|
|
650
654
|
for d in _EXTERNAL_DEFINITIONS_DIRS:
|
|
651
655
|
for _ in autoimport.auto_import_source_files(d):
|
|
652
656
|
pass
|
angr/utils/graph.py
CHANGED
|
@@ -683,8 +683,27 @@ class GraphUtils:
|
|
|
683
683
|
# find all strongly connected components in the graph
|
|
684
684
|
sccs = [scc for scc in networkx.strongly_connected_components(graph) if len(scc) > 1]
|
|
685
685
|
|
|
686
|
+
def _sort_edge(edge):
|
|
687
|
+
"""
|
|
688
|
+
A sorter to make a deterministic order of edges.
|
|
689
|
+
"""
|
|
690
|
+
_src, _dst = edge
|
|
691
|
+
src_addr, dst_addr = 0, 0
|
|
692
|
+
if hasattr(_src, "addr"):
|
|
693
|
+
src_addr = _src.addr
|
|
694
|
+
elif isinstance(_src, int):
|
|
695
|
+
src_addr = _src
|
|
696
|
+
|
|
697
|
+
if hasattr(_dst, "addr"):
|
|
698
|
+
dst_addr = _dst.addr
|
|
699
|
+
elif isinstance(_dst, int):
|
|
700
|
+
dst_addr = _dst
|
|
701
|
+
|
|
702
|
+
return src_addr + dst_addr
|
|
703
|
+
|
|
686
704
|
# collapse all strongly connected components
|
|
687
|
-
|
|
705
|
+
edges = sorted(list(graph.edges()), key=_sort_edge)
|
|
706
|
+
for src, dst in edges:
|
|
688
707
|
scc_index = GraphUtils._components_index_node(sccs, src)
|
|
689
708
|
if scc_index is not None:
|
|
690
709
|
src = SCCPlaceholder(scc_index)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: angr
|
|
3
|
-
Version: 9.2.
|
|
3
|
+
Version: 9.2.89
|
|
4
4
|
Summary: A multi-architecture binary analysis toolkit, with the ability to perform dynamic symbolic execution and various static analyses on binaries
|
|
5
5
|
Home-page: https://github.com/angr/angr
|
|
6
6
|
License: BSD-2-Clause
|
|
@@ -17,13 +17,13 @@ Description-Content-Type: text/markdown
|
|
|
17
17
|
License-File: LICENSE
|
|
18
18
|
Requires-Dist: CppHeaderParser
|
|
19
19
|
Requires-Dist: GitPython
|
|
20
|
-
Requires-Dist: ailment ==9.2.
|
|
21
|
-
Requires-Dist: archinfo ==9.2.
|
|
20
|
+
Requires-Dist: ailment ==9.2.89
|
|
21
|
+
Requires-Dist: archinfo ==9.2.89
|
|
22
22
|
Requires-Dist: cachetools
|
|
23
23
|
Requires-Dist: capstone ==5.0.0.post1
|
|
24
24
|
Requires-Dist: cffi >=1.14.0
|
|
25
|
-
Requires-Dist: claripy ==9.2.
|
|
26
|
-
Requires-Dist: cle ==9.2.
|
|
25
|
+
Requires-Dist: claripy ==9.2.89
|
|
26
|
+
Requires-Dist: cle ==9.2.89
|
|
27
27
|
Requires-Dist: dpkt
|
|
28
28
|
Requires-Dist: itanium-demangler
|
|
29
29
|
Requires-Dist: mulpyplexer
|
|
@@ -33,7 +33,7 @@ Requires-Dist: protobuf >=3.19.0
|
|
|
33
33
|
Requires-Dist: psutil
|
|
34
34
|
Requires-Dist: pycparser >=2.18
|
|
35
35
|
Requires-Dist: pyformlang
|
|
36
|
-
Requires-Dist: pyvex ==9.2.
|
|
36
|
+
Requires-Dist: pyvex ==9.2.89
|
|
37
37
|
Requires-Dist: rich >=13.1.0
|
|
38
38
|
Requires-Dist: rpyc
|
|
39
39
|
Requires-Dist: sortedcontainers
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
angr/__init__.py,sha256=
|
|
1
|
+
angr/__init__.py,sha256=2TAWUz5W98KyyjT9mmlBOKbCo7CnncPtkUA_Lbyda3o,3942
|
|
2
2
|
angr/__main__.py,sha256=kaO56Te6h73SM94BVtASF00q5QbBbC3eBs9poVc9sVI,1887
|
|
3
3
|
angr/annocfg.py,sha256=dK5JAdN4Ig_jgxTBZeZXwk3kAS4-IQUvE6T02GBZTDQ,10818
|
|
4
4
|
angr/blade.py,sha256=B8QXVQ93jz1YCIlb-dZLeBqYmVFdMXI5GleP1Wnxjrw,15519
|
|
@@ -99,7 +99,7 @@ angr/analyses/decompiler/clinic.py,sha256=j97xFyuiflNsMkP4QggHMKEoiH-jxHTNOnk-T6
|
|
|
99
99
|
angr/analyses/decompiler/condition_processor.py,sha256=e1WlxSr8FbtXi9qLHfvfBgUU-GKkoDSYUgMojHP9lBQ,49091
|
|
100
100
|
angr/analyses/decompiler/decompilation_cache.py,sha256=NveTVs6IY3TTdgsLvTb3ktftM4n0NrAJIkqjXqQ3550,1119
|
|
101
101
|
angr/analyses/decompiler/decompilation_options.py,sha256=vbuLF0Oze2ldFNpv2jWFnGG4sJPey527KAAbj9TRvAI,8240
|
|
102
|
-
angr/analyses/decompiler/decompiler.py,sha256=
|
|
102
|
+
angr/analyses/decompiler/decompiler.py,sha256=yeSD-amcmIb-6CP0pJlIXGXGvbla_Vkoaggi1QTDaxo,20362
|
|
103
103
|
angr/analyses/decompiler/empty_node_remover.py,sha256=KhH88_x3A1nR22H3wrdp1gznLuFH12IBLaay4Xa3Law,7368
|
|
104
104
|
angr/analyses/decompiler/expression_counters.py,sha256=P4RbtnyEy2lJnNUw_G702W-AIGaL4MszZ5fdrritwwg,2867
|
|
105
105
|
angr/analyses/decompiler/expression_narrower.py,sha256=64VR1xdPVVoCLHOYRPacV9ecQb33rP7nC1l8rpFxTkg,3545
|
|
@@ -115,10 +115,10 @@ angr/analyses/decompiler/utils.py,sha256=d_2O_1ZyRkP3Q3Dd7htRl1dX-W_PbmnyMjY94ih
|
|
|
115
115
|
angr/analyses/decompiler/ccall_rewriters/__init__.py,sha256=wbWqZ8xG6ZvzEApkAwMsNQFC-iwF3swG1YJsaf1cIrQ,102
|
|
116
116
|
angr/analyses/decompiler/ccall_rewriters/amd64_ccalls.py,sha256=PjfduEkFVcSBKUfGouVM5dekA4kO4OBUses58ewJnCk,20488
|
|
117
117
|
angr/analyses/decompiler/ccall_rewriters/rewriter_base.py,sha256=gWezEKB7A_YnlfUDs8V8D5syoYAyIXSIme1BKQRoouM,498
|
|
118
|
-
angr/analyses/decompiler/optimization_passes/__init__.py,sha256
|
|
118
|
+
angr/analyses/decompiler/optimization_passes/__init__.py,sha256=ZGwnBA0T3XjN40NKFHNxKmA9ZKlz0y9JSyfdvaH57FM,3166
|
|
119
119
|
angr/analyses/decompiler/optimization_passes/base_ptr_save_simplifier.py,sha256=bjpEMW-Lqj5XW9NWUikGPcRn5scKNc8VvEjVMXxAuq8,5289
|
|
120
120
|
angr/analyses/decompiler/optimization_passes/const_derefs.py,sha256=FEoiprXxns-3S0nFaIWm2DBW_aDMq3GZ-VOG3CIqcMw,10593
|
|
121
|
-
angr/analyses/decompiler/optimization_passes/cross_jump_reverter.py,sha256=
|
|
121
|
+
angr/analyses/decompiler/optimization_passes/cross_jump_reverter.py,sha256=CP-WjyQGOw_mnUF0ZpC5C4syMxlx4Tvy0T_EIZQxXrY,4033
|
|
122
122
|
angr/analyses/decompiler/optimization_passes/div_simplifier.py,sha256=J7LRc3-DKfToxKVejnkHbNel9_56-7xsGyJJiTCwqsQ,17442
|
|
123
123
|
angr/analyses/decompiler/optimization_passes/engine_base.py,sha256=7nnNZkVMqvikHCy9X11M8KLWbL8lF0DoLYPemETWP4c,10388
|
|
124
124
|
angr/analyses/decompiler/optimization_passes/expr_op_swapper.py,sha256=vlPhWDyvuEmbGcd1ka8rS68F72Ty6Hw3J00KM3tWCus,4701
|
|
@@ -128,7 +128,7 @@ angr/analyses/decompiler/optimization_passes/ite_region_converter.py,sha256=l571
|
|
|
128
128
|
angr/analyses/decompiler/optimization_passes/lowered_switch_simplifier.py,sha256=9hhCcvE15MCM6KoJU1ba11hFiN6MXxYAb9FbntzYJbg,34328
|
|
129
129
|
angr/analyses/decompiler/optimization_passes/mod_simplifier.py,sha256=o2AZIpj4NpOAaWOGbudDUfGJJAD2exu-HvNbwph3mi8,3124
|
|
130
130
|
angr/analyses/decompiler/optimization_passes/multi_simplifier.py,sha256=_63Y2vMNLSXYM6_Grfs89Nu63i5YLxTPmxTR_Z6fwLY,10420
|
|
131
|
-
angr/analyses/decompiler/optimization_passes/optimization_pass.py,sha256=
|
|
131
|
+
angr/analyses/decompiler/optimization_passes/optimization_pass.py,sha256=yEd-_xH1YS1SivTkrZ2QmRxB01_D6fprii2AsDPOMx8,13401
|
|
132
132
|
angr/analyses/decompiler/optimization_passes/register_save_area_simplifier.py,sha256=2_-nVKkvClCDykVDd29CRIT1ZCPdYBlSi96h9yrSOw4,7398
|
|
133
133
|
angr/analyses/decompiler/optimization_passes/ret_addr_save_simplifier.py,sha256=_sTaGMQMFa5ATQIvNyL05UK8gCi_SaOckrZKyHZ2vfs,6470
|
|
134
134
|
angr/analyses/decompiler/optimization_passes/ret_deduplicator.py,sha256=BwD92mD25Qx3nYqG-XTTgorL1hl_JqZ9YRM5xuGHJac,7828
|
|
@@ -266,10 +266,10 @@ angr/analyses/reaching_definitions/reaching_definitions.py,sha256=CjW3Q7rj_fX-LQ
|
|
|
266
266
|
angr/analyses/reaching_definitions/subject.py,sha256=GVaI1jM-Nv2MWaCjJ-Q_54nSS3hvAaZthz14AJJNq-A,1995
|
|
267
267
|
angr/analyses/typehoon/__init__.py,sha256=kCQMAuvsUKAdYFiOstBzMBCqpquJKJCQSe0CGAr2Rng,31
|
|
268
268
|
angr/analyses/typehoon/dfa.py,sha256=TdA5ts4-0xQtccJdz1fMPATIKV-gWgXqmKkTM338b-g,3519
|
|
269
|
-
angr/analyses/typehoon/lifter.py,sha256=
|
|
270
|
-
angr/analyses/typehoon/simple_solver.py,sha256=
|
|
271
|
-
angr/analyses/typehoon/translator.py,sha256=
|
|
272
|
-
angr/analyses/typehoon/typeconsts.py,sha256=
|
|
269
|
+
angr/analyses/typehoon/lifter.py,sha256=8pdONjOHc5H2rOqpISPHJW5_tlwjgfovPCsQ-Z5odFI,2631
|
|
270
|
+
angr/analyses/typehoon/simple_solver.py,sha256=DOu6xOicKSz6PZ_ENN_RYQkloS-T29a4iqc_YYQKVrs,45513
|
|
271
|
+
angr/analyses/typehoon/translator.py,sha256=K3m0x0pDqp29YXS8BPLMbDmWdFpKHt3US1eBbAqM0bc,8610
|
|
272
|
+
angr/analyses/typehoon/typeconsts.py,sha256=4VYlzR7xVDIzwx_hH0KXNNKTYFTfMsmtqTIpjrd8Ev4,6990
|
|
273
273
|
angr/analyses/typehoon/typehoon.py,sha256=2VO2pCulrwgZncxRN6nJvNQozaDUsz98kt94boDoniY,9353
|
|
274
274
|
angr/analyses/typehoon/typevars.py,sha256=yZX2rdbHMPdsZXD-HJlbULVkUaXESqzv_ajxgHPzPUA,15783
|
|
275
275
|
angr/analyses/typehoon/variance.py,sha256=VPuBrPmbw5RgNG5SUTNFEd5rr4v3V_qD1vgilqWvdrs,158
|
|
@@ -417,7 +417,7 @@ angr/exploration_techniques/symbion.py,sha256=o-o_ZdbSMZCjA0_uV4TJV6jdtZXq2cO3KY
|
|
|
417
417
|
angr/exploration_techniques/tech_builder.py,sha256=UWmOE7GqQkZj_X_kR4Un7rDZyB4oL84Q6L-nLaU1i70,1586
|
|
418
418
|
angr/exploration_techniques/threading.py,sha256=ySZsaltVJ650ZHfyvm_LLYz13J5CT6kwV9E4bXeTDVY,2976
|
|
419
419
|
angr/exploration_techniques/timeout.py,sha256=Q1auu2Nw0VKOqpMaI9E5KnkKWe_sygXSIe352tUtJ2U,923
|
|
420
|
-
angr/exploration_techniques/tracer.py,sha256=
|
|
420
|
+
angr/exploration_techniques/tracer.py,sha256=yZ12LOS9aHk5WQ16ntM1rKFacoQfAc62EPg5Lfn3b2E,50249
|
|
421
421
|
angr/exploration_techniques/unique.py,sha256=fZ2n1xTtNLbNVMzrhbvy2ouRWE-5BR6bgwJQiJZTRRY,4413
|
|
422
422
|
angr/exploration_techniques/veritesting.py,sha256=S3d40zASHwqfblC42jLTrjb79z8rHdhhbvKEjTZqmFk,1350
|
|
423
423
|
angr/flirt/__init__.py,sha256=UTjDOlVPnvb5u1zYOvSrI_8F-RllvA_rWCEF1XGEswk,4428
|
|
@@ -501,7 +501,7 @@ angr/procedures/cgc/fdwait.py,sha256=bYccIjGqa-pHXNz_DFVdg6zDTkBk_QX0u9pCwJvOP9o
|
|
|
501
501
|
angr/procedures/cgc/random.py,sha256=1dyl58S21I3-LMGi8HlD9VZ0VN97wA7pBIeU1fZi4QI,2334
|
|
502
502
|
angr/procedures/cgc/receive.py,sha256=qNi7ZX-411q3i-j4z-ylo6jPP5oCky--IP_CyTScWHI,3758
|
|
503
503
|
angr/procedures/cgc/transmit.py,sha256=CSWX4FLeW2-42_QVo2FMdmV9GJuYqgtTybtYbcMgDCQ,2368
|
|
504
|
-
angr/procedures/definitions/__init__.py,sha256=
|
|
504
|
+
angr/procedures/definitions/__init__.py,sha256=xO3LUvd-550Kx0bsidex4Jx6CWwG31pzrSQoMa6qicw,29187
|
|
505
505
|
angr/procedures/definitions/cgc.py,sha256=tEYT-9MOmlBxehMYP32Fog9t8GczMdA84ienDwcPdyM,460
|
|
506
506
|
angr/procedures/definitions/glibc.py,sha256=JYvXHEkNMJhyzoCvnIJs6Aa3u_pTtjHuw-mbCkNKWBY,394113
|
|
507
507
|
angr/procedures/definitions/gnulib.py,sha256=fH8KbaUj6bVOG_cv-JiaffWkVN-YHFbWwvRlE8Mkr9c,1081
|
|
@@ -1200,16 +1200,16 @@ angr/utils/enums_conv.py,sha256=YdnZzvuVc_BW1EuC4OtEo7LqB35XkPrXICyWox8Posg,2091
|
|
|
1200
1200
|
angr/utils/env.py,sha256=wWlmjLp7CtafKItn7xq2RW3UzGGgxw58Wc8fSm3EZJQ,363
|
|
1201
1201
|
angr/utils/formatting.py,sha256=QOw75CLSrttGTn2aYQzBFIBhZj40J9ESQZxJOz0BexA,4217
|
|
1202
1202
|
angr/utils/funcid.py,sha256=PCOvMfRrt70Es1cMlVqKFVCmHfELXQHvX08Uqabn7Nk,5006
|
|
1203
|
-
angr/utils/graph.py,sha256=
|
|
1203
|
+
angr/utils/graph.py,sha256=z36Q_bitE9yu0CFRhrRAj6hAWe-dSvzJvDHgqz6tJMQ,28417
|
|
1204
1204
|
angr/utils/lazy_import.py,sha256=VgN0-cMsr6XdGIq56Js1X8YecfPdW9Z4NrB3d2jD-5Y,308
|
|
1205
1205
|
angr/utils/library.py,sha256=MYbY6rvC2Fi1ofbBHynh6-cdmaDETxj8hBz1gxKvsQQ,7178
|
|
1206
1206
|
angr/utils/loader.py,sha256=QdkatPiyRfz5KdfCzRI1Xp3TJL_Pa75wY0dsILgMbwk,1944
|
|
1207
1207
|
angr/utils/mp.py,sha256=xSWDnZdkLaTwGXntuSDwb2tIqMsIxJpmLrxd_YWBILw,1822
|
|
1208
1208
|
angr/utils/timing.py,sha256=uOowCP8kotDrKDOjlAod-guBuYkAA8zEtiAwpdwMlIU,1334
|
|
1209
1209
|
angr/utils/typing.py,sha256=_I4dzZSh1_uRKQ3PpjXseA_CaJH6ru2yAxjICkJhfmI,417
|
|
1210
|
-
angr-9.2.
|
|
1211
|
-
angr-9.2.
|
|
1212
|
-
angr-9.2.
|
|
1213
|
-
angr-9.2.
|
|
1214
|
-
angr-9.2.
|
|
1215
|
-
angr-9.2.
|
|
1210
|
+
angr-9.2.89.dist-info/LICENSE,sha256=cgL_ho5B1NH8UxwtBuqThRWdjear8b7hktycaS1sz6g,1327
|
|
1211
|
+
angr-9.2.89.dist-info/METADATA,sha256=cSfTfaH4dfJpbC4VCyyymVxBU6l8Yq9epiYKXirEYzo,4796
|
|
1212
|
+
angr-9.2.89.dist-info/WHEEL,sha256=XDTs3wIbcE-BcRO08VJlZpA6z9OaC1mOKPCGGGwuM2g,109
|
|
1213
|
+
angr-9.2.89.dist-info/entry_points.txt,sha256=Vjh1C8PMyr5dZFMnik5WkEP01Uwr2T73I3a6N32sgQU,44
|
|
1214
|
+
angr-9.2.89.dist-info/top_level.txt,sha256=dKw0KWTbwLXytFvv15oAAG4sUs3ey47tt6DorJG9-hw,5
|
|
1215
|
+
angr-9.2.89.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|