angr 9.2.113__py3-none-macosx_10_9_x86_64.whl → 9.2.114__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.113"
4
+ __version__ = "9.2.114"
5
5
 
6
6
  if bytes is str:
7
7
  raise Exception(
@@ -7,10 +7,9 @@ import claripy
7
7
  from ailment import Const
8
8
  from ailment.block_walker import AILBlockWalkerBase
9
9
  from ailment.statement import Call, Statement, ConditionalJump, Assignment, Store, Return
10
- from ailment.expression import Convert, Register
10
+ from ailment.expression import Convert, Register, Expression
11
11
 
12
12
  from .optimization_pass import OptimizationPass, OptimizationPassStage
13
- from ..utils import remove_labels, add_labels
14
13
  from ....knowledge_plugins.key_definitions.atoms import MemoryLocation
15
14
  from ....knowledge_plugins.key_definitions.constants import OP_BEFORE
16
15
 
@@ -159,8 +158,7 @@ class ConstPropOptReverter(OptimizationPass):
159
158
 
160
159
  def _analyze(self, cache=None):
161
160
  self.resolution = False
162
- self.out_graph = remove_labels(self._graph)
163
- # self.out_graph = self._graph
161
+ self.out_graph = self._graph.copy()
164
162
 
165
163
  _pair_stmt_handlers = {
166
164
  Call: self._handle_Call_pair,
@@ -177,8 +175,6 @@ class ConstPropOptReverter(OptimizationPass):
177
175
 
178
176
  if not self.resolution:
179
177
  self.out_graph = None
180
- else:
181
- self.out_graph = add_labels(self.out_graph)
182
178
 
183
179
  def _analyze_call_pair_targets(self):
184
180
  all_obs_points = []
@@ -329,9 +325,10 @@ class ConstPropOptReverter(OptimizationPass):
329
325
  return
330
326
 
331
327
  # verify both calls are calls to the same function
332
- if (isinstance(obj0.target, str) or isinstance(obj1.target, str)) and obj0.target != obj1.target:
333
- return
334
- elif not obj0.target.likes(obj1.target):
328
+ if isinstance(obj0.target, Expression) and isinstance(obj1.target, Expression):
329
+ if not obj0.target.likes(obj1.target):
330
+ return
331
+ elif obj0.target != obj1.target:
335
332
  return
336
333
 
337
334
  call0, call1 = obj0, obj1
@@ -4,6 +4,8 @@ from typing import DefaultDict, Any
4
4
  from collections import OrderedDict, defaultdict
5
5
 
6
6
  import ailment
7
+ from ailment import UnaryOp
8
+ from ailment.expression import negate
7
9
 
8
10
  from ....utils.constants import SWITCH_MISSING_DEFAULT_NODE_ADDR
9
11
  from ..structuring.structurer_nodes import SwitchCaseNode, ConditionNode, SequenceNode, MultiNode, BaseNode, BreakNode
@@ -520,6 +522,9 @@ def simplify_lowered_switches_core(
520
522
 
521
523
  if outermost_node is None:
522
524
  return False
525
+ if isinstance(outermost_node.condition, UnaryOp) and outermost_node.condition.op == "Not":
526
+ # attempt to flip any simple negated comparison for normalized operations
527
+ outermost_node.condition = negate(outermost_node.condition.operand)
523
528
 
524
529
  caseno_to_node = {}
525
530
  default_node_candidates: list[tuple[BaseNode, BaseNode]] = [] # parent to default node candidate
@@ -12,7 +12,7 @@ from ailment.block import Block
12
12
  from ailment.statement import Statement, ConditionalJump, Jump, Label, Return
13
13
  from ailment.expression import Const, UnaryOp, MultiStatementExpression
14
14
 
15
- from angr.utils.graph import GraphUtils
15
+ from angr.utils.graph import GraphUtils, TemporaryNode, PostDominators
16
16
  from ....knowledge_plugins.cfg import IndirectJumpType
17
17
  from ....utils.constants import SWITCH_MISSING_DEFAULT_NODE_ADDR
18
18
  from ....utils.graph import dominates, to_acyclic_graph, dfs_back_edges
@@ -24,6 +24,7 @@ from ..utils import (
24
24
  is_empty_or_label_only_node,
25
25
  has_nonlabel_statements,
26
26
  first_nonlabel_statement,
27
+ structured_node_is_simple_return,
27
28
  )
28
29
  from ..call_counter import AILCallCounter
29
30
  from .structurer_nodes import (
@@ -2144,7 +2145,7 @@ class PhoenixStructurer(StructurerBase):
2144
2145
  node_seq = {nn: (len(ordered_nodes) - idx) for (idx, nn) in enumerate(ordered_nodes)} # post-order
2145
2146
 
2146
2147
  if all_edges_wo_dominance:
2147
- all_edges_wo_dominance = self._chick_order_edges(all_edges_wo_dominance, node_seq)
2148
+ all_edges_wo_dominance = self._order_virtualizable_edges(full_graph, all_edges_wo_dominance, node_seq)
2148
2149
  # virtualize the first edge
2149
2150
  src, dst = all_edges_wo_dominance[0]
2150
2151
  self._virtualize_edge(graph, full_graph, src, dst)
@@ -2152,7 +2153,7 @@ class PhoenixStructurer(StructurerBase):
2152
2153
  return True
2153
2154
 
2154
2155
  if secondary_edges:
2155
- secondary_edges = self._chick_order_edges(secondary_edges, node_seq)
2156
+ secondary_edges = self._order_virtualizable_edges(full_graph, secondary_edges, node_seq)
2156
2157
  # virtualize the first edge
2157
2158
  src, dst = secondary_edges[0]
2158
2159
  self._virtualize_edge(graph, full_graph, src, dst)
@@ -2501,6 +2502,85 @@ class PhoenixStructurer(StructurerBase):
2501
2502
  break
2502
2503
  return None
2503
2504
 
2505
+ def _order_virtualizable_edges(self, graph: networkx.DiGraph, edges: list, node_seq: dict[Any, int]) -> list:
2506
+ """
2507
+ Returns a list of edges that are ordered by the best edges to virtualize first.
2508
+ The criteria for "best" is defined by a variety of heuristics described below.
2509
+ """
2510
+ if len(edges) <= 1:
2511
+ return edges
2512
+
2513
+ # TODO: the graph we have here is not an accurate graph and can have no "entry node". We need a better graph.
2514
+ try:
2515
+ entry_node = [node for node in graph.nodes if graph.in_degree(node) == 0][0]
2516
+ except IndexError:
2517
+ entry_node = None
2518
+
2519
+ best_edges = edges
2520
+ if self._phoenix_improved and entry_node is not None:
2521
+ # the first few heuristics are based on the post-dominator count of the edge
2522
+ # so we collect them for each candidate edge
2523
+ edge_postdom_count = {}
2524
+ edge_sibling_count = {}
2525
+ for edge in edges:
2526
+ _, dst = edge
2527
+ graph_copy = networkx.DiGraph(graph)
2528
+ graph_copy.remove_edge(*edge)
2529
+ sibling_cnt = graph_copy.in_degree(dst)
2530
+ if sibling_cnt == 0:
2531
+ continue
2532
+
2533
+ edge_sibling_count[edge] = sibling_cnt
2534
+ post_dom_graph = PostDominators(graph_copy, entry_node).post_dom
2535
+ post_doms = set()
2536
+ for postdom_node, dominatee in post_dom_graph.edges():
2537
+ if not isinstance(postdom_node, TemporaryNode) and not isinstance(dominatee, TemporaryNode):
2538
+ post_doms.add((postdom_node, dominatee))
2539
+ edge_postdom_count[edge] = len(post_doms)
2540
+
2541
+ # H1: the edge that has the least amount of sibling edges should be virtualized first
2542
+ # this is believed to reduce the amount of virtualization needed in future rounds and increase
2543
+ # the edges that enter a single outer-scope if-stmt
2544
+ if edge_sibling_count:
2545
+ min_sibling_count = min(edge_sibling_count.values())
2546
+ best_edges = [edge for edge, cnt in edge_sibling_count.items() if cnt == min_sibling_count]
2547
+ if len(best_edges) == 1:
2548
+ return best_edges
2549
+
2550
+ # create the next heuristic based on the best edges from the previous heuristic
2551
+ filtered_edge_postdom_count = edge_postdom_count.copy()
2552
+ for edge in list(edge_postdom_count.keys()):
2553
+ if edge not in best_edges:
2554
+ del filtered_edge_postdom_count[edge]
2555
+ if filtered_edge_postdom_count:
2556
+ edge_postdom_count = filtered_edge_postdom_count
2557
+
2558
+ # H2: the edge, when removed, that causes the most post-dominators of the graph should be virtualized
2559
+ # first. this is believed to make the code more linear looking be reducing the amount of scopes.
2560
+ # informally, we believe post-dominators to be an inverse indicator of the number of scopes present
2561
+ if edge_postdom_count:
2562
+ max_postdom_count = max(edge_postdom_count.values())
2563
+ best_edges = [edge for edge, cnt in edge_postdom_count.items() if cnt == max_postdom_count]
2564
+ if len(best_edges) == 1:
2565
+ return best_edges
2566
+
2567
+ # H3: the edge that goes directly to a return statement should be virtualized first
2568
+ # this is believed to be good because it can be corrected in later optimization by duplicating
2569
+ # the return
2570
+ candidate_edges = best_edges
2571
+ best_edges = []
2572
+ for src, dst in candidate_edges:
2573
+ if graph.has_node(dst) and structured_node_is_simple_return(dst, graph):
2574
+ best_edges.append((src, dst))
2575
+
2576
+ if len(best_edges) == 1:
2577
+ return best_edges
2578
+ elif not best_edges:
2579
+ best_edges = candidate_edges
2580
+
2581
+ # if we have another tie, or we never used improved heuristics, then we do the chick_order.
2582
+ return PhoenixStructurer._chick_order_edges(best_edges, node_seq)
2583
+
2504
2584
  @staticmethod
2505
2585
  def _chick_order_edges(edges: list, node_seq: dict[Any, int]) -> list:
2506
2586
  graph = networkx.DiGraph()
@@ -409,7 +409,9 @@ def update_labels(graph: networkx.DiGraph):
409
409
  return add_labels(remove_labels(graph))
410
410
 
411
411
 
412
- def structured_node_is_simple_return(node: Union["SequenceNode", "MultiNode"], graph: networkx.DiGraph) -> bool:
412
+ def structured_node_is_simple_return(
413
+ node: Union["SequenceNode", "MultiNode"], graph: networkx.DiGraph, use_packed_successors=False
414
+ ) -> bool:
413
415
  """
414
416
  Will check if a "simple return" is contained within the node a simple returns looks like this:
415
417
  if (cond) {
@@ -452,6 +454,9 @@ def structured_node_is_simple_return(node: Union["SequenceNode", "MultiNode"], g
452
454
  if valid_last_stmt and last_block.statements:
453
455
  valid_last_stmt = not isinstance(last_block.statements[-1], (ailment.Stmt.ConditionalJump, ailment.Stmt.Jump))
454
456
 
457
+ if use_packed_successors:
458
+ last_block = node
459
+
455
460
  return valid_last_stmt and last_block in graph and not list(graph.successors(last_block))
456
461
 
457
462
 
@@ -2247,7 +2247,7 @@ ARCH_NAME_ALIASES = {
2247
2247
  "ARMEL": [],
2248
2248
  "ARMHF": [],
2249
2249
  "ARMCortexM": [],
2250
- "AARCH64": ["arm64"],
2250
+ "AARCH64": ["arm64", "aarch64"],
2251
2251
  "MIPS32": [],
2252
2252
  "MIPS64": [],
2253
2253
  "PPC32": ["powerpc32"],
@@ -2315,10 +2315,16 @@ def unify_arch_name(arch: str) -> str:
2315
2315
  # Sleigh architecture names
2316
2316
  chunks = arch.lower().split(":")
2317
2317
  if len(chunks) >= 3:
2318
- arch_base, endianness, bits = chunks[:3] # pylint:disable=unused-variable
2319
- arch = f"{arch_base}{bits}"
2318
+ arch_base, _, bits = chunks[:3]
2320
2319
 
2321
- return ALIAS_TO_ARCH_NAME.get(arch, arch)
2320
+ if arch_base in ALIAS_TO_ARCH_NAME:
2321
+ return ALIAS_TO_ARCH_NAME[arch_base]
2322
+
2323
+ base_with_bits = f"{arch_base}{bits}"
2324
+ if base_with_bits in ALIAS_TO_ARCH_NAME:
2325
+ return ALIAS_TO_ARCH_NAME[base_with_bits]
2326
+
2327
+ return arch
2322
2328
 
2323
2329
 
2324
2330
  SYSCALL_CC: dict[str, dict[str, type[SimCCSyscall]]] = {
Binary file
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: angr
3
- Version: 9.2.113
3
+ Version: 9.2.114
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
@@ -15,46 +15,46 @@ Description-Content-Type: text/markdown
15
15
  License-File: LICENSE
16
16
  Requires-Dist: CppHeaderParser
17
17
  Requires-Dist: GitPython
18
- Requires-Dist: ailment ==9.2.113
19
- Requires-Dist: archinfo ==9.2.113
18
+ Requires-Dist: ailment==9.2.114
19
+ Requires-Dist: archinfo==9.2.114
20
20
  Requires-Dist: cachetools
21
- Requires-Dist: capstone ==5.0.0.post1
22
- Requires-Dist: cffi >=1.14.0
23
- Requires-Dist: claripy ==9.2.113
24
- Requires-Dist: cle ==9.2.113
21
+ Requires-Dist: capstone==5.0.0.post1
22
+ Requires-Dist: cffi>=1.14.0
23
+ Requires-Dist: claripy==9.2.114
24
+ Requires-Dist: cle==9.2.114
25
25
  Requires-Dist: dpkt
26
26
  Requires-Dist: itanium-demangler
27
27
  Requires-Dist: mulpyplexer
28
28
  Requires-Dist: nampa
29
- Requires-Dist: networkx !=2.8.1,>=2.0
30
- Requires-Dist: protobuf >=3.19.0
29
+ Requires-Dist: networkx!=2.8.1,>=2.0
30
+ Requires-Dist: protobuf>=3.19.0
31
31
  Requires-Dist: psutil
32
- Requires-Dist: pycparser >=2.18
32
+ Requires-Dist: pycparser>=2.18
33
33
  Requires-Dist: pyformlang
34
- Requires-Dist: pyvex ==9.2.113
35
- Requires-Dist: rich >=13.1.0
34
+ Requires-Dist: pyvex==9.2.114
35
+ Requires-Dist: rich>=13.1.0
36
36
  Requires-Dist: rpyc
37
37
  Requires-Dist: sortedcontainers
38
38
  Requires-Dist: sympy
39
- Requires-Dist: unicorn ==2.0.1.post1
39
+ Requires-Dist: unicorn==2.0.1.post1
40
40
  Requires-Dist: unique-log-filter
41
- Requires-Dist: colorama ; platform_system == "Windows"
41
+ Requires-Dist: colorama; platform_system == "Windows"
42
42
  Provides-Extra: angrdb
43
- Requires-Dist: sqlalchemy ; extra == 'angrdb'
43
+ Requires-Dist: sqlalchemy; extra == "angrdb"
44
44
  Provides-Extra: docs
45
- Requires-Dist: furo ; extra == 'docs'
46
- Requires-Dist: myst-parser ; extra == 'docs'
47
- Requires-Dist: sphinx ; extra == 'docs'
48
- Requires-Dist: sphinx-autodoc-typehints ; extra == 'docs'
45
+ Requires-Dist: furo; extra == "docs"
46
+ Requires-Dist: myst-parser; extra == "docs"
47
+ Requires-Dist: sphinx; extra == "docs"
48
+ Requires-Dist: sphinx-autodoc-typehints; extra == "docs"
49
49
  Provides-Extra: pcode
50
- Requires-Dist: pypcode ~=3.0 ; extra == 'pcode'
50
+ Requires-Dist: pypcode~=3.0; extra == "pcode"
51
51
  Provides-Extra: testing
52
- Requires-Dist: keystone-engine ; extra == 'testing'
53
- Requires-Dist: pypcode ~=3.0 ; extra == 'testing'
54
- Requires-Dist: pytest ; extra == 'testing'
55
- Requires-Dist: pytest-split ; extra == 'testing'
56
- Requires-Dist: pytest-xdist ; extra == 'testing'
57
- Requires-Dist: sqlalchemy ; extra == 'testing'
52
+ Requires-Dist: keystone-engine; extra == "testing"
53
+ Requires-Dist: pypcode~=3.0; extra == "testing"
54
+ Requires-Dist: pytest; extra == "testing"
55
+ Requires-Dist: pytest-split; extra == "testing"
56
+ Requires-Dist: pytest-xdist; extra == "testing"
57
+ Requires-Dist: sqlalchemy; extra == "testing"
58
58
 
59
59
  # angr
60
60
 
@@ -1,10 +1,10 @@
1
- angr/__init__.py,sha256=xA4w3fa0ApgzfqAE8MEN_HnuIXRB8D33txbLVl2JwBs,3708
1
+ angr/__init__.py,sha256=mLvFdIV2FcGXydJ8V0yBwu3VCookiOEbyv7KBW1YhmA,3708
2
2
  angr/__main__.py,sha256=kaO56Te6h73SM94BVtASF00q5QbBbC3eBs9poVc9sVI,1887
3
3
  angr/annocfg.py,sha256=1tnBfxgLJh9I6Brm1JDdsWLHGmCQYdD6PTC_bFTOMrg,10775
4
4
  angr/blade.py,sha256=B8QXVQ93jz1YCIlb-dZLeBqYmVFdMXI5GleP1Wnxjrw,15519
5
5
  angr/block.py,sha256=tHxXlBBFrPZbp5phhTn63K55khjDIIUSNJgFn4lPd9I,14761
6
6
  angr/callable.py,sha256=-E9HelavtRY1xPAxCVXl120H8Rb7Myd2IcrXtWZFAOU,6034
7
- angr/calling_conventions.py,sha256=-1ToJG0p31snlyO50mTpDZJysLvyuvHdfqx_H7Y7eZ4,91480
7
+ angr/calling_conventions.py,sha256=QJ7SwD3IQ7Mr7SLe-OL6iTVcqciL_W9YfuMrtJ44Nig,91642
8
8
  angr/code_location.py,sha256=IudWSR-gJzq_EeVw-jEZvQumVYwUUDWXR1vmLAkS-SQ,5432
9
9
  angr/codenode.py,sha256=Di6ZxGqf-e6tKL49Zr0sq4vqpy_-nUDYkBdLj2Tg2Po,3760
10
10
  angr/errors.py,sha256=Yh_qSz7FjMSqqK9P3CVJHQZUzvTELLg6dRGYyINVZSM,8348
@@ -115,7 +115,7 @@ angr/analyses/decompiler/return_maker.py,sha256=CztTpm6e3TF0ijdiZDl0HeObxTtOz0TO
115
115
  angr/analyses/decompiler/seq_cf_structure_counter.py,sha256=JQ3iY5RXdyggVKXes--38g_EpNOuwM6CsVOqicYu2gQ,1245
116
116
  angr/analyses/decompiler/seq_to_blocks.py,sha256=2KINMEgaXMG3XIiFDMRkbn10dggy7a9AHgwV383huRM,529
117
117
  angr/analyses/decompiler/sequence_walker.py,sha256=mw4RG-Act5_no_RyQcsxWZwva-n7FdH2a7w_uItGUpI,8428
118
- angr/analyses/decompiler/utils.py,sha256=wD93VTmahKQE_k-9rYEnsKFMDVIgOi-VeZk363skyKs,28078
118
+ angr/analyses/decompiler/utils.py,sha256=--d8hymqB_22j3NjmXjqIPfi12klF1de36Xli53a5HM,28170
119
119
  angr/analyses/decompiler/ccall_rewriters/__init__.py,sha256=wbWqZ8xG6ZvzEApkAwMsNQFC-iwF3swG1YJsaf1cIrQ,102
120
120
  angr/analyses/decompiler/ccall_rewriters/amd64_ccalls.py,sha256=qcr8a-83pY8nqwsYY27gc9ev8XtBxpdGPrmaULr6XuU,21519
121
121
  angr/analyses/decompiler/ccall_rewriters/rewriter_base.py,sha256=9-O-m4OB4DsAMAyAH_0sZg1FdhUUQQbENy8yhsJ7PJo,463
@@ -123,7 +123,7 @@ angr/analyses/decompiler/optimization_passes/__init__.py,sha256=mu8cqtQo4458zAdy
123
123
  angr/analyses/decompiler/optimization_passes/base_ptr_save_simplifier.py,sha256=bjpEMW-Lqj5XW9NWUikGPcRn5scKNc8VvEjVMXxAuq8,5289
124
124
  angr/analyses/decompiler/optimization_passes/code_motion.py,sha256=RoOVC1IyziUh_N6quZzRmBwkSNLSzvc8A3-EGAUsETU,15263
125
125
  angr/analyses/decompiler/optimization_passes/const_derefs.py,sha256=n2JKyEymGDMhIoXc2zsn6pAxxx9T5eu-jxyO3Cg8Fts,10658
126
- angr/analyses/decompiler/optimization_passes/const_prop_reverter.py,sha256=FBZIgncVwJ6fXdsxhWgWxeJx0A2fLmtiksu6A_GmikY,13107
126
+ angr/analyses/decompiler/optimization_passes/const_prop_reverter.py,sha256=s3H1J3JTp309NX-NqniUhPd-kPIarQqkWd-TxHP-W-4,12985
127
127
  angr/analyses/decompiler/optimization_passes/cross_jump_reverter.py,sha256=CP-WjyQGOw_mnUF0ZpC5C4syMxlx4Tvy0T_EIZQxXrY,4033
128
128
  angr/analyses/decompiler/optimization_passes/deadblock_remover.py,sha256=Km7nX7hNDVZGgEg7wmXAIiiA5edhpo7Bxqc13iyjiEk,2330
129
129
  angr/analyses/decompiler/optimization_passes/div_simplifier.py,sha256=J7LRc3-DKfToxKVejnkHbNel9_56-7xsGyJJiTCwqsQ,17442
@@ -204,7 +204,7 @@ angr/analyses/decompiler/region_simplifiers/ifelse.py,sha256=nWUow7p_TOgFQuUgWXQ
204
204
  angr/analyses/decompiler/region_simplifiers/loop.py,sha256=crWqkXno1kTHk1a5keIzP2lrt8TbeVW4E85WWMhtqJA,5831
205
205
  angr/analyses/decompiler/region_simplifiers/node_address_finder.py,sha256=0JIerDBQ37mumowl2SRZ2GOUlwzPzZskz9-zM1lUl5s,542
206
206
  angr/analyses/decompiler/region_simplifiers/region_simplifier.py,sha256=_lf-Xfl-k_VDELeAVCpQ0P9ZlH3AxYSbN0_naWJRfN4,8177
207
- angr/analyses/decompiler/region_simplifiers/switch_cluster_simplifier.py,sha256=Sk2dCnmBZk1Rt86hsUH18L_bx0PY4g2gNLQvp3iUqbg,24472
207
+ angr/analyses/decompiler/region_simplifiers/switch_cluster_simplifier.py,sha256=s8lThEYSKYdXBbKcbpDpawLllaj052ohIFPPUfHt7cU,24791
208
208
  angr/analyses/decompiler/region_simplifiers/switch_expr_simplifier.py,sha256=HGIiC6c3C91VfcqxUHe9aTsRohwmMXOHZH_G_dbwwx4,3327
209
209
  angr/analyses/decompiler/structured_codegen/__init__.py,sha256=NLEvs8xnJwJiUgX8AmgS7rtFFW4SxtQcA1AjzE-GryA,313
210
210
  angr/analyses/decompiler/structured_codegen/base.py,sha256=TdghqAsAkjZpPfzFarh8Wn1zfBYMFcMsBZhRqXgoPNo,3778
@@ -213,7 +213,7 @@ angr/analyses/decompiler/structured_codegen/dummy.py,sha256=IVfmtcWpTgNCRVsuW3Gd
213
213
  angr/analyses/decompiler/structured_codegen/dwarf_import.py,sha256=TMz65TkF_ID_Ipocj0aFDb84H6slolN90wq0tzhY2Rk,6773
214
214
  angr/analyses/decompiler/structuring/__init__.py,sha256=Ai63Im5VSiMDP8ACiDb34chqMl84JgzQXFIO8MV7hl0,368
215
215
  angr/analyses/decompiler/structuring/dream.py,sha256=NBv19CyJrYb2q77Q-3gpIhEl0r6Aci4lhO4hY_VQfN8,48374
216
- angr/analyses/decompiler/structuring/phoenix.py,sha256=JfWEdMf6P4ypQpVo-uh_ZL6zrYPem8qbkY-J7dFoQmQ,119612
216
+ angr/analyses/decompiler/structuring/phoenix.py,sha256=aF9e4KF-3lXT5Q6ECl4bbZd5rw3koeOMYhZgsOQUhec,124025
217
217
  angr/analyses/decompiler/structuring/recursive_structurer.py,sha256=E_6Tj6jpNmWbZ_f9fwxan87VNYUGnf26fnoZC7dxny4,7063
218
218
  angr/analyses/decompiler/structuring/structurer_base.py,sha256=JoUxpZ2iDN0V7vToMPb0MgGB6eTvWDUk0JK8oJYlQ3U,41254
219
219
  angr/analyses/decompiler/structuring/structurer_nodes.py,sha256=x-1xUfeIzTNwLlRTv2M_9q7BDWLSWiSkaOuk20l8750,11930
@@ -491,7 +491,7 @@ angr/knowledge_plugins/xrefs/__init__.py,sha256=-5A2h048WTRu6Et7q7bqlc-AyBXNuJ9A
491
491
  angr/knowledge_plugins/xrefs/xref.py,sha256=1BMphrr8iViDtVWPXWidmY1_uNmw9LRvEwwZLt3Zqw8,4907
492
492
  angr/knowledge_plugins/xrefs/xref_manager.py,sha256=a4uvTJkdM0PQIuyYcd7t76IddrrVjPGe9SZrRaqp2II,3980
493
493
  angr/knowledge_plugins/xrefs/xref_types.py,sha256=VR3xLQQ-gUg25oX0OL3BJHyQRlZh2A8syBac9ZMS9n4,271
494
- angr/lib/angr_native.dylib,sha256=sgaA3aYfHpEqGWHkX-DVQAsXlK8Q3YYy8JOb3O6SB9E,18604080
494
+ angr/lib/angr_native.dylib,sha256=ys6yDN_NNCA9h-XgdAZ3JpckMU1uJEJ0vzc9818w2Jo,18604080
495
495
  angr/misc/__init__.py,sha256=Ct-Q6-c-Frdz5Ihkqmou3j_1jyJi8WJXlQxs-gPQg0Y,237
496
496
  angr/misc/ansi.py,sha256=m5RY65yyvluUJErkvCF4I4z1o5kXi2xb3Yuvt9bITCA,776
497
497
  angr/misc/autoimport.py,sha256=vSXclz6pss3lMecoT5_doX0SvORNmZPIvVyDm4je4HE,3419
@@ -1296,9 +1296,9 @@ angr/utils/orderedset.py,sha256=6SRZz6PkOVavOzlUd2cIiqZQyWtKO72F2he_cG0aP9Q,1943
1296
1296
  angr/utils/segment_list.py,sha256=5nnuVtdZk9NS2y_xUBVA9khWPueP_zagNtPSjaoMHbA,20410
1297
1297
  angr/utils/timing.py,sha256=uOowCP8kotDrKDOjlAod-guBuYkAA8zEtiAwpdwMlIU,1334
1298
1298
  angr/utils/typing.py,sha256=pCjA7JZAzcvrk-iyIE2cRHc1G66AMSGEON3aFfjtPVc,431
1299
- angr-9.2.113.dist-info/LICENSE,sha256=cgL_ho5B1NH8UxwtBuqThRWdjear8b7hktycaS1sz6g,1327
1300
- angr-9.2.113.dist-info/METADATA,sha256=LAfEtzuE36bkULkly8pJCE2HrLcoXf15H01VT5gA5Pc,4703
1301
- angr-9.2.113.dist-info/WHEEL,sha256=9qBGXD6WrhRChb7trksjMZR-KI8dtg8DzxtGjt7Nf7E,106
1302
- angr-9.2.113.dist-info/entry_points.txt,sha256=Vjh1C8PMyr5dZFMnik5WkEP01Uwr2T73I3a6N32sgQU,44
1303
- angr-9.2.113.dist-info/top_level.txt,sha256=dKw0KWTbwLXytFvv15oAAG4sUs3ey47tt6DorJG9-hw,5
1304
- angr-9.2.113.dist-info/RECORD,,
1299
+ angr-9.2.114.dist-info/LICENSE,sha256=cgL_ho5B1NH8UxwtBuqThRWdjear8b7hktycaS1sz6g,1327
1300
+ angr-9.2.114.dist-info/METADATA,sha256=66zn4xJ9vxYyU7zvaCUzwvqCbGCukbXTNjmFHSuPjkY,4676
1301
+ angr-9.2.114.dist-info/WHEEL,sha256=9qBGXD6WrhRChb7trksjMZR-KI8dtg8DzxtGjt7Nf7E,106
1302
+ angr-9.2.114.dist-info/entry_points.txt,sha256=Vjh1C8PMyr5dZFMnik5WkEP01Uwr2T73I3a6N32sgQU,44
1303
+ angr-9.2.114.dist-info/top_level.txt,sha256=dKw0KWTbwLXytFvv15oAAG4sUs3ey47tt6DorJG9-hw,5
1304
+ angr-9.2.114.dist-info/RECORD,,
File without changes