angr 9.2.88__py3-none-macosx_10_9_x86_64.whl → 9.2.89__py3-none-macosx_10_9_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 CHANGED
@@ -1,7 +1,7 @@
1
1
  # pylint: disable=wildcard-import
2
2
  # pylint: disable=wrong-import-position
3
3
 
4
- __version__ = "9.2.88"
4
+ __version__ = "9.2.89"
5
5
 
6
6
  if bytes is str:
7
7
  raise Exception(
@@ -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 reaching gotos
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
- if goto_target is None:
65
- continue
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
- # og_block -> suc_block (goto target)
76
- to_update[node] = goto_target
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
- for target_node, goto_node in to_update.items():
83
- if (target_node, goto_node) not in self.out_graph.edges:
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
- # always make a copy if there is a goto edge
87
- cp = copy.deepcopy(goto_node)
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
- # kill the original if we made enough copies to drain in-degree
101
- if self.out_graph.in_degree(goto_node) == 0:
102
- self.out_graph.remove_node(goto_node)
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, func, prevent_new_gotos=True, recover_structure_fails=True, max_opt_iters=1, simplify_ail=True, **kwargs
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 and (len(self._goto_manager.gotos) > len(initial_gotos)):
302
- self.out_graph = None
303
- return
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):
@@ -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 ty.offsets:
63
+ if field_name not in ty_offsets:
61
64
  return BottomType()
62
- converted_fields[ty.offsets[field_name]] = self.lift(simtype)
63
- return Struct(fields=converted_fields, name=ty.name)
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
- s.fields["field_%x" % offset] = translated_type
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
 
Binary file
@@ -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
- for src, dst in graph.edges():
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.88
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.88
21
- Requires-Dist: archinfo ==9.2.88
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.88
26
- Requires-Dist: cle ==9.2.88
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.88
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=Sm53DKOW1bfjik8o99uWAdy3UYSJVIgZY423aqX_SKk,3942
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=YIsOoeELNvC88r3_kPGOv0Hvz82ZYNsPRd8PLWg6z6g,20197
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=-KFvRdTvHseDngcqaN5HLRTYGlLzzBklaLIxka9o6a4,3020
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=oEDn3maEW8pPcDitWWyq3xC2Oom3TCHoLn0TIr-nR3g,3557
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=U2boYOhhNuIYg6NNUJQJIJhWQCzdivPtNY6G1lt6PYQ,13044
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=DGBD9mL7FNR9IlICJ1sTWJsw_prGThyH-dEHBXpf9Ho,2259
270
- angr/analyses/typehoon/simple_solver.py,sha256=McCdyrAcqPOffxti-HGI5ugs1ajvkpIVsNBvlXsQ3nA,45325
271
- angr/analyses/typehoon/translator.py,sha256=H_XTX1uucc-1ev4HrXW_u8nq3IdUF-YD-pPBu8toApQ,8396
272
- angr/analyses/typehoon/typeconsts.py,sha256=uHmWbaa7d6xqVuTSJznlAMDaDQl5d4jnooRqsSIL6ko,6918
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=Nxk1nbEJ1L35rzpdRwSiNUac-1QJghAeLqzfsr_A8QM,50198
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
@@ -476,7 +476,7 @@ angr/knowledge_plugins/xrefs/__init__.py,sha256=-5A2h048WTRu6Et7q7bqlc-AyBXNuJ9A
476
476
  angr/knowledge_plugins/xrefs/xref.py,sha256=w4wjDFl4xtJYOtJplp9s1AIX3wI1RE71po3ufh1M4aY,4963
477
477
  angr/knowledge_plugins/xrefs/xref_manager.py,sha256=GYF9N1t4JxkDNGAwrVLo4_NF51P4gqiuQ21F0IbloF0,4026
478
478
  angr/knowledge_plugins/xrefs/xref_types.py,sha256=VR3xLQQ-gUg25oX0OL3BJHyQRlZh2A8syBac9ZMS9n4,271
479
- angr/lib/angr_native.dylib,sha256=4xUEapmFh0_8tdLL4RwtJnP-wG9kHqeSXdKLeBBBdoU,18589760
479
+ angr/lib/angr_native.dylib,sha256=5xevP1WH2V63voMqDtW2PDmgWtIQULgFZQeBnT2lBKw,18589760
480
480
  angr/misc/__init__.py,sha256=Ct-Q6-c-Frdz5Ihkqmou3j_1jyJi8WJXlQxs-gPQg0Y,237
481
481
  angr/misc/ansi.py,sha256=TKrx7d_MViChHh5RBR2VLufNrujTUioJWsZS5ugk8k4,807
482
482
  angr/misc/autoimport.py,sha256=K64D53xl3xUqBulXAyaypzqYRBjjm4HDn6TlJsBouKw,3426
@@ -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=YUG24aOrEfSme_9h9iaYBn0DsJAs9Do4QLtfMKsE1HQ,28956
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=HjUzom1Mfu2j6aVU7j3UHvSPju_0UPwClMBNu85qlqU,27838
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.88.dist-info/LICENSE,sha256=cgL_ho5B1NH8UxwtBuqThRWdjear8b7hktycaS1sz6g,1327
1211
- angr-9.2.88.dist-info/METADATA,sha256=8UW-MyNe_FolwwTAEUfPxAcHfTXfCRuh4DTjNGw2YcU,4796
1212
- angr-9.2.88.dist-info/WHEEL,sha256=u9MQlpuGAYBpG45vidFelmQnoU6n3ZJdbrH9Sj1jfKg,107
1213
- angr-9.2.88.dist-info/entry_points.txt,sha256=Vjh1C8PMyr5dZFMnik5WkEP01Uwr2T73I3a6N32sgQU,44
1214
- angr-9.2.88.dist-info/top_level.txt,sha256=dKw0KWTbwLXytFvv15oAAG4sUs3ey47tt6DorJG9-hw,5
1215
- angr-9.2.88.dist-info/RECORD,,
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=u9MQlpuGAYBpG45vidFelmQnoU6n3ZJdbrH9Sj1jfKg,107
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