angr 9.2.137__py3-none-macosx_10_9_x86_64.whl → 9.2.138__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/cfg/cfg_fast.py +3 -0
- angr/analyses/complete_calling_conventions.py +3 -3
- angr/analyses/decompiler/decompilation_options.py +10 -0
- angr/analyses/decompiler/optimization_passes/flip_boolean_cmp.py +2 -2
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_nots.py +21 -3
- angr/analyses/s_propagator.py +104 -26
- angr/lib/angr_native.dylib +0 -0
- angr/procedures/glibc/__libc_start_main.py +10 -3
- angr/utils/ssa/__init__.py +14 -1
- {angr-9.2.137.dist-info → angr-9.2.138.dist-info}/METADATA +6 -6
- {angr-9.2.137.dist-info → angr-9.2.138.dist-info}/RECORD +16 -16
- {angr-9.2.137.dist-info → angr-9.2.138.dist-info}/LICENSE +0 -0
- {angr-9.2.137.dist-info → angr-9.2.138.dist-info}/WHEEL +0 -0
- {angr-9.2.137.dist-info → angr-9.2.138.dist-info}/entry_points.txt +0 -0
- {angr-9.2.137.dist-info → angr-9.2.138.dist-info}/top_level.txt +0 -0
angr/__init__.py
CHANGED
angr/analyses/cfg/cfg_fast.py
CHANGED
|
@@ -2103,6 +2103,9 @@ class CFGFast(ForwardAnalysis[CFGNode, CFGNode, CFGJob, int], CFGBase): # pylin
|
|
|
2103
2103
|
addr_ = addr_.concrete_value
|
|
2104
2104
|
if not isinstance(addr_, int):
|
|
2105
2105
|
continue
|
|
2106
|
+
# is it valid?
|
|
2107
|
+
if self.project.loader.find_object_containing(addr_) is None:
|
|
2108
|
+
continue
|
|
2106
2109
|
entries += self._create_jobs(
|
|
2107
2110
|
addr_,
|
|
2108
2111
|
jumpkind,
|
|
@@ -17,7 +17,7 @@ from angr.utils.graph import GraphUtils
|
|
|
17
17
|
from angr.simos import SimWindows
|
|
18
18
|
from angr.utils.mp import mp_context, Initializer
|
|
19
19
|
from angr.knowledge_plugins.cfg import CFGModel
|
|
20
|
-
from . import Analysis, register_analysis, VariableRecoveryFast, CallingConventionAnalysis, FactCollector
|
|
20
|
+
from . import Analysis, register_analysis, VariableRecoveryFast, CallingConventionAnalysis, FactCollector, CFGFast
|
|
21
21
|
|
|
22
22
|
if TYPE_CHECKING:
|
|
23
23
|
from angr.calling_conventions import SimCC
|
|
@@ -56,7 +56,7 @@ class CompleteCallingConventionsAnalysis(Analysis):
|
|
|
56
56
|
recover_variables=False,
|
|
57
57
|
low_priority=False,
|
|
58
58
|
force=False,
|
|
59
|
-
cfg: CFGModel | None = None,
|
|
59
|
+
cfg: CFGFast | CFGModel | None = None,
|
|
60
60
|
analyze_callsites: bool = False,
|
|
61
61
|
skip_signature_matched_functions: bool = False,
|
|
62
62
|
max_function_blocks: int | None = None,
|
|
@@ -89,7 +89,7 @@ class CompleteCallingConventionsAnalysis(Analysis):
|
|
|
89
89
|
self._recover_variables = recover_variables
|
|
90
90
|
self._low_priority = low_priority
|
|
91
91
|
self._force = force
|
|
92
|
-
self._cfg = cfg
|
|
92
|
+
self._cfg: CFGModel | None = cfg.model if isinstance(cfg, CFGFast) else cfg
|
|
93
93
|
self._analyze_callsites = analyze_callsites
|
|
94
94
|
self._skip_signature_matched_functions = skip_signature_matched_functions
|
|
95
95
|
self._max_function_blocks = max_function_blocks
|
|
@@ -229,6 +229,16 @@ options = [
|
|
|
229
229
|
default_value=True,
|
|
230
230
|
clears_cache=True,
|
|
231
231
|
),
|
|
232
|
+
O(
|
|
233
|
+
"Show block addresses",
|
|
234
|
+
"Show block addresses as comments",
|
|
235
|
+
bool,
|
|
236
|
+
"codegen",
|
|
237
|
+
"display_block_addrs",
|
|
238
|
+
category="Display",
|
|
239
|
+
default_value=False,
|
|
240
|
+
clears_cache=True,
|
|
241
|
+
),
|
|
232
242
|
O(
|
|
233
243
|
"Multi-expression statements generation",
|
|
234
244
|
"Should the structuring algorithm generate multi-expression statements? If so, under what conditions?",
|
|
@@ -17,7 +17,7 @@ class FlipBooleanWalker(SequenceWalker):
|
|
|
17
17
|
Uses the flip_size to determine when to flip the condition on large if-statement bodies.
|
|
18
18
|
"""
|
|
19
19
|
|
|
20
|
-
def __init__(self, graph, flip_size=
|
|
20
|
+
def __init__(self, graph, flip_size=9, last_node=None):
|
|
21
21
|
super().__init__()
|
|
22
22
|
self._graph = graph
|
|
23
23
|
self._last_node = last_node
|
|
@@ -77,7 +77,7 @@ class FlipBooleanCmp(SequenceOptimizationPass):
|
|
|
77
77
|
NAME = "Flip small ret booleans"
|
|
78
78
|
DESCRIPTION = "When false node has no successors, flip condition so else scope can be simplified later"
|
|
79
79
|
|
|
80
|
-
def __init__(self, func, flip_size=
|
|
80
|
+
def __init__(self, func, flip_size=9, **kwargs):
|
|
81
81
|
super().__init__(func, **kwargs)
|
|
82
82
|
self._graph = kwargs.get("graph")
|
|
83
83
|
self._flip_size = flip_size
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
from ailment.expression import BinaryOp, UnaryOp
|
|
3
4
|
|
|
4
5
|
from .base import PeepholeOptimizationExprBase
|
|
5
6
|
|
|
@@ -12,7 +13,24 @@ class RemoveRedundantNots(PeepholeOptimizationExprBase):
|
|
|
12
13
|
|
|
13
14
|
def optimize(self, expr: UnaryOp, **kwargs):
|
|
14
15
|
# Not(Not(expr)) ==> expr
|
|
15
|
-
if expr.op == "Not"
|
|
16
|
-
|
|
16
|
+
if expr.op == "Not":
|
|
17
|
+
if isinstance(expr.operand, UnaryOp):
|
|
18
|
+
if expr.operand.op == "Not":
|
|
19
|
+
return expr.operand.operand
|
|
20
|
+
elif isinstance(expr.operand, BinaryOp) and expr.operand.op in BinaryOp.COMPARISON_NEGATION:
|
|
21
|
+
inner = expr.operand
|
|
22
|
+
negated_op = BinaryOp.COMPARISON_NEGATION[expr.operand.op]
|
|
23
|
+
return BinaryOp(
|
|
24
|
+
inner.idx,
|
|
25
|
+
negated_op,
|
|
26
|
+
inner.operands,
|
|
27
|
+
inner.signed,
|
|
28
|
+
bits=inner.bits,
|
|
29
|
+
floating_point=inner.floating_point,
|
|
30
|
+
rounding_mode=inner.rounding_mode,
|
|
31
|
+
vector_count=inner.vector_count,
|
|
32
|
+
vector_size=inner.vector_size,
|
|
33
|
+
**inner.tags,
|
|
34
|
+
)
|
|
17
35
|
|
|
18
36
|
return None
|
angr/analyses/s_propagator.py
CHANGED
|
@@ -4,6 +4,8 @@ import contextlib
|
|
|
4
4
|
from collections.abc import Mapping
|
|
5
5
|
from collections import defaultdict
|
|
6
6
|
|
|
7
|
+
import networkx
|
|
8
|
+
|
|
7
9
|
from ailment.block import Block
|
|
8
10
|
from ailment.expression import (
|
|
9
11
|
Const,
|
|
@@ -22,6 +24,8 @@ from angr.analyses import Analysis, register_analysis
|
|
|
22
24
|
from angr.utils.ssa import (
|
|
23
25
|
get_vvar_uselocs,
|
|
24
26
|
get_vvar_deflocs,
|
|
27
|
+
has_ite_expr,
|
|
28
|
+
has_ite_stmt,
|
|
25
29
|
is_phi_assignment,
|
|
26
30
|
is_const_assignment,
|
|
27
31
|
is_const_and_vvar_assignment,
|
|
@@ -51,7 +55,7 @@ class SPropagatorAnalysis(Analysis):
|
|
|
51
55
|
def __init__( # pylint: disable=too-many-positional-arguments
|
|
52
56
|
self,
|
|
53
57
|
subject: Block | Function,
|
|
54
|
-
func_graph=None,
|
|
58
|
+
func_graph: networkx.DiGraph | None = None,
|
|
55
59
|
only_consts: bool = True,
|
|
56
60
|
stack_pointer_tracker=None,
|
|
57
61
|
func_args: set[VirtualVariable] | None = None,
|
|
@@ -140,6 +144,9 @@ class SPropagatorAnalysis(Analysis):
|
|
|
140
144
|
if isinstance(defloc, ExternalCodeLocation):
|
|
141
145
|
continue
|
|
142
146
|
|
|
147
|
+
assert defloc.block_addr is not None
|
|
148
|
+
assert defloc.stmt_idx is not None
|
|
149
|
+
|
|
143
150
|
block = blocks[(defloc.block_addr, defloc.block_idx)]
|
|
144
151
|
stmt = block.statements[defloc.stmt_idx]
|
|
145
152
|
r, v = is_const_assignment(stmt)
|
|
@@ -155,32 +162,45 @@ class SPropagatorAnalysis(Analysis):
|
|
|
155
162
|
if v is not None:
|
|
156
163
|
src_varids = {vvar.varid if vvar is not None else None for _, vvar in v.src_and_vvars}
|
|
157
164
|
if None not in src_varids and all(varid in const_vvars for varid in src_varids):
|
|
165
|
+
all_int_src_varids: set[int] = {varid for varid in src_varids if varid is not None}
|
|
158
166
|
src_values = {
|
|
159
167
|
(
|
|
160
168
|
(const_vvars[varid].value, const_vvars[varid].bits)
|
|
161
169
|
if isinstance(const_vvars[varid], Const)
|
|
162
170
|
else const_vvars[varid]
|
|
163
171
|
)
|
|
164
|
-
for varid in
|
|
172
|
+
for varid in all_int_src_varids
|
|
165
173
|
}
|
|
166
174
|
if len(src_values) == 1:
|
|
167
175
|
# replace it!
|
|
168
|
-
const_value = const_vvars[next(iter(
|
|
176
|
+
const_value = const_vvars[next(iter(all_int_src_varids))]
|
|
169
177
|
const_vvars[vvar.varid] = const_value
|
|
170
178
|
for vvar_at_use, useloc in vvar_uselocs[vvar.varid]:
|
|
171
179
|
replacements[useloc][vvar_at_use] = const_value
|
|
172
180
|
|
|
173
181
|
if self.mode == "function" and vvar.varid in vvar_uselocs:
|
|
182
|
+
if len(vvar_uselocs[vvar.varid]) <= 2 and isinstance(stmt, Assignment) and isinstance(stmt.src, Load):
|
|
183
|
+
# do we want to propagate this Load expression if it's used for less than twice?
|
|
184
|
+
# it's often seen in the following pattern, where propagation will be beneficial:
|
|
185
|
+
# v0 = Load(...)
|
|
186
|
+
# if (!v0) {
|
|
187
|
+
# v1 = v0 + 1;
|
|
188
|
+
# }
|
|
189
|
+
can_replace = True
|
|
190
|
+
for _, vvar_useloc in vvar_uselocs[vvar.varid]:
|
|
191
|
+
if self.has_store_stmt_in_between(blocks, defloc, vvar_useloc):
|
|
192
|
+
can_replace = False
|
|
193
|
+
|
|
194
|
+
if can_replace:
|
|
195
|
+
# we can propagate this load because there is no store between its def and use
|
|
196
|
+
for vvar_used, vvar_useloc in vvar_uselocs[vvar.varid]:
|
|
197
|
+
replacements[vvar_useloc][vvar_used] = stmt.src
|
|
198
|
+
continue
|
|
199
|
+
|
|
174
200
|
if len(vvar_uselocs[vvar.varid]) == 1:
|
|
175
201
|
vvar_used, vvar_useloc = next(iter(vvar_uselocs[vvar.varid]))
|
|
176
|
-
if (
|
|
177
|
-
|
|
178
|
-
and vvar_useloc.block_addr == defloc.block_addr
|
|
179
|
-
and vvar_useloc.block_idx == defloc.block_idx
|
|
180
|
-
and not any(
|
|
181
|
-
isinstance(stmt_, Store)
|
|
182
|
-
for stmt_ in block.statements[defloc.stmt_idx + 1 : vvar_useloc.stmt_idx]
|
|
183
|
-
)
|
|
202
|
+
if is_const_vvar_load_assignment(stmt) and not self.has_store_stmt_in_between(
|
|
203
|
+
blocks, defloc, vvar_useloc
|
|
184
204
|
):
|
|
185
205
|
# we can propagate this load because there is no store between its def and use
|
|
186
206
|
replacements[vvar_useloc][vvar_used] = stmt.src
|
|
@@ -189,6 +209,8 @@ class SPropagatorAnalysis(Analysis):
|
|
|
189
209
|
if is_const_and_vvar_assignment(stmt):
|
|
190
210
|
# if the useloc is a phi assignment statement, ensure that stmt.src is the same as the phi
|
|
191
211
|
# variable
|
|
212
|
+
assert vvar_useloc.block_addr is not None
|
|
213
|
+
assert vvar_useloc.stmt_idx is not None
|
|
192
214
|
useloc_stmt = blocks[(vvar_useloc.block_addr, vvar_useloc.block_idx)].statements[
|
|
193
215
|
vvar_useloc.stmt_idx
|
|
194
216
|
]
|
|
@@ -203,21 +225,31 @@ class SPropagatorAnalysis(Analysis):
|
|
|
203
225
|
replacements[vvar_useloc][vvar_used] = stmt.src
|
|
204
226
|
continue
|
|
205
227
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
}
|
|
213
|
-
)
|
|
214
|
-
== 1
|
|
215
|
-
):
|
|
228
|
+
else:
|
|
229
|
+
non_exitsite_uselocs = [
|
|
230
|
+
loc
|
|
231
|
+
for _, loc in vvar_uselocs[vvar.varid]
|
|
232
|
+
if (loc.block_addr, loc.block_idx, loc.stmt_idx) not in (retsites | jumpsites)
|
|
233
|
+
]
|
|
216
234
|
if is_const_and_vvar_assignment(stmt):
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
235
|
+
if len(non_exitsite_uselocs) == 1:
|
|
236
|
+
# this vvar is used once if we exclude its uses at ret sites or jump sites. we can
|
|
237
|
+
# propagate it
|
|
238
|
+
for vvar_used, vvar_useloc in vvar_uselocs[vvar.varid]:
|
|
239
|
+
replacements[vvar_useloc][vvar_used] = stmt.src
|
|
240
|
+
continue
|
|
241
|
+
|
|
242
|
+
if len(set(non_exitsite_uselocs)) == 1 and not has_ite_expr(stmt.src):
|
|
243
|
+
useloc = non_exitsite_uselocs[0]
|
|
244
|
+
assert useloc.block_addr is not None
|
|
245
|
+
assert useloc.stmt_idx is not None
|
|
246
|
+
useloc_stmt = blocks[(useloc.block_addr, useloc.block_idx)].statements[useloc.stmt_idx]
|
|
247
|
+
if stmt.src.depth <= 3 and not has_ite_stmt(useloc_stmt):
|
|
248
|
+
# remove duplicate use locs (e.g., if the variable is used multiple times by the same
|
|
249
|
+
# statement) - but ensure stmt is simple enough
|
|
250
|
+
for vvar_used, vvar_useloc in vvar_uselocs[vvar.varid]:
|
|
251
|
+
replacements[vvar_useloc][vvar_used] = stmt.src
|
|
252
|
+
continue
|
|
221
253
|
|
|
222
254
|
# special logic for global variables: if it's used once or multiple times, and the variable is never
|
|
223
255
|
# updated before it's used, we will propagate the load
|
|
@@ -226,7 +258,11 @@ class SPropagatorAnalysis(Analysis):
|
|
|
226
258
|
# unpack conversions
|
|
227
259
|
while isinstance(stmt_src, Convert):
|
|
228
260
|
stmt_src = stmt_src.operand
|
|
229
|
-
if
|
|
261
|
+
if (
|
|
262
|
+
isinstance(stmt_src, Load)
|
|
263
|
+
and isinstance(stmt_src.addr, Const)
|
|
264
|
+
and isinstance(stmt_src.addr.value, int)
|
|
265
|
+
):
|
|
230
266
|
gv_updated = False
|
|
231
267
|
for _vvar_used, vvar_useloc in vvar_uselocs[vvar.varid]:
|
|
232
268
|
gv_updated |= self.is_global_variable_updated(
|
|
@@ -286,6 +322,8 @@ class SPropagatorAnalysis(Analysis):
|
|
|
286
322
|
for block_loc, tmp_and_uses in tmp_uselocs.items():
|
|
287
323
|
for tmp_atom, tmp_uses in tmp_and_uses.items():
|
|
288
324
|
# take a look at the definition and propagate the definition if supported
|
|
325
|
+
assert block_loc.block_addr is not None
|
|
326
|
+
|
|
289
327
|
block = blocks[(block_loc.block_addr, block_loc.block_idx)]
|
|
290
328
|
tmp_def_stmtidx = tmp_deflocs[block_loc][tmp_atom]
|
|
291
329
|
|
|
@@ -350,6 +388,8 @@ class SPropagatorAnalysis(Analysis):
|
|
|
350
388
|
|
|
351
389
|
start_stmt_idx = defloc.stmt_idx if block is defblock else 0 # inclusive
|
|
352
390
|
end_stmt_idx = useloc.stmt_idx if block is useblock else len(block.statements) # exclusive
|
|
391
|
+
assert start_stmt_idx is not None
|
|
392
|
+
assert end_stmt_idx is not None
|
|
353
393
|
|
|
354
394
|
for idx in range(start_stmt_idx, end_stmt_idx):
|
|
355
395
|
stmt = block.statements[idx]
|
|
@@ -380,5 +420,43 @@ class SPropagatorAnalysis(Analysis):
|
|
|
380
420
|
|
|
381
421
|
return False
|
|
382
422
|
|
|
423
|
+
def has_store_stmt_in_between(
|
|
424
|
+
self, blocks: dict[tuple[int, int | None], Block], defloc: CodeLocation, useloc: CodeLocation
|
|
425
|
+
) -> bool:
|
|
426
|
+
assert defloc.block_addr is not None
|
|
427
|
+
assert defloc.stmt_idx is not None
|
|
428
|
+
assert useloc.block_addr is not None
|
|
429
|
+
assert useloc.stmt_idx is not None
|
|
430
|
+
assert self.func_graph is not None
|
|
431
|
+
|
|
432
|
+
use_block = blocks[(useloc.block_addr, useloc.block_idx)]
|
|
433
|
+
def_block = blocks[(defloc.block_addr, defloc.block_idx)]
|
|
434
|
+
|
|
435
|
+
# traverse the graph, go from use_block until we reach def_block, and look for Store statements
|
|
436
|
+
seen = {use_block}
|
|
437
|
+
queue = [use_block]
|
|
438
|
+
while queue:
|
|
439
|
+
block = queue.pop(0)
|
|
440
|
+
|
|
441
|
+
starting_stmt_idx, ending_stmt_idx = 0, len(block.statements)
|
|
442
|
+
if block is def_block:
|
|
443
|
+
starting_stmt_idx = defloc.stmt_idx + 1
|
|
444
|
+
if block is use_block:
|
|
445
|
+
ending_stmt_idx = useloc.stmt_idx + 1
|
|
446
|
+
|
|
447
|
+
for i in range(starting_stmt_idx, ending_stmt_idx):
|
|
448
|
+
if isinstance(block.statements[i], Store):
|
|
449
|
+
return True
|
|
450
|
+
|
|
451
|
+
if block is def_block:
|
|
452
|
+
continue
|
|
453
|
+
|
|
454
|
+
for pred in self.func_graph.predecessors(block):
|
|
455
|
+
if pred not in seen:
|
|
456
|
+
seen.add(pred)
|
|
457
|
+
queue.append(pred)
|
|
458
|
+
|
|
459
|
+
return False
|
|
460
|
+
|
|
383
461
|
|
|
384
462
|
register_analysis(SPropagatorAnalysis, "SPropagator")
|
angr/lib/angr_native.dylib
CHANGED
|
Binary file
|
|
@@ -251,11 +251,18 @@ class __libc_start_main(angr.SimProcedure):
|
|
|
251
251
|
args = cc.get_args(state, ty)
|
|
252
252
|
main, _, _, init, fini = self._extract_args(blank_state, *args)
|
|
253
253
|
|
|
254
|
-
|
|
255
|
-
|
|
254
|
+
# skip invalid results
|
|
255
|
+
result = [
|
|
256
256
|
{"address": main, "jumpkind": "Ijk_Call", "namehint": "main"},
|
|
257
|
-
{"address": fini, "jumpkind": "Ijk_Call", "namehint": "fini"},
|
|
258
257
|
]
|
|
258
|
+
if init.concrete and init.concrete_value != 0:
|
|
259
|
+
init_item = {"address": init, "jumpkind": "Ijk_Call", "namehint": "init"}
|
|
260
|
+
result.insert(0, init_item)
|
|
261
|
+
if fini.concrete and fini.concrete_value != 0:
|
|
262
|
+
fini_item = {"address": fini, "jumpkind": "Ijk_Call", "namehint": "fini"}
|
|
263
|
+
result.append(fini_item)
|
|
264
|
+
|
|
265
|
+
return result
|
|
259
266
|
|
|
260
267
|
@staticmethod
|
|
261
268
|
def _extract_args(state, main, argc, argv, init, fini):
|
angr/utils/ssa/__init__.py
CHANGED
|
@@ -4,7 +4,7 @@ from typing import Any, Literal, overload
|
|
|
4
4
|
|
|
5
5
|
import archinfo
|
|
6
6
|
from ailment import Expression, Block
|
|
7
|
-
from ailment.expression import VirtualVariable, Const, Phi, Tmp, Load, Register, StackBaseOffset, DirtyExpression
|
|
7
|
+
from ailment.expression import VirtualVariable, Const, Phi, Tmp, Load, Register, StackBaseOffset, DirtyExpression, ITE
|
|
8
8
|
from ailment.statement import Statement, Assignment, Call
|
|
9
9
|
from ailment.block_walker import AILBlockWalkerBase
|
|
10
10
|
|
|
@@ -213,12 +213,25 @@ def is_dephi_vvar(vvar: VirtualVariable) -> bool:
|
|
|
213
213
|
return vvar.varid == DEPHI_VVAR_REG_OFFSET
|
|
214
214
|
|
|
215
215
|
|
|
216
|
+
def has_ite_expr(expr: Expression) -> bool:
|
|
217
|
+
walker = AILBlacklistExprTypeWalker((ITE,))
|
|
218
|
+
walker.walk_expression(expr)
|
|
219
|
+
return walker.has_blacklisted_exprs
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
def has_ite_stmt(stmt: Statement) -> bool:
|
|
223
|
+
walker = AILBlacklistExprTypeWalker((ITE,))
|
|
224
|
+
walker.walk_statement(stmt)
|
|
225
|
+
return walker.has_blacklisted_exprs
|
|
226
|
+
|
|
227
|
+
|
|
216
228
|
__all__ = (
|
|
217
229
|
"VVarUsesCollector",
|
|
218
230
|
"get_tmp_deflocs",
|
|
219
231
|
"get_tmp_uselocs",
|
|
220
232
|
"get_vvar_deflocs",
|
|
221
233
|
"get_vvar_uselocs",
|
|
234
|
+
"has_ite_expr",
|
|
222
235
|
"is_const_and_vvar_assignment",
|
|
223
236
|
"is_const_assignment",
|
|
224
237
|
"is_const_vvar_load_assignment",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: angr
|
|
3
|
-
Version: 9.2.
|
|
3
|
+
Version: 9.2.138
|
|
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
|
|
@@ -16,13 +16,13 @@ Description-Content-Type: text/markdown
|
|
|
16
16
|
License-File: LICENSE
|
|
17
17
|
Requires-Dist: CppHeaderParser
|
|
18
18
|
Requires-Dist: GitPython
|
|
19
|
-
Requires-Dist: ailment==9.2.
|
|
20
|
-
Requires-Dist: archinfo==9.2.
|
|
19
|
+
Requires-Dist: ailment==9.2.138
|
|
20
|
+
Requires-Dist: archinfo==9.2.138
|
|
21
21
|
Requires-Dist: cachetools
|
|
22
22
|
Requires-Dist: capstone==5.0.3
|
|
23
23
|
Requires-Dist: cffi>=1.14.0
|
|
24
|
-
Requires-Dist: claripy==9.2.
|
|
25
|
-
Requires-Dist: cle==9.2.
|
|
24
|
+
Requires-Dist: claripy==9.2.138
|
|
25
|
+
Requires-Dist: cle==9.2.138
|
|
26
26
|
Requires-Dist: itanium-demangler
|
|
27
27
|
Requires-Dist: mulpyplexer
|
|
28
28
|
Requires-Dist: nampa
|
|
@@ -31,7 +31,7 @@ Requires-Dist: protobuf>=5.28.2
|
|
|
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.138
|
|
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=_nG-5IzQOKO7IRjqlaLV4y3d44qO1Yzc1AzPa_MJOlo,9153
|
|
2
2
|
angr/__main__.py,sha256=XeawhF6Cco9eWcfMTDWzYYggLB3qjnQ87IIeFOplaHM,2873
|
|
3
3
|
angr/annocfg.py,sha256=0NIvcuCskwz45hbBzigUTAuCrYutjDMwEXtMJf0y0S0,10742
|
|
4
4
|
angr/blade.py,sha256=NhesOPloKJC1DQJRv_HBT18X7oNxK16JwAfNz2Lc1o0,15384
|
|
@@ -37,7 +37,7 @@ angr/analyses/cdg.py,sha256=UxKp30a1pq0q-FsgmutHU3sdXFwXOjlcal0wzX4EYJM,6229
|
|
|
37
37
|
angr/analyses/class_identifier.py,sha256=ORsFU2vWPQS2BgxxZZBhL5w_h6MnDTsccChyM5OyTpg,2948
|
|
38
38
|
angr/analyses/code_tagging.py,sha256=Gj7Ms24RnmhC9OD57gw7R6_c-pLfqSug-LVUMw_JmXE,3510
|
|
39
39
|
angr/analyses/codecave.py,sha256=k_dDhMN4wcq2bs5VrwpOv96OowQ7AbZSs6j5Z6YbIpk,2209
|
|
40
|
-
angr/analyses/complete_calling_conventions.py,sha256=
|
|
40
|
+
angr/analyses/complete_calling_conventions.py,sha256=8jBayawWeHumo-97R-Yz2IxeZJ1MCY4IrpKz_JCLcTc,19508
|
|
41
41
|
angr/analyses/congruency_check.py,sha256=QeYRrdrs_iluLLnKz3KUHkCTPRVl5PgM2T0ZXd786HA,16165
|
|
42
42
|
angr/analyses/datagraph_meta.py,sha256=Ng0jqLD5ucRn_fBXhYq3l6scs3kczRk6Sk-Sen1forc,3414
|
|
43
43
|
angr/analyses/ddg.py,sha256=AWPPsL2bfTAua5meuQfPFL6b29PLpCLZzw-LGCv5iVo,63214
|
|
@@ -54,7 +54,7 @@ angr/analyses/pathfinder.py,sha256=_prNqmRUSuSt2ZCP8qbvNN7pw7mtM8pWr9IL0AO6XL8,1
|
|
|
54
54
|
angr/analyses/proximity_graph.py,sha256=-g7pNpbP2HQhKW3w1Eff23K8vAsgWWYoe3wVxRh3Lhk,16066
|
|
55
55
|
angr/analyses/reassembler.py,sha256=dc1bM-4pxVa2dypC7qL2REdKhpyKhSbQPf-LCDIBEwA,98351
|
|
56
56
|
angr/analyses/s_liveness.py,sha256=4BR_E3_Is7urOkKgtB1hgGpRoyqfytv9WcqrpSXc74k,5881
|
|
57
|
-
angr/analyses/s_propagator.py,sha256=
|
|
57
|
+
angr/analyses/s_propagator.py,sha256=Lsg4-Sicv70U11APKC5ivW8d7KVAhOcImWGz_yUuhmY,20783
|
|
58
58
|
angr/analyses/smc.py,sha256=0fvLPUpjlg6GCjYnfSqanXkGYlthmPwqMYR-ZYBHsbo,5075
|
|
59
59
|
angr/analyses/soot_class_hierarchy.py,sha256=R4xeacn-a_Q7PxSyj_stu5mnglZkPB5US5srKChX3mk,8740
|
|
60
60
|
angr/analyses/stack_pointer_tracker.py,sha256=msazJUmyMdvWVc0fRmiVTitWXGDQUunpdT2R2OO5LKs,32991
|
|
@@ -74,7 +74,7 @@ angr/analyses/cfg/cfg.py,sha256=dc9M91CaLeEKduYfMwpsT_01x6XyYuoNvgvcDKtbN-I,3177
|
|
|
74
74
|
angr/analyses/cfg/cfg_arch_options.py,sha256=QpC_sonf0eODcIxWtjVrW6E-gFRGvvdataqGEp9DFFI,3142
|
|
75
75
|
angr/analyses/cfg/cfg_base.py,sha256=7RRJ3omI-SYzeegrYYSrcU2GDcq9Uy2SaJdOvVHvjOQ,121985
|
|
76
76
|
angr/analyses/cfg/cfg_emulated.py,sha256=DkLzdePp50ecbFDhpqEtK43V8H1K4BnQe9NdjlNnonY,147826
|
|
77
|
-
angr/analyses/cfg/cfg_fast.py,sha256=
|
|
77
|
+
angr/analyses/cfg/cfg_fast.py,sha256=sCjyVVYZVJu6sKMSCnnjr3NtHYNhw5uwKHUmOi2HsqU,225765
|
|
78
78
|
angr/analyses/cfg/cfg_fast_soot.py,sha256=X2uroCSbtfgugO33pbIU_hx62bHzZTBweO35iLwEaLo,25906
|
|
79
79
|
angr/analyses/cfg/cfg_job_base.py,sha256=Zshze972MakTsd-licQz77lac17igQaaTsAteHeHhYQ,5974
|
|
80
80
|
angr/analyses/cfg/indirect_jump_resolvers/__init__.py,sha256=6P6GXkJ0v_WlWtz7aRpGXuY8LlfqTN3A703b1VnH5IQ,766
|
|
@@ -109,7 +109,7 @@ angr/analyses/decompiler/callsite_maker.py,sha256=eADZt3lujqGS9WjrWat9L3GasjcdR7
|
|
|
109
109
|
angr/analyses/decompiler/clinic.py,sha256=j1y_Hf1IBvU9eMlwBsSCUB-yp9oemNdIsEQbrVdPbDQ,127551
|
|
110
110
|
angr/analyses/decompiler/condition_processor.py,sha256=LhV6kEg_taX8-LnJ6a_L5610TfQF5P3oM0HlL6XX8Q8,53740
|
|
111
111
|
angr/analyses/decompiler/decompilation_cache.py,sha256=raMsZL9i5ajKP-lO_Qo_1gP2bsDccTNP9cNhINbk8ac,1375
|
|
112
|
-
angr/analyses/decompiler/decompilation_options.py,sha256=
|
|
112
|
+
angr/analyses/decompiler/decompilation_options.py,sha256=NDB67DI1L-stvJ4b1eQkfV26HgDJ_rG9-6PEv08G9-8,8195
|
|
113
113
|
angr/analyses/decompiler/decompiler.py,sha256=ol3_Mlrn2vLoK3D9Kg5Y9_xUBdZYVmxPVrUXS6duK40,28704
|
|
114
114
|
angr/analyses/decompiler/empty_node_remover.py,sha256=_RAGjqDyRmannEGPcMmWkL7em990-_sKgl5CYreb-yI,7403
|
|
115
115
|
angr/analyses/decompiler/expression_narrower.py,sha256=hEL9ZkmUpX6wAv_hBcIV4jwTuiHpbZTNjGodfV0VsnI,10343
|
|
@@ -152,7 +152,7 @@ angr/analyses/decompiler/optimization_passes/deadblock_remover.py,sha256=xPBoZCZ
|
|
|
152
152
|
angr/analyses/decompiler/optimization_passes/div_simplifier.py,sha256=fdMyGtykG9QepIUFL2_KN9lqsJFqHsVwNoJ1p8GlQ7A,18739
|
|
153
153
|
angr/analyses/decompiler/optimization_passes/engine_base.py,sha256=PiCFksceRfu0nPPSKfzTsMmrAJ1YaHMEjcuCHcaYbgM,16662
|
|
154
154
|
angr/analyses/decompiler/optimization_passes/expr_op_swapper.py,sha256=PJMJ0INWiINSkv1eD5QsMJS81XtfuyKqoqe6NTkU120,4715
|
|
155
|
-
angr/analyses/decompiler/optimization_passes/flip_boolean_cmp.py,sha256=
|
|
155
|
+
angr/analyses/decompiler/optimization_passes/flip_boolean_cmp.py,sha256=lS70nBKCSWQ69vcvazAI24zgUdEFtbg33wr6t78XFqI,4029
|
|
156
156
|
angr/analyses/decompiler/optimization_passes/inlined_string_transformation_simplifier.py,sha256=8eVT6ffOtgU4GHqeigwrdvFuA59ZV80TfYeaGLDW9A0,24843
|
|
157
157
|
angr/analyses/decompiler/optimization_passes/ite_expr_converter.py,sha256=eeKEkoT0WphueWZd5P07cfa9lTBK3BzL0jUyOx4XmJQ,7820
|
|
158
158
|
angr/analyses/decompiler/optimization_passes/ite_region_converter.py,sha256=gFEgdVcsWOCex1VZMRY5kBgjL4LGE9yXp8N5y6LY7ws,13168
|
|
@@ -213,7 +213,7 @@ angr/analyses/decompiler/peephole_optimizations/remove_redundant_bitmasks.py,sha
|
|
|
213
213
|
angr/analyses/decompiler/peephole_optimizations/remove_redundant_conversions.py,sha256=_TOXqaPu4SXkjFLsDjjeOd7SGz8nQXgRXofFvOswqIk,7766
|
|
214
214
|
angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_branch.py,sha256=I3BdEwYNCz7vt0BreBhB-m0OD6g0-SxqNFCw5fpE_EM,1128
|
|
215
215
|
angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_comparisons.py,sha256=o5KX_HnE8e_bJCSX2mOomheXRk3EUU0mPbja7w0w8Ns,1878
|
|
216
|
-
angr/analyses/decompiler/peephole_optimizations/remove_redundant_nots.py,sha256=
|
|
216
|
+
angr/analyses/decompiler/peephole_optimizations/remove_redundant_nots.py,sha256=_y3YWya1mbZWx663yrwTCMF9F57JVpIpBrrU6VNNyjQ,1273
|
|
217
217
|
angr/analyses/decompiler/peephole_optimizations/remove_redundant_reinterprets.py,sha256=DqGdwso3CuulthzNNjUseNF2eb8VMQhhritjWSwCViE,1425
|
|
218
218
|
angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts.py,sha256=XBE4jziVAhwUDxb3un5yMhngPc-MBGVcwtdm0EczQy4,1776
|
|
219
219
|
angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts_around_comparators.py,sha256=MHkgIgOMWaAVqe5q4X-yzIxkPzd2KyTngvhxtXorOi4,1605
|
|
@@ -552,7 +552,7 @@ angr/knowledge_plugins/xrefs/__init__.py,sha256=5PhqVOtTZ27lCjJ9wp7akUeJydqILbyC
|
|
|
552
552
|
angr/knowledge_plugins/xrefs/xref.py,sha256=U2H1rfffp5EXoh0awlGxMBxA4K5MIwl3CXjV3Uih3tA,4856
|
|
553
553
|
angr/knowledge_plugins/xrefs/xref_manager.py,sha256=Yb88z3L8Y26TfGeRHdsGWQlT9f6oWntjEg6s-kcVtUQ,4040
|
|
554
554
|
angr/knowledge_plugins/xrefs/xref_types.py,sha256=LcQ9pD4E4XlC51Us49xiqAoGAFGpnCrpYO4mOzILiKI,308
|
|
555
|
-
angr/lib/angr_native.dylib,sha256=
|
|
555
|
+
angr/lib/angr_native.dylib,sha256=7nOIKrjdQqKSSOdTJOu8vL5cBa5zimqyJc38rE7VAnI,18820608
|
|
556
556
|
angr/misc/__init__.py,sha256=FoUwjk1DhqlIsr2sBN0MlR8MnSOGQv9QJhxmq32RYuA,355
|
|
557
557
|
angr/misc/ansi.py,sha256=nPJHC0SKfqasMQZ0LxdmmIYojjmk4nr5jI6FrzoTwS0,811
|
|
558
558
|
angr/misc/autoimport.py,sha256=iZagpuPwZWczUTYIqs-JkDMQjftMqc_cchcm7OBFiEg,3450
|
|
@@ -967,7 +967,7 @@ angr/procedures/glibc/__ctype_toupper_loc.py,sha256=f_7QVgjBwqX0C-J1FLPSVwTcYJy8
|
|
|
967
967
|
angr/procedures/glibc/__errno_location.py,sha256=2vsI8nPVYcvxGTg4UZ_cEGJT-Xh3Gk_nbV1PSObr-nE,192
|
|
968
968
|
angr/procedures/glibc/__init__.py,sha256=NjNtLNzO6f70tY9_LCv4-QRIC4g7o9y5CELaX1VUMyU,110
|
|
969
969
|
angr/procedures/glibc/__libc_init.py,sha256=xYokoQsAc-eJQPW4sp6EQR9X22mzF3-47-TUb-vGhQQ,1555
|
|
970
|
-
angr/procedures/glibc/__libc_start_main.py,sha256=
|
|
970
|
+
angr/procedures/glibc/__libc_start_main.py,sha256=as8GrAth_w3Ol-fht9SjE-x6I8H17ndH9kfXmq40OWQ,11338
|
|
971
971
|
angr/procedures/glibc/dynamic_loading.py,sha256=uainl-wSeREeGbKGXjOlpwTxrQgjFfcJkZ0lnzOWR_s,695
|
|
972
972
|
angr/procedures/glibc/scanf.py,sha256=Y4wXanaRKmkrkGygwZZj23MwcTzz_HODo2CxzO8ab0M,209
|
|
973
973
|
angr/procedures/glibc/sscanf.py,sha256=FBVbBuvTS-tFFPEGChaEKBFGho9OOAN5VKAFbk2X0nk,124
|
|
@@ -1356,12 +1356,12 @@ angr/utils/orderedset.py,sha256=aGfmLdOS77nzz2eoPpCqRICqzaAeBnuis1Et_I_hiZg,2047
|
|
|
1356
1356
|
angr/utils/segment_list.py,sha256=DulfCDdNETMehseRey64FkjmORQvoSyVd9eRZ4sQ7tw,21065
|
|
1357
1357
|
angr/utils/tagged_interval_map.py,sha256=rXKBuT14N23AAntpOKhZhmA-qqymnsvjpheFXoTRVRA,4417
|
|
1358
1358
|
angr/utils/timing.py,sha256=n-YZ86g0ZWmLhsoNvcimRpKzewR5hmquLZe6fagxlBw,2224
|
|
1359
|
-
angr/utils/ssa/__init__.py,sha256=
|
|
1359
|
+
angr/utils/ssa/__init__.py,sha256=mXPVi7w3tj8e34cFffbDRzR-M4xmCSle85Y-OAjbG3g,9115
|
|
1360
1360
|
angr/utils/ssa/tmp_uses_collector.py,sha256=rSpvMxBHzg-tmvhsfjn3iLyPEKzaZN-xpQrdslMq3J4,793
|
|
1361
1361
|
angr/utils/ssa/vvar_uses_collector.py,sha256=8gfAWdRMz73Deh-ZshDM3GPAot9Lf-rHzCiaCil0hlE,1342
|
|
1362
|
-
angr-9.2.
|
|
1363
|
-
angr-9.2.
|
|
1364
|
-
angr-9.2.
|
|
1365
|
-
angr-9.2.
|
|
1366
|
-
angr-9.2.
|
|
1367
|
-
angr-9.2.
|
|
1362
|
+
angr-9.2.138.dist-info/LICENSE,sha256=cgL_ho5B1NH8UxwtBuqThRWdjear8b7hktycaS1sz6g,1327
|
|
1363
|
+
angr-9.2.138.dist-info/METADATA,sha256=af9QcAmOmXzsD6UfrjbQzQLzGStr4CpDZS7X-GQnW6Y,4762
|
|
1364
|
+
angr-9.2.138.dist-info/WHEEL,sha256=PZ-OsY8i4Z226LDI7i-dMSeTfkoVt8RQgQCdJ2qV3Jg,106
|
|
1365
|
+
angr-9.2.138.dist-info/entry_points.txt,sha256=Vjh1C8PMyr5dZFMnik5WkEP01Uwr2T73I3a6N32sgQU,44
|
|
1366
|
+
angr-9.2.138.dist-info/top_level.txt,sha256=dKw0KWTbwLXytFvv15oAAG4sUs3ey47tt6DorJG9-hw,5
|
|
1367
|
+
angr-9.2.138.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|