angr 9.2.98__py3-none-win_amd64.whl → 9.2.100__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/cfg/cfg_fast.py +3 -3
- angr/analyses/cfg/indirect_jump_resolvers/jumptable.py +1 -1
- angr/analyses/decompiler/clinic.py +2 -40
- angr/analyses/decompiler/graph_region.py +11 -1
- angr/analyses/decompiler/optimization_passes/const_derefs.py +5 -3
- angr/analyses/decompiler/optimization_passes/inlined_string_transformation_simplifier.py +3 -0
- angr/analyses/decompiler/optimization_passes/ite_region_converter.py +10 -2
- angr/analyses/decompiler/peephole_optimizations/constant_derefs.py +2 -0
- angr/analyses/decompiler/region_simplifiers/expr_folding.py +5 -3
- angr/analyses/decompiler/return_maker.py +71 -0
- angr/analyses/decompiler/structured_codegen/c.py +24 -0
- angr/analyses/decompiler/structuring/phoenix.py +7 -2
- angr/engines/light/engine.py +10 -4
- angr/lib/angr_native.dll +0 -0
- angr/simos/linux.py +27 -20
- {angr-9.2.98.dist-info → angr-9.2.100.dist-info}/METADATA +6 -6
- {angr-9.2.98.dist-info → angr-9.2.100.dist-info}/RECORD +22 -21
- {angr-9.2.98.dist-info → angr-9.2.100.dist-info}/LICENSE +0 -0
- {angr-9.2.98.dist-info → angr-9.2.100.dist-info}/WHEEL +0 -0
- {angr-9.2.98.dist-info → angr-9.2.100.dist-info}/entry_points.txt +0 -0
- {angr-9.2.98.dist-info → angr-9.2.100.dist-info}/top_level.txt +0 -0
angr/__init__.py
CHANGED
angr/analyses/cfg/cfg_fast.py
CHANGED
|
@@ -3287,7 +3287,7 @@ class CFGFast(ForwardAnalysis[CFGNode, CFGNode, CFGJob, int], CFGBase): # pylin
|
|
|
3287
3287
|
|
|
3288
3288
|
removed_nodes = set()
|
|
3289
3289
|
|
|
3290
|
-
a = None # it always
|
|
3290
|
+
a = None # it always holds the very recent non-removed node
|
|
3291
3291
|
is_arm = is_arm_arch(self.project.arch)
|
|
3292
3292
|
|
|
3293
3293
|
for i in range(len(sorted_nodes)): # pylint:disable=consider-using-enumerate
|
|
@@ -3341,7 +3341,7 @@ class CFGFast(ForwardAnalysis[CFGNode, CFGNode, CFGJob, int], CFGBase): # pylin
|
|
|
3341
3341
|
# but somehow we thought b is the beginning
|
|
3342
3342
|
if a.addr + a.size == b.addr + b.size:
|
|
3343
3343
|
in_edges = len([_ for _, _, data in self.graph.in_edges([b], data=True)])
|
|
3344
|
-
if in_edges == 0:
|
|
3344
|
+
if in_edges == 0 and b in self.graph:
|
|
3345
3345
|
# we use node a to replace node b
|
|
3346
3346
|
# link all successors of b to a
|
|
3347
3347
|
for _, dst, data in self.graph.out_edges([b], data=True):
|
|
@@ -3360,7 +3360,7 @@ class CFGFast(ForwardAnalysis[CFGNode, CFGNode, CFGJob, int], CFGBase): # pylin
|
|
|
3360
3360
|
|
|
3361
3361
|
# next case - if b is directly from function prologue detection, or a basic block that is a successor of
|
|
3362
3362
|
# a wrongly identified basic block, we might be totally misdecoding b
|
|
3363
|
-
if b.instruction_addrs[0] not in a.instruction_addrs:
|
|
3363
|
+
if b.instruction_addrs[0] not in a.instruction_addrs and b in self.graph:
|
|
3364
3364
|
# use a, truncate b
|
|
3365
3365
|
|
|
3366
3366
|
new_b_addr = a.addr + a.size # b starts right after a terminates
|
|
@@ -954,7 +954,7 @@ class JumpTableResolver(IndirectJumpResolver):
|
|
|
954
954
|
# for a typical vtable call (or jump if at the end of a function), the block as two predecessors that form a
|
|
955
955
|
# diamond shape
|
|
956
956
|
curr_node = func.get_node(addr)
|
|
957
|
-
if curr_node is None:
|
|
957
|
+
if curr_node is None or curr_node not in func.graph:
|
|
958
958
|
l.debug("Could not find the node %#x in the function transition graph", addr)
|
|
959
959
|
return False, None
|
|
960
960
|
preds = list(func.graph.predecessors(curr_node))
|
|
@@ -33,6 +33,7 @@ from ...procedures.stubs.UnresolvableJumpTarget import UnresolvableJumpTarget
|
|
|
33
33
|
from .. import Analysis, register_analysis
|
|
34
34
|
from ..cfg.cfg_base import CFGBase
|
|
35
35
|
from ..reaching_definitions import ReachingDefinitionsAnalysis
|
|
36
|
+
from .return_maker import ReturnMaker
|
|
36
37
|
from .ailgraph_walker import AILGraphWalker, RemoveNodeNotice
|
|
37
38
|
from .optimization_passes import (
|
|
38
39
|
get_default_optimization_passes,
|
|
@@ -1054,46 +1055,7 @@ class Clinic(Analysis):
|
|
|
1054
1055
|
# unknown calling convention. cannot do much about return expressions.
|
|
1055
1056
|
return ail_graph
|
|
1056
1057
|
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
def _handle_Return(
|
|
1060
|
-
stmt_idx: int, stmt: ailment.Stmt.Return, block: Optional[ailment.Block]
|
|
1061
|
-
): # pylint:disable=unused-argument
|
|
1062
|
-
if (
|
|
1063
|
-
block is not None
|
|
1064
|
-
and not stmt.ret_exprs
|
|
1065
|
-
and self.function.prototype is not None
|
|
1066
|
-
and self.function.prototype.returnty is not None
|
|
1067
|
-
and type(self.function.prototype.returnty) is not SimTypeBottom
|
|
1068
|
-
):
|
|
1069
|
-
new_stmt = stmt.copy()
|
|
1070
|
-
ret_val = self.function.calling_convention.return_val(self.function.prototype.returnty)
|
|
1071
|
-
if isinstance(ret_val, SimRegArg):
|
|
1072
|
-
reg = self.project.arch.registers[ret_val.reg_name]
|
|
1073
|
-
new_stmt.ret_exprs.append(
|
|
1074
|
-
ailment.Expr.Register(
|
|
1075
|
-
self._next_atom(),
|
|
1076
|
-
None,
|
|
1077
|
-
reg[0],
|
|
1078
|
-
ret_val.size * self.project.arch.byte_width,
|
|
1079
|
-
reg_name=self.project.arch.translate_register_name(reg[0], ret_val.size),
|
|
1080
|
-
)
|
|
1081
|
-
)
|
|
1082
|
-
else:
|
|
1083
|
-
l.warning("Unsupported type of return expression %s.", type(ret_val))
|
|
1084
|
-
block.statements[stmt_idx] = new_stmt
|
|
1085
|
-
|
|
1086
|
-
def _handler(block):
|
|
1087
|
-
walker = ailment.AILBlockWalker()
|
|
1088
|
-
# we don't need to handle any statement besides Returns
|
|
1089
|
-
walker.stmt_handlers.clear()
|
|
1090
|
-
walker.expr_handlers.clear()
|
|
1091
|
-
walker.stmt_handlers[ailment.Stmt.Return] = _handle_Return
|
|
1092
|
-
walker.walk(block)
|
|
1093
|
-
|
|
1094
|
-
# Graph walker
|
|
1095
|
-
|
|
1096
|
-
AILGraphWalker(ail_graph, _handler, replace_nodes=True).walk()
|
|
1058
|
+
ReturnMaker(self._ail_manager, self.project.arch, self.function, ail_graph)
|
|
1097
1059
|
|
|
1098
1060
|
return ail_graph
|
|
1099
1061
|
|
|
@@ -267,7 +267,7 @@ class GraphRegion:
|
|
|
267
267
|
for succ in replace_with.successors:
|
|
268
268
|
if succ not in self.successors:
|
|
269
269
|
for succ_ in self.successors:
|
|
270
|
-
if isinstance(succ_, GraphRegion) and succ_.
|
|
270
|
+
if isinstance(succ_, GraphRegion) and succ_.addr == succ.addr:
|
|
271
271
|
successor_map[succ] = succ_
|
|
272
272
|
if successor_map:
|
|
273
273
|
replace_with_graph_with_successors = networkx.DiGraph()
|
|
@@ -364,6 +364,16 @@ class GraphRegion:
|
|
|
364
364
|
while isinstance(dst_head, GraphRegion) and dst_head not in sub_graph:
|
|
365
365
|
dst_head = dst_head.head
|
|
366
366
|
|
|
367
|
+
if dst_head not in sub_graph:
|
|
368
|
+
# unexpected: structuring failed and resulted in a bad sub_graph
|
|
369
|
+
l.warning(
|
|
370
|
+
"Node %r for node %r is not found in the sub graph at address %#x. Nodes may go missing.",
|
|
371
|
+
dst_head,
|
|
372
|
+
dst_in_subgraph,
|
|
373
|
+
sub_graph_head.addr,
|
|
374
|
+
)
|
|
375
|
+
continue
|
|
376
|
+
|
|
367
377
|
for src in sub_graph.predecessors(dst_head):
|
|
368
378
|
graph.add_edge(src, dst)
|
|
369
379
|
# replace the corresponding nodes in sub_graph_nodes and sub_graph_edges
|
|
@@ -136,7 +136,8 @@ class BlockWalker(AILBlockWalker):
|
|
|
136
136
|
if isinstance(expr.addr, Const):
|
|
137
137
|
# *(const_addr)
|
|
138
138
|
# does it belong to a read-only section/segment?
|
|
139
|
-
|
|
139
|
+
is_got = self._addr_belongs_to_got(expr.addr.value)
|
|
140
|
+
if is_got or self._addr_belongs_to_ro_region(expr.addr.value):
|
|
140
141
|
try:
|
|
141
142
|
w = self._project.loader.memory.unpack_word(
|
|
142
143
|
expr.addr.value,
|
|
@@ -147,8 +148,9 @@ class BlockWalker(AILBlockWalker):
|
|
|
147
148
|
# we don't have enough bytes to read out
|
|
148
149
|
w = None
|
|
149
150
|
if w is not None:
|
|
150
|
-
|
|
151
|
-
|
|
151
|
+
if not (is_got and w == 0):
|
|
152
|
+
# nice! replace it with the actual value
|
|
153
|
+
return Const(None, None, w, expr.bits, **expr.tags)
|
|
152
154
|
elif isinstance(expr.addr, Load) and expr.addr.bits == self._project.arch.bits:
|
|
153
155
|
if isinstance(expr.addr.addr, Const):
|
|
154
156
|
# *(*(const_addr))
|
|
@@ -231,6 +231,9 @@ class InlinedStringTransformationAILEngine(SimEngineLightAILMixin):
|
|
|
231
231
|
return claripy.BVV(1, 1) if op0.concrete_value >= op1.concrete_value else claripy.BVV(0, 1)
|
|
232
232
|
return None
|
|
233
233
|
|
|
234
|
+
def _handle_Call(self, stmt):
|
|
235
|
+
pass
|
|
236
|
+
|
|
234
237
|
|
|
235
238
|
class InlineStringTransformationDescriptor:
|
|
236
239
|
"""
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import logging
|
|
3
3
|
|
|
4
4
|
from ailment.statement import ConditionalJump, Assignment, Jump
|
|
5
|
-
from ailment.expression import ITE
|
|
5
|
+
from ailment.expression import ITE, Const
|
|
6
6
|
|
|
7
7
|
from ....utils.graph import subgraph_between_nodes
|
|
8
8
|
from ..utils import remove_labels, to_ail_supergraph
|
|
@@ -146,10 +146,11 @@ class ITERegionConverter(OptimizationPass):
|
|
|
146
146
|
#
|
|
147
147
|
|
|
148
148
|
new_region_head = region_head.copy()
|
|
149
|
+
conditional_jump: ConditionalJump = region_head.statements[-1]
|
|
149
150
|
addr_obj = true_stmt.src if "ins_addr" in true_stmt.src.tags else true_stmt
|
|
150
151
|
ternary_expr = ITE(
|
|
151
152
|
None,
|
|
152
|
-
|
|
153
|
+
conditional_jump.condition,
|
|
153
154
|
true_stmt.src,
|
|
154
155
|
false_stmt.src,
|
|
155
156
|
ins_addr=addr_obj.ins_addr,
|
|
@@ -160,6 +161,13 @@ class ITERegionConverter(OptimizationPass):
|
|
|
160
161
|
new_assignment.src = ternary_expr
|
|
161
162
|
new_region_head.statements[-1] = new_assignment
|
|
162
163
|
|
|
164
|
+
# add a goto statement to the region tail so it can be transformed into a break or other types of control-flow
|
|
165
|
+
# transitioning statement in the future
|
|
166
|
+
goto_stmt = Jump(
|
|
167
|
+
None, Const(None, None, region_tail.addr, self.project.arch.bits), region_tail.idx, **conditional_jump.tags
|
|
168
|
+
)
|
|
169
|
+
new_region_head.statements.append(goto_stmt)
|
|
170
|
+
|
|
163
171
|
#
|
|
164
172
|
# destroy all the old region blocks
|
|
165
173
|
#
|
|
@@ -24,6 +24,8 @@ class ConstantDereferences(PeepholeOptimizationExprBase):
|
|
|
24
24
|
val = self.project.loader.memory.unpack_word(expr.addr.value, size=expr.size)
|
|
25
25
|
except KeyError:
|
|
26
26
|
return None
|
|
27
|
+
if "got" in sec.name and val == 0:
|
|
28
|
+
return None
|
|
27
29
|
|
|
28
30
|
return Const(None, None, val, expr.bits, **expr.tags, deref_src_addr=expr.addr.value)
|
|
29
31
|
|
|
@@ -4,6 +4,7 @@ from typing import Optional, Any, Dict, Set, Tuple, Iterable, Union, DefaultDict
|
|
|
4
4
|
|
|
5
5
|
import ailment
|
|
6
6
|
from ailment import Expression, Block, AILBlockWalker
|
|
7
|
+
from ailment.expression import ITE
|
|
7
8
|
from ailment.statement import Statement, Assignment, Call
|
|
8
9
|
|
|
9
10
|
from ..sequence_walker import SequenceWalker
|
|
@@ -385,11 +386,11 @@ class ExpressionReplacer(AILBlockWalker):
|
|
|
385
386
|
return None
|
|
386
387
|
|
|
387
388
|
def _handle_Assignment(self, stmt_idx: int, stmt: Assignment, block: Optional[Block]):
|
|
388
|
-
# override the base handler and make sure we do not replace .dst with a Call expression
|
|
389
|
+
# override the base handler and make sure we do not replace .dst with a Call expression or an ITE expression
|
|
389
390
|
changed = False
|
|
390
391
|
|
|
391
392
|
dst = self._handle_expr(0, stmt.dst, stmt_idx, stmt, block)
|
|
392
|
-
if dst is not None and dst is not stmt.dst and not isinstance(dst, Call):
|
|
393
|
+
if dst is not None and dst is not stmt.dst and not isinstance(dst, (Call, ITE)):
|
|
393
394
|
changed = True
|
|
394
395
|
else:
|
|
395
396
|
dst = stmt.dst
|
|
@@ -446,7 +447,8 @@ class ExpressionFolder(SequenceWalker):
|
|
|
446
447
|
for stmt in node.statements:
|
|
447
448
|
if isinstance(stmt, ailment.Stmt.Assignment):
|
|
448
449
|
if isinstance(stmt.dst, ailment.Expr.Register) and stmt.dst.variable is not None:
|
|
449
|
-
|
|
450
|
+
unified_var = self._u(stmt.dst.variable)
|
|
451
|
+
if unified_var in self._assignments:
|
|
450
452
|
# remove this statement
|
|
451
453
|
continue
|
|
452
454
|
if (
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
from typing import Optional
|
|
2
|
+
import logging
|
|
3
|
+
|
|
4
|
+
import ailment
|
|
5
|
+
|
|
6
|
+
from angr.sim_type import SimTypeBottom
|
|
7
|
+
from angr.calling_conventions import SimRegArg
|
|
8
|
+
from .ailgraph_walker import AILGraphWalker
|
|
9
|
+
|
|
10
|
+
l = logging.getLogger(__name__)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ReturnMaker(AILGraphWalker):
|
|
14
|
+
"""
|
|
15
|
+
Traverse the AILBlock graph of a function and update .ret_exprs of all return statements.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def __init__(self, ail_manager, arch, function, ail_graph):
|
|
19
|
+
super().__init__(ail_graph, self._handler, replace_nodes=True)
|
|
20
|
+
self.ail_manager = ail_manager
|
|
21
|
+
self.arch = arch
|
|
22
|
+
self.function = function
|
|
23
|
+
self._new_block = None
|
|
24
|
+
|
|
25
|
+
self.walk()
|
|
26
|
+
|
|
27
|
+
def _next_atom(self) -> int:
|
|
28
|
+
return self.ail_manager.next_atom()
|
|
29
|
+
|
|
30
|
+
def _handle_Return(
|
|
31
|
+
self, stmt_idx: int, stmt: ailment.Stmt.Return, block: Optional[ailment.Block]
|
|
32
|
+
): # pylint:disable=unused-argument
|
|
33
|
+
if (
|
|
34
|
+
block is not None
|
|
35
|
+
and not stmt.ret_exprs
|
|
36
|
+
and self.function.prototype is not None
|
|
37
|
+
and self.function.prototype.returnty is not None
|
|
38
|
+
and type(self.function.prototype.returnty) is not SimTypeBottom
|
|
39
|
+
):
|
|
40
|
+
new_stmt = stmt.copy()
|
|
41
|
+
ret_val = self.function.calling_convention.return_val(self.function.prototype.returnty)
|
|
42
|
+
if isinstance(ret_val, SimRegArg):
|
|
43
|
+
reg = self.arch.registers[ret_val.reg_name]
|
|
44
|
+
new_stmt.ret_exprs.append(
|
|
45
|
+
ailment.Expr.Register(
|
|
46
|
+
self._next_atom(),
|
|
47
|
+
None,
|
|
48
|
+
reg[0],
|
|
49
|
+
ret_val.size * self.arch.byte_width,
|
|
50
|
+
reg_name=self.arch.translate_register_name(reg[0], ret_val.size),
|
|
51
|
+
)
|
|
52
|
+
)
|
|
53
|
+
else:
|
|
54
|
+
l.warning("Unsupported type of return expression %s.", type(ret_val))
|
|
55
|
+
new_statements = block.statements[::]
|
|
56
|
+
new_statements[stmt_idx] = new_stmt
|
|
57
|
+
self._new_block = block.copy(statements=new_statements)
|
|
58
|
+
|
|
59
|
+
def _handler(self, block):
|
|
60
|
+
walker = ailment.AILBlockWalker()
|
|
61
|
+
# we don't need to handle any statement besides Returns
|
|
62
|
+
walker.stmt_handlers.clear()
|
|
63
|
+
walker.expr_handlers.clear()
|
|
64
|
+
walker.stmt_handlers[ailment.Stmt.Return] = self._handle_Return
|
|
65
|
+
|
|
66
|
+
self._new_block = None
|
|
67
|
+
walker.walk(block)
|
|
68
|
+
|
|
69
|
+
if self._new_block is not None:
|
|
70
|
+
return self._new_block
|
|
71
|
+
return None
|
|
@@ -1408,6 +1408,26 @@ class CUnsupportedStatement(CStatement):
|
|
|
1408
1408
|
yield "\n", None
|
|
1409
1409
|
|
|
1410
1410
|
|
|
1411
|
+
class CDirtyStatement(CExpression):
|
|
1412
|
+
|
|
1413
|
+
__slots__ = ("dirty",)
|
|
1414
|
+
|
|
1415
|
+
def __init__(self, dirty, **kwargs):
|
|
1416
|
+
super().__init__(**kwargs)
|
|
1417
|
+
self.dirty = dirty
|
|
1418
|
+
|
|
1419
|
+
@property
|
|
1420
|
+
def type(self):
|
|
1421
|
+
return SimTypeInt().with_arch(self.codegen.project.arch)
|
|
1422
|
+
|
|
1423
|
+
def c_repr_chunks(self, indent=0, asexpr=False):
|
|
1424
|
+
indent_str = self.indent_str(indent=indent)
|
|
1425
|
+
|
|
1426
|
+
yield indent_str, None
|
|
1427
|
+
yield str(self.dirty), None
|
|
1428
|
+
yield "\n", None
|
|
1429
|
+
|
|
1430
|
+
|
|
1411
1431
|
class CLabel(CStatement):
|
|
1412
1432
|
"""
|
|
1413
1433
|
Represents a label in C code.
|
|
@@ -2414,6 +2434,7 @@ class CStructuredCodeGenerator(BaseStructuredCodeGenerator, Analysis):
|
|
|
2414
2434
|
Stmt.ConditionalJump: self._handle_Stmt_ConditionalJump,
|
|
2415
2435
|
Stmt.Return: self._handle_Stmt_Return,
|
|
2416
2436
|
Stmt.Label: self._handle_Stmt_Label,
|
|
2437
|
+
Stmt.DirtyStatement: self._handle_Stmt_Dirty,
|
|
2417
2438
|
# AIL expressions
|
|
2418
2439
|
Expr.Register: self._handle_Expr_Register,
|
|
2419
2440
|
Expr.Load: self._handle_Expr_Load,
|
|
@@ -3311,6 +3332,9 @@ class CStructuredCodeGenerator(BaseStructuredCodeGenerator, Analysis):
|
|
|
3311
3332
|
self.map_addr_to_label[(stmt.ins_addr, stmt.block_idx)] = clabel
|
|
3312
3333
|
return clabel
|
|
3313
3334
|
|
|
3335
|
+
def _handle_Stmt_Dirty(self, stmt: Stmt.DirtyStatement, **kwargs):
|
|
3336
|
+
return CDirtyStatement(stmt, codegen=self)
|
|
3337
|
+
|
|
3314
3338
|
#
|
|
3315
3339
|
# AIL expression handlers
|
|
3316
3340
|
#
|
|
@@ -1131,9 +1131,14 @@ class PhoenixStructurer(StructurerBase):
|
|
|
1131
1131
|
return False
|
|
1132
1132
|
cmp_expr, cmp_lb, cmp_ub = cmp # pylint:disable=unused-variable
|
|
1133
1133
|
|
|
1134
|
-
node_a = next(iter(nn for nn in graph.nodes if nn.addr == target))
|
|
1134
|
+
node_a = next(iter(nn for nn in graph.nodes if nn.addr == target), None)
|
|
1135
|
+
if node_a is None:
|
|
1136
|
+
return False
|
|
1137
|
+
|
|
1135
1138
|
# the default case
|
|
1136
|
-
node_b_addr = next(iter(t for t in successor_addrs if t != target))
|
|
1139
|
+
node_b_addr = next(iter(t for t in successor_addrs if t != target), None)
|
|
1140
|
+
if node_b_addr is None:
|
|
1141
|
+
return False
|
|
1137
1142
|
|
|
1138
1143
|
# populate whitelist_edges
|
|
1139
1144
|
for case_node_addr in jump_table.jumptable_entries:
|
angr/engines/light/engine.py
CHANGED
|
@@ -1324,9 +1324,12 @@ class SimEngineLightAILMixin(SimEngineLightMixin):
|
|
|
1324
1324
|
expr_1 = arg1
|
|
1325
1325
|
|
|
1326
1326
|
try:
|
|
1327
|
-
|
|
1327
|
+
if isinstance(expr_1, claripy.ast.BV) and expr_1.concrete:
|
|
1328
|
+
return expr_0 >> expr_1.concrete_value
|
|
1328
1329
|
except TypeError:
|
|
1329
|
-
|
|
1330
|
+
pass
|
|
1331
|
+
|
|
1332
|
+
return ailment.Expr.BinaryOp(expr.idx, "Shr", [expr_0, expr_1], expr.signed, **expr.tags)
|
|
1330
1333
|
|
|
1331
1334
|
def _ail_handle_Shl(self, expr):
|
|
1332
1335
|
arg0, arg1 = expr.operands
|
|
@@ -1339,9 +1342,12 @@ class SimEngineLightAILMixin(SimEngineLightMixin):
|
|
|
1339
1342
|
expr_1 = arg1
|
|
1340
1343
|
|
|
1341
1344
|
try:
|
|
1342
|
-
|
|
1345
|
+
if isinstance(expr_1, claripy.ast.BV) and expr_1.concrete:
|
|
1346
|
+
return expr_0 << expr_1.concrete_value
|
|
1343
1347
|
except TypeError:
|
|
1344
|
-
|
|
1348
|
+
pass
|
|
1349
|
+
|
|
1350
|
+
return ailment.Expr.BinaryOp(expr.idx, "Shl", [expr_0, expr_1], expr.signed, **expr.tags)
|
|
1345
1351
|
|
|
1346
1352
|
def _ail_handle_Sal(self, expr):
|
|
1347
1353
|
return self._ail_handle_Shl(expr)
|
angr/lib/angr_native.dll
CHANGED
|
Binary file
|
angr/simos/linux.py
CHANGED
|
@@ -100,12 +100,18 @@ class SimLinux(SimUserland):
|
|
|
100
100
|
_rtld_global_ro.rebased_addr + 0x0D0, 2
|
|
101
101
|
) # cpu features: kind = amd
|
|
102
102
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
self.project.
|
|
103
|
+
try:
|
|
104
|
+
tls_obj = self.project.loader.tls.new_thread()
|
|
105
|
+
except NotImplementedError:
|
|
106
|
+
pass
|
|
107
|
+
else:
|
|
108
|
+
if isinstance(self.project.arch, ArchAMD64):
|
|
109
|
+
self.project.loader.memory.pack_word(
|
|
110
|
+
tls_obj.thread_pointer + 0x28, 0x5F43414E41525900
|
|
111
|
+
) # _CANARY\x00
|
|
112
|
+
self.project.loader.memory.pack_word(tls_obj.thread_pointer + 0x30, 0x5054524755415244)
|
|
113
|
+
elif isinstance(self.project.arch, ArchX86):
|
|
114
|
+
self.project.loader.memory.pack_word(tls_obj.thread_pointer + 0x10, self.vsyscall_addr)
|
|
109
115
|
|
|
110
116
|
if isinstance(self.project.arch, ArchARM):
|
|
111
117
|
# https://www.kernel.org/doc/Documentation/arm/kernel_user_helpers.txt
|
|
@@ -208,19 +214,20 @@ class SimLinux(SimUserland):
|
|
|
208
214
|
if not self._is_core and hasattr(state.memory, "allocate_stack_pages"):
|
|
209
215
|
state.memory.allocate_stack_pages(state.solver.eval(state.regs.sp) - 1, 0x20 * 0x1000)
|
|
210
216
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
state.
|
|
214
|
-
|
|
215
|
-
state.
|
|
216
|
-
|
|
217
|
-
state.
|
|
218
|
-
|
|
219
|
-
state.
|
|
220
|
-
|
|
221
|
-
state.
|
|
222
|
-
|
|
223
|
-
state.
|
|
217
|
+
if self.project.loader.tls.threads:
|
|
218
|
+
tls_obj = self.project.loader.tls.threads[thread_idx if thread_idx is not None else 0]
|
|
219
|
+
if isinstance(state.arch, ArchAMD64):
|
|
220
|
+
state.regs.fs = tls_obj.user_thread_pointer
|
|
221
|
+
elif isinstance(state.arch, ArchX86):
|
|
222
|
+
state.regs.gs = tls_obj.user_thread_pointer >> 16
|
|
223
|
+
elif isinstance(state.arch, (ArchMIPS32, ArchMIPS64)):
|
|
224
|
+
state.regs.ulr = tls_obj.user_thread_pointer
|
|
225
|
+
elif isinstance(state.arch, ArchPPC32):
|
|
226
|
+
state.regs.r2 = tls_obj.user_thread_pointer
|
|
227
|
+
elif isinstance(state.arch, ArchPPC64):
|
|
228
|
+
state.regs.r13 = tls_obj.user_thread_pointer
|
|
229
|
+
elif isinstance(state.arch, ArchAArch64):
|
|
230
|
+
state.regs.tpidr_el0 = tls_obj.user_thread_pointer
|
|
224
231
|
|
|
225
232
|
if fs is None:
|
|
226
233
|
fs = {}
|
|
@@ -397,7 +404,7 @@ class SimLinux(SimUserland):
|
|
|
397
404
|
state.registers.store(reg, self.project.loader.main_object.ppc64_initial_rtoc)
|
|
398
405
|
elif val == "entry":
|
|
399
406
|
state.registers.store(reg, state.registers.load("pc"))
|
|
400
|
-
elif val == "thread_pointer":
|
|
407
|
+
elif val == "thread_pointer" and self.project.loader.tls.threads:
|
|
401
408
|
state.registers.store(reg, self.project.loader.tls.threads[0].user_thread_pointer)
|
|
402
409
|
else:
|
|
403
410
|
_l.warning('Unknown entry point register value indicator "%s"', val)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: angr
|
|
3
|
-
Version: 9.2.
|
|
3
|
+
Version: 9.2.100
|
|
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
|
|
@@ -17,13 +17,13 @@ Description-Content-Type: text/markdown
|
|
|
17
17
|
License-File: LICENSE
|
|
18
18
|
Requires-Dist: CppHeaderParser
|
|
19
19
|
Requires-Dist: GitPython
|
|
20
|
-
Requires-Dist: ailment ==9.2.
|
|
21
|
-
Requires-Dist: archinfo ==9.2.
|
|
20
|
+
Requires-Dist: ailment ==9.2.100
|
|
21
|
+
Requires-Dist: archinfo ==9.2.100
|
|
22
22
|
Requires-Dist: cachetools
|
|
23
23
|
Requires-Dist: capstone ==5.0.0.post1
|
|
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.100
|
|
26
|
+
Requires-Dist: cle ==9.2.100
|
|
27
27
|
Requires-Dist: dpkt
|
|
28
28
|
Requires-Dist: itanium-demangler
|
|
29
29
|
Requires-Dist: mulpyplexer
|
|
@@ -33,7 +33,7 @@ Requires-Dist: protobuf >=3.19.0
|
|
|
33
33
|
Requires-Dist: psutil
|
|
34
34
|
Requires-Dist: pycparser >=2.18
|
|
35
35
|
Requires-Dist: pyformlang
|
|
36
|
-
Requires-Dist: pyvex ==9.2.
|
|
36
|
+
Requires-Dist: pyvex ==9.2.100
|
|
37
37
|
Requires-Dist: rich >=13.1.0
|
|
38
38
|
Requires-Dist: rpyc
|
|
39
39
|
Requires-Dist: sortedcontainers
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
angr/__init__.py,sha256=
|
|
1
|
+
angr/__init__.py,sha256=21woDHAvBdmFpvp0-Uih2rSDsQoo-aO8L5SSdvmowCE,3993
|
|
2
2
|
angr/__main__.py,sha256=kaO56Te6h73SM94BVtASF00q5QbBbC3eBs9poVc9sVI,1887
|
|
3
3
|
angr/annocfg.py,sha256=dK5JAdN4Ig_jgxTBZeZXwk3kAS4-IQUvE6T02GBZTDQ,10818
|
|
4
4
|
angr/blade.py,sha256=B8QXVQ93jz1YCIlb-dZLeBqYmVFdMXI5GleP1Wnxjrw,15519
|
|
@@ -65,7 +65,7 @@ angr/analyses/cfg/cfg.py,sha256=1JpPGlqXXRFwE0tk26xjabT_-dq-kqAxMv7o6-DUhp4,3146
|
|
|
65
65
|
angr/analyses/cfg/cfg_arch_options.py,sha256=YONHg6y-h6BCsBkJK9tuxb94DDfeOoy9CUS-LVyyDyg,3112
|
|
66
66
|
angr/analyses/cfg/cfg_base.py,sha256=JOliBFWPDWiIJlV5IUxU2Uf7BjExUNcJCibIlOQKoTs,123056
|
|
67
67
|
angr/analyses/cfg/cfg_emulated.py,sha256=Fi3rDN5ByxhO-H4Y7qn-3WZgBG12JGyvxcWmrD_FnFQ,152842
|
|
68
|
-
angr/analyses/cfg/cfg_fast.py,sha256=
|
|
68
|
+
angr/analyses/cfg/cfg_fast.py,sha256=2qcNkWihXV7M-KrOQv-j7B3m5okEe_7nIzgmZe09GHE,218261
|
|
69
69
|
angr/analyses/cfg/cfg_fast_soot.py,sha256=eA_P-OY3gRRNj2BBgSPMsB_llGyFFCNW3VyGZ2uiMoM,26047
|
|
70
70
|
angr/analyses/cfg/cfg_job_base.py,sha256=3IQE_Iy17xtGfsIkrKc2ERIakAYiNdLtRb_jwOGQtHU,5989
|
|
71
71
|
angr/analyses/cfg/indirect_jump_resolvers/__init__.py,sha256=T2rCpXy_fIoW_kHwZAVZupoj2UljitHvpI2uWJZ8NwU,361
|
|
@@ -74,7 +74,7 @@ angr/analyses/cfg/indirect_jump_resolvers/amd64_pe_iat.py,sha256=mMLQ5cUDjpGXD38
|
|
|
74
74
|
angr/analyses/cfg/indirect_jump_resolvers/arm_elf_fast.py,sha256=VhgIEDBSN6K_1pNHW1O23bOvc_gbi7bPpmlTGE7_5Uw,5231
|
|
75
75
|
angr/analyses/cfg/indirect_jump_resolvers/const_resolver.py,sha256=9ctRVLyVUMhkBV0y-Iy48usHBodGfkaWK1C7Dim2fgE,5273
|
|
76
76
|
angr/analyses/cfg/indirect_jump_resolvers/default_resolvers.py,sha256=TyRIBvH8St1eHktpRrErD4zp8HKP3ppglfPuCEE0wg0,1441
|
|
77
|
-
angr/analyses/cfg/indirect_jump_resolvers/jumptable.py,sha256=
|
|
77
|
+
angr/analyses/cfg/indirect_jump_resolvers/jumptable.py,sha256=_bYhqtDXmeR7N7zQPnYvGP983k3Bnu8KcObevSBj7eM,101986
|
|
78
78
|
angr/analyses/cfg/indirect_jump_resolvers/mips_elf_fast.py,sha256=G3y7GYPxtuDQCwBz1eec-74YC87npLK6K2mtRPOsOqc,19350
|
|
79
79
|
angr/analyses/cfg/indirect_jump_resolvers/propagator_utils.py,sha256=z77LC9YyQjNEr8ncVwIXVVqPyUjL2x2pGvqAax6QlYo,957
|
|
80
80
|
angr/analyses/cfg/indirect_jump_resolvers/resolver.py,sha256=2YyKPaXuWVbPwUQZcn0CKuba3ydYGIMT0Vxhy09kcV0,3019
|
|
@@ -96,7 +96,7 @@ angr/analyses/decompiler/block_similarity.py,sha256=x7DTJw6QKrXaPmI0Oxhl2V6rMDhQ
|
|
|
96
96
|
angr/analyses/decompiler/block_simplifier.py,sha256=X5kO97A1bEwSUfbwgj1cSO56qkhwPQZnIFi1DKMZQoo,17199
|
|
97
97
|
angr/analyses/decompiler/call_counter.py,sha256=V3TIaSvLUy9vLEWErnvlCS--_ubGWQAeU0tqq6XYeOU,1205
|
|
98
98
|
angr/analyses/decompiler/callsite_maker.py,sha256=W389gPmq8ylVIr38Re5hEBhaLodipT6div4RlirdnEU,15083
|
|
99
|
-
angr/analyses/decompiler/clinic.py,sha256=
|
|
99
|
+
angr/analyses/decompiler/clinic.py,sha256=JCW5Trfyc8dmIKQyrTPuj3Jcwil1vaHEvtUDr2H9kdg,85821
|
|
100
100
|
angr/analyses/decompiler/condition_processor.py,sha256=2d6CLDcGa4WqRBVr5NTFZCtJXSuAGlrAM0fGlknE-x4,49596
|
|
101
101
|
angr/analyses/decompiler/decompilation_cache.py,sha256=xj5kzGV6OlTtXIIcvK0Z17TMunggn9ilgKD3wjDiTB0,1176
|
|
102
102
|
angr/analyses/decompiler/decompilation_options.py,sha256=vbuLF0Oze2ldFNpv2jWFnGG4sJPey527KAAbj9TRvAI,8240
|
|
@@ -105,12 +105,13 @@ angr/analyses/decompiler/empty_node_remover.py,sha256=KhH88_x3A1nR22H3wrdp1gznLu
|
|
|
105
105
|
angr/analyses/decompiler/expression_counters.py,sha256=P4RbtnyEy2lJnNUw_G702W-AIGaL4MszZ5fdrritwwg,2867
|
|
106
106
|
angr/analyses/decompiler/expression_narrower.py,sha256=64VR1xdPVVoCLHOYRPacV9ecQb33rP7nC1l8rpFxTkg,3545
|
|
107
107
|
angr/analyses/decompiler/goto_manager.py,sha256=UD42GvAN7--8GPZuT3blkyEhhpw-HExRfzov79j-3w4,2485
|
|
108
|
-
angr/analyses/decompiler/graph_region.py,sha256=
|
|
108
|
+
angr/analyses/decompiler/graph_region.py,sha256=hBgARiSiv0KfoDbekAMYUKuTHhs_uIz2Qe_0lnFMx8g,16956
|
|
109
109
|
angr/analyses/decompiler/jump_target_collector.py,sha256=rA0IhZuJ20-jOQTjT7fnhyW2qwPdJI4SmnhLRtuADro,1181
|
|
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=kDGGFWWV61I5fbASiTQTHgDCFLIOkffUdDOsu5yg5ok,5385
|
|
112
112
|
angr/analyses/decompiler/region_identifier.py,sha256=KR4SifhPbPwjrJiW2xQ_64BSdAEUnUTWRUFgHeAMhGc,45489
|
|
113
113
|
angr/analyses/decompiler/region_walker.py,sha256=lTfweYbY4_a2f2yGztTKG6JtU1jXf-kaz-NHbX9nkXE,717
|
|
114
|
+
angr/analyses/decompiler/return_maker.py,sha256=BwxpTtJfVDksZ0Y986KRk9d3jKg98SGaiXXLILeL5Pw,2498
|
|
114
115
|
angr/analyses/decompiler/seq_to_blocks.py,sha256=2KINMEgaXMG3XIiFDMRkbn10dggy7a9AHgwV383huRM,529
|
|
115
116
|
angr/analyses/decompiler/sequence_walker.py,sha256=mw4RG-Act5_no_RyQcsxWZwva-n7FdH2a7w_uItGUpI,8428
|
|
116
117
|
angr/analyses/decompiler/utils.py,sha256=jHTMKKyk4GDkWhJGwmZTl_ZD6efJSr9vtG-cULyzKUc,28116
|
|
@@ -120,15 +121,15 @@ angr/analyses/decompiler/ccall_rewriters/rewriter_base.py,sha256=gWezEKB7A_YnlfU
|
|
|
120
121
|
angr/analyses/decompiler/optimization_passes/__init__.py,sha256=xlLn9Mzcd9vmvV0exca84xejLlOqP1MKYv3WVsQxmX8,3954
|
|
121
122
|
angr/analyses/decompiler/optimization_passes/base_ptr_save_simplifier.py,sha256=bjpEMW-Lqj5XW9NWUikGPcRn5scKNc8VvEjVMXxAuq8,5289
|
|
122
123
|
angr/analyses/decompiler/optimization_passes/code_motion.py,sha256=KEQPdpSfSYiIzHFYGkfj3W8ZupJbogQNhYnYKzo1xUA,15319
|
|
123
|
-
angr/analyses/decompiler/optimization_passes/const_derefs.py,sha256=
|
|
124
|
+
angr/analyses/decompiler/optimization_passes/const_derefs.py,sha256=X9N0Dk48_6E0en16lMZ75KhEQfeUmZw19TNFiPzL8Cg,10677
|
|
124
125
|
angr/analyses/decompiler/optimization_passes/cross_jump_reverter.py,sha256=CP-WjyQGOw_mnUF0ZpC5C4syMxlx4Tvy0T_EIZQxXrY,4033
|
|
125
126
|
angr/analyses/decompiler/optimization_passes/div_simplifier.py,sha256=J7LRc3-DKfToxKVejnkHbNel9_56-7xsGyJJiTCwqsQ,17442
|
|
126
127
|
angr/analyses/decompiler/optimization_passes/engine_base.py,sha256=7nnNZkVMqvikHCy9X11M8KLWbL8lF0DoLYPemETWP4c,10388
|
|
127
128
|
angr/analyses/decompiler/optimization_passes/expr_op_swapper.py,sha256=vlPhWDyvuEmbGcd1ka8rS68F72Ty6Hw3J00KM3tWCus,4701
|
|
128
129
|
angr/analyses/decompiler/optimization_passes/flip_boolean_cmp.py,sha256=GuDDqmZXUo_a9Af30n9tcihNQcATDrztmraZ-88v134,3946
|
|
129
|
-
angr/analyses/decompiler/optimization_passes/inlined_string_transformation_simplifier.py,sha256=
|
|
130
|
+
angr/analyses/decompiler/optimization_passes/inlined_string_transformation_simplifier.py,sha256=vTZtL0nMMkMzioSGcxE0B6wuVNZsSmV_Dh1MuItdLZ0,16329
|
|
130
131
|
angr/analyses/decompiler/optimization_passes/ite_expr_converter.py,sha256=-6znFCAXS7Z3cn5CTqr3mg4r1G_jJgDFJHk2PzMVwtE,7756
|
|
131
|
-
angr/analyses/decompiler/optimization_passes/ite_region_converter.py,sha256=
|
|
132
|
+
angr/analyses/decompiler/optimization_passes/ite_region_converter.py,sha256=vjDRO-Rh5LVIlxGRCuggjcz12CIxQuISB0LCC-vF6ZM,7207
|
|
132
133
|
angr/analyses/decompiler/optimization_passes/lowered_switch_simplifier.py,sha256=9hhCcvE15MCM6KoJU1ba11hFiN6MXxYAb9FbntzYJbg,34328
|
|
133
134
|
angr/analyses/decompiler/optimization_passes/mod_simplifier.py,sha256=o2AZIpj4NpOAaWOGbudDUfGJJAD2exu-HvNbwph3mi8,3124
|
|
134
135
|
angr/analyses/decompiler/optimization_passes/multi_simplifier.py,sha256=_63Y2vMNLSXYM6_Grfs89Nu63i5YLxTPmxTR_Z6fwLY,10420
|
|
@@ -159,7 +160,7 @@ angr/analyses/decompiler/peephole_optimizations/bool_expr_xor_1.py,sha256=QANf71
|
|
|
159
160
|
angr/analyses/decompiler/peephole_optimizations/bswap.py,sha256=5u1R-kIyCxDw4oMNnbLhaE9rUiJ_atwDaMoefzpTmAg,6238
|
|
160
161
|
angr/analyses/decompiler/peephole_optimizations/coalesce_same_cascading_ifs.py,sha256=9ogHTcP4vhFfwDzxccnjfhkizKGvM_7tK3y6PqyG5Hg,1020
|
|
161
162
|
angr/analyses/decompiler/peephole_optimizations/const_mull_a_shift.py,sha256=KLdhgU_e1OglEeC7IHipql9UzYpatJc0LydXJJIakL4,3691
|
|
162
|
-
angr/analyses/decompiler/peephole_optimizations/constant_derefs.py,sha256=
|
|
163
|
+
angr/analyses/decompiler/peephole_optimizations/constant_derefs.py,sha256=tLZ04IkbVKlm1HYNhj7pytmLC3YDpIJ7FG0p4Vz99bk,1666
|
|
163
164
|
angr/analyses/decompiler/peephole_optimizations/conv_a_sub0_shr_and.py,sha256=vzROAUvKUrQQmwUXJ-0WyFr1v5f8EPBgjeXIpWhtDak,2578
|
|
164
165
|
angr/analyses/decompiler/peephole_optimizations/conv_shl_shr.py,sha256=0IHIk7uxIC70140k3VcXlnx4QcunAeoETXF1ZgJi2Pk,2070
|
|
165
166
|
angr/analyses/decompiler/peephole_optimizations/eager_eval.py,sha256=A0AUf60c047X7VhOr7tTAJE95qS3yiUxE1dYr9maA-8,10131
|
|
@@ -191,7 +192,7 @@ angr/analyses/decompiler/peephole_optimizations/tidy_stack_addr.py,sha256=OTdxZB
|
|
|
191
192
|
angr/analyses/decompiler/region_simplifiers/__init__.py,sha256=ZeURg5mKbKRpwo8-SqxJ0jy_A6nNpZMxiKpjZJ0_RS0,48
|
|
192
193
|
angr/analyses/decompiler/region_simplifiers/cascading_cond_transformer.py,sha256=4oRjmKwk9tSxUSOTTDGLVM7prp1aTrQOUpNuQ1gfMrA,3721
|
|
193
194
|
angr/analyses/decompiler/region_simplifiers/cascading_ifs.py,sha256=dbAn1fde1-kiF6A9060wEqPKcE3DeBd2Ltt_2UAEdo4,2490
|
|
194
|
-
angr/analyses/decompiler/region_simplifiers/expr_folding.py,sha256=
|
|
195
|
+
angr/analyses/decompiler/region_simplifiers/expr_folding.py,sha256=cTwQHsUz0OyWQwcrTnoIlz2i_H5-xUZfS0Ot1EKrJZE,24126
|
|
195
196
|
angr/analyses/decompiler/region_simplifiers/goto.py,sha256=b8602yf_WcTJXYyKEqh8Wuenwyatxqq-zGIhDPwJnE0,6032
|
|
196
197
|
angr/analyses/decompiler/region_simplifiers/if_.py,sha256=qDkZTrRjDzI4CX6vwEcaddmaPvG4sWHn373VVwmf0e0,5034
|
|
197
198
|
angr/analyses/decompiler/region_simplifiers/ifelse.py,sha256=nWUow7p_TOgFQuUgWXQcH2qSFfxUWJBgkslvajhTbn0,3681
|
|
@@ -202,12 +203,12 @@ angr/analyses/decompiler/region_simplifiers/switch_cluster_simplifier.py,sha256=
|
|
|
202
203
|
angr/analyses/decompiler/region_simplifiers/switch_expr_simplifier.py,sha256=HGIiC6c3C91VfcqxUHe9aTsRohwmMXOHZH_G_dbwwx4,3327
|
|
203
204
|
angr/analyses/decompiler/structured_codegen/__init__.py,sha256=NLEvs8xnJwJiUgX8AmgS7rtFFW4SxtQcA1AjzE-GryA,313
|
|
204
205
|
angr/analyses/decompiler/structured_codegen/base.py,sha256=nJPOoeJCbewchYdXjSE4S2b1-WN6pT3TxmCQMDO0azw,3845
|
|
205
|
-
angr/analyses/decompiler/structured_codegen/c.py,sha256=
|
|
206
|
+
angr/analyses/decompiler/structured_codegen/c.py,sha256=HE5OQmY1map5ZPRIzS_QHW_D4NRWFDJwfCIq6X3iP4U,135388
|
|
206
207
|
angr/analyses/decompiler/structured_codegen/dummy.py,sha256=IVfmtcWpTgNCRVsuW3GdQgDnuPmvodX85V0bBYtF_BI,535
|
|
207
208
|
angr/analyses/decompiler/structured_codegen/dwarf_import.py,sha256=TMz65TkF_ID_Ipocj0aFDb84H6slolN90wq0tzhY2Rk,6773
|
|
208
209
|
angr/analyses/decompiler/structuring/__init__.py,sha256=eSiT6xUpv9K5-enK3OZj2lNzxwowS9_5OTrjHiPgfFs,371
|
|
209
210
|
angr/analyses/decompiler/structuring/dream.py,sha256=xsFPPl0L7nu8ejugCm8FbJUCgYcnCMUCAJQTzNQDLIo,48400
|
|
210
|
-
angr/analyses/decompiler/structuring/phoenix.py,sha256=
|
|
211
|
+
angr/analyses/decompiler/structuring/phoenix.py,sha256=Li8rR3L0UkIlG3_6wwmON_kQFKQA4FtEzcVVVFhTTKE,119594
|
|
211
212
|
angr/analyses/decompiler/structuring/recursive_structurer.py,sha256=hr47-tqWexOXbTRZZlRyEE4T-PGwuZcv58xc16Hliec,7078
|
|
212
213
|
angr/analyses/decompiler/structuring/structurer_base.py,sha256=orV0jRqRh2hkKNsdBwigm5OoXTQDP7dfY6go_Z4if1Q,41330
|
|
213
214
|
angr/analyses/decompiler/structuring/structurer_nodes.py,sha256=PE_byL1mxj811MMM-qQWzSaITtcu5Xn0ZKz0yobnK-k,11964
|
|
@@ -333,7 +334,7 @@ angr/engines/syscall.py,sha256=LNMC3zyis3OiWC7_8Zn1blMw1EDib5FjUqepXlaWDTI,2177
|
|
|
333
334
|
angr/engines/unicorn.py,sha256=gf7LjjWyaaujqSuCq3d-BGm8t5sdZjzsJeBevGfdiLw,24447
|
|
334
335
|
angr/engines/light/__init__.py,sha256=j9vH2fU9MaNVQ8NT3Ek3Tj2zkGlVxlKyzia8zVTofYs,186
|
|
335
336
|
angr/engines/light/data.py,sha256=jZBAJxor2zg5m4s63joSrjUs8H-OeHBZiqZmc3dqEQQ,23132
|
|
336
|
-
angr/engines/light/engine.py,sha256=
|
|
337
|
+
angr/engines/light/engine.py,sha256=wL1OdFcu6nHBopFxLSMJSU1C2mwnC88BCVnwYME2XKY,45137
|
|
337
338
|
angr/engines/pcode/__init__.py,sha256=UwMEwXQvHXIIgedJn2ZOvBBEgfHg2rfREBSpcTSXCZ4,83
|
|
338
339
|
angr/engines/pcode/behavior.py,sha256=gwMFXQ3cibqchRHnRfiVzzzLIg2mgX-2XJlkD82p8J0,28720
|
|
339
340
|
angr/engines/pcode/cc.py,sha256=lwMeO9Mg8L7-uxxPzYmu13n7YLNo-Sr3xxLk_-QHTOU,2994
|
|
@@ -484,7 +485,7 @@ angr/knowledge_plugins/xrefs/__init__.py,sha256=-5A2h048WTRu6Et7q7bqlc-AyBXNuJ9A
|
|
|
484
485
|
angr/knowledge_plugins/xrefs/xref.py,sha256=w4wjDFl4xtJYOtJplp9s1AIX3wI1RE71po3ufh1M4aY,4963
|
|
485
486
|
angr/knowledge_plugins/xrefs/xref_manager.py,sha256=OLHEmgwGbFYWhm6oMgglPQ8Fe7rAvKicFeyQoGqSylc,4009
|
|
486
487
|
angr/knowledge_plugins/xrefs/xref_types.py,sha256=VR3xLQQ-gUg25oX0OL3BJHyQRlZh2A8syBac9ZMS9n4,271
|
|
487
|
-
angr/lib/angr_native.dll,sha256=
|
|
488
|
+
angr/lib/angr_native.dll,sha256=PbNXfzDx1iXUsdsxC8XgZZnMZCJY6-qIEeUqf4kVTkw,19217408
|
|
488
489
|
angr/misc/__init__.py,sha256=Ct-Q6-c-Frdz5Ihkqmou3j_1jyJi8WJXlQxs-gPQg0Y,237
|
|
489
490
|
angr/misc/ansi.py,sha256=TKrx7d_MViChHh5RBR2VLufNrujTUioJWsZS5ugk8k4,807
|
|
490
491
|
angr/misc/autoimport.py,sha256=K64D53xl3xUqBulXAyaypzqYRBjjm4HDn6TlJsBouKw,3426
|
|
@@ -1174,7 +1175,7 @@ angr/protos/xrefs_pb2.py,sha256=uze_1xvipKxY7Xrpxl6BJC6OCwp3_-B62S81FlzXl2Q,1247
|
|
|
1174
1175
|
angr/simos/__init__.py,sha256=lqiR4H7KgNd8uzQT5OYsvrcb3l3moCoxBP-O-UMzPjM,755
|
|
1175
1176
|
angr/simos/cgc.py,sha256=13dtMvJhD7nCLEH1n6nAMR4IbG1WYc8jQ_ASZsP85yU,5568
|
|
1176
1177
|
angr/simos/javavm.py,sha256=NKwosYvx4-_gsT7eGmHHIZNzzdF-T0xK0BuXobrI8oQ,21461
|
|
1177
|
-
angr/simos/linux.py,sha256=
|
|
1178
|
+
angr/simos/linux.py,sha256=l4HN7M3puiKW3hqA3yALBMcAYhDCo7aZGbnhJz-Q9_w,23625
|
|
1178
1179
|
angr/simos/simos.py,sha256=UbhjUTsowcnXBBu6k31Bt5ZNx1QS1ly146q_66TY23g,18275
|
|
1179
1180
|
angr/simos/snimmuc_nxp.py,sha256=Uy43SwCjnKFo207fVz-h0vzwRk-RnIACz1C0Ly3ftw4,5679
|
|
1180
1181
|
angr/simos/userland.py,sha256=a0x1UYVQ0x7Wgnu4PtedS2-7kS4vLqoYNqEwo7Z_5fw,7351
|
|
@@ -1288,9 +1289,9 @@ angr/utils/mp.py,sha256=EPeBml7i1HNOg9OFvj-hoqaGJzKD4fKyM-mHWIaJ3Ko,1825
|
|
|
1288
1289
|
angr/utils/segment_list.py,sha256=lhGy16YKKaD-F0JtWmjJ6a2RFcdTrKcLfPE9ILRVtCs,20431
|
|
1289
1290
|
angr/utils/timing.py,sha256=uOowCP8kotDrKDOjlAod-guBuYkAA8zEtiAwpdwMlIU,1334
|
|
1290
1291
|
angr/utils/typing.py,sha256=_I4dzZSh1_uRKQ3PpjXseA_CaJH6ru2yAxjICkJhfmI,417
|
|
1291
|
-
angr-9.2.
|
|
1292
|
-
angr-9.2.
|
|
1293
|
-
angr-9.2.
|
|
1294
|
-
angr-9.2.
|
|
1295
|
-
angr-9.2.
|
|
1296
|
-
angr-9.2.
|
|
1292
|
+
angr-9.2.100.dist-info/LICENSE,sha256=cgL_ho5B1NH8UxwtBuqThRWdjear8b7hktycaS1sz6g,1327
|
|
1293
|
+
angr-9.2.100.dist-info/METADATA,sha256=HNEOh67lSEwerrYrBKE1-q7obv9vzQ_7uKaHNIyxj5Q,4923
|
|
1294
|
+
angr-9.2.100.dist-info/WHEEL,sha256=at4xwl6JdXdkZHxdo5ixTwJ7ENtVftSy2wqmsdmo_4U,98
|
|
1295
|
+
angr-9.2.100.dist-info/entry_points.txt,sha256=Vjh1C8PMyr5dZFMnik5WkEP01Uwr2T73I3a6N32sgQU,44
|
|
1296
|
+
angr-9.2.100.dist-info/top_level.txt,sha256=dKw0KWTbwLXytFvv15oAAG4sUs3ey47tt6DorJG9-hw,5
|
|
1297
|
+
angr-9.2.100.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|