angr 9.2.144__py3-none-manylinux2014_aarch64.whl → 9.2.146__py3-none-manylinux2014_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +14 -1
- angr/analyses/decompiler/clinic.py +1 -1
- angr/analyses/decompiler/optimization_passes/engine_base.py +9 -1
- angr/analyses/decompiler/optimization_passes/win_stack_canary_simplifier.py +58 -2
- angr/analyses/decompiler/peephole_optimizations/eager_eval.py +11 -0
- angr/analyses/decompiler/ssailification/ssailification.py +1 -1
- angr/analyses/stack_pointer_tracker.py +61 -25
- angr/analyses/typehoon/lifter.py +11 -1
- angr/analyses/typehoon/simple_solver.py +9 -0
- angr/analyses/typehoon/translator.py +16 -0
- angr/analyses/typehoon/typeconsts.py +8 -8
- angr/analyses/vfg.py +1 -1
- angr/knowledge_plugins/functions/function.py +2 -2
- angr/utils/funcid.py +27 -2
- {angr-9.2.144.dist-info → angr-9.2.146.dist-info}/METADATA +6 -6
- {angr-9.2.144.dist-info → angr-9.2.146.dist-info}/RECORD +21 -21
- {angr-9.2.144.dist-info → angr-9.2.146.dist-info}/WHEEL +1 -1
- {angr-9.2.144.dist-info → angr-9.2.146.dist-info}/LICENSE +0 -0
- {angr-9.2.144.dist-info → angr-9.2.146.dist-info}/entry_points.txt +0 -0
- {angr-9.2.144.dist-info → angr-9.2.146.dist-info}/top_level.txt +0 -0
angr/__init__.py
CHANGED
angr/analyses/cfg/cfg_fast.py
CHANGED
|
@@ -1540,6 +1540,19 @@ class CFGFast(ForwardAnalysis[CFGNode, CFGNode, CFGJob, int], CFGBase): # pylin
|
|
|
1540
1540
|
}:
|
|
1541
1541
|
func.info["is_alloca_probe"] = True
|
|
1542
1542
|
|
|
1543
|
+
elif self.project.arch.name == "X86":
|
|
1544
|
+
# determine if the function is __alloca_probe
|
|
1545
|
+
func = self.kb.functions.get_by_addr(func_addr) if self.kb.functions.contains_addr(func_addr) else None
|
|
1546
|
+
if func is not None and len(func.block_addrs_set) == 4:
|
|
1547
|
+
block_bytes = {func.get_block(block_addr).bytes for block_addr in func.block_addrs_set}
|
|
1548
|
+
if block_bytes == {
|
|
1549
|
+
b"-\x00\x10\x00\x00\x85\x00\xeb\xe9",
|
|
1550
|
+
b";\xc8r\n",
|
|
1551
|
+
b"Q\x8dL$\x04+\xc8\x1b\xc0\xf7\xd0#\xc8\x8b\xc4%\x00\xf0\xff\xff;\xc8r\n",
|
|
1552
|
+
b"\x8b\xc1Y\x94\x8b\x00\x89\x04$\xc3",
|
|
1553
|
+
}:
|
|
1554
|
+
func.info["is_alloca_probe"] = True
|
|
1555
|
+
|
|
1543
1556
|
if self._collect_data_ref and self.project is not None and ":" in self.project.arch.name:
|
|
1544
1557
|
# this is a pcode arch - use Clinic to recover data references
|
|
1545
1558
|
|
|
@@ -1829,7 +1842,7 @@ class CFGFast(ForwardAnalysis[CFGNode, CFGNode, CFGJob, int], CFGBase): # pylin
|
|
|
1829
1842
|
|
|
1830
1843
|
if (
|
|
1831
1844
|
self.project.simos is not None
|
|
1832
|
-
and self.project.arch.name
|
|
1845
|
+
and self.project.arch.name in {"X86", "AMD64"}
|
|
1833
1846
|
and self.project.simos.name == "Win32"
|
|
1834
1847
|
and isinstance(self.project.loader.main_object, cle.PE)
|
|
1835
1848
|
):
|
|
@@ -2951,7 +2951,7 @@ class Clinic(Analysis):
|
|
|
2951
2951
|
if self.project.kb.functions.contains_addr(last_stmt.target.value)
|
|
2952
2952
|
else None
|
|
2953
2953
|
)
|
|
2954
|
-
if func is not None and func.name == "__chkstk":
|
|
2954
|
+
if func is not None and (func.name == "__chkstk" or func.info.get("is_alloca_probe", False) is True):
|
|
2955
2955
|
# get rid of this call
|
|
2956
2956
|
node.statements = node.statements[:-1]
|
|
2957
2957
|
if self.project.arch.call_pushes_ret and node.statements:
|
|
@@ -312,7 +312,15 @@ class SimplifierAILEngine(
|
|
|
312
312
|
return expr
|
|
313
313
|
|
|
314
314
|
def _handle_expr_ITE(self, expr):
|
|
315
|
-
return
|
|
315
|
+
return ailment.expression.ITE(
|
|
316
|
+
expr.idx,
|
|
317
|
+
self._expr(expr.cond),
|
|
318
|
+
self._expr(expr.iffalse),
|
|
319
|
+
self._expr(expr.iftrue),
|
|
320
|
+
variable=expr.variable,
|
|
321
|
+
variable_offset=expr.variable_offset,
|
|
322
|
+
**expr.tags,
|
|
323
|
+
)
|
|
316
324
|
|
|
317
325
|
def _handle_expr_Call(self, expr):
|
|
318
326
|
return expr
|
|
@@ -110,8 +110,11 @@ class WinStackCanarySimplifier(OptimizationPass):
|
|
|
110
110
|
_l.debug("Cannot find the statement calling _security_check_cookie() in the predecessor.")
|
|
111
111
|
continue
|
|
112
112
|
|
|
113
|
-
|
|
114
|
-
|
|
113
|
+
canary_storing_stmt_idx = (
|
|
114
|
+
self._find_amd64_canary_storing_stmt(pred, store_offset)
|
|
115
|
+
if self.project.arch.name == "AMD64"
|
|
116
|
+
else self._find_x86_canary_storing_stmt(pred, store_offset)
|
|
117
|
+
)
|
|
115
118
|
if canary_storing_stmt_idx is None:
|
|
116
119
|
_l.debug("Cannot find the canary check statement in the predecessor.")
|
|
117
120
|
continue
|
|
@@ -270,6 +273,59 @@ class WinStackCanarySimplifier(OptimizationPass):
|
|
|
270
273
|
return idx
|
|
271
274
|
return None
|
|
272
275
|
|
|
276
|
+
def _find_x86_canary_storing_stmt(self, block, canary_value_stack_offset):
|
|
277
|
+
load_stmt_idx = None
|
|
278
|
+
|
|
279
|
+
for idx, stmt in enumerate(block.statements):
|
|
280
|
+
# when we are lucky, we have one instruction
|
|
281
|
+
if (
|
|
282
|
+
(
|
|
283
|
+
isinstance(stmt, ailment.Stmt.Assignment)
|
|
284
|
+
and isinstance(stmt.dst, ailment.Expr.VirtualVariable)
|
|
285
|
+
and stmt.dst.was_reg
|
|
286
|
+
and stmt.dst.reg_offset == self.project.arch.registers["eax"][0]
|
|
287
|
+
)
|
|
288
|
+
and isinstance(stmt.src, ailment.Expr.BinaryOp)
|
|
289
|
+
and stmt.src.op == "Xor"
|
|
290
|
+
):
|
|
291
|
+
op0, op1 = stmt.src.operands
|
|
292
|
+
if (
|
|
293
|
+
isinstance(op0, ailment.Expr.Load)
|
|
294
|
+
and isinstance(op0.addr, ailment.Expr.StackBaseOffset)
|
|
295
|
+
and op0.addr.offset == canary_value_stack_offset
|
|
296
|
+
) and isinstance(op1, ailment.Expr.StackBaseOffset):
|
|
297
|
+
# found it
|
|
298
|
+
return idx
|
|
299
|
+
# or when we are unlucky, we have two instructions...
|
|
300
|
+
if (
|
|
301
|
+
isinstance(stmt, ailment.Stmt.Assignment)
|
|
302
|
+
and isinstance(stmt.dst, ailment.Expr.VirtualVariable)
|
|
303
|
+
and stmt.dst.reg_offset == self.project.arch.registers["eax"][0]
|
|
304
|
+
and isinstance(stmt.src, ailment.Expr.Load)
|
|
305
|
+
and isinstance(stmt.src.addr, ailment.Expr.StackBaseOffset)
|
|
306
|
+
and stmt.src.addr.offset == canary_value_stack_offset
|
|
307
|
+
):
|
|
308
|
+
load_stmt_idx = idx
|
|
309
|
+
if (
|
|
310
|
+
load_stmt_idx is not None
|
|
311
|
+
and idx >= load_stmt_idx + 1
|
|
312
|
+
and (
|
|
313
|
+
isinstance(stmt, ailment.Stmt.Assignment)
|
|
314
|
+
and isinstance(stmt.dst, ailment.Expr.VirtualVariable)
|
|
315
|
+
and stmt.dst.was_reg
|
|
316
|
+
and isinstance(stmt.src, ailment.Expr.BinaryOp)
|
|
317
|
+
and stmt.src.op == "Xor"
|
|
318
|
+
)
|
|
319
|
+
and (
|
|
320
|
+
isinstance(stmt.src.operands[0], ailment.Expr.VirtualVariable)
|
|
321
|
+
and stmt.src.operands[0].was_reg
|
|
322
|
+
and stmt.src.operands[0].reg_offset == self.project.arch.registers["eax"][0]
|
|
323
|
+
and isinstance(stmt.src.operands[1], ailment.Expr.StackBaseOffset)
|
|
324
|
+
)
|
|
325
|
+
):
|
|
326
|
+
return idx
|
|
327
|
+
return None
|
|
328
|
+
|
|
273
329
|
@staticmethod
|
|
274
330
|
def _find_return_addr_storing_stmt(block):
|
|
275
331
|
for idx, stmt in enumerate(block.statements):
|
|
@@ -222,6 +222,17 @@ class EagerEvaluation(PeepholeOptimizationExprBase):
|
|
|
222
222
|
)
|
|
223
223
|
return BinaryOp(expr.idx, "Div", (mul, new_const_0), expr.signed, bits=expr.bits, **expr.tags)
|
|
224
224
|
|
|
225
|
+
elif expr.op == "Mod":
|
|
226
|
+
op0, op1 = expr.operands
|
|
227
|
+
if (
|
|
228
|
+
isinstance(op0, Const)
|
|
229
|
+
and isinstance(op0.value, int)
|
|
230
|
+
and isinstance(op1, Const)
|
|
231
|
+
and isinstance(op1.value, int)
|
|
232
|
+
and op1.value != 0
|
|
233
|
+
):
|
|
234
|
+
return Const(expr.idx, None, op0.value % op1.value, expr.bits, **expr.tags)
|
|
235
|
+
|
|
225
236
|
elif expr.op in {"Shr", "Sar"} and isinstance(expr.operands[1], Const):
|
|
226
237
|
expr0, expr1 = expr.operands
|
|
227
238
|
if isinstance(expr0, BinaryOp) and expr0.op == "Shr" and isinstance(expr0.operands[1], Const):
|
|
@@ -145,7 +145,7 @@ class Ssailification(Analysis): # pylint:disable=abstract-method
|
|
|
145
145
|
stackvar_locs = {}
|
|
146
146
|
sorted_stackvar_offs = []
|
|
147
147
|
|
|
148
|
-
#
|
|
148
|
+
# compute phi node locations for each unified definition
|
|
149
149
|
udef_to_defs = defaultdict(set)
|
|
150
150
|
udef_to_blockkeys = defaultdict(set)
|
|
151
151
|
for def_, loc in def_to_loc:
|
|
@@ -15,6 +15,7 @@ from angr.analyses import AnalysesHub
|
|
|
15
15
|
from angr.knowledge_plugins import Function
|
|
16
16
|
from angr.block import BlockNode
|
|
17
17
|
from angr.errors import SimTranslationError
|
|
18
|
+
from angr.calling_conventions import SimStackArg
|
|
18
19
|
from .analysis import Analysis
|
|
19
20
|
|
|
20
21
|
try:
|
|
@@ -554,7 +555,7 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
|
|
|
554
555
|
if vex_block is not None:
|
|
555
556
|
if isinstance(vex_block, pyvex.IRSB):
|
|
556
557
|
curr_stmt_start_addr = self._process_vex_irsb(node, vex_block, state)
|
|
557
|
-
elif pypcode is not None and isinstance(vex_block, pcode.lifter.IRSB):
|
|
558
|
+
elif pypcode is not None and isinstance(vex_block, pcode.lifter.IRSB): # type: ignore
|
|
558
559
|
curr_stmt_start_addr = self._process_pcode_irsb(node, vex_block, state)
|
|
559
560
|
else:
|
|
560
561
|
raise NotImplementedError(f"Unsupported block type {type(vex_block)}")
|
|
@@ -587,7 +588,7 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
|
|
|
587
588
|
raise CouldNotResolveException
|
|
588
589
|
if arg1_expr is BOTTOM:
|
|
589
590
|
return BOTTOM
|
|
590
|
-
return arg0_expr + arg1_expr
|
|
591
|
+
return arg0_expr + arg1_expr # type: ignore
|
|
591
592
|
if expr.op.startswith("Iop_Sub"):
|
|
592
593
|
arg0_expr = _resolve_expr(arg0)
|
|
593
594
|
if arg0_expr is None:
|
|
@@ -599,7 +600,7 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
|
|
|
599
600
|
raise CouldNotResolveException
|
|
600
601
|
if arg1_expr is BOTTOM:
|
|
601
602
|
return BOTTOM
|
|
602
|
-
return arg0_expr - arg1_expr
|
|
603
|
+
return arg0_expr - arg1_expr # type: ignore
|
|
603
604
|
if expr.op.startswith("Iop_And"):
|
|
604
605
|
# handle stack pointer alignments
|
|
605
606
|
arg0_expr = _resolve_expr(arg0)
|
|
@@ -713,43 +714,78 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
|
|
|
713
714
|
pass
|
|
714
715
|
# who are we calling?
|
|
715
716
|
callees = [] if self._func is None else self._find_callees(node)
|
|
717
|
+
sp_adjusted = False
|
|
716
718
|
if callees:
|
|
717
719
|
if len(callees) == 1:
|
|
720
|
+
|
|
718
721
|
callee = callees[0]
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
722
|
+
if callee.info.get("is_rust_probestack", False):
|
|
723
|
+
# sp = sp - rax/eax right after returning from the call
|
|
724
|
+
rust_probe_stack_rax_regname: str | None = None
|
|
725
|
+
if self.project.arch.name == "AMD64":
|
|
726
|
+
rust_probe_stack_rax_regname = "rax"
|
|
727
|
+
elif self.project.arch.name == "X86":
|
|
728
|
+
rust_probe_stack_rax_regname = "eax"
|
|
729
|
+
|
|
730
|
+
if rust_probe_stack_rax_regname is not None:
|
|
731
|
+
for stmt in reversed(vex_block.statements):
|
|
732
|
+
if (
|
|
733
|
+
isinstance(stmt, pyvex.IRStmt.Put)
|
|
734
|
+
and stmt.offset == self.project.arch.registers[rust_probe_stack_rax_regname][0]
|
|
735
|
+
and isinstance(stmt.data, pyvex.IRExpr.Const)
|
|
736
|
+
):
|
|
737
|
+
sp_adjusted = True
|
|
738
|
+
state.put(stmt.offset, Constant(stmt.data.con.value), force=True)
|
|
739
|
+
break
|
|
740
|
+
|
|
741
|
+
if not sp_adjusted and (callee.info.get("is_alloca_probe", False) or callee.name == "__chkstk"):
|
|
742
|
+
# sp = sp - rax, but it's adjusted within the callee
|
|
743
|
+
chkstk_stack_rax_regname: str | None = None
|
|
744
|
+
if self.project.arch.name == "AMD64":
|
|
745
|
+
chkstk_stack_rax_regname = "rax"
|
|
746
|
+
elif self.project.arch.name == "X86":
|
|
747
|
+
chkstk_stack_rax_regname = "eax"
|
|
748
|
+
|
|
749
|
+
if chkstk_stack_rax_regname is not None:
|
|
750
|
+
for stmt in reversed(vex_block.statements):
|
|
751
|
+
if (
|
|
752
|
+
isinstance(stmt, pyvex.IRStmt.Put)
|
|
753
|
+
and stmt.offset == self.project.arch.registers[chkstk_stack_rax_regname][0]
|
|
754
|
+
and isinstance(stmt.data, pyvex.IRExpr.Const)
|
|
755
|
+
and self.project.arch.sp_offset in state.regs
|
|
756
|
+
):
|
|
757
|
+
sp_adjusted = True
|
|
758
|
+
sp_v = state.regs[self.project.arch.sp_offset]
|
|
759
|
+
sp_v -= Constant(stmt.data.con.value)
|
|
760
|
+
state.put(self.project.arch.sp_offset, sp_v, force=True)
|
|
761
|
+
break
|
|
737
762
|
|
|
738
763
|
callee_cleanups = [
|
|
739
764
|
callee
|
|
740
765
|
for callee in callees
|
|
741
|
-
if callee.calling_convention is not None
|
|
766
|
+
if callee.calling_convention is not None
|
|
767
|
+
and callee.calling_convention.CALLEE_CLEANUP
|
|
768
|
+
and callee.prototype is not None
|
|
742
769
|
]
|
|
743
770
|
if callee_cleanups:
|
|
744
771
|
# found callee clean-up cases...
|
|
772
|
+
callee = callee_cleanups[0]
|
|
773
|
+
assert callee.calling_convention is not None # just to make pyright happy
|
|
745
774
|
try:
|
|
746
775
|
v = state.get(self.project.arch.sp_offset)
|
|
747
776
|
incremented = None
|
|
748
777
|
if v is BOTTOM:
|
|
749
778
|
incremented = BOTTOM
|
|
750
|
-
elif
|
|
751
|
-
|
|
752
|
-
|
|
779
|
+
elif callee.prototype is not None:
|
|
780
|
+
num_stack_args = len(
|
|
781
|
+
[
|
|
782
|
+
arg_loc
|
|
783
|
+
for arg_loc in callee.calling_convention.arg_locs(callee.prototype)
|
|
784
|
+
if isinstance(arg_loc, SimStackArg)
|
|
785
|
+
]
|
|
786
|
+
)
|
|
787
|
+
if num_stack_args > 0:
|
|
788
|
+
incremented = v + Constant(self.project.arch.bytes * num_stack_args)
|
|
753
789
|
if incremented is not None:
|
|
754
790
|
state.put(self.project.arch.sp_offset, incremented)
|
|
755
791
|
except CouldNotResolveException:
|
angr/analyses/typehoon/lifter.py
CHANGED
|
@@ -11,8 +11,10 @@ from angr.sim_type import (
|
|
|
11
11
|
SimTypePointer,
|
|
12
12
|
SimStruct,
|
|
13
13
|
SimTypeArray,
|
|
14
|
+
SimTypeFloat,
|
|
15
|
+
SimTypeDouble,
|
|
14
16
|
)
|
|
15
|
-
from .typeconsts import BottomType, Int8, Int16, Int32, Int64, Pointer32, Pointer64, Struct, Array
|
|
17
|
+
from .typeconsts import BottomType, Int8, Int16, Int32, Int64, Pointer32, Pointer64, Struct, Array, Float32, Float64
|
|
16
18
|
|
|
17
19
|
if TYPE_CHECKING:
|
|
18
20
|
from .typeconsts import TypeConstant
|
|
@@ -79,6 +81,12 @@ class TypeLifter:
|
|
|
79
81
|
elem_type = self.lift(ty.elem_type)
|
|
80
82
|
return Array(elem_type, count=ty.length)
|
|
81
83
|
|
|
84
|
+
def _lift_SimTypeFloat(self, ty: SimTypeFloat) -> Float32: # pylint:disable=unused-argument,no-self-use
|
|
85
|
+
return Float32()
|
|
86
|
+
|
|
87
|
+
def _lift_SimTypeDouble(self, ty: SimTypeDouble) -> Float64: # pylint:disable=unused-argument,no-self-use
|
|
88
|
+
return Float64()
|
|
89
|
+
|
|
82
90
|
|
|
83
91
|
_mapping = {
|
|
84
92
|
SimTypeChar: TypeLifter._lift_SimTypeChar,
|
|
@@ -89,4 +97,6 @@ _mapping = {
|
|
|
89
97
|
SimTypePointer: TypeLifter._lift_SimTypePointer,
|
|
90
98
|
SimStruct: TypeLifter._lift_SimStruct,
|
|
91
99
|
SimTypeArray: TypeLifter._lift_SimTypeArray,
|
|
100
|
+
SimTypeFloat: TypeLifter._lift_SimTypeFloat,
|
|
101
|
+
SimTypeDouble: TypeLifter._lift_SimTypeDouble,
|
|
92
102
|
}
|
|
@@ -41,6 +41,9 @@ from .typeconsts import (
|
|
|
41
41
|
Array,
|
|
42
42
|
Function,
|
|
43
43
|
int_type,
|
|
44
|
+
Float,
|
|
45
|
+
Float32,
|
|
46
|
+
Float64,
|
|
44
47
|
)
|
|
45
48
|
from .variance import Variance
|
|
46
49
|
from .dfa import DFAConstraintSolver, EmptyEpsilonNFAError
|
|
@@ -60,6 +63,9 @@ PRIMITIVE_TYPES = {
|
|
|
60
63
|
BottomType(),
|
|
61
64
|
Struct(),
|
|
62
65
|
Array(),
|
|
66
|
+
Float(),
|
|
67
|
+
Float32(),
|
|
68
|
+
Float64(),
|
|
63
69
|
}
|
|
64
70
|
|
|
65
71
|
Top_ = TopType()
|
|
@@ -73,6 +79,9 @@ Pointer64_ = Pointer64()
|
|
|
73
79
|
Pointer32_ = Pointer32()
|
|
74
80
|
Struct_ = Struct()
|
|
75
81
|
Array_ = Array()
|
|
82
|
+
Float_ = Float()
|
|
83
|
+
Float32_ = Float32()
|
|
84
|
+
Float64_ = Float64()
|
|
76
85
|
|
|
77
86
|
# lattice for 64-bit binaries
|
|
78
87
|
BASE_LATTICE_64 = networkx.DiGraph()
|
|
@@ -161,6 +161,12 @@ class TypeTranslator:
|
|
|
161
161
|
self._has_nonexistent_ref = True
|
|
162
162
|
return SimTypeTempRef(tc.typevar)
|
|
163
163
|
|
|
164
|
+
def _translate_Float32(self, tc: typeconsts.Float32) -> sim_type.SimTypeFloat: # pylint:disable=unused-argument
|
|
165
|
+
return sim_type.SimTypeFloat().with_arch(self.arch)
|
|
166
|
+
|
|
167
|
+
def _translate_Float64(self, tc: typeconsts.Float64) -> sim_type.SimTypeDouble: # pylint:disable=unused-argument
|
|
168
|
+
return sim_type.SimTypeDouble().with_arch(self.arch)
|
|
169
|
+
|
|
164
170
|
#
|
|
165
171
|
# Backpatching
|
|
166
172
|
#
|
|
@@ -229,6 +235,12 @@ class TypeTranslator:
|
|
|
229
235
|
return typeconsts.Pointer64(base)
|
|
230
236
|
raise TypeError(f"Unsupported pointer size {self.arch.bits}")
|
|
231
237
|
|
|
238
|
+
def _translate_SimTypeFloat(self, st: sim_type.SimTypeFloat) -> typeconsts.Float32:
|
|
239
|
+
return typeconsts.Float32()
|
|
240
|
+
|
|
241
|
+
def _translate_SimTypeDouble(self, st: sim_type.SimTypeDouble) -> typeconsts.Float64:
|
|
242
|
+
return typeconsts.Float64()
|
|
243
|
+
|
|
232
244
|
|
|
233
245
|
TypeConstHandlers = {
|
|
234
246
|
typeconsts.Pointer64: TypeTranslator._translate_Pointer64,
|
|
@@ -243,6 +255,8 @@ TypeConstHandlers = {
|
|
|
243
255
|
typeconsts.Int256: TypeTranslator._translate_Int256,
|
|
244
256
|
typeconsts.Int512: TypeTranslator._translate_Int512,
|
|
245
257
|
typeconsts.TypeVariableReference: TypeTranslator._translate_TypeVariableReference,
|
|
258
|
+
typeconsts.Float32: TypeTranslator._translate_Float32,
|
|
259
|
+
typeconsts.Float64: TypeTranslator._translate_Float64,
|
|
246
260
|
}
|
|
247
261
|
|
|
248
262
|
|
|
@@ -257,4 +271,6 @@ SimTypeHandlers = {
|
|
|
257
271
|
sim_type.SimTypeInt512: TypeTranslator._translate_SimTypeInt512,
|
|
258
272
|
sim_type.SimStruct: TypeTranslator._translate_SimStruct,
|
|
259
273
|
sim_type.SimTypeArray: TypeTranslator._translate_SimTypeArray,
|
|
274
|
+
sim_type.SimTypeFloat: TypeTranslator._translate_SimTypeFloat,
|
|
275
|
+
sim_type.SimTypeDouble: TypeTranslator._translate_SimTypeDouble,
|
|
260
276
|
}
|
|
@@ -114,23 +114,23 @@ class Int512(Int):
|
|
|
114
114
|
return "int512"
|
|
115
115
|
|
|
116
116
|
|
|
117
|
-
class
|
|
117
|
+
class Float(TypeConstant):
|
|
118
118
|
def __repr__(self, memo=None) -> str:
|
|
119
119
|
return "floatbase"
|
|
120
120
|
|
|
121
121
|
|
|
122
|
-
class Float
|
|
122
|
+
class Float32(Float):
|
|
123
123
|
SIZE = 4
|
|
124
124
|
|
|
125
125
|
def __repr__(self, memo=None):
|
|
126
|
-
return "
|
|
126
|
+
return "float32"
|
|
127
127
|
|
|
128
128
|
|
|
129
|
-
class
|
|
129
|
+
class Float64(Float):
|
|
130
130
|
SIZE = 8
|
|
131
131
|
|
|
132
132
|
def __repr__(self, memo=None):
|
|
133
|
-
return "
|
|
133
|
+
return "float64"
|
|
134
134
|
|
|
135
135
|
|
|
136
136
|
class Pointer(TypeConstant):
|
|
@@ -317,9 +317,9 @@ def int_type(bits: int) -> Int:
|
|
|
317
317
|
raise TypeError(f"Not a known size of int: {bits}")
|
|
318
318
|
|
|
319
319
|
|
|
320
|
-
def float_type(bits: int) ->
|
|
320
|
+
def float_type(bits: int) -> Float | None:
|
|
321
321
|
if bits == 32:
|
|
322
|
-
return
|
|
322
|
+
return Float32()
|
|
323
323
|
if bits == 64:
|
|
324
|
-
return
|
|
324
|
+
return Float64()
|
|
325
325
|
return None
|
angr/analyses/vfg.py
CHANGED
|
@@ -1547,7 +1547,7 @@ class VFG(ForwardAnalysis[SimState, VFGNode, VFGJob, BlockID], Analysis): # pyl
|
|
|
1547
1547
|
reg_sp_si = self._create_stack_region(successor_state, successor_addr)
|
|
1548
1548
|
|
|
1549
1549
|
# Save the new sp register
|
|
1550
|
-
new_reg_sp_expr = reg_sp_si.annotate(claripy.annotation.RegionAnnotation("global", 0
|
|
1550
|
+
new_reg_sp_expr = reg_sp_si.annotate(claripy.annotation.RegionAnnotation("global", 0))
|
|
1551
1551
|
successor_state.regs.sp = new_reg_sp_expr
|
|
1552
1552
|
|
|
1553
1553
|
new_job = VFGJob(
|
|
@@ -638,12 +638,12 @@ class Function(Serializable):
|
|
|
638
638
|
return self.binary.loader.find_symbol(self.addr)
|
|
639
639
|
|
|
640
640
|
@property
|
|
641
|
-
def pseudocode(self) -> str:
|
|
641
|
+
def pseudocode(self) -> str | None:
|
|
642
642
|
"""
|
|
643
643
|
:return: the function's pseudocode
|
|
644
644
|
"""
|
|
645
645
|
dec = self.project.analyses.Decompiler(self, cfg=self._function_manager._kb.cfgs.get_most_accurate())
|
|
646
|
-
return dec.codegen.text
|
|
646
|
+
return dec.codegen.text if dec.codegen else None
|
|
647
647
|
|
|
648
648
|
def add_jumpout_site(self, node: CodeNode):
|
|
649
649
|
"""
|
angr/utils/funcid.py
CHANGED
|
@@ -17,7 +17,8 @@ def is_function_security_check_cookie(func, project, security_cookie_addr: int)
|
|
|
17
17
|
return False
|
|
18
18
|
ins0 = block.capstone.insns[0]
|
|
19
19
|
if (
|
|
20
|
-
|
|
20
|
+
project.arch.name == "AMD64"
|
|
21
|
+
and ins0.mnemonic == "cmp"
|
|
21
22
|
and len(ins0.operands) == 2
|
|
22
23
|
and ins0.operands[0].type == capstone.x86.X86_OP_REG
|
|
23
24
|
and ins0.operands[0].reg == capstone.x86.X86_REG_RCX
|
|
@@ -29,6 +30,20 @@ def is_function_security_check_cookie(func, project, security_cookie_addr: int)
|
|
|
29
30
|
ins1 = block.capstone.insns[1]
|
|
30
31
|
if ins1.mnemonic == "jne":
|
|
31
32
|
return True
|
|
33
|
+
if (
|
|
34
|
+
project.arch.name == "X86"
|
|
35
|
+
and ins0.mnemonic == "cmp"
|
|
36
|
+
and len(ins0.operands) == 2
|
|
37
|
+
and ins0.operands[0].type == capstone.x86.X86_OP_REG
|
|
38
|
+
and ins0.operands[0].reg == capstone.x86.X86_REG_ECX
|
|
39
|
+
and ins0.operands[1].type == capstone.x86.X86_OP_MEM
|
|
40
|
+
and ins0.operands[1].mem.base == 0
|
|
41
|
+
and ins0.operands[1].mem.disp == security_cookie_addr
|
|
42
|
+
and ins0.operands[1].mem.index == 0
|
|
43
|
+
):
|
|
44
|
+
ins1 = block.capstone.insns[1]
|
|
45
|
+
if ins1.mnemonic == "jne":
|
|
46
|
+
return True
|
|
32
47
|
return False
|
|
33
48
|
|
|
34
49
|
|
|
@@ -63,13 +78,23 @@ def is_function_security_init_cookie(func: Function, project, security_cookie_ad
|
|
|
63
78
|
continue
|
|
64
79
|
last_insn = block.capstone.insns[-1]
|
|
65
80
|
if (
|
|
66
|
-
|
|
81
|
+
project.arch.name == "AMD64"
|
|
82
|
+
and last_insn.mnemonic == "mov"
|
|
67
83
|
and len(last_insn.operands) == 2
|
|
68
84
|
and last_insn.operands[0].type == capstone.x86.X86_OP_MEM
|
|
69
85
|
and last_insn.operands[0].mem.base == capstone.x86.X86_REG_RIP
|
|
70
86
|
and last_insn.operands[0].mem.index == 0
|
|
71
87
|
and last_insn.operands[0].mem.disp + last_insn.address + last_insn.size == security_cookie_addr
|
|
72
88
|
and last_insn.operands[1].type == capstone.x86.X86_OP_REG
|
|
89
|
+
) or (
|
|
90
|
+
project.arch.name == "X86"
|
|
91
|
+
and last_insn.mnemonic == "mov"
|
|
92
|
+
and len(last_insn.operands) == 2
|
|
93
|
+
and last_insn.operands[0].type == capstone.x86.X86_OP_MEM
|
|
94
|
+
and last_insn.operands[0].mem.base == 0
|
|
95
|
+
and last_insn.operands[0].mem.index == 0
|
|
96
|
+
and last_insn.operands[0].mem.disp == security_cookie_addr
|
|
97
|
+
and last_insn.operands[1].type == capstone.x86.X86_OP_REG
|
|
73
98
|
):
|
|
74
99
|
return True
|
|
75
100
|
return False
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: angr
|
|
3
|
-
Version: 9.2.
|
|
3
|
+
Version: 9.2.146
|
|
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: CppHeaderParser
|
|
19
19
|
Requires-Dist: GitPython
|
|
20
|
-
Requires-Dist: ailment==9.2.
|
|
21
|
-
Requires-Dist: archinfo==9.2.
|
|
20
|
+
Requires-Dist: ailment==9.2.146
|
|
21
|
+
Requires-Dist: archinfo==9.2.146
|
|
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.146
|
|
26
|
+
Requires-Dist: cle==9.2.146
|
|
27
27
|
Requires-Dist: mulpyplexer
|
|
28
28
|
Requires-Dist: nampa
|
|
29
29
|
Requires-Dist: networkx!=2.8.1,>=2.0
|
|
@@ -32,7 +32,7 @@ Requires-Dist: psutil
|
|
|
32
32
|
Requires-Dist: pycparser>=2.18
|
|
33
33
|
Requires-Dist: pydemumble
|
|
34
34
|
Requires-Dist: pyformlang
|
|
35
|
-
Requires-Dist: pyvex==9.2.
|
|
35
|
+
Requires-Dist: pyvex==9.2.146
|
|
36
36
|
Requires-Dist: rich>=13.1.0
|
|
37
37
|
Requires-Dist: sortedcontainers
|
|
38
38
|
Requires-Dist: sympy
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
angr/__init__.py,sha256=
|
|
1
|
+
angr/__init__.py,sha256=uGu8UdlEHVmKVs4G8LMiSDyo78554z4kM1ePpWpHIsg,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
|
|
@@ -57,10 +57,10 @@ angr/analyses/s_liveness.py,sha256=K4soSrcQE9pIn7Yf2Lb3LZEu1ymuQVpWzOqLKunFDGQ,7
|
|
|
57
57
|
angr/analyses/s_propagator.py,sha256=ChFdiT4wCN0p5mY0UsFGopH3ZH0zM5V_2Ur5cN15Kcc,23667
|
|
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
|
-
angr/analyses/stack_pointer_tracker.py,sha256=
|
|
60
|
+
angr/analyses/stack_pointer_tracker.py,sha256=xY6ed-TM_WCodDt2aMJgt_TNAP8TN630cLNDcoccjrs,35614
|
|
61
61
|
angr/analyses/static_hooker.py,sha256=8aine4A1KnkWNfn7IarlWUyX7NjygbFDYbE3_ptCPlA,1764
|
|
62
62
|
angr/analyses/veritesting.py,sha256=M6WNsbgiv4ScFPQIaFzujNFya66rQ9GSieaRLuC6RSo,25062
|
|
63
|
-
angr/analyses/vfg.py,sha256=
|
|
63
|
+
angr/analyses/vfg.py,sha256=04X_mup9P82bkQIXMju3_DBPPJB1TytA_7RR9uAu3tU,72868
|
|
64
64
|
angr/analyses/vsa_ddg.py,sha256=PNJ1vQNdHKYCcuXrsXZohtjrxznaWn6GZY2TfhBoY2Q,16136
|
|
65
65
|
angr/analyses/vtable.py,sha256=1Ed7jzr99rk9VgOGzcxBw_6GFqby5mIdSTGPqQPhcZM,3872
|
|
66
66
|
angr/analyses/xrefs.py,sha256=vs6cpVmwXHOmxrI9lJUwCRMYbPSqvIQXS5_fINMaOGI,10290
|
|
@@ -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=gDbi5bKkM90Bvdp37QbW_iAIGVKuJ5pZmcS_dcB42Rc,124229
|
|
76
76
|
angr/analyses/cfg/cfg_emulated.py,sha256=JgAen52lAK0v2f_EwiB_gS9BBhg8oqTALN7IVFd80Hk,148051
|
|
77
|
-
angr/analyses/cfg/cfg_fast.py,sha256=
|
|
77
|
+
angr/analyses/cfg/cfg_fast.py,sha256=ybkp6Hthz1UPJH2Am1OAIkKgXomFAfq4C96lw5yMvkk,226977
|
|
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=qWiTSIAQgXWmaYa9YYaiKsSTwUVClymaXv9sCX-bY-k,835
|
|
@@ -108,7 +108,7 @@ angr/analyses/decompiler/block_io_finder.py,sha256=xMwG8Bi69OGNYVs0U0F4yxM8kEsny
|
|
|
108
108
|
angr/analyses/decompiler/block_similarity.py,sha256=SseCdWgh-kS9q_C_BRxlQ4OwCRQfg-9IyncxKXm_OG8,6849
|
|
109
109
|
angr/analyses/decompiler/block_simplifier.py,sha256=Pl7qh9ODO41iXkBsKuB8-1gtjnqr6Qc1b8So2MbrTLM,13537
|
|
110
110
|
angr/analyses/decompiler/callsite_maker.py,sha256=eWO19uHZVUs3i4Bu8iGSjuJkHZ4CleB0RNA_zTUJByw,22168
|
|
111
|
-
angr/analyses/decompiler/clinic.py,sha256=
|
|
111
|
+
angr/analyses/decompiler/clinic.py,sha256=Zj6PRpipY-CWccLMXpsknOcNyOuSgybKwK6VHV9Ho7I,138154
|
|
112
112
|
angr/analyses/decompiler/condition_processor.py,sha256=BCBcgj-QDGNj3ajOKzEktqckTozcSgonaMk1a42QAGc,53853
|
|
113
113
|
angr/analyses/decompiler/decompilation_cache.py,sha256=oNkeyrEXhyinrN7-fKeDEuGP6I_oAclGjRS4Aa36FoE,1488
|
|
114
114
|
angr/analyses/decompiler/decompilation_options.py,sha256=NDB67DI1L-stvJ4b1eQkfV26HgDJ_rG9-6PEv08G9-8,8195
|
|
@@ -154,7 +154,7 @@ angr/analyses/decompiler/optimization_passes/const_prop_reverter.py,sha256=-Y8JX
|
|
|
154
154
|
angr/analyses/decompiler/optimization_passes/cross_jump_reverter.py,sha256=DzvgsAhU4GqvS0yN0Q2JezkJAuo2KInCgZ7fsB-ibz4,4021
|
|
155
155
|
angr/analyses/decompiler/optimization_passes/deadblock_remover.py,sha256=yqW4Ba4Kw7Bf_HqyACLhdsuj2XQhiSXjd02f7Wubf2A,2707
|
|
156
156
|
angr/analyses/decompiler/optimization_passes/div_simplifier.py,sha256=fdMyGtykG9QepIUFL2_KN9lqsJFqHsVwNoJ1p8GlQ7A,18739
|
|
157
|
-
angr/analyses/decompiler/optimization_passes/engine_base.py,sha256=
|
|
157
|
+
angr/analyses/decompiler/optimization_passes/engine_base.py,sha256=pc81VuwPCnJlcUv2cBR2xNt9Egrv-Txua1n_3DXhd9I,16934
|
|
158
158
|
angr/analyses/decompiler/optimization_passes/expr_op_swapper.py,sha256=PJMJ0INWiINSkv1eD5QsMJS81XtfuyKqoqe6NTkU120,4715
|
|
159
159
|
angr/analyses/decompiler/optimization_passes/flip_boolean_cmp.py,sha256=q2ZOxKQUXUwQNEDjEnj-ji32f6n_XR8M82lr_0ImJdM,5079
|
|
160
160
|
angr/analyses/decompiler/optimization_passes/inlined_string_transformation_simplifier.py,sha256=_rqXGIs03Idkw7IOtxHhapQ-qCMO_mKlJ_FfHAM6TAo,24842
|
|
@@ -173,7 +173,7 @@ angr/analyses/decompiler/optimization_passes/stack_canary_simplifier.py,sha256=_
|
|
|
173
173
|
angr/analyses/decompiler/optimization_passes/switch_default_case_duplicator.py,sha256=gvGpjP3t-an8iIBkmPGXob0-aRHL2idGZpd7hErlgFo,6461
|
|
174
174
|
angr/analyses/decompiler/optimization_passes/switch_reused_entry_rewriter.py,sha256=m7ZMkqE2qbl4rl4M_Fi8xS6I1vUaTzUBIzsE6qpbwkM,4020
|
|
175
175
|
angr/analyses/decompiler/optimization_passes/tag_slicer.py,sha256=8_gmoeYgDD1Hb8Rpqcb-01_B4897peDF-J6KA5PjQT8,1176
|
|
176
|
-
angr/analyses/decompiler/optimization_passes/win_stack_canary_simplifier.py,sha256=
|
|
176
|
+
angr/analyses/decompiler/optimization_passes/win_stack_canary_simplifier.py,sha256=MHrVduNXHBmaa4-6PyqBLj7Urc8DnK-zd8zrqawiVxM,15674
|
|
177
177
|
angr/analyses/decompiler/optimization_passes/x86_gcc_getpc_simplifier.py,sha256=6NxaX2oT6BMkevb8xt9vlS3Jl-CmSK59F0FVab68B48,3088
|
|
178
178
|
angr/analyses/decompiler/optimization_passes/duplication_reverter/__init__.py,sha256=hTeOdooVDZnBnjiAguD7_BS9YJru8rOiSHN3H0sdzcA,126
|
|
179
179
|
angr/analyses/decompiler/optimization_passes/duplication_reverter/ail_merge_graph.py,sha256=Trp6qkwO_L4oMfdX78ZOoplcIpLV4CV1k_ZimY2IvxA,21658
|
|
@@ -204,7 +204,7 @@ angr/analyses/decompiler/peephole_optimizations/const_mull_a_shift.py,sha256=3KT
|
|
|
204
204
|
angr/analyses/decompiler/peephole_optimizations/constant_derefs.py,sha256=5ThmIgu38Un_N5AltnQtcTnoEnOT45HRu6NehB3rG5M,1713
|
|
205
205
|
angr/analyses/decompiler/peephole_optimizations/conv_a_sub0_shr_and.py,sha256=6WooyVqwdlMLixGFR8QE0n6GDEC2AluVo4dIr7vwmqY,2379
|
|
206
206
|
angr/analyses/decompiler/peephole_optimizations/conv_shl_shr.py,sha256=5LtXTzPwO_Dtru3UYbr6l8YYylxKrAVZ9q6Gjk1C8sI,2105
|
|
207
|
-
angr/analyses/decompiler/peephole_optimizations/eager_eval.py,sha256=
|
|
207
|
+
angr/analyses/decompiler/peephole_optimizations/eager_eval.py,sha256=igDQmyEQtOT6KgBH_yfgm_JUBaycHBfytdLV1uxGFVE,17550
|
|
208
208
|
angr/analyses/decompiler/peephole_optimizations/extended_byte_and_mask.py,sha256=r39kiAST4tC-iInTuFgnek0KOljBS3AxS2wPvEpEB58,2044
|
|
209
209
|
angr/analyses/decompiler/peephole_optimizations/inlined_strcpy.py,sha256=40RcqWIMALxfA-LG-DN2N_yK5uW2HWF_x4AquCTMbNU,6245
|
|
210
210
|
angr/analyses/decompiler/peephole_optimizations/inlined_strcpy_consolidation.py,sha256=wKj38t6sTd6wpbVpbPG7Nxiz9vU5K_TvL4sws04TsDk,4681
|
|
@@ -253,7 +253,7 @@ angr/analyses/decompiler/ssailification/__init__.py,sha256=zcHoI7e2El2RSU_bHTpQR
|
|
|
253
253
|
angr/analyses/decompiler/ssailification/rewriting.py,sha256=JW_StoLWuDs2LGyG8XjRUbzvQl7-7s2B8j1GKVaYoDo,15045
|
|
254
254
|
angr/analyses/decompiler/ssailification/rewriting_engine.py,sha256=Jtjg_o0EyZFgadKhAulNMmDEK3wsvbRn_XbnaRjqlMM,37631
|
|
255
255
|
angr/analyses/decompiler/ssailification/rewriting_state.py,sha256=L7apDXQLPiItuLdQFoQdut5RMUE8MRV1zRc3CsnuH6E,1883
|
|
256
|
-
angr/analyses/decompiler/ssailification/ssailification.py,sha256=
|
|
256
|
+
angr/analyses/decompiler/ssailification/ssailification.py,sha256=kEEph4IyCNY55XJvZU8RK3_y8TVZhBM2Yll2VGzGCzw,9897
|
|
257
257
|
angr/analyses/decompiler/ssailification/traversal.py,sha256=kZcua4SlDZ8u4EIkjc1Qh85EEYGX63PZ2NYPNq78Kzs,4011
|
|
258
258
|
angr/analyses/decompiler/ssailification/traversal_engine.py,sha256=BiXCqC3M3-reyq1Pxspo31Rnr9mTOojiFXa3tGlxipY,10512
|
|
259
259
|
angr/analyses/decompiler/ssailification/traversal_state.py,sha256=RDs2mTc6GYnbMom2gBfNfNMcazKMSkhemEmse8uELTY,1558
|
|
@@ -348,10 +348,10 @@ angr/analyses/s_reaching_definitions/s_rda_view.py,sha256=g3ESg9G7eLllEawCPN892u
|
|
|
348
348
|
angr/analyses/s_reaching_definitions/s_reaching_definitions.py,sha256=_SooCn9qpwwCLsZ8end3Gos6XZbzjiBjWVjxG-VaNso,7596
|
|
349
349
|
angr/analyses/typehoon/__init__.py,sha256=KjKBUZadAd3grXUy48_qO0L4Me-riSqPGteVDcTL59M,92
|
|
350
350
|
angr/analyses/typehoon/dfa.py,sha256=41lzhE-QmkC342SjfaaPI41lr4Au5XROTu_7oenvg7g,3823
|
|
351
|
-
angr/analyses/typehoon/lifter.py,sha256=
|
|
352
|
-
angr/analyses/typehoon/simple_solver.py,sha256=
|
|
353
|
-
angr/analyses/typehoon/translator.py,sha256
|
|
354
|
-
angr/analyses/typehoon/typeconsts.py,sha256=
|
|
351
|
+
angr/analyses/typehoon/lifter.py,sha256=3GX0QzjzIyFAiF3R_e2BlvbGwqcDFWy51BF7rQpwSl4,3250
|
|
352
|
+
angr/analyses/typehoon/simple_solver.py,sha256=tIzhZ1H_DwbwGCpgspBBBjXvLiHyPGZD9le7r93s6rU,53307
|
|
353
|
+
angr/analyses/typehoon/translator.py,sha256=-SSTU_9vGlRun7msRll22OLYoVFHvlFJxEyctMVKjeU,10454
|
|
354
|
+
angr/analyses/typehoon/typeconsts.py,sha256=lh5nygChVPwI4IOLy8QnkBvqxfO22dDK_tKfAE0cYlg,7677
|
|
355
355
|
angr/analyses/typehoon/typehoon.py,sha256=ek7g_5v1bLNi8fv5FgYmMQrsOWj19qM8WvZvjzXd2NU,11420
|
|
356
356
|
angr/analyses/typehoon/typevars.py,sha256=cvbeeEDapb0LgGgtgUVpbhAcfuaylk7vEiwCqPxvtQo,16332
|
|
357
357
|
angr/analyses/typehoon/variance.py,sha256=3wYw3of8uoar-MQ7gD6arALiwlJRW990t0BUqMarXIY,193
|
|
@@ -528,7 +528,7 @@ angr/knowledge_plugins/cfg/cfg_node.py,sha256=mAvQ8XAEURM7y0suc_S9lfxCmfXSTJHmWB
|
|
|
528
528
|
angr/knowledge_plugins/cfg/indirect_jump.py,sha256=W3KWpH7Sx-6Z7h_BwQjCK_XfP3ce_MaeAu_Aaq3D3qg,2072
|
|
529
529
|
angr/knowledge_plugins/cfg/memory_data.py,sha256=QLxFZfrtwz8u6UJn1L-Sxa-C8S0Gy9IOlfNfHCLPIow,5056
|
|
530
530
|
angr/knowledge_plugins/functions/__init__.py,sha256=asiLNiT6sHbjP6eU-kDpawIoVxv4J35cwz5yQHtQ2E0,167
|
|
531
|
-
angr/knowledge_plugins/functions/function.py,sha256=
|
|
531
|
+
angr/knowledge_plugins/functions/function.py,sha256=UjuGbWlXNVcXiN3xkUrf7H-Ip8eivEAFg20AVAa1Wkg,67534
|
|
532
532
|
angr/knowledge_plugins/functions/function_manager.py,sha256=gdXZY5__a8c_ItQoDkJq4ZBVk-ZLHnmBPYsHA6uEjeA,20001
|
|
533
533
|
angr/knowledge_plugins/functions/function_parser.py,sha256=Ma_51hPet3iVJgMtBhKaT48CcNnxCNv2ys5oMrqJ3bw,11821
|
|
534
534
|
angr/knowledge_plugins/functions/soot_function.py,sha256=lYMe4qbkhAkXqGHTVb0-RM_kB8xWYUocuioK7UmKZgQ,4847
|
|
@@ -1355,7 +1355,7 @@ angr/utils/endness.py,sha256=wBcek3rwRQCYdMVFOV5h5q16Ahgjn2x_zZdPeZQEui0,501
|
|
|
1355
1355
|
angr/utils/enums_conv.py,sha256=fA6qeoRZ6Cj6gCIS_PZbP4PX7E8IybnYQ90OZGnBVrc,2746
|
|
1356
1356
|
angr/utils/env.py,sha256=aO4N2h7DUsUQtTgnC5J_oPHvMxJRur20m5UFSkmy4XU,398
|
|
1357
1357
|
angr/utils/formatting.py,sha256=OWzSfAlKcL09cEtcqxszYWHsRO9tih7hvXD2K9kUZc8,4343
|
|
1358
|
-
angr/utils/funcid.py,sha256=
|
|
1358
|
+
angr/utils/funcid.py,sha256=Rd4r8juv2IpeMtCpPp4wxJoEZTnZZ1NsxdT42tvrKVA,6353
|
|
1359
1359
|
angr/utils/graph.py,sha256=0A4NqNvWXxXMrzBENbeyDE8t78MZ01mzmGesZplA8OQ,30882
|
|
1360
1360
|
angr/utils/lazy_import.py,sha256=7Mx-y-aZFsXX9jNxvEcXT-rO8tL8rknb6D6RbSFOI1M,343
|
|
1361
1361
|
angr/utils/library.py,sha256=z3rFYm7ePZTXNZJuKiQrR0SnlbVb-OzkX0t0U44nXDk,7181
|
|
@@ -1369,9 +1369,9 @@ angr/utils/types.py,sha256=5EDtrusFLf1fIcMz8fgJiPPsUhpEm0bf_oqZ_PSRje0,1836
|
|
|
1369
1369
|
angr/utils/ssa/__init__.py,sha256=ohP9IJh9ZvdVH8nH-ZrYA8hwIi8L98XQ6NMNL6q_pJ0,13649
|
|
1370
1370
|
angr/utils/ssa/tmp_uses_collector.py,sha256=rSpvMxBHzg-tmvhsfjn3iLyPEKzaZN-xpQrdslMq3J4,793
|
|
1371
1371
|
angr/utils/ssa/vvar_uses_collector.py,sha256=O2aNZeM5DL8qatyhYuMhgbYGFp6Onm2yr9pKq1wRjA0,1347
|
|
1372
|
-
angr-9.2.
|
|
1373
|
-
angr-9.2.
|
|
1374
|
-
angr-9.2.
|
|
1375
|
-
angr-9.2.
|
|
1376
|
-
angr-9.2.
|
|
1377
|
-
angr-9.2.
|
|
1372
|
+
angr-9.2.146.dist-info/LICENSE,sha256=cgL_ho5B1NH8UxwtBuqThRWdjear8b7hktycaS1sz6g,1327
|
|
1373
|
+
angr-9.2.146.dist-info/METADATA,sha256=bRHwQxiFzD0OqTpgVLJXt1m8nMl1oLaE7k1jfw-_Lag,4909
|
|
1374
|
+
angr-9.2.146.dist-info/WHEEL,sha256=yXaLHS9b5_h8hsOzPS1xZSo9g3iuDxqM_dtowxBXduM,109
|
|
1375
|
+
angr-9.2.146.dist-info/entry_points.txt,sha256=Vjh1C8PMyr5dZFMnik5WkEP01Uwr2T73I3a6N32sgQU,44
|
|
1376
|
+
angr-9.2.146.dist-info/top_level.txt,sha256=dKw0KWTbwLXytFvv15oAAG4sUs3ey47tt6DorJG9-hw,5
|
|
1377
|
+
angr-9.2.146.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|