angr 9.2.104__py3-none-macosx_10_9_x86_64.whl → 9.2.106__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 +1 -1
- angr/analyses/decompiler/ail_simplifier.py +3 -2
- angr/analyses/decompiler/clinic.py +12 -1
- angr/analyses/decompiler/condition_processor.py +3 -2
- angr/analyses/decompiler/region_identifier.py +2 -1
- angr/analyses/decompiler/region_simplifiers/cascading_cond_transformer.py +2 -1
- angr/analyses/decompiler/structured_codegen/c.py +10 -4
- angr/analyses/flirt.py +2 -1
- angr/analyses/typehoon/typehoon.py +2 -1
- angr/analyses/variable_recovery/variable_recovery_base.py +2 -1
- angr/block.py +1 -1
- angr/engines/successors.py +12 -8
- angr/errors.py +4 -0
- angr/exploration_techniques/__init__.py +2 -0
- angr/exploration_techniques/stub_stasher.py +17 -0
- angr/knowledge_plugins/cfg/cfg_model.py +15 -15
- angr/knowledge_plugins/cfg/cfg_node.py +11 -5
- angr/knowledge_plugins/functions/function.py +1 -1
- angr/knowledge_plugins/functions/function_parser.py +2 -2
- angr/knowledge_plugins/variables/variable_manager.py +19 -0
- angr/lib/angr_native.dylib +0 -0
- angr/sim_manager.py +11 -9
- angr/state_plugins/history.py +9 -8
- angr/storage/memory_mixins/paged_memory/pages/ultra_page.py +46 -19
- angr/utils/mp.py +2 -1
- angr/utils/segment_list.py +3 -3
- {angr-9.2.104.dist-info → angr-9.2.106.dist-info}/METADATA +6 -6
- {angr-9.2.104.dist-info → angr-9.2.106.dist-info}/RECORD +32 -31
- {angr-9.2.104.dist-info → angr-9.2.106.dist-info}/LICENSE +0 -0
- {angr-9.2.104.dist-info → angr-9.2.106.dist-info}/WHEEL +0 -0
- {angr-9.2.104.dist-info → angr-9.2.106.dist-info}/entry_points.txt +0 -0
- {angr-9.2.104.dist-info → angr-9.2.106.dist-info}/top_level.txt +0 -0
angr/__init__.py
CHANGED
|
@@ -27,6 +27,7 @@ from ...knowledge_plugins.key_definitions import atoms
|
|
|
27
27
|
from ...knowledge_plugins.key_definitions.atoms import Register as RegisterAtom
|
|
28
28
|
from ...knowledge_plugins.key_definitions.definition import Definition
|
|
29
29
|
from ...knowledge_plugins.key_definitions.constants import OP_BEFORE
|
|
30
|
+
from ...errors import AngrRuntimeError
|
|
30
31
|
from .. import Analysis, AnalysesHub
|
|
31
32
|
from .ailgraph_walker import AILGraphWalker
|
|
32
33
|
from .expression_narrower import ExpressionNarrowingWalker
|
|
@@ -811,9 +812,9 @@ class AILSimplifier(Analysis):
|
|
|
811
812
|
else:
|
|
812
813
|
replace_with = eq.atom0
|
|
813
814
|
else:
|
|
814
|
-
raise
|
|
815
|
+
raise AngrRuntimeError("Unsupported atom1 type %s." % type(eq.atom1))
|
|
815
816
|
else:
|
|
816
|
-
raise
|
|
817
|
+
raise AngrRuntimeError("Unsupported atom0 type %s." % type(eq.atom0))
|
|
817
818
|
|
|
818
819
|
to_replace_def = the_def
|
|
819
820
|
|
|
@@ -5,7 +5,6 @@ import logging
|
|
|
5
5
|
import enum
|
|
6
6
|
from dataclasses import dataclass
|
|
7
7
|
from typing import Any, NamedTuple, TYPE_CHECKING
|
|
8
|
-
|
|
9
8
|
from collections.abc import Iterable
|
|
10
9
|
|
|
11
10
|
import networkx
|
|
@@ -1389,6 +1388,10 @@ class Clinic(Analysis):
|
|
|
1389
1388
|
for block in ail_graph.nodes():
|
|
1390
1389
|
self._link_variables_on_block(block, tmp_kb)
|
|
1391
1390
|
|
|
1391
|
+
# Link struct member info to Store statements
|
|
1392
|
+
for block in ail_graph.nodes():
|
|
1393
|
+
self._link_struct_member_info_on_block(block, tmp_kb)
|
|
1394
|
+
|
|
1392
1395
|
if self._cache is not None:
|
|
1393
1396
|
self._cache.type_constraints = vr.type_constraints
|
|
1394
1397
|
self._cache.func_typevar = vr.func_typevar
|
|
@@ -1396,6 +1399,14 @@ class Clinic(Analysis):
|
|
|
1396
1399
|
|
|
1397
1400
|
return tmp_kb
|
|
1398
1401
|
|
|
1402
|
+
def _link_struct_member_info_on_block(self, block, kb):
|
|
1403
|
+
variable_manager = kb.variables[self.function.addr]
|
|
1404
|
+
for stmt in block.statements:
|
|
1405
|
+
if isinstance(stmt, ailment.Stmt.Store) and isinstance((var := stmt.variable), SimStackVariable):
|
|
1406
|
+
offset = var.offset
|
|
1407
|
+
if offset in variable_manager.stack_offset_to_struct_member_info:
|
|
1408
|
+
stmt.tags["struct_member_info"] = variable_manager.stack_offset_to_struct_member_info[offset]
|
|
1409
|
+
|
|
1399
1410
|
def _link_variables_on_block(self, block, kb):
|
|
1400
1411
|
"""
|
|
1401
1412
|
Link atoms (AIL expressions) in the given block to corresponding variables identified previously.
|
|
@@ -15,6 +15,7 @@ from ...utils.lazy_import import lazy_import
|
|
|
15
15
|
from ...utils import is_pyinstaller
|
|
16
16
|
from ...utils.graph import dominates, inverted_idoms
|
|
17
17
|
from ...block import Block, BlockNode
|
|
18
|
+
from ...errors import AngrRuntimeError
|
|
18
19
|
from .peephole_optimizations import InvertNegatedLogicalConjunctionsAndDisjunctions
|
|
19
20
|
from .structuring.structurer_nodes import (
|
|
20
21
|
MultiNode,
|
|
@@ -857,7 +858,7 @@ class ConditionProcessor:
|
|
|
857
858
|
return claripy.true
|
|
858
859
|
if isinstance(expr, sympy.logic.boolalg.BooleanFalse):
|
|
859
860
|
return claripy.false
|
|
860
|
-
raise
|
|
861
|
+
raise AngrRuntimeError("Unreachable reached")
|
|
861
862
|
|
|
862
863
|
@staticmethod
|
|
863
864
|
def simplify_condition(cond, depth_limit=8, variables_limit=8):
|
|
@@ -1024,7 +1025,7 @@ class ConditionProcessor:
|
|
|
1024
1025
|
elif arg in common_exprs:
|
|
1025
1026
|
continue
|
|
1026
1027
|
else:
|
|
1027
|
-
raise
|
|
1028
|
+
raise AngrRuntimeError("Unexpected behavior - you should never reach here")
|
|
1028
1029
|
|
|
1029
1030
|
return claripy.And(*common_exprs, claripy.Or(*new_args))
|
|
1030
1031
|
|
|
@@ -11,6 +11,7 @@ from ailment.expression import Const
|
|
|
11
11
|
|
|
12
12
|
from angr.utils.graph import GraphUtils
|
|
13
13
|
from ...utils.graph import dfs_back_edges, subgraph_between_nodes, dominates, shallow_reverse
|
|
14
|
+
from ...errors import AngrRuntimeError
|
|
14
15
|
from .. import Analysis, register_analysis
|
|
15
16
|
from .structuring.structurer_nodes import MultiNode, ConditionNode, IncompleteSwitchCaseHeadStatement
|
|
16
17
|
from .graph_region import GraphRegion
|
|
@@ -146,7 +147,7 @@ class RegionIdentifier(Analysis):
|
|
|
146
147
|
try:
|
|
147
148
|
return next(n for n in graph.nodes() if n.addr == self.function.addr)
|
|
148
149
|
except StopIteration as ex:
|
|
149
|
-
raise
|
|
150
|
+
raise AngrRuntimeError("Cannot find the start node from the graph!") from ex
|
|
150
151
|
|
|
151
152
|
def _test_reducibility(self):
|
|
152
153
|
# make a copy of the graph
|
|
@@ -5,6 +5,7 @@ import claripy
|
|
|
5
5
|
|
|
6
6
|
from ..structuring.structurer_nodes import ConditionNode, CascadingConditionNode
|
|
7
7
|
from ..sequence_walker import SequenceWalker
|
|
8
|
+
from ....errors import AngrRuntimeError
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
class CascadingConditionTransformer(SequenceWalker):
|
|
@@ -88,6 +89,6 @@ class CascadingConditionTransformer(SequenceWalker):
|
|
|
88
89
|
|
|
89
90
|
else:
|
|
90
91
|
# unexpected!
|
|
91
|
-
raise
|
|
92
|
+
raise AngrRuntimeError("Impossible happened")
|
|
92
93
|
|
|
93
94
|
return CascadingConditionNode(cond_node.addr, cond_and_nodes, else_node=else_node)
|
|
@@ -37,7 +37,7 @@ from ....utils.constants import is_alignment_mask
|
|
|
37
37
|
from ....utils.library import get_cpp_function_name
|
|
38
38
|
from ....utils.loader import is_in_readonly_segment, is_in_readonly_section
|
|
39
39
|
from ..utils import structured_node_is_simple_return
|
|
40
|
-
from ....errors import UnsupportedNodeTypeError
|
|
40
|
+
from ....errors import UnsupportedNodeTypeError, AngrRuntimeError
|
|
41
41
|
from ....knowledge_plugins.cfg.memory_data import MemoryData, MemoryDataSort
|
|
42
42
|
from ... import Analysis, register_analysis
|
|
43
43
|
from ..region_identifier import MultiNode
|
|
@@ -1262,7 +1262,9 @@ class CFunctionCall(CStatement, CExpression):
|
|
|
1262
1262
|
if self.is_expr:
|
|
1263
1263
|
return self.prototype.returnty or SimTypeInt(signed=False).with_arch(self.codegen.project.arch)
|
|
1264
1264
|
else:
|
|
1265
|
-
raise
|
|
1265
|
+
raise AngrRuntimeError(
|
|
1266
|
+
"CFunctionCall.type should not be accessed if the function call is used as a statement."
|
|
1267
|
+
)
|
|
1266
1268
|
|
|
1267
1269
|
def _is_target_ambiguous(self, func_name: str) -> bool:
|
|
1268
1270
|
"""
|
|
@@ -3222,8 +3224,12 @@ class CStructuredCodeGenerator(BaseStructuredCodeGenerator, Analysis):
|
|
|
3222
3224
|
return old_ty
|
|
3223
3225
|
|
|
3224
3226
|
if stmt.variable is not None:
|
|
3225
|
-
|
|
3226
|
-
|
|
3227
|
+
if "struct_member_info" in stmt.tags:
|
|
3228
|
+
offset, var, _ = stmt.struct_member_info
|
|
3229
|
+
cvar = self._variable(var, stmt.size)
|
|
3230
|
+
else:
|
|
3231
|
+
cvar = self._variable(stmt.variable, stmt.size)
|
|
3232
|
+
offset = stmt.offset or 0
|
|
3227
3233
|
assert type(offset) is int # I refuse to deal with the alternative
|
|
3228
3234
|
|
|
3229
3235
|
cdst = self._access_constant_offset(self._get_variable_reference(cvar), offset, cdata.type, True, negotiate)
|
angr/analyses/flirt.py
CHANGED
|
@@ -7,6 +7,7 @@ import nampa
|
|
|
7
7
|
from archinfo.arch_arm import is_arm_arch
|
|
8
8
|
|
|
9
9
|
from ..analyses import AnalysesHub
|
|
10
|
+
from ..errors import AngrRuntimeError
|
|
10
11
|
from ..flirt import FlirtSignature, STRING_TO_LIBRARIES, LIBRARY_TO_SIGNATURES, FLIRT_SIGNATURES_BY_ARCH
|
|
11
12
|
from .analysis import Analysis
|
|
12
13
|
|
|
@@ -49,7 +50,7 @@ class FlirtAnalysis(Analysis):
|
|
|
49
50
|
|
|
50
51
|
else:
|
|
51
52
|
if not FLIRT_SIGNATURES_BY_ARCH:
|
|
52
|
-
raise
|
|
53
|
+
raise AngrRuntimeError(
|
|
53
54
|
"No FLIRT signatures exist. Please load FLIRT signatures by calling "
|
|
54
55
|
"load_signatures() before running FlirtAnalysis."
|
|
55
56
|
)
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
from typing import TYPE_CHECKING
|
|
3
3
|
|
|
4
4
|
from ...sim_type import SimStruct, SimTypePointer, SimTypeArray
|
|
5
|
+
from ...errors import AngrRuntimeError
|
|
5
6
|
from ..analysis import Analysis, AnalysesHub
|
|
6
7
|
from .simple_solver import SimpleSolver
|
|
7
8
|
from .translator import TypeTranslator
|
|
@@ -112,7 +113,7 @@ class Typehoon(Analysis):
|
|
|
112
113
|
if self._var_mapping is None:
|
|
113
114
|
raise ValueError("Variable mapping does not exist.")
|
|
114
115
|
if self.solution is None:
|
|
115
|
-
raise
|
|
116
|
+
raise AngrRuntimeError("Please run type solver before calling pp_solution().")
|
|
116
117
|
|
|
117
118
|
typevar_to_var = {}
|
|
118
119
|
for k, typevars in self._var_mapping.items():
|
|
@@ -12,6 +12,7 @@ from ailment.expression import BinaryOp, StackBaseOffset
|
|
|
12
12
|
from ...utils.cowdict import DefaultChainMapCOW
|
|
13
13
|
from ...engines.light import SpOffset
|
|
14
14
|
from ...sim_variable import SimVariable
|
|
15
|
+
from ...errors import AngrRuntimeError
|
|
15
16
|
from ...storage.memory_mixins import MultiValuedMemory
|
|
16
17
|
from ..analysis import Analysis
|
|
17
18
|
from ..typehoon.typevars import TypeVariables, TypeVariable
|
|
@@ -328,7 +329,7 @@ class VariableRecoveryStateBase:
|
|
|
328
329
|
base = 0x7F_FFFF_FFFE_0000
|
|
329
330
|
mask = 0xFFFF_FFFF_FFFF_FFFF
|
|
330
331
|
else:
|
|
331
|
-
raise
|
|
332
|
+
raise AngrRuntimeError("Unsupported bits %d" % self.arch.bits)
|
|
332
333
|
return (offset + base) & mask
|
|
333
334
|
|
|
334
335
|
@property
|
angr/block.py
CHANGED
angr/engines/successors.py
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
from typing import TYPE_CHECKING
|
|
1
2
|
import logging
|
|
2
3
|
|
|
3
4
|
import claripy
|
|
4
5
|
|
|
5
6
|
from archinfo.arch_soot import ArchSoot
|
|
6
7
|
|
|
8
|
+
if TYPE_CHECKING:
|
|
9
|
+
from angr import SimState
|
|
10
|
+
|
|
7
11
|
|
|
8
12
|
l = logging.getLogger(name=__name__)
|
|
9
13
|
|
|
@@ -35,21 +39,21 @@ class SimSuccessors:
|
|
|
35
39
|
https://docs.angr.io/core-concepts/simulation#simsuccessors
|
|
36
40
|
"""
|
|
37
41
|
|
|
38
|
-
def __init__(self, addr, initial_state):
|
|
42
|
+
def __init__(self, addr: int | None, initial_state):
|
|
39
43
|
self.addr = addr
|
|
40
|
-
self.initial_state = initial_state
|
|
44
|
+
self.initial_state: "SimState" = initial_state
|
|
41
45
|
|
|
42
|
-
self.successors = []
|
|
43
|
-
self.all_successors = []
|
|
44
|
-
self.flat_successors = []
|
|
45
|
-
self.unsat_successors = []
|
|
46
|
-
self.unconstrained_successors = []
|
|
46
|
+
self.successors: list["SimState"] = []
|
|
47
|
+
self.all_successors: list["SimState"] = []
|
|
48
|
+
self.flat_successors: list["SimState"] = []
|
|
49
|
+
self.unsat_successors: list["SimState"] = []
|
|
50
|
+
self.unconstrained_successors: list["SimState"] = []
|
|
47
51
|
|
|
48
52
|
# the engine that should process or did process this request
|
|
49
53
|
self.engine = None
|
|
50
54
|
self.processed = False
|
|
51
55
|
self.description = "SimSuccessors"
|
|
52
|
-
self.sort = None
|
|
56
|
+
self.sort: str | None = None
|
|
53
57
|
self.artifacts = {}
|
|
54
58
|
|
|
55
59
|
@classmethod
|
angr/errors.py
CHANGED
|
@@ -146,6 +146,7 @@ from .bucketizer import Bucketizer
|
|
|
146
146
|
from .local_loop_seer import LocalLoopSeer
|
|
147
147
|
from .timeout import Timeout
|
|
148
148
|
from .suggestions import Suggestions
|
|
149
|
+
from .stub_stasher import StubStasher
|
|
149
150
|
|
|
150
151
|
__all__ = (
|
|
151
152
|
"ExplorationTechnique",
|
|
@@ -173,4 +174,5 @@ __all__ = (
|
|
|
173
174
|
"LocalLoopSeer",
|
|
174
175
|
"Timeout",
|
|
175
176
|
"Suggestions",
|
|
177
|
+
"StubStasher",
|
|
176
178
|
)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from . import ExplorationTechnique
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class StubStasher(ExplorationTechnique):
|
|
5
|
+
"""
|
|
6
|
+
Stash states that reach a stub SimProcedure.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
@staticmethod
|
|
10
|
+
def post_filter(state):
|
|
11
|
+
hook = state.project.hooked_by(state.addr)
|
|
12
|
+
return hook and hook.is_stub
|
|
13
|
+
|
|
14
|
+
def step(self, simgr, stash="active", **kwargs):
|
|
15
|
+
simgr.step(stash=stash, **kwargs)
|
|
16
|
+
simgr.move(stash, "stub", filter_func=self.post_filter)
|
|
17
|
+
return simgr
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
# pylint:disable=no-member
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
2
4
|
import pickle
|
|
3
5
|
import logging
|
|
4
|
-
from typing import
|
|
6
|
+
from typing import TYPE_CHECKING
|
|
5
7
|
from collections.abc import Callable
|
|
6
8
|
from collections import defaultdict
|
|
7
9
|
import bisect
|
|
@@ -75,7 +77,7 @@ class CFGModel(Serializable):
|
|
|
75
77
|
self.insn_addr_to_memory_data: dict[int, MemoryData] = {}
|
|
76
78
|
|
|
77
79
|
# Lists of CFGNodes indexed by the address of each block. Don't serialize
|
|
78
|
-
self._nodes_by_addr:
|
|
80
|
+
self._nodes_by_addr: defaultdict[int, list[CFGNode]] = defaultdict(list)
|
|
79
81
|
# CFGNodes dict indexed by block ID. Don't serialize
|
|
80
82
|
self._nodes: dict[int, CFGNode] = {}
|
|
81
83
|
# addresses of CFGNodes to speed up get_any_node(..., anyaddr=True). Don't serialize
|
|
@@ -447,7 +449,7 @@ class CFGModel(Serializable):
|
|
|
447
449
|
successors.append(suc)
|
|
448
450
|
return successors
|
|
449
451
|
|
|
450
|
-
def get_successors_and_jumpkinds(self, node, excluding_fakeret=True):
|
|
452
|
+
def get_successors_and_jumpkinds(self, node, excluding_fakeret=True) -> list[tuple[CFGNode, str]]:
|
|
451
453
|
"""
|
|
452
454
|
Get a list of tuples where the first element is the successor of the CFG node and the second element is the
|
|
453
455
|
jumpkind of the successor.
|
|
@@ -564,8 +566,8 @@ class CFGModel(Serializable):
|
|
|
564
566
|
self,
|
|
565
567
|
memory_data_addrs: list[int] | None = None,
|
|
566
568
|
exec_mem_regions: list[tuple[int, int]] | None = None,
|
|
567
|
-
xrefs:
|
|
568
|
-
seg_list:
|
|
569
|
+
xrefs: XRefManager | None = None,
|
|
570
|
+
seg_list: SegmentList | None = None,
|
|
569
571
|
data_type_guessing_handlers: list[Callable] | None = None,
|
|
570
572
|
) -> bool:
|
|
571
573
|
"""
|
|
@@ -745,8 +747,8 @@ class CFGModel(Serializable):
|
|
|
745
747
|
data_addr,
|
|
746
748
|
max_size,
|
|
747
749
|
content_holder=None,
|
|
748
|
-
xrefs:
|
|
749
|
-
seg_list:
|
|
750
|
+
xrefs: XRefManager | None = None,
|
|
751
|
+
seg_list: SegmentList | None = None,
|
|
750
752
|
data_type_guessing_handlers: list[Callable] | None = None,
|
|
751
753
|
extra_memory_regions: list[tuple[int, int]] | None = None,
|
|
752
754
|
):
|
|
@@ -775,7 +777,7 @@ class CFGModel(Serializable):
|
|
|
775
777
|
irsb_addr, stmt_idx = None, None
|
|
776
778
|
if xrefs is not None and seg_list is not None:
|
|
777
779
|
try:
|
|
778
|
-
ref:
|
|
780
|
+
ref: XRef = next(iter(xrefs.get_xrefs_by_dst(data_addr)))
|
|
779
781
|
irsb_addr = ref.block_addr
|
|
780
782
|
except StopIteration:
|
|
781
783
|
pass
|
|
@@ -861,7 +863,7 @@ class CFGModel(Serializable):
|
|
|
861
863
|
irsb_addr, stmt_idx = None, None
|
|
862
864
|
if xrefs is not None and seg_list is not None:
|
|
863
865
|
try:
|
|
864
|
-
ref:
|
|
866
|
+
ref: XRef = next(iter(xrefs.get_xrefs_by_dst(data_addr)))
|
|
865
867
|
irsb_addr = ref.block_addr
|
|
866
868
|
stmt_idx = ref.stmt_idx
|
|
867
869
|
except StopIteration:
|
|
@@ -966,8 +968,8 @@ class CFGModel(Serializable):
|
|
|
966
968
|
self,
|
|
967
969
|
addr: int,
|
|
968
970
|
size: int = 1,
|
|
969
|
-
kb:
|
|
970
|
-
) -> set[
|
|
971
|
+
kb: KnowledgeBase | None = None,
|
|
972
|
+
) -> set[Function]:
|
|
971
973
|
"""
|
|
972
974
|
Find all functions with nodes intersecting [addr, addr + size).
|
|
973
975
|
|
|
@@ -990,9 +992,7 @@ class CFGModel(Serializable):
|
|
|
990
992
|
functions.add(func)
|
|
991
993
|
return functions
|
|
992
994
|
|
|
993
|
-
def find_function_for_reflow_into_addr(
|
|
994
|
-
self, addr: int, kb: Optional["KnowledgeBase"] = None
|
|
995
|
-
) -> Optional["Function"]:
|
|
995
|
+
def find_function_for_reflow_into_addr(self, addr: int, kb: KnowledgeBase | None = None) -> Function | None:
|
|
996
996
|
"""
|
|
997
997
|
Look for a function that flows into a new node at addr.
|
|
998
998
|
|
|
@@ -1019,7 +1019,7 @@ class CFGModel(Serializable):
|
|
|
1019
1019
|
|
|
1020
1020
|
return None
|
|
1021
1021
|
|
|
1022
|
-
def clear_region_for_reflow(self, addr: int, size: int = 1, kb:
|
|
1022
|
+
def clear_region_for_reflow(self, addr: int, size: int = 1, kb: KnowledgeBase | None = None) -> None:
|
|
1023
1023
|
"""
|
|
1024
1024
|
Remove nodes in the graph intersecting region [addr, addr + size).
|
|
1025
1025
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
import traceback
|
|
2
4
|
import logging
|
|
3
|
-
from typing import TYPE_CHECKING
|
|
5
|
+
from typing import TYPE_CHECKING
|
|
4
6
|
|
|
5
7
|
from archinfo.arch_soot import SootAddressDescriptor
|
|
6
8
|
import archinfo
|
|
@@ -11,12 +13,16 @@ from angr.serializable import Serializable
|
|
|
11
13
|
from angr.protos import cfg_pb2
|
|
12
14
|
|
|
13
15
|
if TYPE_CHECKING:
|
|
16
|
+
from angr.block import Block, SootBlock
|
|
14
17
|
from .cfg_model import CFGModel
|
|
15
18
|
import angr
|
|
16
19
|
|
|
17
20
|
_l = logging.getLogger(__name__)
|
|
18
21
|
|
|
19
22
|
|
|
23
|
+
AddressType = int | SootAddressDescriptor
|
|
24
|
+
|
|
25
|
+
|
|
20
26
|
class CFGNodeCreationFailure:
|
|
21
27
|
"""
|
|
22
28
|
This class contains additional information for whenever creating a CFGNode failed. It includes a full traceback
|
|
@@ -87,13 +93,13 @@ class CFGNode(Serializable):
|
|
|
87
93
|
__repr__.
|
|
88
94
|
"""
|
|
89
95
|
|
|
90
|
-
self.addr = addr
|
|
96
|
+
self.addr: AddressType = addr
|
|
91
97
|
self.size = size
|
|
92
98
|
self.simprocedure_name = simprocedure_name
|
|
93
99
|
self.no_ret = no_ret
|
|
94
|
-
self._cfg_model:
|
|
100
|
+
self._cfg_model: CFGModel = cfg
|
|
95
101
|
self.function_address = function_address
|
|
96
|
-
self.block_id:
|
|
102
|
+
self.block_id: angr.analyses.cfg.cfg_job_base.BlockID | int = block_id
|
|
97
103
|
self.thumb = thumb
|
|
98
104
|
self.byte_string: bytes | None = byte_string
|
|
99
105
|
|
|
@@ -353,7 +359,7 @@ class CFGNode(Serializable):
|
|
|
353
359
|
return BlockNode(self.addr, self.size, thumb=self.thumb)
|
|
354
360
|
|
|
355
361
|
@property
|
|
356
|
-
def block(self):
|
|
362
|
+
def block(self) -> Block | SootBlock | None:
|
|
357
363
|
if self.is_simprocedure or self.is_syscall:
|
|
358
364
|
return None
|
|
359
365
|
project = self._cfg_model.project # everything in angr is connected with everything...
|
|
@@ -33,7 +33,7 @@ class FunctionParser:
|
|
|
33
33
|
obj.is_simprocedure = function.is_simprocedure
|
|
34
34
|
obj.returning = function.returning
|
|
35
35
|
obj.alignment = function.alignment
|
|
36
|
-
obj.binary_name = function.binary_name
|
|
36
|
+
obj.binary_name = function.binary_name or ""
|
|
37
37
|
obj.normalized = function.normalized
|
|
38
38
|
|
|
39
39
|
# signature matched?
|
|
@@ -105,7 +105,7 @@ class FunctionParser:
|
|
|
105
105
|
is_simprocedure=cmsg.is_simprocedure,
|
|
106
106
|
returning=cmsg.returning,
|
|
107
107
|
alignment=cmsg.alignment,
|
|
108
|
-
binary_name=cmsg.binary_name,
|
|
108
|
+
binary_name=None if not cmsg.binary_name else cmsg.binary_name,
|
|
109
109
|
)
|
|
110
110
|
obj._project = project
|
|
111
111
|
obj.normalized = cmsg.normalized
|
|
@@ -112,6 +112,8 @@ class VariableManagerInternal(Serializable):
|
|
|
112
112
|
# optimization
|
|
113
113
|
self._variables_without_writes = set()
|
|
114
114
|
|
|
115
|
+
self.stack_offset_to_struct_member_info: dict[SimStackVariable, (int, SimStackVariable, SimStruct)] = {}
|
|
116
|
+
|
|
115
117
|
self.ret_val_size = None
|
|
116
118
|
|
|
117
119
|
#
|
|
@@ -972,6 +974,23 @@ class VariableManagerInternal(Serializable):
|
|
|
972
974
|
self.variable_to_types[other_var] = ty
|
|
973
975
|
if mark_manual:
|
|
974
976
|
self.variables_with_manual_types.add(other_var)
|
|
977
|
+
if isinstance(var, SimStackVariable) and isinstance(ty, TypeRef) and isinstance(ty.type, SimStruct):
|
|
978
|
+
self.stack_offset_to_struct_member_info.update(self._extract_fields_from_struct(var, ty.type))
|
|
979
|
+
|
|
980
|
+
def _extract_fields_from_struct(self, var, ty: SimStruct, top_struct_offset=0):
|
|
981
|
+
result = {}
|
|
982
|
+
for name, field_offset in ty.offsets.items():
|
|
983
|
+
field_ty = ty.fields[name]
|
|
984
|
+
offset = top_struct_offset + field_offset
|
|
985
|
+
if isinstance(field_ty, TypeRef):
|
|
986
|
+
field_ty = field_ty.type
|
|
987
|
+
if isinstance(field_ty, SimStruct):
|
|
988
|
+
result.update(
|
|
989
|
+
self._extract_fields_from_struct(var, field_ty, top_struct_offset=top_struct_offset + field_offset)
|
|
990
|
+
)
|
|
991
|
+
else:
|
|
992
|
+
result[var.offset + offset] = (offset, var, ty)
|
|
993
|
+
return result
|
|
975
994
|
|
|
976
995
|
def get_variable_type(self, var) -> SimType | None:
|
|
977
996
|
return self.variable_to_types.get(var, None)
|
angr/lib/angr_native.dylib
CHANGED
|
Binary file
|
angr/sim_manager.py
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
import sys
|
|
2
4
|
import itertools
|
|
3
5
|
import types
|
|
4
6
|
from collections import defaultdict
|
|
5
|
-
from typing import DefaultDict
|
|
6
7
|
import logging
|
|
8
|
+
from types import TracebackType
|
|
7
9
|
|
|
8
10
|
import claripy
|
|
9
11
|
import mulpyplexer
|
|
@@ -91,7 +93,7 @@ class SimulationManager:
|
|
|
91
93
|
|
|
92
94
|
if stashes is None:
|
|
93
95
|
stashes = self._create_integral_stashes()
|
|
94
|
-
self._stashes:
|
|
96
|
+
self._stashes: defaultdict[str, list[SimState]] = stashes
|
|
95
97
|
self._hierarchy = StateHierarchy() if hierarchy is None else hierarchy
|
|
96
98
|
self._save_unsat = save_unsat
|
|
97
99
|
self._auto_drop = {
|
|
@@ -189,11 +191,11 @@ class SimulationManager:
|
|
|
189
191
|
)
|
|
190
192
|
|
|
191
193
|
@property
|
|
192
|
-
def errored(self):
|
|
194
|
+
def errored(self) -> list[ErrorRecord]:
|
|
193
195
|
return self._errored
|
|
194
196
|
|
|
195
197
|
@property
|
|
196
|
-
def stashes(self) ->
|
|
198
|
+
def stashes(self) -> defaultdict[str, list[SimState]]:
|
|
197
199
|
return self._stashes
|
|
198
200
|
|
|
199
201
|
def mulpyplex(self, *stashes):
|
|
@@ -394,7 +396,7 @@ class SimulationManager:
|
|
|
394
396
|
|
|
395
397
|
:param stash: The name of the stash to step (default: 'active')
|
|
396
398
|
:param target_stash: The name of the stash to put the results in (default: same as ``stash``)
|
|
397
|
-
:param error_list: The list to put
|
|
399
|
+
:param error_list: The list to put ErrorRecord objects in (default: ``self.errored``)
|
|
398
400
|
:param selector_func: If provided, should be a function that takes a state and returns a
|
|
399
401
|
boolean. If True, the state will be stepped. Otherwise, it will be
|
|
400
402
|
kept as-is.
|
|
@@ -894,7 +896,7 @@ class SimulationManager:
|
|
|
894
896
|
# ...
|
|
895
897
|
#
|
|
896
898
|
|
|
897
|
-
def _create_integral_stashes(self) ->
|
|
899
|
+
def _create_integral_stashes(self) -> defaultdict[str, list[SimState]]:
|
|
898
900
|
stashes = defaultdict(list)
|
|
899
901
|
stashes.update({name: [] for name in self._integral_stashes})
|
|
900
902
|
return stashes
|
|
@@ -945,9 +947,9 @@ class ErrorRecord:
|
|
|
945
947
|
"""
|
|
946
948
|
|
|
947
949
|
def __init__(self, state, error, traceback):
|
|
948
|
-
self.state = state
|
|
949
|
-
self.error = error
|
|
950
|
-
self.traceback = traceback
|
|
950
|
+
self.state: SimState = state
|
|
951
|
+
self.error: Exception = error
|
|
952
|
+
self.traceback: TracebackType = traceback
|
|
951
953
|
|
|
952
954
|
def debug(self):
|
|
953
955
|
"""
|
angr/state_plugins/history.py
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from collections.abc import Reversible
|
|
1
2
|
import operator
|
|
2
3
|
import logging
|
|
3
4
|
import itertools
|
|
@@ -40,7 +41,7 @@ class SimStateHistory(SimStatePlugin):
|
|
|
40
41
|
self.jump_source = None if clone is None else clone.jump_source
|
|
41
42
|
self.jump_avoidable = None if clone is None else clone.jump_avoidable
|
|
42
43
|
self.jump_guard: BV | None = None if clone is None else clone.jump_guard
|
|
43
|
-
self.jumpkind = None if clone is None else clone.jumpkind
|
|
44
|
+
self.jumpkind: str | None = None if clone is None else clone.jumpkind
|
|
44
45
|
|
|
45
46
|
# the execution log for this history
|
|
46
47
|
self.recent_events = [] if clone is None else list(clone.recent_events)
|
|
@@ -358,19 +359,19 @@ class SimStateHistory(SimStatePlugin):
|
|
|
358
359
|
yield from self.parent.lineage
|
|
359
360
|
|
|
360
361
|
@property
|
|
361
|
-
def events(self):
|
|
362
|
+
def events(self) -> Reversible["SimEvent"]:
|
|
362
363
|
return LambdaIterIter(self, operator.attrgetter("recent_events"))
|
|
363
364
|
|
|
364
365
|
@property
|
|
365
|
-
def actions(self):
|
|
366
|
+
def actions(self) -> Reversible["SimAction"]:
|
|
366
367
|
return LambdaIterIter(self, operator.attrgetter("recent_actions"))
|
|
367
368
|
|
|
368
369
|
@property
|
|
369
|
-
def jumpkinds(self):
|
|
370
|
+
def jumpkinds(self) -> Reversible[str]:
|
|
370
371
|
return LambdaAttrIter(self, operator.attrgetter("jumpkind"))
|
|
371
372
|
|
|
372
373
|
@property
|
|
373
|
-
def jump_guards(self):
|
|
374
|
+
def jump_guards(self) -> Reversible[claripy.ast.Bool]:
|
|
374
375
|
return LambdaAttrIter(self, operator.attrgetter("jump_guard"))
|
|
375
376
|
|
|
376
377
|
@property
|
|
@@ -382,15 +383,15 @@ class SimStateHistory(SimStatePlugin):
|
|
|
382
383
|
return LambdaAttrIter(self, operator.attrgetter("jump_source"))
|
|
383
384
|
|
|
384
385
|
@property
|
|
385
|
-
def descriptions(self):
|
|
386
|
+
def descriptions(self) -> Reversible[str]:
|
|
386
387
|
return LambdaAttrIter(self, operator.attrgetter("recent_description"))
|
|
387
388
|
|
|
388
389
|
@property
|
|
389
|
-
def bbl_addrs(self):
|
|
390
|
+
def bbl_addrs(self) -> Reversible[int]:
|
|
390
391
|
return LambdaIterIter(self, operator.attrgetter("recent_bbl_addrs"))
|
|
391
392
|
|
|
392
393
|
@property
|
|
393
|
-
def ins_addrs(self):
|
|
394
|
+
def ins_addrs(self) -> Reversible[int]:
|
|
394
395
|
return LambdaIterIter(self, operator.attrgetter("recent_ins_addrs"))
|
|
395
396
|
|
|
396
397
|
@property
|
|
@@ -84,30 +84,50 @@ class UltraPage(MemoryObjectMixin, PageBase):
|
|
|
84
84
|
self.symbolic_data[global_start_addr - page_addr] = new_item
|
|
85
85
|
result[-1] = (global_start_addr, new_item)
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
subaddr = addr
|
|
88
|
+
end = addr + size
|
|
89
|
+
while subaddr < end:
|
|
88
90
|
realaddr = subaddr + page_addr
|
|
89
91
|
if self.symbolic_bitmap[subaddr]:
|
|
90
92
|
cur_val = self._get_object(subaddr, page_addr, memory=memory)
|
|
91
|
-
|
|
92
|
-
|
|
93
|
+
# it must be a different object
|
|
94
|
+
cycle(realaddr)
|
|
95
|
+
next_addr = subaddr + 1
|
|
96
|
+
|
|
97
|
+
# figure out how long the current object is (limit end of page)
|
|
98
|
+
if cur_val is None:
|
|
99
|
+
obj_end = end
|
|
93
100
|
else:
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
101
|
+
obj_end = subaddr + cur_val.length
|
|
102
|
+
obj_end = min(end, obj_end)
|
|
103
|
+
|
|
104
|
+
# determine how many bytes come from this object
|
|
105
|
+
# loop until: end of object or not symbolic or until next object
|
|
106
|
+
next_place = None
|
|
107
|
+
while next_addr < obj_end and self.symbolic_bitmap[next_addr]:
|
|
108
|
+
if next_addr == subaddr + 1: # first loop
|
|
109
|
+
next_place = self._get_next_place(next_addr)
|
|
110
|
+
if next_place is not None and next_place <= next_addr:
|
|
111
|
+
break
|
|
112
|
+
next_addr += 1
|
|
113
|
+
|
|
114
|
+
subaddr = next_addr
|
|
115
|
+
last_run = symbolic_run = cur_val
|
|
116
|
+
result.append((realaddr, cur_val))
|
|
117
|
+
|
|
97
118
|
else:
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
119
|
+
max_concrete_read = subaddr
|
|
120
|
+
while max_concrete_read < end and not self.symbolic_bitmap[max_concrete_read]:
|
|
121
|
+
max_concrete_read += 1
|
|
122
|
+
cur_val = self.concrete_data[subaddr:max_concrete_read]
|
|
123
|
+
subaddr = max_concrete_read
|
|
124
|
+
# we know the last run was not a concrete one
|
|
125
|
+
cycle(realaddr)
|
|
126
|
+
if endness == "Iend_LE":
|
|
127
|
+
last_run = concrete_run = cur_val[::-1]
|
|
107
128
|
else:
|
|
108
|
-
cycle(realaddr)
|
|
109
129
|
last_run = concrete_run = cur_val
|
|
110
|
-
|
|
130
|
+
result.append((realaddr, cur_val))
|
|
111
131
|
|
|
112
132
|
cycle(page_addr + addr + size)
|
|
113
133
|
if not cooperate:
|
|
@@ -134,8 +154,7 @@ class UltraPage(MemoryObjectMixin, PageBase):
|
|
|
134
154
|
addr, data, size, endness, page_addr=page_addr, memory=memory, **kwargs
|
|
135
155
|
)
|
|
136
156
|
|
|
137
|
-
|
|
138
|
-
size = memory.page_size - addr
|
|
157
|
+
size = min(size, memory.page_size - addr)
|
|
139
158
|
|
|
140
159
|
byte_width = memory.state.arch.byte_width
|
|
141
160
|
|
|
@@ -410,6 +429,14 @@ class UltraPage(MemoryObjectMixin, PageBase):
|
|
|
410
429
|
else:
|
|
411
430
|
return None
|
|
412
431
|
|
|
432
|
+
def _get_next_place(self, start):
|
|
433
|
+
try:
|
|
434
|
+
place = next(self.symbolic_data.irange(minimum=start, reverse=False))
|
|
435
|
+
except StopIteration:
|
|
436
|
+
return None
|
|
437
|
+
else:
|
|
438
|
+
return place
|
|
439
|
+
|
|
413
440
|
def replace_all_with_offsets(self, offsets: Iterable[int], old: claripy.ast.BV, new: claripy.ast.BV, memory=None):
|
|
414
441
|
memory_objects = set()
|
|
415
442
|
for offset in sorted(list(offsets)):
|
angr/utils/mp.py
CHANGED
|
@@ -2,6 +2,7 @@ from typing import NamedTuple, Optional, Any
|
|
|
2
2
|
from collections.abc import Callable
|
|
3
3
|
import multiprocessing
|
|
4
4
|
import platform
|
|
5
|
+
from ..errors import AngrRuntimeError
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
class Closure(NamedTuple):
|
|
@@ -32,7 +33,7 @@ class Initializer:
|
|
|
32
33
|
|
|
33
34
|
def __init__(self, *, _manual: bool = True):
|
|
34
35
|
if _manual:
|
|
35
|
-
raise
|
|
36
|
+
raise AngrRuntimeError("This is a singleton; call .get() instead")
|
|
36
37
|
self.initializers: list[Closure] = []
|
|
37
38
|
|
|
38
39
|
def register(self, f: Callable[..., None], *args: Any, **kwargs: Any) -> None:
|
angr/utils/segment_list.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# pylint:disable=no-else-break
|
|
2
2
|
import logging
|
|
3
3
|
|
|
4
|
-
from angr.errors import AngrCFGError
|
|
4
|
+
from angr.errors import AngrCFGError, AngrRuntimeError
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
l = logging.getLogger(name=__name__)
|
|
@@ -267,7 +267,7 @@ class SegmentList:
|
|
|
267
267
|
# done
|
|
268
268
|
break
|
|
269
269
|
else:
|
|
270
|
-
raise
|
|
270
|
+
raise AngrRuntimeError("Unreachable reached")
|
|
271
271
|
else: # if segment.start > address
|
|
272
272
|
if address + size <= segment.start:
|
|
273
273
|
# |--- segment ---|
|
|
@@ -293,7 +293,7 @@ class SegmentList:
|
|
|
293
293
|
address = new_address
|
|
294
294
|
idx = self.search(address)
|
|
295
295
|
else:
|
|
296
|
-
raise
|
|
296
|
+
raise AngrRuntimeError("Unreachable reached")
|
|
297
297
|
|
|
298
298
|
def _dbg_output(self):
|
|
299
299
|
"""
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: angr
|
|
3
|
-
Version: 9.2.
|
|
3
|
+
Version: 9.2.106
|
|
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,13 +15,13 @@ 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.
|
|
19
|
-
Requires-Dist: archinfo ==9.2.
|
|
18
|
+
Requires-Dist: ailment ==9.2.106
|
|
19
|
+
Requires-Dist: archinfo ==9.2.106
|
|
20
20
|
Requires-Dist: cachetools
|
|
21
21
|
Requires-Dist: capstone ==5.0.0.post1
|
|
22
22
|
Requires-Dist: cffi >=1.14.0
|
|
23
|
-
Requires-Dist: claripy ==9.2.
|
|
24
|
-
Requires-Dist: cle ==9.2.
|
|
23
|
+
Requires-Dist: claripy ==9.2.106
|
|
24
|
+
Requires-Dist: cle ==9.2.106
|
|
25
25
|
Requires-Dist: dpkt
|
|
26
26
|
Requires-Dist: itanium-demangler
|
|
27
27
|
Requires-Dist: mulpyplexer
|
|
@@ -31,7 +31,7 @@ Requires-Dist: protobuf >=3.19.0
|
|
|
31
31
|
Requires-Dist: psutil
|
|
32
32
|
Requires-Dist: pycparser >=2.18
|
|
33
33
|
Requires-Dist: pyformlang
|
|
34
|
-
Requires-Dist: pyvex ==9.2.
|
|
34
|
+
Requires-Dist: pyvex ==9.2.106
|
|
35
35
|
Requires-Dist: rich >=13.1.0
|
|
36
36
|
Requires-Dist: rpyc
|
|
37
37
|
Requires-Dist: sortedcontainers
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
angr/__init__.py,sha256=
|
|
1
|
+
angr/__init__.py,sha256=gL2b7Kk3NQWtdo4OpnsfL_9d-Q4YkWSR4qhfQLbgwAA,3993
|
|
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
|
-
angr/block.py,sha256=
|
|
5
|
+
angr/block.py,sha256=tHxXlBBFrPZbp5phhTn63K55khjDIIUSNJgFn4lPd9I,14761
|
|
6
6
|
angr/callable.py,sha256=-E9HelavtRY1xPAxCVXl120H8Rb7Myd2IcrXtWZFAOU,6034
|
|
7
7
|
angr/calling_conventions.py,sha256=JjgIx0PHOfP9O8fcLjaKFEnznDfgmcf8ezMS6s54Me8,91288
|
|
8
8
|
angr/code_location.py,sha256=IudWSR-gJzq_EeVw-jEZvQumVYwUUDWXR1vmLAkS-SQ,5432
|
|
9
9
|
angr/codenode.py,sha256=Di6ZxGqf-e6tKL49Zr0sq4vqpy_-nUDYkBdLj2Tg2Po,3760
|
|
10
|
-
angr/errors.py,sha256=
|
|
10
|
+
angr/errors.py,sha256=Yh_qSz7FjMSqqK9P3CVJHQZUzvTELLg6dRGYyINVZSM,8348
|
|
11
11
|
angr/factory.py,sha256=C6HlSkBcl9T8y8s7EvFwj5JCV2OMyKrd317fqOjKcYQ,17305
|
|
12
12
|
angr/graph_utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
13
13
|
angr/keyed_region.py,sha256=aJzy9-iXxIdJdmrH3fhaM3_KFrGHJUO7YzswjRlrsO0,18109
|
|
@@ -15,7 +15,7 @@ angr/project.py,sha256=-1VjiXyaqokF_J4fJ_ZWB3alko7dkx0JBV9AK6dZvcM,37254
|
|
|
15
15
|
angr/py.typed,sha256=la67KBlbjXN-_-DfGNcdOcjYumVpKG_Tkw-8n5dnGB4,8
|
|
16
16
|
angr/serializable.py,sha256=6cljvzAqFwsLqFu9ouCno7hMpgstha5-8C7RyWNCRXc,1502
|
|
17
17
|
angr/service.py,sha256=9R50bFaCf6zjxybiEIVIkODSVCsE2VcTul_KjjsjaGU,1102
|
|
18
|
-
angr/sim_manager.py,sha256=
|
|
18
|
+
angr/sim_manager.py,sha256=YN7WwjAyGEdnTaj3tBSQt-3I9aYn3aEfgxT5RRm4HbQ,39374
|
|
19
19
|
angr/sim_options.py,sha256=OuT01xS_F3ifBD9MAfZmNCnfjtTg0HulZlrKcs1LNSY,18057
|
|
20
20
|
angr/sim_procedure.py,sha256=SKlD_-qGh-llcuennKZoHK1yzDUTaa5z5W2l22Ean-U,26259
|
|
21
21
|
angr/sim_state.py,sha256=-BhSkyucG6wwZSrgSoAKWNRFHQjcVP8R7ux0z7E2AOg,37820
|
|
@@ -45,7 +45,7 @@ angr/analyses/disassembly.py,sha256=ZBVtHUt2TBDuIz_mIFY_6thJrIxCEucOSoBfbOQVwIs,
|
|
|
45
45
|
angr/analyses/disassembly_utils.py,sha256=4Np0PCPjr0h0jIVzUUG6KzrEKl9--IpTE3sgmmsmhcg,2989
|
|
46
46
|
angr/analyses/dominance_frontier.py,sha256=XRfC_LUUetE8t1Cc9bwvWS9sl63Fx9sp8KFqN_Y9IDg,1245
|
|
47
47
|
angr/analyses/find_objects_static.py,sha256=woA3Fc45jbYMmSps-gOO5DqgPohQbx3LhicfrA6bb34,10158
|
|
48
|
-
angr/analyses/flirt.py,sha256=
|
|
48
|
+
angr/analyses/flirt.py,sha256=fhSUWcNG8c0Pkg4_H0zRh10aM3jaWVPRyC-ZrFbViXk,7841
|
|
49
49
|
angr/analyses/init_finder.py,sha256=hFHPsHipF4QkWzVqcDeTgL6YIaYi8bAyaURZBksS4KI,8531
|
|
50
50
|
angr/analyses/loop_analysis.py,sha256=nIbDIzvys-FRtJYnoZYNbMWH5V88qrhoMtrMRCTbkLY,9412
|
|
51
51
|
angr/analyses/loopfinder.py,sha256=X8F4Dcu2UHDXt6JifK6EfROAeeczyca6V7zxx9z7GpQ,7122
|
|
@@ -89,15 +89,15 @@ angr/analyses/data_dep/data_dependency_analysis.py,sha256=077fujhixS7fb-AUzS_CRW
|
|
|
89
89
|
angr/analyses/data_dep/dep_nodes.py,sha256=TMp4xOXbOCqjIrmDeP3cef29GexH5WwX2ZKV9yMqoX8,4640
|
|
90
90
|
angr/analyses/data_dep/sim_act_location.py,sha256=4f8jp-ahitxoHCCOSSFGJ1olvNWuHyiE6iOLa5DA0k4,1527
|
|
91
91
|
angr/analyses/decompiler/__init__.py,sha256=RkTvvTwAGpaLdGSTgXxVrKmGEDRxqLCNSB-b8fM6fBM,540
|
|
92
|
-
angr/analyses/decompiler/ail_simplifier.py,sha256=
|
|
92
|
+
angr/analyses/decompiler/ail_simplifier.py,sha256=laIPyvY0dCx4CQmo0NFA5Wrr5b_PhrBXyPQonXcnAXs,61625
|
|
93
93
|
angr/analyses/decompiler/ailgraph_walker.py,sha256=sBz9Cn0GtdpuFt7R9y3oX6NFvETQTZRh6N80eM9ZdJQ,1595
|
|
94
94
|
angr/analyses/decompiler/block_io_finder.py,sha256=1-u6h4KUPsX-dkXlXz6hN5ntslhEfV7fKQqjkAZcDO8,10490
|
|
95
95
|
angr/analyses/decompiler/block_similarity.py,sha256=mTpELRDw_qXxjq7B0SzXlBVm3i417Oqu7EzPWx85aUM,6461
|
|
96
96
|
angr/analyses/decompiler/block_simplifier.py,sha256=78vfpaG13JWCxijDrp3Q4wyiEw7hQXngb8itd9y39Os,17227
|
|
97
97
|
angr/analyses/decompiler/call_counter.py,sha256=V3TIaSvLUy9vLEWErnvlCS--_ubGWQAeU0tqq6XYeOU,1205
|
|
98
98
|
angr/analyses/decompiler/callsite_maker.py,sha256=GUgUkSsOznUaTIB9PUoBFyWJp9WkH4T8jf5xBIE5p9M,15909
|
|
99
|
-
angr/analyses/decompiler/clinic.py,sha256=
|
|
100
|
-
angr/analyses/decompiler/condition_processor.py,sha256=
|
|
99
|
+
angr/analyses/decompiler/clinic.py,sha256=81gi7DBCaZy-xK_TZGrApUEz00y756V4ZKVAHtugmwk,95748
|
|
100
|
+
angr/analyses/decompiler/condition_processor.py,sha256=L4piCxmoD3xZHQNSZqgj67WBGhljW3bjUii_Nirugm0,49891
|
|
101
101
|
angr/analyses/decompiler/decompilation_cache.py,sha256=NKbvKYZOe7791udwdf70tq9hJe79GMS6M1jaDJC8lSQ,1130
|
|
102
102
|
angr/analyses/decompiler/decompilation_options.py,sha256=FMfcQ0aFDMPW9d0sYpqCwrOVYoq75YkExAvR6CjZCt4,8224
|
|
103
103
|
angr/analyses/decompiler/decompiler.py,sha256=152EWqKPC2J_JcC3_rnJPNL9iDbFTm-AXamm3hjzfFE,22253
|
|
@@ -109,7 +109,7 @@ angr/analyses/decompiler/graph_region.py,sha256=-bPM3JqMA4ZnFhPi6QLGw_M1zPWK_yh0
|
|
|
109
109
|
angr/analyses/decompiler/jump_target_collector.py,sha256=NP-TgRPEkhBkEx4uZwvFLuUjgrvOIfYI3zP5b4WSfco,1138
|
|
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=aYvcQbn0l-LYbJ-DIqGTTLfnL0Hw-OANfFZXnNZH-sE,5324
|
|
112
|
-
angr/analyses/decompiler/region_identifier.py,sha256=
|
|
112
|
+
angr/analyses/decompiler/region_identifier.py,sha256=fcS0jYJmpt3hXE-E8o31lDOKF-ozOMIkSnUOCSAKbM4,45482
|
|
113
113
|
angr/analyses/decompiler/region_walker.py,sha256=lTfweYbY4_a2f2yGztTKG6JtU1jXf-kaz-NHbX9nkXE,717
|
|
114
114
|
angr/analyses/decompiler/return_maker.py,sha256=CztTpm6e3TF0ijdiZDl0HeObxTtOz0TOQd_uIqL0xMM,2467
|
|
115
115
|
angr/analyses/decompiler/seq_to_blocks.py,sha256=2KINMEgaXMG3XIiFDMRkbn10dggy7a9AHgwV383huRM,529
|
|
@@ -193,7 +193,7 @@ angr/analyses/decompiler/peephole_optimizations/single_bit_cond_to_boolexpr.py,s
|
|
|
193
193
|
angr/analyses/decompiler/peephole_optimizations/single_bit_xor.py,sha256=vqIw5ewmvbNtj86sB2eG_JLvya0bZOKFktyiWNkGyn8,940
|
|
194
194
|
angr/analyses/decompiler/peephole_optimizations/tidy_stack_addr.py,sha256=CVNGZPN4YSu7169-UXR6mlm8yf5VSajoB4yksgfIa6E,4820
|
|
195
195
|
angr/analyses/decompiler/region_simplifiers/__init__.py,sha256=ZeURg5mKbKRpwo8-SqxJ0jy_A6nNpZMxiKpjZJ0_RS0,48
|
|
196
|
-
angr/analyses/decompiler/region_simplifiers/cascading_cond_transformer.py,sha256=
|
|
196
|
+
angr/analyses/decompiler/region_simplifiers/cascading_cond_transformer.py,sha256=PQTkQg_-NSR-0dLAjDdwNHs5b82cmsM15m3OStXg-dg,3734
|
|
197
197
|
angr/analyses/decompiler/region_simplifiers/cascading_ifs.py,sha256=dbAn1fde1-kiF6A9060wEqPKcE3DeBd2Ltt_2UAEdo4,2490
|
|
198
198
|
angr/analyses/decompiler/region_simplifiers/expr_folding.py,sha256=gBFr98420bdkmlPMypwU28V2c9PRtBKiRkDv10ne4Ag,24075
|
|
199
199
|
angr/analyses/decompiler/region_simplifiers/goto.py,sha256=08f-7tVw6w-1Kqaf0py7wdNrfEGTB0uhzTJyBaQVVcw,5996
|
|
@@ -206,7 +206,7 @@ angr/analyses/decompiler/region_simplifiers/switch_cluster_simplifier.py,sha256=
|
|
|
206
206
|
angr/analyses/decompiler/region_simplifiers/switch_expr_simplifier.py,sha256=HGIiC6c3C91VfcqxUHe9aTsRohwmMXOHZH_G_dbwwx4,3327
|
|
207
207
|
angr/analyses/decompiler/structured_codegen/__init__.py,sha256=NLEvs8xnJwJiUgX8AmgS7rtFFW4SxtQcA1AjzE-GryA,313
|
|
208
208
|
angr/analyses/decompiler/structured_codegen/base.py,sha256=TdghqAsAkjZpPfzFarh8Wn1zfBYMFcMsBZhRqXgoPNo,3778
|
|
209
|
-
angr/analyses/decompiler/structured_codegen/c.py,sha256=
|
|
209
|
+
angr/analyses/decompiler/structured_codegen/c.py,sha256=YcvlggO1mRMbiXZoGMJOj2L09BE2TwaHP5OCwEjAvbo,135539
|
|
210
210
|
angr/analyses/decompiler/structured_codegen/dummy.py,sha256=IVfmtcWpTgNCRVsuW3GdQgDnuPmvodX85V0bBYtF_BI,535
|
|
211
211
|
angr/analyses/decompiler/structured_codegen/dwarf_import.py,sha256=TMz65TkF_ID_Ipocj0aFDb84H6slolN90wq0tzhY2Rk,6773
|
|
212
212
|
angr/analyses/decompiler/structuring/__init__.py,sha256=Ai63Im5VSiMDP8ACiDb34chqMl84JgzQXFIO8MV7hl0,368
|
|
@@ -282,7 +282,7 @@ angr/analyses/typehoon/lifter.py,sha256=3RogUtd8O6txb7_UAjbI7Bn1hc38oP_LsRYyBsPs
|
|
|
282
282
|
angr/analyses/typehoon/simple_solver.py,sha256=JWtFIWT6Wlm7kM6KH28dfwm4kvni-PHJjnPRWLmzLr4,48377
|
|
283
283
|
angr/analyses/typehoon/translator.py,sha256=HLPNDkkl8daZy_mLXvDm3AoBD8auLze3MnkbhRxIMZc,8559
|
|
284
284
|
angr/analyses/typehoon/typeconsts.py,sha256=yrPpW-EFNwI0vsO9ipVp2wIHsWPoZjXug1sdFHq1R6g,6973
|
|
285
|
-
angr/analyses/typehoon/typehoon.py,sha256=
|
|
285
|
+
angr/analyses/typehoon/typehoon.py,sha256=Ak0T9DL8kMl__YdJkJUoiN92cRzpUSuyjalKQk3Jbww,9368
|
|
286
286
|
angr/analyses/typehoon/typevars.py,sha256=2MNNyTSjmKXGIcLqwbO5qKIef5EHoWttjFPFGTfhfGw,15777
|
|
287
287
|
angr/analyses/typehoon/variance.py,sha256=VPuBrPmbw5RgNG5SUTNFEd5rr4v3V_qD1vgilqWvdrs,158
|
|
288
288
|
angr/analyses/variable_recovery/__init__.py,sha256=j2SZyfzCAagqNTj0IcYJtOx4b3oAvhEY9GR3hb0bx4o,105
|
|
@@ -292,7 +292,7 @@ angr/analyses/variable_recovery/engine_base.py,sha256=HVCtyY4tgx8cjHyP1aPoCCgW57
|
|
|
292
292
|
angr/analyses/variable_recovery/engine_vex.py,sha256=ni-OCeHFhhPRo5iH2p4AvI_43ADOO1jUc__GX0tIb-U,19215
|
|
293
293
|
angr/analyses/variable_recovery/irsb_scanner.py,sha256=IZVaL_axfPBcM_MvjIOXwICK3otK3B5AIbwjhVscylc,4878
|
|
294
294
|
angr/analyses/variable_recovery/variable_recovery.py,sha256=-chYezAPEMrgwu_w3pBv_uzGnJb1wi3zsa1DLPdTya8,21777
|
|
295
|
-
angr/analyses/variable_recovery/variable_recovery_base.py,sha256=
|
|
295
|
+
angr/analyses/variable_recovery/variable_recovery_base.py,sha256=EhqACAQwd6qKWC19-kbTvXEio3k9JNc3cyYg4MLHebw,14962
|
|
296
296
|
angr/analyses/variable_recovery/variable_recovery_fast.py,sha256=_eOpy1qppTti2P7Sn0MK3IMLQfYw1-V7AoZkmSizYjc,24070
|
|
297
297
|
angr/angrdb/__init__.py,sha256=df9W7J7c4rD5oYx6fZGf0BIBwOqVVJlIJTDrAtQChqY,231
|
|
298
298
|
angr/angrdb/db.py,sha256=tVrjdgEWZC0HeBVdOQ1nG0lKPwsvlITk2u4eCPMfG-4,6416
|
|
@@ -332,7 +332,7 @@ angr/engines/engine.py,sha256=Lm0RE8XxSJQw11wj2umlAaJkUWv6F7VouEu_-0Jry1A,8075
|
|
|
332
332
|
angr/engines/failure.py,sha256=zZw_7cYCkxrVhJ-gWb9apNV6cAf4pqKESDPrQdd1Mpg,996
|
|
333
333
|
angr/engines/hook.py,sha256=_dobnJ3m3F0FPHWbv82ZS5fyNmSt-wuNzMlZ-81sRgc,2546
|
|
334
334
|
angr/engines/procedure.py,sha256=dEvCtpS7-LLfr1OX3LT4_4QFyW7Wgt13UtHuAXowDSs,2515
|
|
335
|
-
angr/engines/successors.py,sha256=
|
|
335
|
+
angr/engines/successors.py,sha256=SuzeKILLcQd2OIQdnLCB6n9rmFJ88Xe_c2quz7osKVU,23887
|
|
336
336
|
angr/engines/syscall.py,sha256=LNMC3zyis3OiWC7_8Zn1blMw1EDib5FjUqepXlaWDTI,2177
|
|
337
337
|
angr/engines/unicorn.py,sha256=gf7LjjWyaaujqSuCq3d-BGm8t5sdZjzsJeBevGfdiLw,24447
|
|
338
338
|
angr/engines/light/__init__.py,sha256=j9vH2fU9MaNVQ8NT3Ek3Tj2zkGlVxlKyzia8zVTofYs,186
|
|
@@ -407,7 +407,7 @@ angr/engines/vex/light/__init__.py,sha256=WblrLgYRbdBAvNGbkzGsTgOq2A_pUBJP-FxANP
|
|
|
407
407
|
angr/engines/vex/light/light.py,sha256=CZFEgsXM-CSwVexiu6WFikjwXvpAyCR66HjVT--3_0g,21698
|
|
408
408
|
angr/engines/vex/light/resilience.py,sha256=FaHiSMv_hsIiNEqA2Wga2F3bVyXGPtWudL00785ebEs,2002
|
|
409
409
|
angr/engines/vex/light/slicing.py,sha256=lGZsF5_xtVKjCJmD2FMABkyz-kZWctWOMjuWnFWpe2g,2023
|
|
410
|
-
angr/exploration_techniques/__init__.py,sha256=
|
|
410
|
+
angr/exploration_techniques/__init__.py,sha256=ywiuWYV080w7n4HQUd40DNDfL5FwDVPFlySD2KLRzfM,7037
|
|
411
411
|
angr/exploration_techniques/bucketizer.py,sha256=H-5QyOfDNdCSTbCk8MQluwi9C9Y0iE7E1s_4EAb3LXk,2588
|
|
412
412
|
angr/exploration_techniques/common.py,sha256=7vKlFQjuVoTmtKgYbYjhg67-e3weTzFtU2hC91wHHtI,2262
|
|
413
413
|
angr/exploration_techniques/dfs.py,sha256=IpEmTGVqGAKUCmchKBR_w0SISIsBlNRjdp6sgZlcWis,1167
|
|
@@ -424,6 +424,7 @@ angr/exploration_techniques/slicecutor.py,sha256=qGX-9t28CiSXiDoz-dbE6X6oqpGt8Vq
|
|
|
424
424
|
angr/exploration_techniques/spiller.py,sha256=2_Jf8OyttY58-q9TvcvBrjb-1DOOZ4o0kkd_3O1RMUk,9382
|
|
425
425
|
angr/exploration_techniques/spiller_db.py,sha256=9Q855QsH96ZxGe7d0cv9YTcQrjd8E4X8WG4mZQgJRP4,818
|
|
426
426
|
angr/exploration_techniques/stochastic.py,sha256=gmFim2h9sFhoeC-zlpGCS0iUDkvM2wwKa_mN5Cc7mmQ,2059
|
|
427
|
+
angr/exploration_techniques/stub_stasher.py,sha256=lGSBgOG4v1bGl5k_lWplkOIL3uWv_Ns9RJoe8rZ2V8k,459
|
|
427
428
|
angr/exploration_techniques/suggestions.py,sha256=GICcH_fIA1ltIwQlbSMse5f1HJ0jdwtpNdnHfVFScXA,6969
|
|
428
429
|
angr/exploration_techniques/symbion.py,sha256=o-o_ZdbSMZCjA0_uV4TJV6jdtZXq2cO3KYzv038rJbQ,3122
|
|
429
430
|
angr/exploration_techniques/tech_builder.py,sha256=UWmOE7GqQkZj_X_kR4Un7rDZyB4oL84Q6L-nLaU1i70,1586
|
|
@@ -449,14 +450,14 @@ angr/knowledge_plugins/plugin.py,sha256=5x_6uCatsbqfQBHfRNqoRS9yc8JrwGnGMDyAn29u
|
|
|
449
450
|
angr/knowledge_plugins/types.py,sha256=DNBPxMzFYYTtvdGL0va6irXp9z6qn0kAdlOngHwPz4U,2038
|
|
450
451
|
angr/knowledge_plugins/cfg/__init__.py,sha256=L7qgnAg6rXGq8NCfdr1RLSSPRmQ1O87ZkLEDeC6k000,382
|
|
451
452
|
angr/knowledge_plugins/cfg/cfg_manager.py,sha256=9qvUkOW1pLZTXlVFm1b6lTfHsqKi05BCPPTsJwsSWx8,2613
|
|
452
|
-
angr/knowledge_plugins/cfg/cfg_model.py,sha256=
|
|
453
|
-
angr/knowledge_plugins/cfg/cfg_node.py,sha256=
|
|
453
|
+
angr/knowledge_plugins/cfg/cfg_model.py,sha256=_ueS8bcvXHuZ-NgtBqupRvT0KVL8nmBheOpXBHtql-8,41691
|
|
454
|
+
angr/knowledge_plugins/cfg/cfg_node.py,sha256=sOxGwme_hQ5SAzVjS2aUdMeomCAqXS6GXk70PvSUGvc,17364
|
|
454
455
|
angr/knowledge_plugins/cfg/indirect_jump.py,sha256=ixNJtGspxiaWUPsGNtRJ0fvrskumaJhl3164J2zIkKI,2092
|
|
455
456
|
angr/knowledge_plugins/cfg/memory_data.py,sha256=zoFZMcegVjzlOsLG2rjjGlvxGijZxL1763hw4ISwwdg,4988
|
|
456
457
|
angr/knowledge_plugins/functions/__init__.py,sha256=6IerJjMKKvM70mcJQhmXJYiipePOQ9ZSTmavTIUgg5Q,77
|
|
457
|
-
angr/knowledge_plugins/functions/function.py,sha256=
|
|
458
|
+
angr/knowledge_plugins/functions/function.py,sha256=YaoFHFkj-Dy4VCR-_UlAJSn0PFnCfFRF1rYL2IEkmK0,67113
|
|
458
459
|
angr/knowledge_plugins/functions/function_manager.py,sha256=wGQ41kKOPqPgUe8cMfySusOA7_p0-KWNDROT_lFakZ8,18972
|
|
459
|
-
angr/knowledge_plugins/functions/function_parser.py,sha256=
|
|
460
|
+
angr/knowledge_plugins/functions/function_parser.py,sha256=f2x8ib4kUAZEfd3j3egubY4DpEYYf4_jwlbuM6Fk-CE,11956
|
|
460
461
|
angr/knowledge_plugins/functions/soot_function.py,sha256=2zwz_tdKbEnF8eUkOEmpNr7AUeooun2-SiIoY_xIdMw,4971
|
|
461
462
|
angr/knowledge_plugins/key_definitions/__init__.py,sha256=xnn-6qL8csRtqWkHn6OTHQxiQChD8Z1xuqLN56GjZi4,397
|
|
462
463
|
angr/knowledge_plugins/key_definitions/atoms.py,sha256=sMqROOR2VlEHS8HmEhtPaHl5gE0g0mu2lD2IVIqjkSw,9704
|
|
@@ -483,12 +484,12 @@ angr/knowledge_plugins/sync/__init__.py,sha256=RN3y0UhYax-GdPyAhondMXEBuWIu-enHj
|
|
|
483
484
|
angr/knowledge_plugins/sync/sync_controller.py,sha256=gZ1NUg8iJWu2EaOYY6WYj_W13tRtreIu5CA1VvpTmTA,9270
|
|
484
485
|
angr/knowledge_plugins/variables/__init__.py,sha256=tmh_2i0X6Y41TkEgxHRQ4y-kVEGZnlDIpJZ_wUkCISI,60
|
|
485
486
|
angr/knowledge_plugins/variables/variable_access.py,sha256=RzT-6C3cPXqSlWpQ_vZUf6s4tfYXp2lfOvgfYWkTLyo,3726
|
|
486
|
-
angr/knowledge_plugins/variables/variable_manager.py,sha256=
|
|
487
|
+
angr/knowledge_plugins/variables/variable_manager.py,sha256=r8w2xIP-VN1_DS3r9y2GK3LAy8fMndL1m-7_obiIsbY,47315
|
|
487
488
|
angr/knowledge_plugins/xrefs/__init__.py,sha256=-5A2h048WTRu6Et7q7bqlc-AyBXNuJ9AF9nE9zc3M4I,94
|
|
488
489
|
angr/knowledge_plugins/xrefs/xref.py,sha256=1BMphrr8iViDtVWPXWidmY1_uNmw9LRvEwwZLt3Zqw8,4907
|
|
489
490
|
angr/knowledge_plugins/xrefs/xref_manager.py,sha256=a4uvTJkdM0PQIuyYcd7t76IddrrVjPGe9SZrRaqp2II,3980
|
|
490
491
|
angr/knowledge_plugins/xrefs/xref_types.py,sha256=VR3xLQQ-gUg25oX0OL3BJHyQRlZh2A8syBac9ZMS9n4,271
|
|
491
|
-
angr/lib/angr_native.dylib,sha256=
|
|
492
|
+
angr/lib/angr_native.dylib,sha256=vBZp5YlWqCR67Cizg1ztxNuHjpqPvgNgaY8VVXwkMhI,18604080
|
|
492
493
|
angr/misc/__init__.py,sha256=Ct-Q6-c-Frdz5Ihkqmou3j_1jyJi8WJXlQxs-gPQg0Y,237
|
|
493
494
|
angr/misc/ansi.py,sha256=m5RY65yyvluUJErkvCF4I4z1o5kXi2xb3Yuvt9bITCA,776
|
|
494
495
|
angr/misc/autoimport.py,sha256=vSXclz6pss3lMecoT5_doX0SvORNmZPIvVyDm4je4HE,3419
|
|
@@ -1191,7 +1192,7 @@ angr/state_plugins/debug_variables.py,sha256=MjNQKrxhvbDJ3cXW0g6CTA4refWYSWYn8PJ
|
|
|
1191
1192
|
angr/state_plugins/filesystem.py,sha256=SjspfS6OXwXRa2ynbD0lddM__puKbxaIG5zVXwWzRcA,15902
|
|
1192
1193
|
angr/state_plugins/gdb.py,sha256=tPQM-guGghWD65FHF2n_etc2UGMoaUBiXBtlRPVewNA,5125
|
|
1193
1194
|
angr/state_plugins/globals.py,sha256=tfEVa8iqEmvD2vGoogx89aIoouw9GFc8JQcscDlXLbA,1507
|
|
1194
|
-
angr/state_plugins/history.py,sha256=
|
|
1195
|
+
angr/state_plugins/history.py,sha256=EuFnc-6z6k58Z9LCqH5gQVk1Iiz7tKP6XUokxLXVLT0,19285
|
|
1195
1196
|
angr/state_plugins/inspect.py,sha256=49xo60mAI6o1IDZTcLMoqO5N78DXoHHregnSt8V54Eg,11317
|
|
1196
1197
|
angr/state_plugins/javavm_classloader.py,sha256=t0O7e6DbXykuCbBTQ6bPv13vl99GrXpHvqSnkvWlpfo,5547
|
|
1197
1198
|
angr/state_plugins/jni_references.py,sha256=AkrXa_ptTV97V1acnwvpnW7svUttpx1w4g9wmGc4NaA,3403
|
|
@@ -1265,7 +1266,7 @@ angr/storage/memory_mixins/paged_memory/pages/multi_values.py,sha256=hW-8svWpMJj
|
|
|
1265
1266
|
angr/storage/memory_mixins/paged_memory/pages/mv_list_page.py,sha256=7pAL_YxTNEx1d7qTpJqrXIRKMB04SN4ASwz6vfyBbCk,17671
|
|
1266
1267
|
angr/storage/memory_mixins/paged_memory/pages/permissions_mixin.py,sha256=Ek2YSmFOGUScFXPx8hqroNkl3gK1aqKCMv_X3_pImLs,830
|
|
1267
1268
|
angr/storage/memory_mixins/paged_memory/pages/refcount_mixin.py,sha256=oES5tahTy4SgyDi2h5oRRC0PC4JHNcIvdAC4INKkeJw,1701
|
|
1268
|
-
angr/storage/memory_mixins/paged_memory/pages/ultra_page.py,sha256=
|
|
1269
|
+
angr/storage/memory_mixins/paged_memory/pages/ultra_page.py,sha256=JIgC5wpl006FEFyDg_Z_gvEtMWJ0G0OWq9y8PcnFOzA,20062
|
|
1269
1270
|
angr/storage/memory_mixins/regioned_memory/__init__.py,sha256=qFW74mjzZmHnIX-cyvOHhOFWSJOdQwcPUm_IhDryObo,351
|
|
1270
1271
|
angr/storage/memory_mixins/regioned_memory/abstract_address_descriptor.py,sha256=9p4Eo7zE-gqfodF1P80GMEgCONpP4Qy90zzyY3ivbII,1094
|
|
1271
1272
|
angr/storage/memory_mixins/regioned_memory/abstract_merger_mixin.py,sha256=KW8zdtvWh1I00NXdDYrP3dyIJguWIu0DqRVqMVRsUtw,1333
|
|
@@ -1288,13 +1289,13 @@ angr/utils/graph.py,sha256=baLY5RJYp06XXBKrqtEIu8b7wpWYSxwVODbIFUxm3Kc,28347
|
|
|
1288
1289
|
angr/utils/lazy_import.py,sha256=VgN0-cMsr6XdGIq56Js1X8YecfPdW9Z4NrB3d2jD-5Y,308
|
|
1289
1290
|
angr/utils/library.py,sha256=6RKKn7Hm-YEw0AoTFIjL86kCdvglKI_5KtSysDAE06Q,7170
|
|
1290
1291
|
angr/utils/loader.py,sha256=QdkatPiyRfz5KdfCzRI1Xp3TJL_Pa75wY0dsILgMbwk,1944
|
|
1291
|
-
angr/utils/mp.py,sha256=
|
|
1292
|
-
angr/utils/segment_list.py,sha256=
|
|
1292
|
+
angr/utils/mp.py,sha256=cv_NeysxLgyCdE-Euefnfv078ia5maHSnUn9f23zz88,1882
|
|
1293
|
+
angr/utils/segment_list.py,sha256=5nnuVtdZk9NS2y_xUBVA9khWPueP_zagNtPSjaoMHbA,20410
|
|
1293
1294
|
angr/utils/timing.py,sha256=uOowCP8kotDrKDOjlAod-guBuYkAA8zEtiAwpdwMlIU,1334
|
|
1294
1295
|
angr/utils/typing.py,sha256=pCjA7JZAzcvrk-iyIE2cRHc1G66AMSGEON3aFfjtPVc,431
|
|
1295
|
-
angr-9.2.
|
|
1296
|
-
angr-9.2.
|
|
1297
|
-
angr-9.2.
|
|
1298
|
-
angr-9.2.
|
|
1299
|
-
angr-9.2.
|
|
1300
|
-
angr-9.2.
|
|
1296
|
+
angr-9.2.106.dist-info/LICENSE,sha256=cgL_ho5B1NH8UxwtBuqThRWdjear8b7hktycaS1sz6g,1327
|
|
1297
|
+
angr-9.2.106.dist-info/METADATA,sha256=gpCdZNcXHHN8tC2-u2B68q0FzjcDW1bCCfc7cfGlNXU,4707
|
|
1298
|
+
angr-9.2.106.dist-info/WHEEL,sha256=YBuZgLbEquNCbbbQPlLFm_OOe1fPwf91V3LBhwgnks4,107
|
|
1299
|
+
angr-9.2.106.dist-info/entry_points.txt,sha256=Vjh1C8PMyr5dZFMnik5WkEP01Uwr2T73I3a6N32sgQU,44
|
|
1300
|
+
angr-9.2.106.dist-info/top_level.txt,sha256=dKw0KWTbwLXytFvv15oAAG4sUs3ey47tt6DorJG9-hw,5
|
|
1301
|
+
angr-9.2.106.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|