angr 9.2.113__py3-none-manylinux2014_aarch64.whl → 9.2.114__py3-none-manylinux2014_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- angr/__init__.py +1 -1
- angr/analyses/decompiler/optimization_passes/const_prop_reverter.py +6 -9
- angr/analyses/decompiler/region_simplifiers/switch_cluster_simplifier.py +5 -0
- angr/analyses/decompiler/structuring/phoenix.py +83 -3
- angr/analyses/decompiler/utils.py +6 -1
- angr/calling_conventions.py +10 -4
- {angr-9.2.113.dist-info → angr-9.2.114.dist-info}/METADATA +26 -26
- {angr-9.2.113.dist-info → angr-9.2.114.dist-info}/RECORD +12 -12
- {angr-9.2.113.dist-info → angr-9.2.114.dist-info}/LICENSE +0 -0
- {angr-9.2.113.dist-info → angr-9.2.114.dist-info}/WHEEL +0 -0
- {angr-9.2.113.dist-info → angr-9.2.114.dist-info}/entry_points.txt +0 -0
- {angr-9.2.113.dist-info → angr-9.2.114.dist-info}/top_level.txt +0 -0
angr/__init__.py
CHANGED
|
@@ -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 =
|
|
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
|
|
333
|
-
|
|
334
|
-
|
|
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.
|
|
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.
|
|
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(
|
|
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
|
|
angr/calling_conventions.py
CHANGED
|
@@ -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,
|
|
2319
|
-
arch = f"{arch_base}{bits}"
|
|
2318
|
+
arch_base, _, bits = chunks[:3]
|
|
2320
2319
|
|
|
2321
|
-
|
|
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]]] = {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: angr
|
|
3
|
-
Version: 9.2.
|
|
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
|
|
19
|
-
Requires-Dist: archinfo
|
|
18
|
+
Requires-Dist: ailment==9.2.114
|
|
19
|
+
Requires-Dist: archinfo==9.2.114
|
|
20
20
|
Requires-Dist: cachetools
|
|
21
|
-
Requires-Dist: capstone
|
|
22
|
-
Requires-Dist: cffi
|
|
23
|
-
Requires-Dist: claripy
|
|
24
|
-
Requires-Dist: cle
|
|
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
|
|
30
|
-
Requires-Dist: protobuf
|
|
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
|
|
32
|
+
Requires-Dist: pycparser>=2.18
|
|
33
33
|
Requires-Dist: pyformlang
|
|
34
|
-
Requires-Dist: pyvex
|
|
35
|
-
Requires-Dist: rich
|
|
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
|
|
39
|
+
Requires-Dist: unicorn==2.0.1.post1
|
|
40
40
|
Requires-Dist: unique-log-filter
|
|
41
|
-
Requires-Dist: colorama
|
|
41
|
+
Requires-Dist: colorama; platform_system == "Windows"
|
|
42
42
|
Provides-Extra: angrdb
|
|
43
|
-
Requires-Dist: sqlalchemy
|
|
43
|
+
Requires-Dist: sqlalchemy; extra == "angrdb"
|
|
44
44
|
Provides-Extra: docs
|
|
45
|
-
Requires-Dist: furo
|
|
46
|
-
Requires-Dist: myst-parser
|
|
47
|
-
Requires-Dist: sphinx
|
|
48
|
-
Requires-Dist: sphinx-autodoc-typehints
|
|
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
|
|
50
|
+
Requires-Dist: pypcode~=3.0; extra == "pcode"
|
|
51
51
|
Provides-Extra: testing
|
|
52
|
-
Requires-Dist: keystone-engine
|
|
53
|
-
Requires-Dist: pypcode
|
|
54
|
-
Requires-Dist: pytest
|
|
55
|
-
Requires-Dist: pytest-split
|
|
56
|
-
Requires-Dist: pytest-xdist
|
|
57
|
-
Requires-Dist: sqlalchemy
|
|
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=
|
|
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
|
|
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
|
|
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=
|
|
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=
|
|
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=
|
|
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
|
|
@@ -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.
|
|
1300
|
-
angr-9.2.
|
|
1301
|
-
angr-9.2.
|
|
1302
|
-
angr-9.2.
|
|
1303
|
-
angr-9.2.
|
|
1304
|
-
angr-9.2.
|
|
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=OQ_mvvSpKReaVVfQ4c2a2WJmom1UiNcVyuF2k2UOrPY,109
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|