angr 9.2.98__py3-none-macosx_10_9_x86_64.whl → 9.2.100__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.98"
4
+ __version__ = "9.2.100"
5
5
 
6
6
  if bytes is str:
7
7
  raise Exception(
@@ -3287,7 +3287,7 @@ class CFGFast(ForwardAnalysis[CFGNode, CFGNode, CFGJob, int], CFGBase): # pylin
3287
3287
 
3288
3288
  removed_nodes = set()
3289
3289
 
3290
- a = None # it always hold the very recent non-removed node
3290
+ a = None # it always holds the very recent non-removed node
3291
3291
  is_arm = is_arm_arch(self.project.arch)
3292
3292
 
3293
3293
  for i in range(len(sorted_nodes)): # pylint:disable=consider-using-enumerate
@@ -3341,7 +3341,7 @@ class CFGFast(ForwardAnalysis[CFGNode, CFGNode, CFGJob, int], CFGBase): # pylin
3341
3341
  # but somehow we thought b is the beginning
3342
3342
  if a.addr + a.size == b.addr + b.size:
3343
3343
  in_edges = len([_ for _, _, data in self.graph.in_edges([b], data=True)])
3344
- if in_edges == 0:
3344
+ if in_edges == 0 and b in self.graph:
3345
3345
  # we use node a to replace node b
3346
3346
  # link all successors of b to a
3347
3347
  for _, dst, data in self.graph.out_edges([b], data=True):
@@ -3360,7 +3360,7 @@ class CFGFast(ForwardAnalysis[CFGNode, CFGNode, CFGJob, int], CFGBase): # pylin
3360
3360
 
3361
3361
  # next case - if b is directly from function prologue detection, or a basic block that is a successor of
3362
3362
  # a wrongly identified basic block, we might be totally misdecoding b
3363
- if b.instruction_addrs[0] not in a.instruction_addrs:
3363
+ if b.instruction_addrs[0] not in a.instruction_addrs and b in self.graph:
3364
3364
  # use a, truncate b
3365
3365
 
3366
3366
  new_b_addr = a.addr + a.size # b starts right after a terminates
@@ -954,7 +954,7 @@ class JumpTableResolver(IndirectJumpResolver):
954
954
  # for a typical vtable call (or jump if at the end of a function), the block as two predecessors that form a
955
955
  # diamond shape
956
956
  curr_node = func.get_node(addr)
957
- if curr_node is None:
957
+ if curr_node is None or curr_node not in func.graph:
958
958
  l.debug("Could not find the node %#x in the function transition graph", addr)
959
959
  return False, None
960
960
  preds = list(func.graph.predecessors(curr_node))
@@ -33,6 +33,7 @@ from ...procedures.stubs.UnresolvableJumpTarget import UnresolvableJumpTarget
33
33
  from .. import Analysis, register_analysis
34
34
  from ..cfg.cfg_base import CFGBase
35
35
  from ..reaching_definitions import ReachingDefinitionsAnalysis
36
+ from .return_maker import ReturnMaker
36
37
  from .ailgraph_walker import AILGraphWalker, RemoveNodeNotice
37
38
  from .optimization_passes import (
38
39
  get_default_optimization_passes,
@@ -1054,46 +1055,7 @@ class Clinic(Analysis):
1054
1055
  # unknown calling convention. cannot do much about return expressions.
1055
1056
  return ail_graph
1056
1057
 
1057
- # Block walker
1058
-
1059
- def _handle_Return(
1060
- stmt_idx: int, stmt: ailment.Stmt.Return, block: Optional[ailment.Block]
1061
- ): # pylint:disable=unused-argument
1062
- if (
1063
- block is not None
1064
- and not stmt.ret_exprs
1065
- and self.function.prototype is not None
1066
- and self.function.prototype.returnty is not None
1067
- and type(self.function.prototype.returnty) is not SimTypeBottom
1068
- ):
1069
- new_stmt = stmt.copy()
1070
- ret_val = self.function.calling_convention.return_val(self.function.prototype.returnty)
1071
- if isinstance(ret_val, SimRegArg):
1072
- reg = self.project.arch.registers[ret_val.reg_name]
1073
- new_stmt.ret_exprs.append(
1074
- ailment.Expr.Register(
1075
- self._next_atom(),
1076
- None,
1077
- reg[0],
1078
- ret_val.size * self.project.arch.byte_width,
1079
- reg_name=self.project.arch.translate_register_name(reg[0], ret_val.size),
1080
- )
1081
- )
1082
- else:
1083
- l.warning("Unsupported type of return expression %s.", type(ret_val))
1084
- block.statements[stmt_idx] = new_stmt
1085
-
1086
- def _handler(block):
1087
- walker = ailment.AILBlockWalker()
1088
- # we don't need to handle any statement besides Returns
1089
- walker.stmt_handlers.clear()
1090
- walker.expr_handlers.clear()
1091
- walker.stmt_handlers[ailment.Stmt.Return] = _handle_Return
1092
- walker.walk(block)
1093
-
1094
- # Graph walker
1095
-
1096
- AILGraphWalker(ail_graph, _handler, replace_nodes=True).walk()
1058
+ ReturnMaker(self._ail_manager, self.project.arch, self.function, ail_graph)
1097
1059
 
1098
1060
  return ail_graph
1099
1061
 
@@ -267,7 +267,7 @@ class GraphRegion:
267
267
  for succ in replace_with.successors:
268
268
  if succ not in self.successors:
269
269
  for succ_ in self.successors:
270
- if isinstance(succ_, GraphRegion) and succ_.head == succ:
270
+ if isinstance(succ_, GraphRegion) and succ_.addr == succ.addr:
271
271
  successor_map[succ] = succ_
272
272
  if successor_map:
273
273
  replace_with_graph_with_successors = networkx.DiGraph()
@@ -364,6 +364,16 @@ class GraphRegion:
364
364
  while isinstance(dst_head, GraphRegion) and dst_head not in sub_graph:
365
365
  dst_head = dst_head.head
366
366
 
367
+ if dst_head not in sub_graph:
368
+ # unexpected: structuring failed and resulted in a bad sub_graph
369
+ l.warning(
370
+ "Node %r for node %r is not found in the sub graph at address %#x. Nodes may go missing.",
371
+ dst_head,
372
+ dst_in_subgraph,
373
+ sub_graph_head.addr,
374
+ )
375
+ continue
376
+
367
377
  for src in sub_graph.predecessors(dst_head):
368
378
  graph.add_edge(src, dst)
369
379
  # replace the corresponding nodes in sub_graph_nodes and sub_graph_edges
@@ -136,7 +136,8 @@ class BlockWalker(AILBlockWalker):
136
136
  if isinstance(expr.addr, Const):
137
137
  # *(const_addr)
138
138
  # does it belong to a read-only section/segment?
139
- if self._addr_belongs_to_got(expr.addr.value) or self._addr_belongs_to_ro_region(expr.addr.value):
139
+ is_got = self._addr_belongs_to_got(expr.addr.value)
140
+ if is_got or self._addr_belongs_to_ro_region(expr.addr.value):
140
141
  try:
141
142
  w = self._project.loader.memory.unpack_word(
142
143
  expr.addr.value,
@@ -147,8 +148,9 @@ class BlockWalker(AILBlockWalker):
147
148
  # we don't have enough bytes to read out
148
149
  w = None
149
150
  if w is not None:
150
- # nice! replace it with the actual value
151
- return Const(None, None, w, expr.bits, **expr.tags)
151
+ if not (is_got and w == 0):
152
+ # nice! replace it with the actual value
153
+ return Const(None, None, w, expr.bits, **expr.tags)
152
154
  elif isinstance(expr.addr, Load) and expr.addr.bits == self._project.arch.bits:
153
155
  if isinstance(expr.addr.addr, Const):
154
156
  # *(*(const_addr))
@@ -231,6 +231,9 @@ class InlinedStringTransformationAILEngine(SimEngineLightAILMixin):
231
231
  return claripy.BVV(1, 1) if op0.concrete_value >= op1.concrete_value else claripy.BVV(0, 1)
232
232
  return None
233
233
 
234
+ def _handle_Call(self, stmt):
235
+ pass
236
+
234
237
 
235
238
  class InlineStringTransformationDescriptor:
236
239
  """
@@ -2,7 +2,7 @@
2
2
  import logging
3
3
 
4
4
  from ailment.statement import ConditionalJump, Assignment, Jump
5
- from ailment.expression import ITE
5
+ from ailment.expression import ITE, Const
6
6
 
7
7
  from ....utils.graph import subgraph_between_nodes
8
8
  from ..utils import remove_labels, to_ail_supergraph
@@ -146,10 +146,11 @@ class ITERegionConverter(OptimizationPass):
146
146
  #
147
147
 
148
148
  new_region_head = region_head.copy()
149
+ conditional_jump: ConditionalJump = region_head.statements[-1]
149
150
  addr_obj = true_stmt.src if "ins_addr" in true_stmt.src.tags else true_stmt
150
151
  ternary_expr = ITE(
151
152
  None,
152
- region_head.statements[-1].condition,
153
+ conditional_jump.condition,
153
154
  true_stmt.src,
154
155
  false_stmt.src,
155
156
  ins_addr=addr_obj.ins_addr,
@@ -160,6 +161,13 @@ class ITERegionConverter(OptimizationPass):
160
161
  new_assignment.src = ternary_expr
161
162
  new_region_head.statements[-1] = new_assignment
162
163
 
164
+ # add a goto statement to the region tail so it can be transformed into a break or other types of control-flow
165
+ # transitioning statement in the future
166
+ goto_stmt = Jump(
167
+ None, Const(None, None, region_tail.addr, self.project.arch.bits), region_tail.idx, **conditional_jump.tags
168
+ )
169
+ new_region_head.statements.append(goto_stmt)
170
+
163
171
  #
164
172
  # destroy all the old region blocks
165
173
  #
@@ -24,6 +24,8 @@ class ConstantDereferences(PeepholeOptimizationExprBase):
24
24
  val = self.project.loader.memory.unpack_word(expr.addr.value, size=expr.size)
25
25
  except KeyError:
26
26
  return None
27
+ if "got" in sec.name and val == 0:
28
+ return None
27
29
 
28
30
  return Const(None, None, val, expr.bits, **expr.tags, deref_src_addr=expr.addr.value)
29
31
 
@@ -4,6 +4,7 @@ from typing import Optional, Any, Dict, Set, Tuple, Iterable, Union, DefaultDict
4
4
 
5
5
  import ailment
6
6
  from ailment import Expression, Block, AILBlockWalker
7
+ from ailment.expression import ITE
7
8
  from ailment.statement import Statement, Assignment, Call
8
9
 
9
10
  from ..sequence_walker import SequenceWalker
@@ -385,11 +386,11 @@ class ExpressionReplacer(AILBlockWalker):
385
386
  return None
386
387
 
387
388
  def _handle_Assignment(self, stmt_idx: int, stmt: Assignment, block: Optional[Block]):
388
- # override the base handler and make sure we do not replace .dst with a Call expression
389
+ # override the base handler and make sure we do not replace .dst with a Call expression or an ITE expression
389
390
  changed = False
390
391
 
391
392
  dst = self._handle_expr(0, stmt.dst, stmt_idx, stmt, block)
392
- if dst is not None and dst is not stmt.dst and not isinstance(dst, Call):
393
+ if dst is not None and dst is not stmt.dst and not isinstance(dst, (Call, ITE)):
393
394
  changed = True
394
395
  else:
395
396
  dst = stmt.dst
@@ -446,7 +447,8 @@ class ExpressionFolder(SequenceWalker):
446
447
  for stmt in node.statements:
447
448
  if isinstance(stmt, ailment.Stmt.Assignment):
448
449
  if isinstance(stmt.dst, ailment.Expr.Register) and stmt.dst.variable is not None:
449
- if stmt.dst.variable in self._assignments:
450
+ unified_var = self._u(stmt.dst.variable)
451
+ if unified_var in self._assignments:
450
452
  # remove this statement
451
453
  continue
452
454
  if (
@@ -0,0 +1,71 @@
1
+ from typing import Optional
2
+ import logging
3
+
4
+ import ailment
5
+
6
+ from angr.sim_type import SimTypeBottom
7
+ from angr.calling_conventions import SimRegArg
8
+ from .ailgraph_walker import AILGraphWalker
9
+
10
+ l = logging.getLogger(__name__)
11
+
12
+
13
+ class ReturnMaker(AILGraphWalker):
14
+ """
15
+ Traverse the AILBlock graph of a function and update .ret_exprs of all return statements.
16
+ """
17
+
18
+ def __init__(self, ail_manager, arch, function, ail_graph):
19
+ super().__init__(ail_graph, self._handler, replace_nodes=True)
20
+ self.ail_manager = ail_manager
21
+ self.arch = arch
22
+ self.function = function
23
+ self._new_block = None
24
+
25
+ self.walk()
26
+
27
+ def _next_atom(self) -> int:
28
+ return self.ail_manager.next_atom()
29
+
30
+ def _handle_Return(
31
+ self, stmt_idx: int, stmt: ailment.Stmt.Return, block: Optional[ailment.Block]
32
+ ): # pylint:disable=unused-argument
33
+ if (
34
+ block is not None
35
+ and not stmt.ret_exprs
36
+ and self.function.prototype is not None
37
+ and self.function.prototype.returnty is not None
38
+ and type(self.function.prototype.returnty) is not SimTypeBottom
39
+ ):
40
+ new_stmt = stmt.copy()
41
+ ret_val = self.function.calling_convention.return_val(self.function.prototype.returnty)
42
+ if isinstance(ret_val, SimRegArg):
43
+ reg = self.arch.registers[ret_val.reg_name]
44
+ new_stmt.ret_exprs.append(
45
+ ailment.Expr.Register(
46
+ self._next_atom(),
47
+ None,
48
+ reg[0],
49
+ ret_val.size * self.arch.byte_width,
50
+ reg_name=self.arch.translate_register_name(reg[0], ret_val.size),
51
+ )
52
+ )
53
+ else:
54
+ l.warning("Unsupported type of return expression %s.", type(ret_val))
55
+ new_statements = block.statements[::]
56
+ new_statements[stmt_idx] = new_stmt
57
+ self._new_block = block.copy(statements=new_statements)
58
+
59
+ def _handler(self, block):
60
+ walker = ailment.AILBlockWalker()
61
+ # we don't need to handle any statement besides Returns
62
+ walker.stmt_handlers.clear()
63
+ walker.expr_handlers.clear()
64
+ walker.stmt_handlers[ailment.Stmt.Return] = self._handle_Return
65
+
66
+ self._new_block = None
67
+ walker.walk(block)
68
+
69
+ if self._new_block is not None:
70
+ return self._new_block
71
+ return None
@@ -1408,6 +1408,26 @@ class CUnsupportedStatement(CStatement):
1408
1408
  yield "\n", None
1409
1409
 
1410
1410
 
1411
+ class CDirtyStatement(CExpression):
1412
+
1413
+ __slots__ = ("dirty",)
1414
+
1415
+ def __init__(self, dirty, **kwargs):
1416
+ super().__init__(**kwargs)
1417
+ self.dirty = dirty
1418
+
1419
+ @property
1420
+ def type(self):
1421
+ return SimTypeInt().with_arch(self.codegen.project.arch)
1422
+
1423
+ def c_repr_chunks(self, indent=0, asexpr=False):
1424
+ indent_str = self.indent_str(indent=indent)
1425
+
1426
+ yield indent_str, None
1427
+ yield str(self.dirty), None
1428
+ yield "\n", None
1429
+
1430
+
1411
1431
  class CLabel(CStatement):
1412
1432
  """
1413
1433
  Represents a label in C code.
@@ -2414,6 +2434,7 @@ class CStructuredCodeGenerator(BaseStructuredCodeGenerator, Analysis):
2414
2434
  Stmt.ConditionalJump: self._handle_Stmt_ConditionalJump,
2415
2435
  Stmt.Return: self._handle_Stmt_Return,
2416
2436
  Stmt.Label: self._handle_Stmt_Label,
2437
+ Stmt.DirtyStatement: self._handle_Stmt_Dirty,
2417
2438
  # AIL expressions
2418
2439
  Expr.Register: self._handle_Expr_Register,
2419
2440
  Expr.Load: self._handle_Expr_Load,
@@ -3311,6 +3332,9 @@ class CStructuredCodeGenerator(BaseStructuredCodeGenerator, Analysis):
3311
3332
  self.map_addr_to_label[(stmt.ins_addr, stmt.block_idx)] = clabel
3312
3333
  return clabel
3313
3334
 
3335
+ def _handle_Stmt_Dirty(self, stmt: Stmt.DirtyStatement, **kwargs):
3336
+ return CDirtyStatement(stmt, codegen=self)
3337
+
3314
3338
  #
3315
3339
  # AIL expression handlers
3316
3340
  #
@@ -1131,9 +1131,14 @@ class PhoenixStructurer(StructurerBase):
1131
1131
  return False
1132
1132
  cmp_expr, cmp_lb, cmp_ub = cmp # pylint:disable=unused-variable
1133
1133
 
1134
- node_a = next(iter(nn for nn in graph.nodes if nn.addr == target))
1134
+ node_a = next(iter(nn for nn in graph.nodes if nn.addr == target), None)
1135
+ if node_a is None:
1136
+ return False
1137
+
1135
1138
  # the default case
1136
- node_b_addr = next(iter(t for t in successor_addrs if t != target))
1139
+ node_b_addr = next(iter(t for t in successor_addrs if t != target), None)
1140
+ if node_b_addr is None:
1141
+ return False
1137
1142
 
1138
1143
  # populate whitelist_edges
1139
1144
  for case_node_addr in jump_table.jumptable_entries:
@@ -1324,9 +1324,12 @@ class SimEngineLightAILMixin(SimEngineLightMixin):
1324
1324
  expr_1 = arg1
1325
1325
 
1326
1326
  try:
1327
- return expr_0 >> expr_1
1327
+ if isinstance(expr_1, claripy.ast.BV) and expr_1.concrete:
1328
+ return expr_0 >> expr_1.concrete_value
1328
1329
  except TypeError:
1329
- return ailment.Expr.BinaryOp(expr.idx, "Shr", [expr_0, expr_1], expr.signed, **expr.tags)
1330
+ pass
1331
+
1332
+ return ailment.Expr.BinaryOp(expr.idx, "Shr", [expr_0, expr_1], expr.signed, **expr.tags)
1330
1333
 
1331
1334
  def _ail_handle_Shl(self, expr):
1332
1335
  arg0, arg1 = expr.operands
@@ -1339,9 +1342,12 @@ class SimEngineLightAILMixin(SimEngineLightMixin):
1339
1342
  expr_1 = arg1
1340
1343
 
1341
1344
  try:
1342
- return expr_0 << expr_1
1345
+ if isinstance(expr_1, claripy.ast.BV) and expr_1.concrete:
1346
+ return expr_0 << expr_1.concrete_value
1343
1347
  except TypeError:
1344
- return ailment.Expr.BinaryOp(expr.idx, "Shl", [expr_0, expr_1], expr.signed, **expr.tags)
1348
+ pass
1349
+
1350
+ return ailment.Expr.BinaryOp(expr.idx, "Shl", [expr_0, expr_1], expr.signed, **expr.tags)
1345
1351
 
1346
1352
  def _ail_handle_Sal(self, expr):
1347
1353
  return self._ail_handle_Shl(expr)
Binary file
angr/simos/linux.py CHANGED
@@ -100,12 +100,18 @@ class SimLinux(SimUserland):
100
100
  _rtld_global_ro.rebased_addr + 0x0D0, 2
101
101
  ) # cpu features: kind = amd
102
102
 
103
- tls_obj = self.project.loader.tls.new_thread()
104
- if isinstance(self.project.arch, ArchAMD64):
105
- self.project.loader.memory.pack_word(tls_obj.thread_pointer + 0x28, 0x5F43414E41525900) # _CANARY\x00
106
- self.project.loader.memory.pack_word(tls_obj.thread_pointer + 0x30, 0x5054524755415244)
107
- elif isinstance(self.project.arch, ArchX86):
108
- self.project.loader.memory.pack_word(tls_obj.thread_pointer + 0x10, self.vsyscall_addr)
103
+ try:
104
+ tls_obj = self.project.loader.tls.new_thread()
105
+ except NotImplementedError:
106
+ pass
107
+ else:
108
+ if isinstance(self.project.arch, ArchAMD64):
109
+ self.project.loader.memory.pack_word(
110
+ tls_obj.thread_pointer + 0x28, 0x5F43414E41525900
111
+ ) # _CANARY\x00
112
+ self.project.loader.memory.pack_word(tls_obj.thread_pointer + 0x30, 0x5054524755415244)
113
+ elif isinstance(self.project.arch, ArchX86):
114
+ self.project.loader.memory.pack_word(tls_obj.thread_pointer + 0x10, self.vsyscall_addr)
109
115
 
110
116
  if isinstance(self.project.arch, ArchARM):
111
117
  # https://www.kernel.org/doc/Documentation/arm/kernel_user_helpers.txt
@@ -208,19 +214,20 @@ class SimLinux(SimUserland):
208
214
  if not self._is_core and hasattr(state.memory, "allocate_stack_pages"):
209
215
  state.memory.allocate_stack_pages(state.solver.eval(state.regs.sp) - 1, 0x20 * 0x1000)
210
216
 
211
- tls_obj = self.project.loader.tls.threads[thread_idx if thread_idx is not None else 0]
212
- if isinstance(state.arch, ArchAMD64):
213
- state.regs.fs = tls_obj.user_thread_pointer
214
- elif isinstance(state.arch, ArchX86):
215
- state.regs.gs = tls_obj.user_thread_pointer >> 16
216
- elif isinstance(state.arch, (ArchMIPS32, ArchMIPS64)):
217
- state.regs.ulr = tls_obj.user_thread_pointer
218
- elif isinstance(state.arch, ArchPPC32):
219
- state.regs.r2 = tls_obj.user_thread_pointer
220
- elif isinstance(state.arch, ArchPPC64):
221
- state.regs.r13 = tls_obj.user_thread_pointer
222
- elif isinstance(state.arch, ArchAArch64):
223
- state.regs.tpidr_el0 = tls_obj.user_thread_pointer
217
+ if self.project.loader.tls.threads:
218
+ tls_obj = self.project.loader.tls.threads[thread_idx if thread_idx is not None else 0]
219
+ if isinstance(state.arch, ArchAMD64):
220
+ state.regs.fs = tls_obj.user_thread_pointer
221
+ elif isinstance(state.arch, ArchX86):
222
+ state.regs.gs = tls_obj.user_thread_pointer >> 16
223
+ elif isinstance(state.arch, (ArchMIPS32, ArchMIPS64)):
224
+ state.regs.ulr = tls_obj.user_thread_pointer
225
+ elif isinstance(state.arch, ArchPPC32):
226
+ state.regs.r2 = tls_obj.user_thread_pointer
227
+ elif isinstance(state.arch, ArchPPC64):
228
+ state.regs.r13 = tls_obj.user_thread_pointer
229
+ elif isinstance(state.arch, ArchAArch64):
230
+ state.regs.tpidr_el0 = tls_obj.user_thread_pointer
224
231
 
225
232
  if fs is None:
226
233
  fs = {}
@@ -397,7 +404,7 @@ class SimLinux(SimUserland):
397
404
  state.registers.store(reg, self.project.loader.main_object.ppc64_initial_rtoc)
398
405
  elif val == "entry":
399
406
  state.registers.store(reg, state.registers.load("pc"))
400
- elif val == "thread_pointer":
407
+ elif val == "thread_pointer" and self.project.loader.tls.threads:
401
408
  state.registers.store(reg, self.project.loader.tls.threads[0].user_thread_pointer)
402
409
  else:
403
410
  _l.warning('Unknown entry point register value indicator "%s"', val)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: angr
3
- Version: 9.2.98
3
+ Version: 9.2.100
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.98
21
- Requires-Dist: archinfo ==9.2.98
20
+ Requires-Dist: ailment ==9.2.100
21
+ Requires-Dist: archinfo ==9.2.100
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.98
26
- Requires-Dist: cle ==9.2.98
25
+ Requires-Dist: claripy ==9.2.100
26
+ Requires-Dist: cle ==9.2.100
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.98
36
+ Requires-Dist: pyvex ==9.2.100
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=NZ9Eg7WFAHNg7afS6iARWdkgVjV-jC9Vx2fQTtVTRNo,3992
1
+ angr/__init__.py,sha256=21woDHAvBdmFpvp0-Uih2rSDsQoo-aO8L5SSdvmowCE,3993
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
@@ -65,7 +65,7 @@ angr/analyses/cfg/cfg.py,sha256=1JpPGlqXXRFwE0tk26xjabT_-dq-kqAxMv7o6-DUhp4,3146
65
65
  angr/analyses/cfg/cfg_arch_options.py,sha256=YONHg6y-h6BCsBkJK9tuxb94DDfeOoy9CUS-LVyyDyg,3112
66
66
  angr/analyses/cfg/cfg_base.py,sha256=JOliBFWPDWiIJlV5IUxU2Uf7BjExUNcJCibIlOQKoTs,123056
67
67
  angr/analyses/cfg/cfg_emulated.py,sha256=Fi3rDN5ByxhO-H4Y7qn-3WZgBG12JGyvxcWmrD_FnFQ,152842
68
- angr/analyses/cfg/cfg_fast.py,sha256=lLzVD5jli8cScRa_R2nnVCjWAmvGpRP-m8ns7RvQJaw,218220
68
+ angr/analyses/cfg/cfg_fast.py,sha256=2qcNkWihXV7M-KrOQv-j7B3m5okEe_7nIzgmZe09GHE,218261
69
69
  angr/analyses/cfg/cfg_fast_soot.py,sha256=eA_P-OY3gRRNj2BBgSPMsB_llGyFFCNW3VyGZ2uiMoM,26047
70
70
  angr/analyses/cfg/cfg_job_base.py,sha256=3IQE_Iy17xtGfsIkrKc2ERIakAYiNdLtRb_jwOGQtHU,5989
71
71
  angr/analyses/cfg/indirect_jump_resolvers/__init__.py,sha256=T2rCpXy_fIoW_kHwZAVZupoj2UljitHvpI2uWJZ8NwU,361
@@ -74,7 +74,7 @@ angr/analyses/cfg/indirect_jump_resolvers/amd64_pe_iat.py,sha256=mMLQ5cUDjpGXD38
74
74
  angr/analyses/cfg/indirect_jump_resolvers/arm_elf_fast.py,sha256=VhgIEDBSN6K_1pNHW1O23bOvc_gbi7bPpmlTGE7_5Uw,5231
75
75
  angr/analyses/cfg/indirect_jump_resolvers/const_resolver.py,sha256=9ctRVLyVUMhkBV0y-Iy48usHBodGfkaWK1C7Dim2fgE,5273
76
76
  angr/analyses/cfg/indirect_jump_resolvers/default_resolvers.py,sha256=TyRIBvH8St1eHktpRrErD4zp8HKP3ppglfPuCEE0wg0,1441
77
- angr/analyses/cfg/indirect_jump_resolvers/jumptable.py,sha256=XnRqocVq_Y52d_XkoMnQoWQCGbwpDdQV4RpQlK9pOIc,101955
77
+ angr/analyses/cfg/indirect_jump_resolvers/jumptable.py,sha256=_bYhqtDXmeR7N7zQPnYvGP983k3Bnu8KcObevSBj7eM,101986
78
78
  angr/analyses/cfg/indirect_jump_resolvers/mips_elf_fast.py,sha256=G3y7GYPxtuDQCwBz1eec-74YC87npLK6K2mtRPOsOqc,19350
79
79
  angr/analyses/cfg/indirect_jump_resolvers/propagator_utils.py,sha256=z77LC9YyQjNEr8ncVwIXVVqPyUjL2x2pGvqAax6QlYo,957
80
80
  angr/analyses/cfg/indirect_jump_resolvers/resolver.py,sha256=2YyKPaXuWVbPwUQZcn0CKuba3ydYGIMT0Vxhy09kcV0,3019
@@ -96,7 +96,7 @@ angr/analyses/decompiler/block_similarity.py,sha256=x7DTJw6QKrXaPmI0Oxhl2V6rMDhQ
96
96
  angr/analyses/decompiler/block_simplifier.py,sha256=X5kO97A1bEwSUfbwgj1cSO56qkhwPQZnIFi1DKMZQoo,17199
97
97
  angr/analyses/decompiler/call_counter.py,sha256=V3TIaSvLUy9vLEWErnvlCS--_ubGWQAeU0tqq6XYeOU,1205
98
98
  angr/analyses/decompiler/callsite_maker.py,sha256=W389gPmq8ylVIr38Re5hEBhaLodipT6div4RlirdnEU,15083
99
- angr/analyses/decompiler/clinic.py,sha256=rWFsKNt6RJYHQK6Ng5OwNRFw1Pvhm0bOKrTODcSIjS0,87477
99
+ angr/analyses/decompiler/clinic.py,sha256=JCW5Trfyc8dmIKQyrTPuj3Jcwil1vaHEvtUDr2H9kdg,85821
100
100
  angr/analyses/decompiler/condition_processor.py,sha256=2d6CLDcGa4WqRBVr5NTFZCtJXSuAGlrAM0fGlknE-x4,49596
101
101
  angr/analyses/decompiler/decompilation_cache.py,sha256=xj5kzGV6OlTtXIIcvK0Z17TMunggn9ilgKD3wjDiTB0,1176
102
102
  angr/analyses/decompiler/decompilation_options.py,sha256=vbuLF0Oze2ldFNpv2jWFnGG4sJPey527KAAbj9TRvAI,8240
@@ -105,12 +105,13 @@ angr/analyses/decompiler/empty_node_remover.py,sha256=KhH88_x3A1nR22H3wrdp1gznLu
105
105
  angr/analyses/decompiler/expression_counters.py,sha256=P4RbtnyEy2lJnNUw_G702W-AIGaL4MszZ5fdrritwwg,2867
106
106
  angr/analyses/decompiler/expression_narrower.py,sha256=64VR1xdPVVoCLHOYRPacV9ecQb33rP7nC1l8rpFxTkg,3545
107
107
  angr/analyses/decompiler/goto_manager.py,sha256=UD42GvAN7--8GPZuT3blkyEhhpw-HExRfzov79j-3w4,2485
108
- angr/analyses/decompiler/graph_region.py,sha256=vrCl71_Dv6EJb-0GLIA5FA3_CS9RMOZWexzsuIaAshE,16502
108
+ angr/analyses/decompiler/graph_region.py,sha256=hBgARiSiv0KfoDbekAMYUKuTHhs_uIz2Qe_0lnFMx8g,16956
109
109
  angr/analyses/decompiler/jump_target_collector.py,sha256=rA0IhZuJ20-jOQTjT7fnhyW2qwPdJI4SmnhLRtuADro,1181
110
110
  angr/analyses/decompiler/jumptable_entry_condition_rewriter.py,sha256=dcgnXt3oKa8Qm_KtT-Rl7XDmLetvOj_UFALxC2HGLac,2139
111
111
  angr/analyses/decompiler/redundant_label_remover.py,sha256=kDGGFWWV61I5fbASiTQTHgDCFLIOkffUdDOsu5yg5ok,5385
112
112
  angr/analyses/decompiler/region_identifier.py,sha256=KR4SifhPbPwjrJiW2xQ_64BSdAEUnUTWRUFgHeAMhGc,45489
113
113
  angr/analyses/decompiler/region_walker.py,sha256=lTfweYbY4_a2f2yGztTKG6JtU1jXf-kaz-NHbX9nkXE,717
114
+ angr/analyses/decompiler/return_maker.py,sha256=BwxpTtJfVDksZ0Y986KRk9d3jKg98SGaiXXLILeL5Pw,2498
114
115
  angr/analyses/decompiler/seq_to_blocks.py,sha256=2KINMEgaXMG3XIiFDMRkbn10dggy7a9AHgwV383huRM,529
115
116
  angr/analyses/decompiler/sequence_walker.py,sha256=mw4RG-Act5_no_RyQcsxWZwva-n7FdH2a7w_uItGUpI,8428
116
117
  angr/analyses/decompiler/utils.py,sha256=jHTMKKyk4GDkWhJGwmZTl_ZD6efJSr9vtG-cULyzKUc,28116
@@ -120,15 +121,15 @@ angr/analyses/decompiler/ccall_rewriters/rewriter_base.py,sha256=gWezEKB7A_YnlfU
120
121
  angr/analyses/decompiler/optimization_passes/__init__.py,sha256=xlLn9Mzcd9vmvV0exca84xejLlOqP1MKYv3WVsQxmX8,3954
121
122
  angr/analyses/decompiler/optimization_passes/base_ptr_save_simplifier.py,sha256=bjpEMW-Lqj5XW9NWUikGPcRn5scKNc8VvEjVMXxAuq8,5289
122
123
  angr/analyses/decompiler/optimization_passes/code_motion.py,sha256=KEQPdpSfSYiIzHFYGkfj3W8ZupJbogQNhYnYKzo1xUA,15319
123
- angr/analyses/decompiler/optimization_passes/const_derefs.py,sha256=FEoiprXxns-3S0nFaIWm2DBW_aDMq3GZ-VOG3CIqcMw,10593
124
+ angr/analyses/decompiler/optimization_passes/const_derefs.py,sha256=X9N0Dk48_6E0en16lMZ75KhEQfeUmZw19TNFiPzL8Cg,10677
124
125
  angr/analyses/decompiler/optimization_passes/cross_jump_reverter.py,sha256=CP-WjyQGOw_mnUF0ZpC5C4syMxlx4Tvy0T_EIZQxXrY,4033
125
126
  angr/analyses/decompiler/optimization_passes/div_simplifier.py,sha256=J7LRc3-DKfToxKVejnkHbNel9_56-7xsGyJJiTCwqsQ,17442
126
127
  angr/analyses/decompiler/optimization_passes/engine_base.py,sha256=7nnNZkVMqvikHCy9X11M8KLWbL8lF0DoLYPemETWP4c,10388
127
128
  angr/analyses/decompiler/optimization_passes/expr_op_swapper.py,sha256=vlPhWDyvuEmbGcd1ka8rS68F72Ty6Hw3J00KM3tWCus,4701
128
129
  angr/analyses/decompiler/optimization_passes/flip_boolean_cmp.py,sha256=GuDDqmZXUo_a9Af30n9tcihNQcATDrztmraZ-88v134,3946
129
- angr/analyses/decompiler/optimization_passes/inlined_string_transformation_simplifier.py,sha256=RPxrXnPZoYGQ63eol6Ttfv5s_C-iP7k1Iz_dRCDn6oM,16281
130
+ angr/analyses/decompiler/optimization_passes/inlined_string_transformation_simplifier.py,sha256=vTZtL0nMMkMzioSGcxE0B6wuVNZsSmV_Dh1MuItdLZ0,16329
130
131
  angr/analyses/decompiler/optimization_passes/ite_expr_converter.py,sha256=-6znFCAXS7Z3cn5CTqr3mg4r1G_jJgDFJHk2PzMVwtE,7756
131
- angr/analyses/decompiler/optimization_passes/ite_region_converter.py,sha256=l571GUDoCt4hZ2RHBNVUraLl-ODmP_kb11bLKwbCIB0,6762
132
+ angr/analyses/decompiler/optimization_passes/ite_region_converter.py,sha256=vjDRO-Rh5LVIlxGRCuggjcz12CIxQuISB0LCC-vF6ZM,7207
132
133
  angr/analyses/decompiler/optimization_passes/lowered_switch_simplifier.py,sha256=9hhCcvE15MCM6KoJU1ba11hFiN6MXxYAb9FbntzYJbg,34328
133
134
  angr/analyses/decompiler/optimization_passes/mod_simplifier.py,sha256=o2AZIpj4NpOAaWOGbudDUfGJJAD2exu-HvNbwph3mi8,3124
134
135
  angr/analyses/decompiler/optimization_passes/multi_simplifier.py,sha256=_63Y2vMNLSXYM6_Grfs89Nu63i5YLxTPmxTR_Z6fwLY,10420
@@ -159,7 +160,7 @@ angr/analyses/decompiler/peephole_optimizations/bool_expr_xor_1.py,sha256=QANf71
159
160
  angr/analyses/decompiler/peephole_optimizations/bswap.py,sha256=5u1R-kIyCxDw4oMNnbLhaE9rUiJ_atwDaMoefzpTmAg,6238
160
161
  angr/analyses/decompiler/peephole_optimizations/coalesce_same_cascading_ifs.py,sha256=9ogHTcP4vhFfwDzxccnjfhkizKGvM_7tK3y6PqyG5Hg,1020
161
162
  angr/analyses/decompiler/peephole_optimizations/const_mull_a_shift.py,sha256=KLdhgU_e1OglEeC7IHipql9UzYpatJc0LydXJJIakL4,3691
162
- angr/analyses/decompiler/peephole_optimizations/constant_derefs.py,sha256=AE2jC2HHMNWApBw_2EnORMicr4A0Gt2Trl6tSqunC9g,1583
163
+ angr/analyses/decompiler/peephole_optimizations/constant_derefs.py,sha256=tLZ04IkbVKlm1HYNhj7pytmLC3YDpIJ7FG0p4Vz99bk,1666
163
164
  angr/analyses/decompiler/peephole_optimizations/conv_a_sub0_shr_and.py,sha256=vzROAUvKUrQQmwUXJ-0WyFr1v5f8EPBgjeXIpWhtDak,2578
164
165
  angr/analyses/decompiler/peephole_optimizations/conv_shl_shr.py,sha256=0IHIk7uxIC70140k3VcXlnx4QcunAeoETXF1ZgJi2Pk,2070
165
166
  angr/analyses/decompiler/peephole_optimizations/eager_eval.py,sha256=A0AUf60c047X7VhOr7tTAJE95qS3yiUxE1dYr9maA-8,10131
@@ -191,7 +192,7 @@ angr/analyses/decompiler/peephole_optimizations/tidy_stack_addr.py,sha256=OTdxZB
191
192
  angr/analyses/decompiler/region_simplifiers/__init__.py,sha256=ZeURg5mKbKRpwo8-SqxJ0jy_A6nNpZMxiKpjZJ0_RS0,48
192
193
  angr/analyses/decompiler/region_simplifiers/cascading_cond_transformer.py,sha256=4oRjmKwk9tSxUSOTTDGLVM7prp1aTrQOUpNuQ1gfMrA,3721
193
194
  angr/analyses/decompiler/region_simplifiers/cascading_ifs.py,sha256=dbAn1fde1-kiF6A9060wEqPKcE3DeBd2Ltt_2UAEdo4,2490
194
- angr/analyses/decompiler/region_simplifiers/expr_folding.py,sha256=lCNR9UTzKaUSGmL0Fzv0QDcDubmrGey47eNC3yteUEE,24008
195
+ angr/analyses/decompiler/region_simplifiers/expr_folding.py,sha256=cTwQHsUz0OyWQwcrTnoIlz2i_H5-xUZfS0Ot1EKrJZE,24126
195
196
  angr/analyses/decompiler/region_simplifiers/goto.py,sha256=b8602yf_WcTJXYyKEqh8Wuenwyatxqq-zGIhDPwJnE0,6032
196
197
  angr/analyses/decompiler/region_simplifiers/if_.py,sha256=qDkZTrRjDzI4CX6vwEcaddmaPvG4sWHn373VVwmf0e0,5034
197
198
  angr/analyses/decompiler/region_simplifiers/ifelse.py,sha256=nWUow7p_TOgFQuUgWXQcH2qSFfxUWJBgkslvajhTbn0,3681
@@ -202,12 +203,12 @@ angr/analyses/decompiler/region_simplifiers/switch_cluster_simplifier.py,sha256=
202
203
  angr/analyses/decompiler/region_simplifiers/switch_expr_simplifier.py,sha256=HGIiC6c3C91VfcqxUHe9aTsRohwmMXOHZH_G_dbwwx4,3327
203
204
  angr/analyses/decompiler/structured_codegen/__init__.py,sha256=NLEvs8xnJwJiUgX8AmgS7rtFFW4SxtQcA1AjzE-GryA,313
204
205
  angr/analyses/decompiler/structured_codegen/base.py,sha256=nJPOoeJCbewchYdXjSE4S2b1-WN6pT3TxmCQMDO0azw,3845
205
- angr/analyses/decompiler/structured_codegen/c.py,sha256=UpljxwZANYUX9UrQoYKW5yjTW0OO0faxOzLEyocDKYM,134738
206
+ angr/analyses/decompiler/structured_codegen/c.py,sha256=HE5OQmY1map5ZPRIzS_QHW_D4NRWFDJwfCIq6X3iP4U,135388
206
207
  angr/analyses/decompiler/structured_codegen/dummy.py,sha256=IVfmtcWpTgNCRVsuW3GdQgDnuPmvodX85V0bBYtF_BI,535
207
208
  angr/analyses/decompiler/structured_codegen/dwarf_import.py,sha256=TMz65TkF_ID_Ipocj0aFDb84H6slolN90wq0tzhY2Rk,6773
208
209
  angr/analyses/decompiler/structuring/__init__.py,sha256=eSiT6xUpv9K5-enK3OZj2lNzxwowS9_5OTrjHiPgfFs,371
209
210
  angr/analyses/decompiler/structuring/dream.py,sha256=xsFPPl0L7nu8ejugCm8FbJUCgYcnCMUCAJQTzNQDLIo,48400
210
- angr/analyses/decompiler/structuring/phoenix.py,sha256=QbOqD21O6oH8lckFVTbWCAknQUFGphauyO5O_XRyppg,119472
211
+ angr/analyses/decompiler/structuring/phoenix.py,sha256=Li8rR3L0UkIlG3_6wwmON_kQFKQA4FtEzcVVVFhTTKE,119594
211
212
  angr/analyses/decompiler/structuring/recursive_structurer.py,sha256=hr47-tqWexOXbTRZZlRyEE4T-PGwuZcv58xc16Hliec,7078
212
213
  angr/analyses/decompiler/structuring/structurer_base.py,sha256=orV0jRqRh2hkKNsdBwigm5OoXTQDP7dfY6go_Z4if1Q,41330
213
214
  angr/analyses/decompiler/structuring/structurer_nodes.py,sha256=PE_byL1mxj811MMM-qQWzSaITtcu5Xn0ZKz0yobnK-k,11964
@@ -333,7 +334,7 @@ angr/engines/syscall.py,sha256=LNMC3zyis3OiWC7_8Zn1blMw1EDib5FjUqepXlaWDTI,2177
333
334
  angr/engines/unicorn.py,sha256=gf7LjjWyaaujqSuCq3d-BGm8t5sdZjzsJeBevGfdiLw,24447
334
335
  angr/engines/light/__init__.py,sha256=j9vH2fU9MaNVQ8NT3Ek3Tj2zkGlVxlKyzia8zVTofYs,186
335
336
  angr/engines/light/data.py,sha256=jZBAJxor2zg5m4s63joSrjUs8H-OeHBZiqZmc3dqEQQ,23132
336
- angr/engines/light/engine.py,sha256=dJxHkFrfCjufo-d4PO_SkBT8CMp3aQ7lbWpfQGImCoI,44929
337
+ angr/engines/light/engine.py,sha256=wL1OdFcu6nHBopFxLSMJSU1C2mwnC88BCVnwYME2XKY,45137
337
338
  angr/engines/pcode/__init__.py,sha256=UwMEwXQvHXIIgedJn2ZOvBBEgfHg2rfREBSpcTSXCZ4,83
338
339
  angr/engines/pcode/behavior.py,sha256=gwMFXQ3cibqchRHnRfiVzzzLIg2mgX-2XJlkD82p8J0,28720
339
340
  angr/engines/pcode/cc.py,sha256=lwMeO9Mg8L7-uxxPzYmu13n7YLNo-Sr3xxLk_-QHTOU,2994
@@ -484,7 +485,7 @@ angr/knowledge_plugins/xrefs/__init__.py,sha256=-5A2h048WTRu6Et7q7bqlc-AyBXNuJ9A
484
485
  angr/knowledge_plugins/xrefs/xref.py,sha256=w4wjDFl4xtJYOtJplp9s1AIX3wI1RE71po3ufh1M4aY,4963
485
486
  angr/knowledge_plugins/xrefs/xref_manager.py,sha256=OLHEmgwGbFYWhm6oMgglPQ8Fe7rAvKicFeyQoGqSylc,4009
486
487
  angr/knowledge_plugins/xrefs/xref_types.py,sha256=VR3xLQQ-gUg25oX0OL3BJHyQRlZh2A8syBac9ZMS9n4,271
487
- angr/lib/angr_native.dylib,sha256=5L1w-8OuDQhHmxh4ZMs-H1l1elfmUGlYWw_blDdCykc,18589760
488
+ angr/lib/angr_native.dylib,sha256=LFUvtigwTIBAtJNjbK9mpkpgLynv7fm85Z5mr4ngXuE,18589760
488
489
  angr/misc/__init__.py,sha256=Ct-Q6-c-Frdz5Ihkqmou3j_1jyJi8WJXlQxs-gPQg0Y,237
489
490
  angr/misc/ansi.py,sha256=TKrx7d_MViChHh5RBR2VLufNrujTUioJWsZS5ugk8k4,807
490
491
  angr/misc/autoimport.py,sha256=K64D53xl3xUqBulXAyaypzqYRBjjm4HDn6TlJsBouKw,3426
@@ -1174,7 +1175,7 @@ angr/protos/xrefs_pb2.py,sha256=uze_1xvipKxY7Xrpxl6BJC6OCwp3_-B62S81FlzXl2Q,1247
1174
1175
  angr/simos/__init__.py,sha256=lqiR4H7KgNd8uzQT5OYsvrcb3l3moCoxBP-O-UMzPjM,755
1175
1176
  angr/simos/cgc.py,sha256=13dtMvJhD7nCLEH1n6nAMR4IbG1WYc8jQ_ASZsP85yU,5568
1176
1177
  angr/simos/javavm.py,sha256=NKwosYvx4-_gsT7eGmHHIZNzzdF-T0xK0BuXobrI8oQ,21461
1177
- angr/simos/linux.py,sha256=GIQMpllbbY8gES10c8fpglJNYiRv9SHQOxVUa3xERBI,23327
1178
+ angr/simos/linux.py,sha256=l4HN7M3puiKW3hqA3yALBMcAYhDCo7aZGbnhJz-Q9_w,23625
1178
1179
  angr/simos/simos.py,sha256=UbhjUTsowcnXBBu6k31Bt5ZNx1QS1ly146q_66TY23g,18275
1179
1180
  angr/simos/snimmuc_nxp.py,sha256=Uy43SwCjnKFo207fVz-h0vzwRk-RnIACz1C0Ly3ftw4,5679
1180
1181
  angr/simos/userland.py,sha256=a0x1UYVQ0x7Wgnu4PtedS2-7kS4vLqoYNqEwo7Z_5fw,7351
@@ -1288,9 +1289,9 @@ angr/utils/mp.py,sha256=EPeBml7i1HNOg9OFvj-hoqaGJzKD4fKyM-mHWIaJ3Ko,1825
1288
1289
  angr/utils/segment_list.py,sha256=lhGy16YKKaD-F0JtWmjJ6a2RFcdTrKcLfPE9ILRVtCs,20431
1289
1290
  angr/utils/timing.py,sha256=uOowCP8kotDrKDOjlAod-guBuYkAA8zEtiAwpdwMlIU,1334
1290
1291
  angr/utils/typing.py,sha256=_I4dzZSh1_uRKQ3PpjXseA_CaJH6ru2yAxjICkJhfmI,417
1291
- angr-9.2.98.dist-info/LICENSE,sha256=cgL_ho5B1NH8UxwtBuqThRWdjear8b7hktycaS1sz6g,1327
1292
- angr-9.2.98.dist-info/METADATA,sha256=Gp-S2YVeHajTilRoayEKgiRAVso4CYYLs7mJq3ynCi0,4796
1293
- angr-9.2.98.dist-info/WHEEL,sha256=YBuZgLbEquNCbbbQPlLFm_OOe1fPwf91V3LBhwgnks4,107
1294
- angr-9.2.98.dist-info/entry_points.txt,sha256=Vjh1C8PMyr5dZFMnik5WkEP01Uwr2T73I3a6N32sgQU,44
1295
- angr-9.2.98.dist-info/top_level.txt,sha256=dKw0KWTbwLXytFvv15oAAG4sUs3ey47tt6DorJG9-hw,5
1296
- angr-9.2.98.dist-info/RECORD,,
1292
+ angr-9.2.100.dist-info/LICENSE,sha256=cgL_ho5B1NH8UxwtBuqThRWdjear8b7hktycaS1sz6g,1327
1293
+ angr-9.2.100.dist-info/METADATA,sha256=jWkP9n6JsEwoMfQGCNfHhYIHeLC7-si49-2qg88oJ4A,4802
1294
+ angr-9.2.100.dist-info/WHEEL,sha256=YBuZgLbEquNCbbbQPlLFm_OOe1fPwf91V3LBhwgnks4,107
1295
+ angr-9.2.100.dist-info/entry_points.txt,sha256=Vjh1C8PMyr5dZFMnik5WkEP01Uwr2T73I3a6N32sgQU,44
1296
+ angr-9.2.100.dist-info/top_level.txt,sha256=dKw0KWTbwLXytFvv15oAAG4sUs3ey47tt6DorJG9-hw,5
1297
+ angr-9.2.100.dist-info/RECORD,,
File without changes