angr 9.2.150__py3-none-win_amd64.whl → 9.2.152__py3-none-win_amd64.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/calling_convention/calling_convention.py +17 -9
- angr/analyses/decompiler/ccall_rewriters/amd64_ccalls.py +39 -0
- angr/analyses/decompiler/clinic.py +73 -1
- angr/analyses/decompiler/dephication/rewriting_engine.py +38 -1
- angr/analyses/decompiler/optimization_passes/condition_constprop.py +6 -0
- angr/analyses/decompiler/optimization_passes/engine_base.py +5 -0
- angr/analyses/decompiler/peephole_optimizations/__init__.py +2 -0
- angr/analyses/decompiler/peephole_optimizations/cas_intrinsics.py +115 -0
- angr/analyses/decompiler/ssailification/rewriting_engine.py +37 -1
- angr/analyses/decompiler/ssailification/traversal_engine.py +10 -1
- angr/analyses/reaching_definitions/engine_ail.py +20 -0
- angr/analyses/s_propagator.py +28 -0
- angr/analyses/stack_pointer_tracker.py +2 -1
- angr/analyses/variable_recovery/engine_ail.py +9 -0
- angr/engines/light/engine.py +7 -0
- angr/lib/angr_native.dll +0 -0
- angr/storage/memory_mixins/clouseau_mixin.py +7 -1
- angr/utils/graph.py +10 -12
- angr/utils/ssa/__init__.py +6 -1
- {angr-9.2.150.dist-info → angr-9.2.152.dist-info}/METADATA +6 -6
- {angr-9.2.150.dist-info → angr-9.2.152.dist-info}/RECORD +26 -25
- {angr-9.2.150.dist-info → angr-9.2.152.dist-info}/WHEEL +1 -1
- {angr-9.2.150.dist-info → angr-9.2.152.dist-info}/entry_points.txt +0 -0
- {angr-9.2.150.dist-info → angr-9.2.152.dist-info}/licenses/LICENSE +0 -0
- {angr-9.2.150.dist-info → angr-9.2.152.dist-info}/top_level.txt +0 -0
angr/__init__.py
CHANGED
|
@@ -21,6 +21,7 @@ from angr.calling_conventions import (
|
|
|
21
21
|
default_cc,
|
|
22
22
|
SimCCMicrosoftThiscall,
|
|
23
23
|
)
|
|
24
|
+
from angr.errors import SimTranslationError
|
|
24
25
|
from angr.sim_type import (
|
|
25
26
|
SimTypeCppFunction,
|
|
26
27
|
SimTypeInt,
|
|
@@ -585,16 +586,23 @@ class CallingConventionAnalysis(Analysis):
|
|
|
585
586
|
# include its successor.
|
|
586
587
|
|
|
587
588
|
# Re-lift the target block
|
|
588
|
-
|
|
589
|
+
dst_block_size = func.get_block_size(dst.addr)
|
|
590
|
+
if dst_block_size is not None and dst_block_size > 0:
|
|
591
|
+
dst_bb = self.project.factory.block(dst.addr, dst_block_size, opt_level=1)
|
|
592
|
+
try:
|
|
593
|
+
vex_block = dst_bb.vex
|
|
594
|
+
except SimTranslationError:
|
|
595
|
+
# failed to lift the block
|
|
596
|
+
continue
|
|
589
597
|
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
+
# If there is only one 'IMark' statement in vex --> the target block contains only direct jump
|
|
599
|
+
if (
|
|
600
|
+
len(vex_block.statements) == 1
|
|
601
|
+
and vex_block.statements[0].tag == "Ist_IMark"
|
|
602
|
+
and func.graph.out_degree(dst) == 1
|
|
603
|
+
):
|
|
604
|
+
for _, jmp_dst, jmp_data in func_graph.out_edges(dst, data=True):
|
|
605
|
+
subgraph.add_edge(dst, jmp_dst, **jmp_data)
|
|
598
606
|
|
|
599
607
|
return subgraph
|
|
600
608
|
|
|
@@ -412,6 +412,45 @@ class AMD64CCallRewriter(CCallRewriterBase):
|
|
|
412
412
|
)
|
|
413
413
|
return Expr.Convert(None, r.bits, ccall.bits, False, r, **ccall.tags)
|
|
414
414
|
|
|
415
|
+
elif (
|
|
416
|
+
cond_v == AMD64_CondTypes["CondNS"]
|
|
417
|
+
and op_v
|
|
418
|
+
in {
|
|
419
|
+
AMD64_OpTypes["G_CC_OP_LOGICB"],
|
|
420
|
+
AMD64_OpTypes["G_CC_OP_LOGICW"],
|
|
421
|
+
AMD64_OpTypes["G_CC_OP_LOGICL"],
|
|
422
|
+
AMD64_OpTypes["G_CC_OP_LOGICQ"],
|
|
423
|
+
}
|
|
424
|
+
and isinstance(dep_2, Expr.Const)
|
|
425
|
+
and dep_2.value == 0
|
|
426
|
+
):
|
|
427
|
+
# dep_1 >= 0
|
|
428
|
+
dep_1 = self._fix_size(
|
|
429
|
+
dep_1,
|
|
430
|
+
op_v,
|
|
431
|
+
AMD64_OpTypes["G_CC_OP_LOGICB"],
|
|
432
|
+
AMD64_OpTypes["G_CC_OP_LOGICW"],
|
|
433
|
+
AMD64_OpTypes["G_CC_OP_LOGICL"],
|
|
434
|
+
ccall.tags,
|
|
435
|
+
)
|
|
436
|
+
dep_2 = self._fix_size(
|
|
437
|
+
dep_2,
|
|
438
|
+
op_v,
|
|
439
|
+
AMD64_OpTypes["G_CC_OP_LOGICB"],
|
|
440
|
+
AMD64_OpTypes["G_CC_OP_LOGICW"],
|
|
441
|
+
AMD64_OpTypes["G_CC_OP_LOGICL"],
|
|
442
|
+
ccall.tags,
|
|
443
|
+
)
|
|
444
|
+
|
|
445
|
+
r = Expr.BinaryOp(
|
|
446
|
+
ccall.idx,
|
|
447
|
+
"CmpGE",
|
|
448
|
+
(dep_1, dep_2),
|
|
449
|
+
True,
|
|
450
|
+
**ccall.tags,
|
|
451
|
+
)
|
|
452
|
+
return Expr.Convert(None, r.bits, ccall.bits, False, r, **ccall.tags)
|
|
453
|
+
|
|
415
454
|
elif ccall.callee == "amd64g_calculate_rflags_c":
|
|
416
455
|
# calculate the carry flag
|
|
417
456
|
op = ccall.operands[0]
|
|
@@ -483,6 +483,9 @@ class Clinic(Analysis):
|
|
|
483
483
|
arg_vvars = self._create_function_argument_vvars(arg_list)
|
|
484
484
|
func_args = {arg_vvar for arg_vvar, _ in arg_vvars.values()}
|
|
485
485
|
|
|
486
|
+
# duplicate orphaned conditional jump blocks
|
|
487
|
+
ail_graph = self._duplicate_orphaned_cond_jumps(ail_graph)
|
|
488
|
+
|
|
486
489
|
# Transform the graph into partial SSA form
|
|
487
490
|
self._update_progress(35.0, text="Transforming to partial-SSA form")
|
|
488
491
|
ail_graph = self._transform_to_ssa_level0(ail_graph, func_args)
|
|
@@ -1892,6 +1895,19 @@ class Clinic(Analysis):
|
|
|
1892
1895
|
self._link_variables_on_expr(variable_manager, global_variables, block, stmt_idx, stmt, stmt.dst)
|
|
1893
1896
|
self._link_variables_on_expr(variable_manager, global_variables, block, stmt_idx, stmt, stmt.src)
|
|
1894
1897
|
|
|
1898
|
+
elif stmt_type is ailment.Stmt.CAS:
|
|
1899
|
+
for expr in [
|
|
1900
|
+
stmt.addr,
|
|
1901
|
+
stmt.data_lo,
|
|
1902
|
+
stmt.data_hi,
|
|
1903
|
+
stmt.expd_lo,
|
|
1904
|
+
stmt.expd_hi,
|
|
1905
|
+
stmt.old_lo,
|
|
1906
|
+
stmt.old_hi,
|
|
1907
|
+
]:
|
|
1908
|
+
if expr is not None:
|
|
1909
|
+
self._link_variables_on_expr(variable_manager, global_variables, block, stmt_idx, stmt, expr)
|
|
1910
|
+
|
|
1895
1911
|
elif stmt_type is ailment.Stmt.ConditionalJump:
|
|
1896
1912
|
self._link_variables_on_expr(variable_manager, global_variables, block, stmt_idx, stmt, stmt.condition)
|
|
1897
1913
|
|
|
@@ -2123,6 +2139,45 @@ class Clinic(Analysis):
|
|
|
2123
2139
|
|
|
2124
2140
|
return graph
|
|
2125
2141
|
|
|
2142
|
+
@staticmethod
|
|
2143
|
+
def _duplicate_orphaned_cond_jumps(ail_graph) -> networkx.DiGraph:
|
|
2144
|
+
"""
|
|
2145
|
+
Find conditional jumps that are orphaned (e.g., being the only instruction of the block). If these blocks have
|
|
2146
|
+
multiple predecessors, duplicate them to all predecessors. This is a workaround for cases where these
|
|
2147
|
+
conditional jumps rely on comparisons in more than one predecessor and we cannot resolve ccalls into
|
|
2148
|
+
comparisons.
|
|
2149
|
+
|
|
2150
|
+
This pass runs before any SSA transformations.
|
|
2151
|
+
|
|
2152
|
+
# 140017162 jz short 1400171e1
|
|
2153
|
+
"""
|
|
2154
|
+
|
|
2155
|
+
for block in list(ail_graph):
|
|
2156
|
+
if len(block.statements) > 1 and block.statements[0].ins_addr == block.statements[-1].ins_addr:
|
|
2157
|
+
preds = list(ail_graph.predecessors(block))
|
|
2158
|
+
if len(preds) > 1 and block not in preds:
|
|
2159
|
+
has_ccall = any(
|
|
2160
|
+
isinstance(stmt, ailment.Stmt.Assignment)
|
|
2161
|
+
and isinstance(stmt.src, ailment.Expr.VEXCCallExpression)
|
|
2162
|
+
for stmt in block.statements
|
|
2163
|
+
)
|
|
2164
|
+
if has_ccall:
|
|
2165
|
+
# duplicate this block to its predecessors!
|
|
2166
|
+
preds = sorted(preds, key=lambda x: x.addr)
|
|
2167
|
+
succs = sorted(ail_graph.successors(block), key=lambda x: x.addr)
|
|
2168
|
+
# FIXME: We should track block IDs globally and ensure block IDs do not collide
|
|
2169
|
+
block_idx_start = block.idx + 1 if block.idx is not None else 1
|
|
2170
|
+
for pred in preds[1:]:
|
|
2171
|
+
ail_graph.remove_edge(pred, block)
|
|
2172
|
+
new_block = block.copy()
|
|
2173
|
+
new_block.idx = block_idx_start
|
|
2174
|
+
block_idx_start += 1
|
|
2175
|
+
ail_graph.add_edge(pred, new_block)
|
|
2176
|
+
for succ in succs:
|
|
2177
|
+
ail_graph.add_edge(new_block, succ if succ is not block else new_block)
|
|
2178
|
+
|
|
2179
|
+
return ail_graph
|
|
2180
|
+
|
|
2126
2181
|
def _rewrite_ite_expressions(self, ail_graph):
|
|
2127
2182
|
cfg = self._cfg
|
|
2128
2183
|
for block in list(ail_graph):
|
|
@@ -2130,11 +2185,16 @@ class Clinic(Analysis):
|
|
|
2130
2185
|
continue
|
|
2131
2186
|
|
|
2132
2187
|
ite_ins_addrs = []
|
|
2188
|
+
cas_ins_addrs = set()
|
|
2133
2189
|
for stmt in block.statements:
|
|
2134
|
-
if (
|
|
2190
|
+
if isinstance(stmt, ailment.Stmt.CAS):
|
|
2191
|
+
# we do not rewrite ITE statements that are caused by CAS statements
|
|
2192
|
+
cas_ins_addrs.add(stmt.ins_addr)
|
|
2193
|
+
elif (
|
|
2135
2194
|
isinstance(stmt, ailment.Stmt.Assignment)
|
|
2136
2195
|
and isinstance(stmt.src, ailment.Expr.ITE)
|
|
2137
2196
|
and stmt.ins_addr not in ite_ins_addrs
|
|
2197
|
+
and stmt.ins_addr not in cas_ins_addrs
|
|
2138
2198
|
):
|
|
2139
2199
|
ite_ins_addrs.append(stmt.ins_addr)
|
|
2140
2200
|
|
|
@@ -2998,6 +3058,12 @@ class Clinic(Analysis):
|
|
|
2998
3058
|
and last_stmt.addr.offset < 0
|
|
2999
3059
|
and isinstance(last_stmt.data, ailment.Expr.Const)
|
|
3000
3060
|
and last_stmt.data.value == succ.addr
|
|
3061
|
+
) or (
|
|
3062
|
+
isinstance(last_stmt, ailment.Stmt.Assignment)
|
|
3063
|
+
and last_stmt.dst.was_stack
|
|
3064
|
+
and last_stmt.dst.stack_offset < 0
|
|
3065
|
+
and isinstance(last_stmt.src, ailment.Expr.Const)
|
|
3066
|
+
and last_stmt.src.value == succ.addr
|
|
3001
3067
|
):
|
|
3002
3068
|
# remove the statement that pushes the return address
|
|
3003
3069
|
node.statements = node.statements[:-1]
|
|
@@ -3031,6 +3097,12 @@ class Clinic(Analysis):
|
|
|
3031
3097
|
and last_stmt.addr.offset < 0
|
|
3032
3098
|
and isinstance(last_stmt.data, ailment.Expr.Const)
|
|
3033
3099
|
and last_stmt.data.value == succ.addr
|
|
3100
|
+
) or (
|
|
3101
|
+
isinstance(last_stmt, ailment.Stmt.Assignment)
|
|
3102
|
+
and last_stmt.dst.was_stack
|
|
3103
|
+
and last_stmt.dst.stack_offset < 0
|
|
3104
|
+
and isinstance(last_stmt.src, ailment.Expr.Const)
|
|
3105
|
+
and last_stmt.src.value == succ.addr
|
|
3034
3106
|
):
|
|
3035
3107
|
# remove the statement that pushes the return address
|
|
3036
3108
|
node.statements = node.statements[:-1]
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# pylint:disable=unused-argument,no-self-use
|
|
1
|
+
# pylint:disable=unused-argument,no-self-use,too-many-boolean-expressions
|
|
2
2
|
from __future__ import annotations
|
|
3
3
|
import logging
|
|
4
4
|
|
|
@@ -8,12 +8,14 @@ from ailment.statement import (
|
|
|
8
8
|
Assignment,
|
|
9
9
|
Store,
|
|
10
10
|
Call,
|
|
11
|
+
CAS,
|
|
11
12
|
Return,
|
|
12
13
|
ConditionalJump,
|
|
13
14
|
DirtyStatement,
|
|
14
15
|
WeakAssignment,
|
|
15
16
|
)
|
|
16
17
|
from ailment.expression import (
|
|
18
|
+
Atom,
|
|
17
19
|
Expression,
|
|
18
20
|
VirtualVariable,
|
|
19
21
|
Load,
|
|
@@ -121,6 +123,40 @@ class SimEngineDephiRewriting(SimEngineNostmtAIL[None, Expression | None, Statem
|
|
|
121
123
|
)
|
|
122
124
|
return None
|
|
123
125
|
|
|
126
|
+
def _handle_stmt_CAS(self, stmt: CAS) -> CAS | None:
|
|
127
|
+
new_addr = self._expr(stmt.addr)
|
|
128
|
+
new_data_lo = self._expr(stmt.data_lo)
|
|
129
|
+
new_data_hi = self._expr(stmt.data_hi) if stmt.data_hi is not None else None
|
|
130
|
+
new_expd_lo = self._expr(stmt.expd_lo)
|
|
131
|
+
new_expd_hi = self._expr(stmt.expd_hi) if stmt.expd_hi is not None else None
|
|
132
|
+
new_old_lo = self._expr(stmt.old_lo)
|
|
133
|
+
new_old_hi = self._expr(stmt.old_hi) if stmt.old_hi is not None else None
|
|
134
|
+
assert new_old_lo is None or isinstance(new_old_lo, Atom)
|
|
135
|
+
assert new_old_hi is None or isinstance(new_old_hi, Atom)
|
|
136
|
+
|
|
137
|
+
if (
|
|
138
|
+
new_addr is not None
|
|
139
|
+
or new_old_lo is not None
|
|
140
|
+
or new_old_hi is not None
|
|
141
|
+
or new_data_lo is not None
|
|
142
|
+
or new_data_hi is not None
|
|
143
|
+
or new_expd_lo is not None
|
|
144
|
+
or new_expd_hi is not None
|
|
145
|
+
):
|
|
146
|
+
return CAS(
|
|
147
|
+
stmt.idx,
|
|
148
|
+
stmt.addr if new_addr is None else new_addr,
|
|
149
|
+
stmt.data_lo if new_data_lo is None else new_data_lo,
|
|
150
|
+
stmt.data_hi if new_data_hi is None else new_data_hi,
|
|
151
|
+
stmt.expd_lo if new_expd_lo is None else new_expd_lo,
|
|
152
|
+
stmt.expd_hi if new_expd_hi is None else new_expd_hi,
|
|
153
|
+
stmt.old_lo if new_old_lo is None else new_old_lo,
|
|
154
|
+
stmt.old_hi if new_old_hi is None else new_old_hi,
|
|
155
|
+
stmt.endness,
|
|
156
|
+
**stmt.tags,
|
|
157
|
+
)
|
|
158
|
+
return None
|
|
159
|
+
|
|
124
160
|
def _handle_stmt_Store(self, stmt):
|
|
125
161
|
new_addr = self._expr(stmt.addr)
|
|
126
162
|
new_data = self._expr(stmt.data)
|
|
@@ -179,6 +215,7 @@ class SimEngineDephiRewriting(SimEngineNostmtAIL[None, Expression | None, Statem
|
|
|
179
215
|
dirty = self._expr(stmt.dirty)
|
|
180
216
|
if dirty is None or dirty is stmt.dirty:
|
|
181
217
|
return None
|
|
218
|
+
assert isinstance(dirty, DirtyExpression)
|
|
182
219
|
return DirtyStatement(stmt.idx, dirty, **stmt.tags)
|
|
183
220
|
|
|
184
221
|
def _handle_expr_Load(self, expr):
|
|
@@ -107,6 +107,12 @@ class ConditionConstantPropagation(OptimizationPass):
|
|
|
107
107
|
cconds_by_src[src] = []
|
|
108
108
|
cconds_by_src[src].append(ccond)
|
|
109
109
|
|
|
110
|
+
# eliminate sources with more than one in-edges; this is because the condition may not hold on all in-edges!
|
|
111
|
+
for src in list(cconds_by_src):
|
|
112
|
+
block = self._get_block(src[0], idx=src[1])
|
|
113
|
+
if block is not None and block in self._graph and self._graph.in_degree[block] > 1:
|
|
114
|
+
del cconds_by_src[src]
|
|
115
|
+
|
|
110
116
|
# eliminate conflicting conditions
|
|
111
117
|
for src in list(cconds_by_src):
|
|
112
118
|
cconds = cconds_by_src[src]
|
|
@@ -86,6 +86,11 @@ class SimplifierAILEngine(
|
|
|
86
86
|
|
|
87
87
|
return stmt
|
|
88
88
|
|
|
89
|
+
def _handle_stmt_CAS(self, stmt: ailment.statement.CAS) -> ailment.statement.CAS:
|
|
90
|
+
# we assume that we never have to deal with CAS statements at this point; they should have been rewritten to
|
|
91
|
+
# intrinsics
|
|
92
|
+
return stmt
|
|
93
|
+
|
|
89
94
|
def _handle_stmt_Store(self, stmt):
|
|
90
95
|
addr = self._expr(stmt.addr)
|
|
91
96
|
data = self._expr(stmt.data)
|
|
@@ -8,6 +8,7 @@ from .a_sub_a_div_const_mul_const import ASubADivConstMulConst
|
|
|
8
8
|
from .a_sub_a_shr_const_shr_const import ASubAShrConstShrConst
|
|
9
9
|
from .arm_cmpf import ARMCmpF
|
|
10
10
|
from .bswap import Bswap
|
|
11
|
+
from .cas_intrinsics import CASIntrinsics
|
|
11
12
|
from .coalesce_same_cascading_ifs import CoalesceSameCascadingIfs
|
|
12
13
|
from .constant_derefs import ConstantDereferences
|
|
13
14
|
from .const_mull_a_shift import ConstMullAShift
|
|
@@ -64,6 +65,7 @@ ALL_PEEPHOLE_OPTS: list[type[PeepholeOptimizationExprBase]] = [
|
|
|
64
65
|
ASubAShrConstShrConst,
|
|
65
66
|
ARMCmpF,
|
|
66
67
|
Bswap,
|
|
68
|
+
CASIntrinsics,
|
|
67
69
|
CoalesceSameCascadingIfs,
|
|
68
70
|
ConstantDereferences,
|
|
69
71
|
ConstMullAShift,
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# pylint:disable=arguments-differ,too-many-boolean-expressions
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from ailment.expression import BinaryOp, Load
|
|
5
|
+
from ailment.statement import CAS, ConditionalJump, Statement, Assignment, Call
|
|
6
|
+
|
|
7
|
+
from .base import PeepholeOptimizationMultiStmtBase
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
_INTRINSICS_NAMES = {
|
|
11
|
+
"xchg": {"Win32": "InterlockedExchange", "Linux": "atomic_exchange"},
|
|
12
|
+
"cmpxchg": {"Win32": "InterlockedCompareExchange", "Linux": "atomic_compare_exchange"},
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class CASIntrinsics(PeepholeOptimizationMultiStmtBase):
|
|
17
|
+
"""
|
|
18
|
+
Rewrite lock-prefixed instructions (or rather, their VEX/AIL forms) into intrinsic calls.
|
|
19
|
+
|
|
20
|
+
Case 1.
|
|
21
|
+
|
|
22
|
+
mov eax, r12d
|
|
23
|
+
0x140014b57: xchg eax, [0x14000365f8]
|
|
24
|
+
|
|
25
|
+
LABEL_0x140014b57:
|
|
26
|
+
CAS(0x1400365f8<64>, Conv(64->32, vvar_365{reg 112}), Load(addr=0x1400365f8<64>, size=4, endness=Iend_LE),
|
|
27
|
+
vvar_27756)
|
|
28
|
+
if (CasCmpNE(vvar_27756, g_1400365f8))
|
|
29
|
+
goto LABEL_0x140014b57;
|
|
30
|
+
|
|
31
|
+
=> vvar_27756 = _InterlockedExchange(0x1400365f8, vvar_365{reg 112})
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
Case 2.
|
|
35
|
+
|
|
36
|
+
lock cmpxchg cs:g_WarbirdSecureFunctionsLock, r14d
|
|
37
|
+
|
|
38
|
+
CAS(0x1400365f8<64>, 0x1<32>, 0x0<32>, vvar_27751)
|
|
39
|
+
|
|
40
|
+
=> var_27751 = _InterlockedCompareExchange(0x1400365f8, 0x1<32>, 0x0<32>)
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
__slots__ = ()
|
|
44
|
+
|
|
45
|
+
NAME = "Rewrite compare-and-swap instructions into intrinsics."
|
|
46
|
+
stmt_classes = ((CAS, ConditionalJump), (CAS, Statement))
|
|
47
|
+
|
|
48
|
+
def optimize(self, stmts: list[Statement], stmt_idx: int | None = None, block=None, **kwargs):
|
|
49
|
+
assert len(stmts) == 2
|
|
50
|
+
cas_stmt = stmts[0]
|
|
51
|
+
next_stmt = stmts[1]
|
|
52
|
+
assert isinstance(cas_stmt, CAS)
|
|
53
|
+
|
|
54
|
+
# TODO: We ignored endianness. Are there cases where the endianness is different from the host's?
|
|
55
|
+
|
|
56
|
+
if (
|
|
57
|
+
isinstance(next_stmt, ConditionalJump)
|
|
58
|
+
and isinstance(next_stmt.condition, BinaryOp)
|
|
59
|
+
and next_stmt.condition.op == "CasCmpNE"
|
|
60
|
+
and next_stmt.ins_addr == cas_stmt.ins_addr
|
|
61
|
+
):
|
|
62
|
+
addr = cas_stmt.addr
|
|
63
|
+
if (
|
|
64
|
+
isinstance(cas_stmt.expd_lo, Load)
|
|
65
|
+
and cas_stmt.expd_lo.addr.likes(addr)
|
|
66
|
+
and isinstance(next_stmt.condition.operands[1], Load)
|
|
67
|
+
and next_stmt.condition.operands[1].addr.likes(addr)
|
|
68
|
+
and cas_stmt.old_lo.likes(next_stmt.condition.operands[0])
|
|
69
|
+
and cas_stmt.old_hi is None
|
|
70
|
+
):
|
|
71
|
+
# TODO: Support cases where cas_stmt.old_hi is not None
|
|
72
|
+
# Case 1
|
|
73
|
+
call_expr = Call(
|
|
74
|
+
cas_stmt.idx,
|
|
75
|
+
self._get_instrincs_name("xchg"),
|
|
76
|
+
args=[addr, cas_stmt.data_lo],
|
|
77
|
+
bits=cas_stmt.bits,
|
|
78
|
+
ins_addr=cas_stmt.ins_addr,
|
|
79
|
+
)
|
|
80
|
+
stmt = Assignment(cas_stmt.idx, cas_stmt.old_lo, call_expr, **cas_stmt.tags)
|
|
81
|
+
return [stmt]
|
|
82
|
+
|
|
83
|
+
if next_stmt.ins_addr <= cas_stmt.ins_addr:
|
|
84
|
+
# avoid matching against statements prematurely
|
|
85
|
+
return None
|
|
86
|
+
|
|
87
|
+
if cas_stmt.old_hi is None:
|
|
88
|
+
# TODO: Support cases where cas_stmt.old_hi is not None
|
|
89
|
+
call_expr = Call(
|
|
90
|
+
cas_stmt.idx,
|
|
91
|
+
self._get_instrincs_name("cmpxchg"),
|
|
92
|
+
args=[
|
|
93
|
+
cas_stmt.addr,
|
|
94
|
+
cas_stmt.data_lo,
|
|
95
|
+
cas_stmt.expd_lo,
|
|
96
|
+
],
|
|
97
|
+
bits=cas_stmt.bits,
|
|
98
|
+
ins_addr=cas_stmt.ins_addr,
|
|
99
|
+
)
|
|
100
|
+
stmt = Assignment(cas_stmt.idx, cas_stmt.old_lo, call_expr, **cas_stmt.tags)
|
|
101
|
+
return [stmt, next_stmt]
|
|
102
|
+
|
|
103
|
+
return None
|
|
104
|
+
|
|
105
|
+
def _get_instrincs_name(self, mnemonic: str) -> str:
|
|
106
|
+
if mnemonic in _INTRINSICS_NAMES:
|
|
107
|
+
os = (
|
|
108
|
+
self.project.simos.name
|
|
109
|
+
if self.project is not None and self.project.simos is not None and self.project.simos.name is not None
|
|
110
|
+
else "Linux"
|
|
111
|
+
)
|
|
112
|
+
if os not in _INTRINSICS_NAMES[mnemonic]:
|
|
113
|
+
os = "Linux"
|
|
114
|
+
return _INTRINSICS_NAMES[mnemonic][os]
|
|
115
|
+
return mnemonic
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# pylint:disable=no-self-use,unused-argument
|
|
1
|
+
# pylint:disable=no-self-use,unused-argument,too-many-boolean-expressions
|
|
2
2
|
from __future__ import annotations
|
|
3
3
|
from typing import Literal
|
|
4
4
|
import logging
|
|
@@ -9,6 +9,7 @@ from ailment.manager import Manager
|
|
|
9
9
|
from ailment.statement import (
|
|
10
10
|
Statement,
|
|
11
11
|
Assignment,
|
|
12
|
+
CAS,
|
|
12
13
|
Store,
|
|
13
14
|
Call,
|
|
14
15
|
Return,
|
|
@@ -18,6 +19,7 @@ from ailment.statement import (
|
|
|
18
19
|
WeakAssignment,
|
|
19
20
|
)
|
|
20
21
|
from ailment.expression import (
|
|
22
|
+
Atom,
|
|
21
23
|
Expression,
|
|
22
24
|
Register,
|
|
23
25
|
VirtualVariable,
|
|
@@ -204,6 +206,40 @@ class SimEngineSSARewriting(
|
|
|
204
206
|
)
|
|
205
207
|
return None
|
|
206
208
|
|
|
209
|
+
def _handle_stmt_CAS(self, stmt: CAS) -> CAS | None:
|
|
210
|
+
new_addr = self._expr(stmt.addr)
|
|
211
|
+
new_data_lo = self._expr(stmt.data_lo)
|
|
212
|
+
new_data_hi = self._expr(stmt.data_hi) if stmt.data_hi is not None else None
|
|
213
|
+
new_expd_lo = self._expr(stmt.expd_lo)
|
|
214
|
+
new_expd_hi = self._expr(stmt.expd_hi) if stmt.expd_hi is not None else None
|
|
215
|
+
new_old_lo = self._expr(stmt.old_lo)
|
|
216
|
+
new_old_hi = self._expr(stmt.old_hi) if stmt.old_hi is not None else None
|
|
217
|
+
assert new_old_lo is None or isinstance(new_old_lo, Atom)
|
|
218
|
+
assert new_old_hi is None or isinstance(new_old_hi, Atom)
|
|
219
|
+
|
|
220
|
+
if (
|
|
221
|
+
new_addr is not None
|
|
222
|
+
or new_old_lo is not None
|
|
223
|
+
or new_old_hi is not None
|
|
224
|
+
or new_data_lo is not None
|
|
225
|
+
or new_data_hi is not None
|
|
226
|
+
or new_expd_lo is not None
|
|
227
|
+
or new_expd_hi is not None
|
|
228
|
+
):
|
|
229
|
+
return CAS(
|
|
230
|
+
stmt.idx,
|
|
231
|
+
stmt.addr if new_addr is None else new_addr,
|
|
232
|
+
stmt.data_lo if new_data_lo is None else new_data_lo,
|
|
233
|
+
stmt.data_hi if new_data_hi is None else new_data_hi,
|
|
234
|
+
stmt.expd_lo if new_expd_lo is None else new_expd_lo,
|
|
235
|
+
stmt.expd_hi if new_expd_hi is None else new_expd_hi,
|
|
236
|
+
stmt.old_lo if new_old_lo is None else new_old_lo,
|
|
237
|
+
stmt.old_hi if new_old_hi is None else new_old_hi,
|
|
238
|
+
stmt.endness,
|
|
239
|
+
**stmt.tags,
|
|
240
|
+
)
|
|
241
|
+
return None
|
|
242
|
+
|
|
207
243
|
def _handle_stmt_Store(self, stmt: Store) -> Store | Assignment | tuple[Assignment, ...] | None:
|
|
208
244
|
new_data = self._expr(stmt.data)
|
|
209
245
|
if stmt.guard is None:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
from collections import OrderedDict
|
|
3
3
|
|
|
4
|
-
from ailment.statement import Call, Store, ConditionalJump
|
|
4
|
+
from ailment.statement import Call, Store, ConditionalJump, CAS
|
|
5
5
|
from ailment.expression import Register, BinaryOp, StackBaseOffset, ITE, VEXCCallExpression, Tmp, DirtyExpression, Load
|
|
6
6
|
|
|
7
7
|
from angr.engines.light import SimEngineLightAIL
|
|
@@ -64,6 +64,15 @@ class SimEngineSSATraversal(SimEngineLightAIL[TraversalState, None, None, None])
|
|
|
64
64
|
self._expr(stmt.src)
|
|
65
65
|
self._expr(stmt.dst)
|
|
66
66
|
|
|
67
|
+
def _handle_stmt_CAS(self, stmt: CAS):
|
|
68
|
+
self._expr(stmt.addr)
|
|
69
|
+
self._expr(stmt.data_lo)
|
|
70
|
+
if stmt.data_hi is not None:
|
|
71
|
+
self._expr(stmt.data_hi)
|
|
72
|
+
self._expr(stmt.expd_lo)
|
|
73
|
+
if stmt.expd_hi is not None:
|
|
74
|
+
self._expr(stmt.expd_hi)
|
|
75
|
+
|
|
67
76
|
def _handle_stmt_Store(self, stmt: Store):
|
|
68
77
|
self._expr(stmt.addr)
|
|
69
78
|
self._expr(stmt.data)
|
|
@@ -143,6 +143,26 @@ class SimEngineRDAIL(
|
|
|
143
143
|
else:
|
|
144
144
|
l.warning("Unsupported type of Assignment dst %s.", type(dst).__name__)
|
|
145
145
|
|
|
146
|
+
def _handle_stmt_CAS(self, stmt: ailment.statement.CAS):
|
|
147
|
+
addr = self._expr(stmt.addr)
|
|
148
|
+
old_lo = stmt.old_lo
|
|
149
|
+
old_hi = stmt.old_hi
|
|
150
|
+
|
|
151
|
+
self._expr(stmt.data_lo)
|
|
152
|
+
if stmt.data_hi is not None:
|
|
153
|
+
self._expr(stmt.data_hi)
|
|
154
|
+
self._expr(stmt.expd_lo)
|
|
155
|
+
if stmt.expd_hi is not None:
|
|
156
|
+
self._expr(stmt.expd_hi)
|
|
157
|
+
|
|
158
|
+
if isinstance(old_lo, ailment.Tmp):
|
|
159
|
+
self.state.kill_and_add_definition(Tmp(old_lo.tmp_idx, old_lo.size), addr)
|
|
160
|
+
self.tmps[old_lo.tmp_idx] = self._top(old_lo.size)
|
|
161
|
+
|
|
162
|
+
if isinstance(old_hi, ailment.Tmp):
|
|
163
|
+
self.state.kill_and_add_definition(Tmp(old_hi.tmp_idx, old_hi.size), addr)
|
|
164
|
+
self.tmps[old_hi.tmp_idx] = self._top(old_hi.size)
|
|
165
|
+
|
|
146
166
|
def _handle_stmt_Store(self, stmt: ailment.Stmt.Store) -> None:
|
|
147
167
|
data = self._expr(stmt.data)
|
|
148
168
|
addr = self._expr_bv(stmt.addr)
|
angr/analyses/s_propagator.py
CHANGED
|
@@ -511,5 +511,33 @@ class SPropagatorAnalysis(Analysis):
|
|
|
511
511
|
}
|
|
512
512
|
return (block_1.addr, block_1.idx) in stmt_0_targets
|
|
513
513
|
|
|
514
|
+
@staticmethod
|
|
515
|
+
def vvar_dep_graph(blocks, vvar_def_locs, vvar_use_locs) -> networkx.DiGraph:
|
|
516
|
+
g = networkx.DiGraph()
|
|
517
|
+
|
|
518
|
+
for var_id in vvar_def_locs:
|
|
519
|
+
# where is it used?
|
|
520
|
+
for _, use_loc in vvar_use_locs[var_id]:
|
|
521
|
+
if isinstance(use_loc, ExternalCodeLocation):
|
|
522
|
+
g.add_edge(var_id, "ExternalCodeLocation")
|
|
523
|
+
continue
|
|
524
|
+
assert use_loc.block_addr is not None
|
|
525
|
+
assert use_loc.stmt_idx is not None
|
|
526
|
+
block = blocks[(use_loc.block_addr, use_loc.block_idx)]
|
|
527
|
+
stmt = block.statements[use_loc.stmt_idx]
|
|
528
|
+
if isinstance(stmt, Assignment):
|
|
529
|
+
if isinstance(stmt.dst, VirtualVariable):
|
|
530
|
+
g.add_edge(var_id, stmt.dst.varid)
|
|
531
|
+
else:
|
|
532
|
+
g.add_edge(var_id, f"Assignment@{stmt.ins_addr:#x}")
|
|
533
|
+
elif isinstance(stmt, Store):
|
|
534
|
+
# store to memory
|
|
535
|
+
g.add_edge(var_id, f"Store@{stmt.ins_addr:#x}")
|
|
536
|
+
else:
|
|
537
|
+
# other statements
|
|
538
|
+
g.add_edge(var_id, f"{stmt.__class__.__name__}@{stmt.ins_addr:#x}")
|
|
539
|
+
|
|
540
|
+
return g
|
|
541
|
+
|
|
514
542
|
|
|
515
543
|
register_analysis(SPropagatorAnalysis, "SPropagator")
|
|
@@ -791,7 +791,8 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
|
|
|
791
791
|
sp_adjusted = True
|
|
792
792
|
sp_v = state.regs[self.project.arch.sp_offset]
|
|
793
793
|
sp_v -= Constant(stmt.data.con.value)
|
|
794
|
-
state.put(self.project.arch.sp_offset, sp_v, force=True)
|
|
794
|
+
state.put(self.project.arch.sp_offset, sp_v, force=True) # sp -= OFFSET
|
|
795
|
+
state.put(stmt.offset, Constant(0), force=True) # rax = 0
|
|
795
796
|
break
|
|
796
797
|
|
|
797
798
|
callee_cleanups = [
|
|
@@ -115,6 +115,15 @@ class SimEngineVRAIL(
|
|
|
115
115
|
tc = typevars.Subtype(src.typevar, dst.typevar)
|
|
116
116
|
self.state.add_type_constraint(tc)
|
|
117
117
|
|
|
118
|
+
def _handle_stmt_CAS(self, stmt) -> None:
|
|
119
|
+
self._expr(stmt.addr)
|
|
120
|
+
self._expr(stmt.data_lo)
|
|
121
|
+
if stmt.data_hi is not None:
|
|
122
|
+
self._expr(stmt.data_hi)
|
|
123
|
+
self._expr(stmt.expd_lo)
|
|
124
|
+
if stmt.expd_hi is not None:
|
|
125
|
+
self._expr(stmt.expd_hi)
|
|
126
|
+
|
|
118
127
|
def _handle_stmt_Store(self, stmt: ailment.Stmt.Store):
|
|
119
128
|
addr_r = self._expr_bv(stmt.addr)
|
|
120
129
|
data = self._expr(stmt.data)
|
angr/engines/light/engine.py
CHANGED
|
@@ -533,6 +533,7 @@ class SimEngineLightAIL(
|
|
|
533
533
|
def __init__(self, *args, **kwargs):
|
|
534
534
|
self._stmt_handlers: dict[str, Callable[[Any], StmtDataType]] = {
|
|
535
535
|
"Assignment": self._handle_stmt_Assignment,
|
|
536
|
+
"CAS": self._handle_stmt_CAS,
|
|
536
537
|
"WeakAssignment": self._handle_stmt_WeakAssignment,
|
|
537
538
|
"Store": self._handle_stmt_Store,
|
|
538
539
|
"Jump": self._handle_stmt_Jump,
|
|
@@ -698,6 +699,9 @@ class SimEngineLightAIL(
|
|
|
698
699
|
@abstractmethod
|
|
699
700
|
def _handle_stmt_Assignment(self, stmt: ailment.statement.Assignment) -> StmtDataType: ...
|
|
700
701
|
|
|
702
|
+
@abstractmethod
|
|
703
|
+
def _handle_stmt_CAS(self, stmt: ailment.statement.CAS) -> StmtDataType: ...
|
|
704
|
+
|
|
701
705
|
@abstractmethod
|
|
702
706
|
def _handle_stmt_WeakAssignment(self, stmt: ailment.statement.WeakAssignment) -> StmtDataType: ...
|
|
703
707
|
|
|
@@ -1013,6 +1017,9 @@ class SimEngineNostmtAIL(
|
|
|
1013
1017
|
def _handle_stmt_WeakAssignment(self, stmt) -> StmtDataType | None:
|
|
1014
1018
|
pass
|
|
1015
1019
|
|
|
1020
|
+
def _handle_stmt_CAS(self, stmt) -> StmtDataType | None:
|
|
1021
|
+
pass
|
|
1022
|
+
|
|
1016
1023
|
def _handle_stmt_Store(self, stmt) -> StmtDataType | None:
|
|
1017
1024
|
pass
|
|
1018
1025
|
|
angr/lib/angr_native.dll
CHANGED
|
Binary file
|
|
@@ -68,6 +68,7 @@ class InspectMixinHigh(MemoryMixin):
|
|
|
68
68
|
if not inspect or not self.state.supports_inspect:
|
|
69
69
|
return super().load(addr, size=size, condition=condition, endness=endness, inspect=inspect, **kwargs)
|
|
70
70
|
|
|
71
|
+
r = None
|
|
71
72
|
if self.category == "reg":
|
|
72
73
|
self.state._inspect(
|
|
73
74
|
"reg_read",
|
|
@@ -76,7 +77,9 @@ class InspectMixinHigh(MemoryMixin):
|
|
|
76
77
|
reg_read_length=size,
|
|
77
78
|
reg_read_condition=condition,
|
|
78
79
|
reg_read_endness=endness,
|
|
80
|
+
reg_read_expr=None,
|
|
79
81
|
)
|
|
82
|
+
r = self.state._inspect_getattr("reg_read_expr", None)
|
|
80
83
|
addr = self.state._inspect_getattr("reg_read_offset", addr)
|
|
81
84
|
size = self.state._inspect_getattr("reg_read_length", size)
|
|
82
85
|
condition = self.state._inspect_getattr("reg_read_condition", condition)
|
|
@@ -89,13 +92,16 @@ class InspectMixinHigh(MemoryMixin):
|
|
|
89
92
|
mem_read_length=size,
|
|
90
93
|
mem_read_condition=condition,
|
|
91
94
|
mem_read_endness=endness,
|
|
95
|
+
mem_read_expr=None,
|
|
92
96
|
)
|
|
97
|
+
r = self.state._inspect_getattr("mem_read_expr", None)
|
|
93
98
|
addr = self.state._inspect_getattr("mem_read_address", addr)
|
|
94
99
|
size = self.state._inspect_getattr("mem_read_length", size)
|
|
95
100
|
condition = self.state._inspect_getattr("mem_read_condition", condition)
|
|
96
101
|
endness = self.state._inspect_getattr("mem_read_endness", endness)
|
|
97
102
|
|
|
98
|
-
r
|
|
103
|
+
if r is None:
|
|
104
|
+
r = super().load(addr, size=size, condition=condition, endness=endness, inspect=inspect, **kwargs)
|
|
99
105
|
|
|
100
106
|
if self.category == "mem":
|
|
101
107
|
self.state._inspect(
|
angr/utils/graph.py
CHANGED
|
@@ -734,13 +734,18 @@ class GraphUtils:
|
|
|
734
734
|
|
|
735
735
|
# find all strongly connected components in the graph
|
|
736
736
|
sccs = [scc for scc in networkx.strongly_connected_components(graph) if len(scc) > 1]
|
|
737
|
+
comp_indices = {}
|
|
738
|
+
for i, scc in enumerate(sccs):
|
|
739
|
+
for node in scc:
|
|
740
|
+
if node not in comp_indices:
|
|
741
|
+
comp_indices[node] = i
|
|
737
742
|
|
|
738
743
|
# collapse all strongly connected components
|
|
739
744
|
for src, dst in sorted(graph.edges(), key=GraphUtils._sort_edge):
|
|
740
|
-
scc_index =
|
|
745
|
+
scc_index = comp_indices.get(src)
|
|
741
746
|
if scc_index is not None:
|
|
742
747
|
src = SCCPlaceholder(scc_index)
|
|
743
|
-
scc_index =
|
|
748
|
+
scc_index = comp_indices.get(dst)
|
|
744
749
|
if scc_index is not None:
|
|
745
750
|
dst = SCCPlaceholder(scc_index)
|
|
746
751
|
|
|
@@ -781,13 +786,6 @@ class GraphUtils:
|
|
|
781
786
|
return ordered_nodes
|
|
782
787
|
return [n for n in ordered_nodes if n in set(nodes)]
|
|
783
788
|
|
|
784
|
-
@staticmethod
|
|
785
|
-
def _components_index_node(components, node):
|
|
786
|
-
for i, comp in enumerate(components):
|
|
787
|
-
if node in comp:
|
|
788
|
-
return i
|
|
789
|
-
return None
|
|
790
|
-
|
|
791
789
|
@staticmethod
|
|
792
790
|
def _append_scc(
|
|
793
791
|
graph: networkx.DiGraph,
|
|
@@ -810,9 +808,9 @@ class GraphUtils:
|
|
|
810
808
|
|
|
811
809
|
if loop_head_candidates is not None:
|
|
812
810
|
# find the first node that appears in loop_heads
|
|
813
|
-
|
|
811
|
+
loop_head_candidates_set = set(loop_head_candidates)
|
|
814
812
|
for n in scc:
|
|
815
|
-
if n in
|
|
813
|
+
if n in loop_head_candidates_set:
|
|
816
814
|
loop_head = n
|
|
817
815
|
break
|
|
818
816
|
|
|
@@ -844,7 +842,7 @@ class GraphUtils:
|
|
|
844
842
|
# pick the first one
|
|
845
843
|
loop_head = sorted(scc, key=GraphUtils._sort_node)[0]
|
|
846
844
|
|
|
847
|
-
subgraph: networkx.DiGraph = graph.subgraph(scc).copy()
|
|
845
|
+
subgraph: networkx.DiGraph = graph.subgraph(scc).copy() # type: ignore
|
|
848
846
|
for src, _ in list(subgraph.in_edges(loop_head)):
|
|
849
847
|
subgraph.remove_edge(src, loop_head)
|
|
850
848
|
|
angr/utils/ssa/__init__.py
CHANGED
|
@@ -8,7 +8,7 @@ import networkx
|
|
|
8
8
|
import archinfo
|
|
9
9
|
from ailment import Expression, Block
|
|
10
10
|
from ailment.expression import VirtualVariable, Const, Phi, Tmp, Load, Register, StackBaseOffset, DirtyExpression, ITE
|
|
11
|
-
from ailment.statement import Statement, Assignment, Call, Store
|
|
11
|
+
from ailment.statement import Statement, Assignment, Call, Store, CAS
|
|
12
12
|
from ailment.block_walker import AILBlockWalkerBase
|
|
13
13
|
|
|
14
14
|
from angr.knowledge_plugins.key_definitions import atoms
|
|
@@ -126,6 +126,11 @@ def get_tmp_deflocs(blocks) -> dict[CodeLocation, dict[atoms.Tmp, int]]:
|
|
|
126
126
|
for stmt_idx, stmt in enumerate(block.statements):
|
|
127
127
|
if isinstance(stmt, Assignment) and isinstance(stmt.dst, Tmp):
|
|
128
128
|
tmp_to_loc[codeloc][atoms.Tmp(stmt.dst.tmp_idx, stmt.dst.bits)] = stmt_idx
|
|
129
|
+
if isinstance(stmt, CAS):
|
|
130
|
+
if isinstance(stmt.old_lo, Tmp):
|
|
131
|
+
tmp_to_loc[codeloc][atoms.Tmp(stmt.old_lo.tmp_idx, stmt.old_lo.bits)] = stmt_idx
|
|
132
|
+
if stmt.old_hi is not None and isinstance(stmt.old_hi, Tmp):
|
|
133
|
+
tmp_to_loc[codeloc][atoms.Tmp(stmt.old_hi.tmp_idx, stmt.old_hi.bits)] = stmt_idx
|
|
129
134
|
|
|
130
135
|
return tmp_to_loc
|
|
131
136
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: angr
|
|
3
|
-
Version: 9.2.
|
|
3
|
+
Version: 9.2.152
|
|
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
|
License: BSD-2-Clause
|
|
6
6
|
Project-URL: Homepage, https://angr.io/
|
|
@@ -17,13 +17,13 @@ Description-Content-Type: text/markdown
|
|
|
17
17
|
License-File: LICENSE
|
|
18
18
|
Requires-Dist: cxxheaderparser
|
|
19
19
|
Requires-Dist: GitPython
|
|
20
|
-
Requires-Dist: ailment==9.2.
|
|
21
|
-
Requires-Dist: archinfo==9.2.
|
|
20
|
+
Requires-Dist: ailment==9.2.152
|
|
21
|
+
Requires-Dist: archinfo==9.2.152
|
|
22
22
|
Requires-Dist: cachetools
|
|
23
23
|
Requires-Dist: capstone==5.0.3
|
|
24
24
|
Requires-Dist: cffi>=1.14.0
|
|
25
|
-
Requires-Dist: claripy==9.2.
|
|
26
|
-
Requires-Dist: cle==9.2.
|
|
25
|
+
Requires-Dist: claripy==9.2.152
|
|
26
|
+
Requires-Dist: cle==9.2.152
|
|
27
27
|
Requires-Dist: mulpyplexer
|
|
28
28
|
Requires-Dist: networkx!=2.8.1,>=2.0
|
|
29
29
|
Requires-Dist: protobuf>=5.28.2
|
|
@@ -31,7 +31,7 @@ Requires-Dist: psutil
|
|
|
31
31
|
Requires-Dist: pycparser>=2.18
|
|
32
32
|
Requires-Dist: pydemumble
|
|
33
33
|
Requires-Dist: pyformlang
|
|
34
|
-
Requires-Dist: pyvex==9.2.
|
|
34
|
+
Requires-Dist: pyvex==9.2.152
|
|
35
35
|
Requires-Dist: rich>=13.1.0
|
|
36
36
|
Requires-Dist: sortedcontainers
|
|
37
37
|
Requires-Dist: sympy
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
angr/__init__.py,sha256=
|
|
1
|
+
angr/__init__.py,sha256=I7kOb1_OagvgZ0ckx5c3aCv2LU7e2Xm4vSrXEYT4tQE,9153
|
|
2
2
|
angr/__main__.py,sha256=AK9V6uPZ58UuTKmmiH_Kgn5pG9AvjnmJCPOku69A-WU,4993
|
|
3
3
|
angr/annocfg.py,sha256=0NIvcuCskwz45hbBzigUTAuCrYutjDMwEXtMJf0y0S0,10742
|
|
4
4
|
angr/blade.py,sha256=NhesOPloKJC1DQJRv_HBT18X7oNxK16JwAfNz2Lc1o0,15384
|
|
@@ -53,10 +53,10 @@ angr/analyses/pathfinder.py,sha256=_prNqmRUSuSt2ZCP8qbvNN7pw7mtM8pWr9IL0AO6XL8,1
|
|
|
53
53
|
angr/analyses/proximity_graph.py,sha256=-g7pNpbP2HQhKW3w1Eff23K8vAsgWWYoe3wVxRh3Lhk,16066
|
|
54
54
|
angr/analyses/reassembler.py,sha256=UXrDQNJtn4RUurpbIyMVpQ3AZ0VGVQZatoGHziEHvU0,98357
|
|
55
55
|
angr/analyses/s_liveness.py,sha256=K4soSrcQE9pIn7Yf2Lb3LZEu1ymuQVpWzOqLKunFDGQ,7974
|
|
56
|
-
angr/analyses/s_propagator.py,sha256=
|
|
56
|
+
angr/analyses/s_propagator.py,sha256=4MUmjo1aozCT-UeN9IMYlxtMjCoTM6hWwYaYTTjwvCQ,24904
|
|
57
57
|
angr/analyses/smc.py,sha256=0fvLPUpjlg6GCjYnfSqanXkGYlthmPwqMYR-ZYBHsbo,5075
|
|
58
58
|
angr/analyses/soot_class_hierarchy.py,sha256=R4xeacn-a_Q7PxSyj_stu5mnglZkPB5US5srKChX3mk,8740
|
|
59
|
-
angr/analyses/stack_pointer_tracker.py,sha256=
|
|
59
|
+
angr/analyses/stack_pointer_tracker.py,sha256=XcqCwqurI8x-N4mU_yfQWwIQNkj3fTtXYkUvw2PFIzw,37821
|
|
60
60
|
angr/analyses/static_hooker.py,sha256=AYJXoHtdq2m-MgpJbx4eur7wy7llrKXvsVM5NdPcKHU,1852
|
|
61
61
|
angr/analyses/veritesting.py,sha256=M6WNsbgiv4ScFPQIaFzujNFya66rQ9GSieaRLuC6RSo,25062
|
|
62
62
|
angr/analyses/vfg.py,sha256=04X_mup9P82bkQIXMju3_DBPPJB1TytA_7RR9uAu3tU,72868
|
|
@@ -64,7 +64,7 @@ angr/analyses/vsa_ddg.py,sha256=PNJ1vQNdHKYCcuXrsXZohtjrxznaWn6GZY2TfhBoY2Q,1613
|
|
|
64
64
|
angr/analyses/vtable.py,sha256=1Ed7jzr99rk9VgOGzcxBw_6GFqby5mIdSTGPqQPhcZM,3872
|
|
65
65
|
angr/analyses/xrefs.py,sha256=vs6cpVmwXHOmxrI9lJUwCRMYbPSqvIQXS5_fINMaOGI,10290
|
|
66
66
|
angr/analyses/calling_convention/__init__.py,sha256=bK5VS6AxT5l86LAhTL7l1HUT9IuvXG9x9ikbIohIFoE,194
|
|
67
|
-
angr/analyses/calling_convention/calling_convention.py,sha256=
|
|
67
|
+
angr/analyses/calling_convention/calling_convention.py,sha256=4QeL92Ec05cVArhunJc43rCgZD3ScHaasOmCmFfsOpU,46601
|
|
68
68
|
angr/analyses/calling_convention/fact_collector.py,sha256=dIQGPHHFDNGgAcx6w4cGmjsdxKEZyu_JFBc8tsk2kWw,28885
|
|
69
69
|
angr/analyses/calling_convention/utils.py,sha256=twkO073RvkkFXnOTc-KYQT1GKUtz0OPjxh0N6AWIriQ,2110
|
|
70
70
|
angr/analyses/cfg/__init__.py,sha256=-w8Vd6FD6rtjlQaQ7MxwmliFgS2zt-kZepAY4gHas04,446
|
|
@@ -107,7 +107,7 @@ angr/analyses/decompiler/block_io_finder.py,sha256=xMwG8Bi69OGNYVs0U0F4yxM8kEsny
|
|
|
107
107
|
angr/analyses/decompiler/block_similarity.py,sha256=SseCdWgh-kS9q_C_BRxlQ4OwCRQfg-9IyncxKXm_OG8,6849
|
|
108
108
|
angr/analyses/decompiler/block_simplifier.py,sha256=Di5UXgBIXp0pa3_ubHY4k9vj927xAFR3oCUZ16Q3WvE,14229
|
|
109
109
|
angr/analyses/decompiler/callsite_maker.py,sha256=ZjtLdxDCLS0WPqOik9bCek2LyuAtQNYA4V-yqGLeENo,23032
|
|
110
|
-
angr/analyses/decompiler/clinic.py,sha256=
|
|
110
|
+
angr/analyses/decompiler/clinic.py,sha256=GyRoxuRtsQDv6uzvTYJXZ-GYGOFa5etFTa03UzSuvTE,144399
|
|
111
111
|
angr/analyses/decompiler/condition_processor.py,sha256=61VDwVA1e-oKsv0N8kvh3c5QOdQixrkBZcm3RLuw7KU,52679
|
|
112
112
|
angr/analyses/decompiler/decompilation_cache.py,sha256=oNkeyrEXhyinrN7-fKeDEuGP6I_oAclGjRS4Aa36FoE,1488
|
|
113
113
|
angr/analyses/decompiler/decompilation_options.py,sha256=NDB67DI1L-stvJ4b1eQkfV26HgDJ_rG9-6PEv08G9-8,8195
|
|
@@ -128,7 +128,7 @@ angr/analyses/decompiler/sequence_walker.py,sha256=FsTQSMAm28xOdI0tbLS0UE51jDNBn
|
|
|
128
128
|
angr/analyses/decompiler/stack_item.py,sha256=4HpYE54sOnODzMLrNX1m-Mb9RlQYjojJqNKjjDz9jxU,814
|
|
129
129
|
angr/analyses/decompiler/utils.py,sha256=li5ijfTZpkRvDFh0zvLj90jyoBLDIgDapc9suc5OT6s,40443
|
|
130
130
|
angr/analyses/decompiler/ccall_rewriters/__init__.py,sha256=TrnykR5cGCXy85f8OApJBjWSQ8WQSzjrnpND2fODWG8,207
|
|
131
|
-
angr/analyses/decompiler/ccall_rewriters/amd64_ccalls.py,sha256=
|
|
131
|
+
angr/analyses/decompiler/ccall_rewriters/amd64_ccalls.py,sha256=2kw0H-QNTt03xEm_CKIx-WwXuh7JVMeNDlENdHvXxDU,24953
|
|
132
132
|
angr/analyses/decompiler/ccall_rewriters/rewriter_base.py,sha256=VbCENcybYUGrBD6U1Bp4nonNeEf05z_qhrpHBcyJw_4,496
|
|
133
133
|
angr/analyses/decompiler/ccall_rewriters/x86_ccalls.py,sha256=3osgrQXaq4ArvnJNOChvzaNtovahEjfEl7igPddh-0c,2499
|
|
134
134
|
angr/analyses/decompiler/counters/__init__.py,sha256=UT5K0cWgkVTAXZxy1qBBzrQip3YR2BOBVpxlAuNlt5o,480
|
|
@@ -141,13 +141,13 @@ angr/analyses/decompiler/dephication/dephication_base.py,sha256=9HdE_zKnakLSYJZr
|
|
|
141
141
|
angr/analyses/decompiler/dephication/graph_dephication.py,sha256=xjm_OrWgcuDIoDCEAhbW4xGzCHwOPw9ya8IroZH3qf4,2169
|
|
142
142
|
angr/analyses/decompiler/dephication/graph_rewriting.py,sha256=vhBGSu1VN2Yl7eethD5fiatHPOjGNs4JSov5x-SMFFw,3400
|
|
143
143
|
angr/analyses/decompiler/dephication/graph_vvar_mapping.py,sha256=Pd9CETFFRuCS72dAjYlH4tqq7hzzx4CiWTSR6giDjdE,13931
|
|
144
|
-
angr/analyses/decompiler/dephication/rewriting_engine.py,sha256=
|
|
144
|
+
angr/analyses/decompiler/dephication/rewriting_engine.py,sha256=x_sYM1gg56JqeQNOWNHoZ83AN-2h-nAwzgKBoeiotLQ,17646
|
|
145
145
|
angr/analyses/decompiler/dephication/seqnode_dephication.py,sha256=Y5On7C6glk3VztwbQFzKYlTTRf2vu9bB5fcRH3rbuhQ,4802
|
|
146
146
|
angr/analyses/decompiler/optimization_passes/__init__.py,sha256=y7ND9Wg98M5SoMGuOespoLeh1s-wFqKyeW2_4esDsiw,5236
|
|
147
147
|
angr/analyses/decompiler/optimization_passes/base_ptr_save_simplifier.py,sha256=4IITiIXYK1p1D1_ynr32kdnwKgJwj0Zs0jN4DZXtSgQ,5978
|
|
148
148
|
angr/analyses/decompiler/optimization_passes/call_stmt_rewriter.py,sha256=G1CEWo62dAMrm-3V4DfEDxT6kwXxuks10bcTtW9C_tA,1320
|
|
149
149
|
angr/analyses/decompiler/optimization_passes/code_motion.py,sha256=7o6lf-qahXv5H8jLqEASVXHaz-_PGo3r6l7qH5PbDtU,15343
|
|
150
|
-
angr/analyses/decompiler/optimization_passes/condition_constprop.py,sha256=
|
|
150
|
+
angr/analyses/decompiler/optimization_passes/condition_constprop.py,sha256=S4pxO6I9XFYMwVWHbJfqGxL56MLuweZ45y_0c6uEUy8,9111
|
|
151
151
|
angr/analyses/decompiler/optimization_passes/const_derefs.py,sha256=z9owQb8xNtIaVZddpFY1quHQOPEbBRnuQvmXEyiPHo0,10490
|
|
152
152
|
angr/analyses/decompiler/optimization_passes/const_prop_reverter.py,sha256=N8pDb1WmIETjF8qb47YZEX8EPDbGVs9HmWxHxF0bGi0,13243
|
|
153
153
|
angr/analyses/decompiler/optimization_passes/cross_jump_reverter.py,sha256=DzvgsAhU4GqvS0yN0Q2JezkJAuo2KInCgZ7fsB-ibz4,4021
|
|
@@ -155,7 +155,7 @@ angr/analyses/decompiler/optimization_passes/deadblock_remover.py,sha256=yqW4Ba4
|
|
|
155
155
|
angr/analyses/decompiler/optimization_passes/determine_load_sizes.py,sha256=oc_sz2NmGy5SZEpO2Alv9HOOORqpn4tPcmwzHbbPfGI,2231
|
|
156
156
|
angr/analyses/decompiler/optimization_passes/div_simplifier.py,sha256=fdMyGtykG9QepIUFL2_KN9lqsJFqHsVwNoJ1p8GlQ7A,18739
|
|
157
157
|
angr/analyses/decompiler/optimization_passes/eager_std_string_concatenation.py,sha256=YtzDxrc3k_aWwNbqN_U4QXDJBYhJ66TLRan1NFjs1V0,7072
|
|
158
|
-
angr/analyses/decompiler/optimization_passes/engine_base.py,sha256=
|
|
158
|
+
angr/analyses/decompiler/optimization_passes/engine_base.py,sha256=XsJPLc0SINzu_4vawmZTs28wGil0LpbSdg891zJ47p4,17532
|
|
159
159
|
angr/analyses/decompiler/optimization_passes/expr_op_swapper.py,sha256=PJMJ0INWiINSkv1eD5QsMJS81XtfuyKqoqe6NTkU120,4715
|
|
160
160
|
angr/analyses/decompiler/optimization_passes/flip_boolean_cmp.py,sha256=DFJjYsWf_PXNsUBX98Jh0JsWd3XXEdzbyhQrnEK8Fjw,5118
|
|
161
161
|
angr/analyses/decompiler/optimization_passes/inlined_string_transformation_simplifier.py,sha256=AyAJEiResDPqEzNDOb_CbNVJL0xmwgS2mdf3V49_Wng,25446
|
|
@@ -182,7 +182,7 @@ angr/analyses/decompiler/optimization_passes/duplication_reverter/duplication_re
|
|
|
182
182
|
angr/analyses/decompiler/optimization_passes/duplication_reverter/errors.py,sha256=dJq1F3jbGBFWi0zIUmDu8bwUAKPt-JyAh5iegY9rYuU,527
|
|
183
183
|
angr/analyses/decompiler/optimization_passes/duplication_reverter/similarity.py,sha256=V5NDaCYuzoJl-i74JKKV4t9FihXsnmNbki7_4SxJfwo,4406
|
|
184
184
|
angr/analyses/decompiler/optimization_passes/duplication_reverter/utils.py,sha256=szGv6t397GDMIZbn_VS14tAndKUBRF4jYETUMvlVnyU,5145
|
|
185
|
-
angr/analyses/decompiler/peephole_optimizations/__init__.py,sha256=
|
|
185
|
+
angr/analyses/decompiler/peephole_optimizations/__init__.py,sha256=jNsMxMq7NW8DlhzeArTocI9wBCp55YzR30kiJKuthTM,4859
|
|
186
186
|
angr/analyses/decompiler/peephole_optimizations/a_div_const_add_a_mul_n_div_const.py,sha256=4iCV9lkADp8lvcPk9vjTwyAG8j5HTBVO9NgBuB7bYhA,1636
|
|
187
187
|
angr/analyses/decompiler/peephole_optimizations/a_mul_const_div_shr_const.py,sha256=I_AznhlOZG_RDBOJrGsOamH2piOX7XgqxMSt5zX8HqQ,1374
|
|
188
188
|
angr/analyses/decompiler/peephole_optimizations/a_mul_const_sub_a.py,sha256=noCM779o2T8spHyQn27Wxc0B6efexlwqsNcH8aqls6c,1153
|
|
@@ -198,6 +198,7 @@ angr/analyses/decompiler/peephole_optimizations/basepointeroffset_and_mask.py,sh
|
|
|
198
198
|
angr/analyses/decompiler/peephole_optimizations/bitwise_or_to_logical_or.py,sha256=bozJ8fGjwYHjz4wS4P5S8y_I_h9WMvp1y9VSraWrBFM,1301
|
|
199
199
|
angr/analyses/decompiler/peephole_optimizations/bool_expr_xor_1.py,sha256=zyitj8lWSd1rfuVe4GDlr-HnqNAqi_uflvbM0J7WpAA,990
|
|
200
200
|
angr/analyses/decompiler/peephole_optimizations/bswap.py,sha256=70XLV0WLbWFgrYFcSReR6bVgJNoacejSlzR-uzJNEqY,6410
|
|
201
|
+
angr/analyses/decompiler/peephole_optimizations/cas_intrinsics.py,sha256=KdzY6alNq8TtGN2rx2zbVoRETxOqRWnvkZ381GSeYd8,4119
|
|
201
202
|
angr/analyses/decompiler/peephole_optimizations/cmpord_rewriter.py,sha256=4ERanmpCQq06B6RE-AO_-jgPloyP9Jg5wcUja9iA_gI,2652
|
|
202
203
|
angr/analyses/decompiler/peephole_optimizations/coalesce_adjacent_shrs.py,sha256=xZ129l0U5hoPXtczxZFUfZL59V7d0u2amQTO4phIpQU,1409
|
|
203
204
|
angr/analyses/decompiler/peephole_optimizations/coalesce_same_cascading_ifs.py,sha256=h3m9FIxsMpElPE3ecFfa0vnzuxwG5oJLNEqvLuMpMgI,1062
|
|
@@ -255,11 +256,11 @@ angr/analyses/decompiler/region_simplifiers/switch_cluster_simplifier.py,sha256=
|
|
|
255
256
|
angr/analyses/decompiler/region_simplifiers/switch_expr_simplifier.py,sha256=CngQ_LSACeEVIjuU6kIW2Y0ZSMJWFBwpL95Yh_7w3O4,3335
|
|
256
257
|
angr/analyses/decompiler/ssailification/__init__.py,sha256=zcHoI7e2El2RSU_bHTpQRd1XRLHOfFScG6f3cm5y_lQ,108
|
|
257
258
|
angr/analyses/decompiler/ssailification/rewriting.py,sha256=JW_StoLWuDs2LGyG8XjRUbzvQl7-7s2B8j1GKVaYoDo,15045
|
|
258
|
-
angr/analyses/decompiler/ssailification/rewriting_engine.py,sha256=
|
|
259
|
+
angr/analyses/decompiler/ssailification/rewriting_engine.py,sha256=WpgymMtZPYBPnyHZwzrcGrLHZ1juX0-NgPfPLOH937M,40905
|
|
259
260
|
angr/analyses/decompiler/ssailification/rewriting_state.py,sha256=L7apDXQLPiItuLdQFoQdut5RMUE8MRV1zRc3CsnuH6E,1883
|
|
260
261
|
angr/analyses/decompiler/ssailification/ssailification.py,sha256=GC8ue6Ywxtv0xG1XmxRUZz1HFpc19iOGk05yAsXRNvw,11035
|
|
261
262
|
angr/analyses/decompiler/ssailification/traversal.py,sha256=kZcua4SlDZ8u4EIkjc1Qh85EEYGX63PZ2NYPNq78Kzs,4011
|
|
262
|
-
angr/analyses/decompiler/ssailification/traversal_engine.py,sha256=
|
|
263
|
+
angr/analyses/decompiler/ssailification/traversal_engine.py,sha256=oXTf4Z3Q2vPSGAlAPxsSKrqqDVJ3vRcg6LpNK0qJ51k,11419
|
|
263
264
|
angr/analyses/decompiler/ssailification/traversal_state.py,sha256=RDs2mTc6GYnbMom2gBfNfNMcazKMSkhemEmse8uELTY,1558
|
|
264
265
|
angr/analyses/decompiler/structured_codegen/__init__.py,sha256=mxG4yruPAab8735wVgXZ1zu8qFPz-njKe0m5UcywE3o,633
|
|
265
266
|
angr/analyses/decompiler/structured_codegen/base.py,sha256=DEeNrBOC8AAJb-qFyUoYeX8fpHSPmAsutCDF-0UhaQ4,3782
|
|
@@ -341,7 +342,7 @@ angr/analyses/propagator/vex_vars.py,sha256=PRZOccwfdNRqEywPU-Mor3LGhakM5ItK1lRf
|
|
|
341
342
|
angr/analyses/reaching_definitions/__init__.py,sha256=lqe-S7Jl9ZlCGgJT0kUZtNMLzmySokDz72v0pQBHh4w,2060
|
|
342
343
|
angr/analyses/reaching_definitions/call_trace.py,sha256=osabHpgiV-dvifwej3mwOxckeZmG6JIXb6FDSCFzfVI,2170
|
|
343
344
|
angr/analyses/reaching_definitions/dep_graph.py,sha256=yOuYhAYQQSi2aN6GIWYkgzquqg0_u4TMBbKVEupJrL4,15554
|
|
344
|
-
angr/analyses/reaching_definitions/engine_ail.py,sha256=
|
|
345
|
+
angr/analyses/reaching_definitions/engine_ail.py,sha256=7w3I1mWwvk1FxPTbPS-UCR9Mdbn_YJ_Ltyvbo4Mx5hU,46623
|
|
345
346
|
angr/analyses/reaching_definitions/engine_vex.py,sha256=K486MkRAvTcTFD52pJtmjWbuVw7KURtGCEC0EDhJmRk,45601
|
|
346
347
|
angr/analyses/reaching_definitions/external_codeloc.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
347
348
|
angr/analyses/reaching_definitions/function_handler.py,sha256=ZwtBHoAAocYIIUYVjg51sG7ejdmTnXrQzbYlUgkDKXA,29105
|
|
@@ -373,7 +374,7 @@ angr/analyses/unpacker/obfuscation_detector.py,sha256=VWMHOO2UbyiGzRYzAq9yrU3WwZ
|
|
|
373
374
|
angr/analyses/unpacker/packing_detector.py,sha256=SO6aXR1gZkQ7w17AAv3C1-U2KAc0yL9OIQqjNOtVnuo,5331
|
|
374
375
|
angr/analyses/variable_recovery/__init__.py,sha256=eA1SHzfSx8aPufUdkvgMmBnbI6VDYKKMJklcOoCO7Ao,208
|
|
375
376
|
angr/analyses/variable_recovery/annotations.py,sha256=2va7cXnRHYqVqXeVt00QanxfAo3zanL4BkAcC0-Bk20,1438
|
|
376
|
-
angr/analyses/variable_recovery/engine_ail.py,sha256=
|
|
377
|
+
angr/analyses/variable_recovery/engine_ail.py,sha256=7kGaMVV_h4UAholuJYXazSk0a6CXk3p9H2cd8kQJ7wI,33991
|
|
377
378
|
angr/analyses/variable_recovery/engine_base.py,sha256=HFv-grnBD8ubSfDykn3-mLegVwn6T0SgCE3F7sgOxs8,52348
|
|
378
379
|
angr/analyses/variable_recovery/engine_vex.py,sha256=5Q2S1jAr7tALa0m0okqBHBe3cUePmJlnV1Grxos1xbo,21344
|
|
379
380
|
angr/analyses/variable_recovery/irsb_scanner.py,sha256=1dL2IC7fZGuRrhmcpa2Q-G666aMPmbM8zSzmIRpLNSY,5141
|
|
@@ -423,7 +424,7 @@ angr/engines/syscall.py,sha256=7wYTriURsDTTi3PEBj4u3ZWDi7RHBV-gRrxTRxwMAVk,2166
|
|
|
423
424
|
angr/engines/unicorn.py,sha256=fq2akQ4dVFAWqek0Yr4JTaTJWwp5vICiSQ7Sg4wuDJE,24533
|
|
424
425
|
angr/engines/light/__init__.py,sha256=-634kaOlcs8ZAsMNtOML7FXP3svyZIrJb3ikq0isFv0,494
|
|
425
426
|
angr/engines/light/data.py,sha256=3bvC-7e6isb4aGM7IrdpZelJDSWQ0KflC-oNpCDT7tI,21243
|
|
426
|
-
angr/engines/light/engine.py,sha256=
|
|
427
|
+
angr/engines/light/engine.py,sha256=EQCwbipfZ_FDA-17UX0FwdhgbeWuJUagbSEc672zZjw,46429
|
|
427
428
|
angr/engines/pcode/__init__.py,sha256=KWBnZnLYR3qANzXvxOt3XJq6cR57mQeNvugPBh7gr8s,195
|
|
428
429
|
angr/engines/pcode/behavior.py,sha256=ycNNTNHlCJFG6fPtOwRHbI3c0fkY5pYyPA--k3Kz-WY,29406
|
|
429
430
|
angr/engines/pcode/cc.py,sha256=brVglfSNnpDbRRcG-KO9EZ5NMMlmtDzP1n4kap7gKRY,3236
|
|
@@ -571,7 +572,7 @@ angr/knowledge_plugins/xrefs/__init__.py,sha256=5PhqVOtTZ27lCjJ9wp7akUeJydqILbyC
|
|
|
571
572
|
angr/knowledge_plugins/xrefs/xref.py,sha256=U2H1rfffp5EXoh0awlGxMBxA4K5MIwl3CXjV3Uih3tA,4856
|
|
572
573
|
angr/knowledge_plugins/xrefs/xref_manager.py,sha256=1n373rtV91xicAfSUresRigsZ6qCBhPOaJKrN_SW3QY,4157
|
|
573
574
|
angr/knowledge_plugins/xrefs/xref_types.py,sha256=LcQ9pD4E4XlC51Us49xiqAoGAFGpnCrpYO4mOzILiKI,308
|
|
574
|
-
angr/lib/angr_native.dll,sha256=
|
|
575
|
+
angr/lib/angr_native.dll,sha256=wUx_pnkKLbai0t3pIzwMCMvOy8kWlEyBlQ0GxUZ84DI,786432
|
|
575
576
|
angr/misc/__init__.py,sha256=FoUwjk1DhqlIsr2sBN0MlR8MnSOGQv9QJhxmq32RYuA,355
|
|
576
577
|
angr/misc/ansi.py,sha256=nPJHC0SKfqasMQZ0LxdmmIYojjmk4nr5jI6FrzoTwS0,811
|
|
577
578
|
angr/misc/autoimport.py,sha256=iZagpuPwZWczUTYIqs-JkDMQjftMqc_cchcm7OBFiEg,3450
|
|
@@ -1309,7 +1310,7 @@ angr/storage/memory_mixins/__init__.py,sha256=a4fY0pSAwgFALjPoDRJVHKt_oMCqia_Jqi
|
|
|
1309
1310
|
angr/storage/memory_mixins/actions_mixin.py,sha256=L9FlA0oyQ3gvEENfs5nvHhCYBeuKeyk_TyBh5sgiF64,3493
|
|
1310
1311
|
angr/storage/memory_mixins/address_concretization_mixin.py,sha256=NBIeezemaCSVludIoWzcciQit4C8E_vpK8nepcn-_u0,16535
|
|
1311
1312
|
angr/storage/memory_mixins/bvv_conversion_mixin.py,sha256=5owT0luMQkYGqAdP-CSOD821Mrg4REFG_9uuo8uaphA,2888
|
|
1312
|
-
angr/storage/memory_mixins/clouseau_mixin.py,sha256=
|
|
1313
|
+
angr/storage/memory_mixins/clouseau_mixin.py,sha256=3Jr8L5hS72oxVWc7at2Wd7plOb7EL5_lxHIUpoYYouM,5828
|
|
1313
1314
|
angr/storage/memory_mixins/conditional_store_mixin.py,sha256=OekCAvHcwnzUbRN5OTzlWL-H_x0gaFr-iB6xUdjDeVc,1025
|
|
1314
1315
|
angr/storage/memory_mixins/convenient_mappings_mixin.py,sha256=gLmp7bPvXRLGWFEHWuyAHQ1BdI5K9-47JhgdYyX2978,10290
|
|
1315
1316
|
angr/storage/memory_mixins/default_filler_mixin.py,sha256=9xwaHqJziT07dMtHtIU_ni0b_Wh9azPiTbPSnJ4ZS10,5992
|
|
@@ -1370,7 +1371,7 @@ angr/utils/enums_conv.py,sha256=fA6qeoRZ6Cj6gCIS_PZbP4PX7E8IybnYQ90OZGnBVrc,2746
|
|
|
1370
1371
|
angr/utils/env.py,sha256=aO4N2h7DUsUQtTgnC5J_oPHvMxJRur20m5UFSkmy4XU,398
|
|
1371
1372
|
angr/utils/formatting.py,sha256=OWzSfAlKcL09cEtcqxszYWHsRO9tih7hvXD2K9kUZc8,4343
|
|
1372
1373
|
angr/utils/funcid.py,sha256=Rd4r8juv2IpeMtCpPp4wxJoEZTnZZ1NsxdT42tvrKVA,6353
|
|
1373
|
-
angr/utils/graph.py,sha256=
|
|
1374
|
+
angr/utils/graph.py,sha256=KgmX5yCe2AxqfPgpXbXWwQ7j32AYNIuhMaNoESPt5Hw,31537
|
|
1374
1375
|
angr/utils/lazy_import.py,sha256=7Mx-y-aZFsXX9jNxvEcXT-rO8tL8rknb6D6RbSFOI1M,343
|
|
1375
1376
|
angr/utils/library.py,sha256=z3rFYm7ePZTXNZJuKiQrR0SnlbVb-OzkX0t0U44nXDk,7181
|
|
1376
1377
|
angr/utils/loader.py,sha256=5PtUlonkbqENNg3AMJ4YI3-g5dyyXJ0GP83SwO2dECY,1951
|
|
@@ -1380,12 +1381,12 @@ angr/utils/segment_list.py,sha256=DulfCDdNETMehseRey64FkjmORQvoSyVd9eRZ4sQ7tw,21
|
|
|
1380
1381
|
angr/utils/tagged_interval_map.py,sha256=rXKBuT14N23AAntpOKhZhmA-qqymnsvjpheFXoTRVRA,4417
|
|
1381
1382
|
angr/utils/timing.py,sha256=n-YZ86g0ZWmLhsoNvcimRpKzewR5hmquLZe6fagxlBw,2224
|
|
1382
1383
|
angr/utils/types.py,sha256=5EDtrusFLf1fIcMz8fgJiPPsUhpEm0bf_oqZ_PSRje0,1836
|
|
1383
|
-
angr/utils/ssa/__init__.py,sha256=
|
|
1384
|
+
angr/utils/ssa/__init__.py,sha256=ZUPoK7Y1k-7vQkvoYUYPMdjfGh4oC6W3VbWzV_udZHg,14020
|
|
1384
1385
|
angr/utils/ssa/tmp_uses_collector.py,sha256=rSpvMxBHzg-tmvhsfjn3iLyPEKzaZN-xpQrdslMq3J4,793
|
|
1385
1386
|
angr/utils/ssa/vvar_uses_collector.py,sha256=O2aNZeM5DL8qatyhYuMhgbYGFp6Onm2yr9pKq1wRjA0,1347
|
|
1386
|
-
angr-9.2.
|
|
1387
|
-
angr-9.2.
|
|
1388
|
-
angr-9.2.
|
|
1389
|
-
angr-9.2.
|
|
1390
|
-
angr-9.2.
|
|
1391
|
-
angr-9.2.
|
|
1387
|
+
angr-9.2.152.dist-info/licenses/LICENSE,sha256=PmWf0IlSz6Jjp9n7nyyBQA79Q5C2ma68LRykY1V3GF0,1456
|
|
1388
|
+
angr-9.2.152.dist-info/METADATA,sha256=556gj-ZsMs-vtRqqyHNUjP3mvC586trYO24-4_4lev8,5033
|
|
1389
|
+
angr-9.2.152.dist-info/WHEEL,sha256=jcBIzWeetTfKWoqh1t37_3WRou9luDyd3A1574l0jA4,97
|
|
1390
|
+
angr-9.2.152.dist-info/entry_points.txt,sha256=Vjh1C8PMyr5dZFMnik5WkEP01Uwr2T73I3a6N32sgQU,44
|
|
1391
|
+
angr-9.2.152.dist-info/top_level.txt,sha256=dKw0KWTbwLXytFvv15oAAG4sUs3ey47tt6DorJG9-hw,5
|
|
1392
|
+
angr-9.2.152.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|