angr 9.2.137__py3-none-macosx_11_0_arm64.whl → 9.2.138__py3-none-macosx_11_0_arm64.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 CHANGED
@@ -2,7 +2,7 @@
2
2
  # pylint: disable=wrong-import-position
3
3
  from __future__ import annotations
4
4
 
5
- __version__ = "9.2.137"
5
+ __version__ = "9.2.138"
6
6
 
7
7
  if bytes is str:
8
8
  raise Exception(
@@ -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=10, last_node=None):
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=10, **kwargs):
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
- from ailment.expression import UnaryOp
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" and isinstance(expr.operand, UnaryOp) and expr.operand.op == "Not":
16
- return expr.operand.operand
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
@@ -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 src_varids
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(src_varids))]
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
- is_const_vvar_load_assignment(stmt)
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
- elif (
207
- len(
208
- {
209
- loc
210
- for _, loc in vvar_uselocs[vvar.varid]
211
- if (loc.block_addr, loc.block_idx, loc.stmt_idx) not in (retsites | jumpsites)
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
- # this vvar is used once if we exclude its uses at ret sites or jump sites. we can propagate it
218
- for vvar_used, vvar_useloc in vvar_uselocs[vvar.varid]:
219
- replacements[vvar_useloc][vvar_used] = stmt.src
220
- continue
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 isinstance(stmt_src, Load) and isinstance(stmt_src.addr, Const):
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")
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
- return [
255
- {"address": init, "jumpkind": "Ijk_Call", "namehint": "init"},
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):
@@ -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.137
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.137
20
- Requires-Dist: archinfo==9.2.137
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.137
25
- Requires-Dist: cle==9.2.137
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.137
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=s0vUBFdXcJg3vsEf7xzE_79znBwxn_hbFlBMo_Rt40U,9153
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=E814rQ_Op9mGlHroDKaoUDz1GvKEgQoJ2E2Ta7Bq-GM,19429
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=M15T2v62b4lS_EHlAdNouiG_N6CKplIg5YbmhOQcG2s,17027
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=NCnv3IjHfgSNvtL9AjBQMwGqCTgAzUS1QiuESFOF8xI,225627
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=QWUGnfQ0FUekGs_I6X-ZKvAvL39VX2hFRcZrlXd72fY,7957
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=ULonaiVMx2g7bflZrfoEgjrW7yQJDsfdieTdV7kfGug,4031
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=JOsJeo77vGGaEFFXSk2pHub6gleQmWsnvNdZEqv_uBg,538
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=B-DnN8UUxL7nKUbKqZRibEiro_uM40rWm6DMT1ncTcI,16187984
555
+ angr/lib/angr_native.dylib,sha256=7xuGaJBVFo-KpAxqehDXgS3d3ZIuousvl9itoXk0r_I,16187984
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=ow0xMnxG316X82QYGWxVhovq_ZNRpPqrtszgweYH2Rc,11073
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=OD3eTWAiH9QXGpwliNBCTC3Z4bux9iBX3Sp50aUNHvI,8758
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.137.dist-info/LICENSE,sha256=cgL_ho5B1NH8UxwtBuqThRWdjear8b7hktycaS1sz6g,1327
1363
- angr-9.2.137.dist-info/METADATA,sha256=7i_JZRvdBTiVkzV_wnqnhWXzyN88H9IatpdsvtK0xoc,4762
1364
- angr-9.2.137.dist-info/WHEEL,sha256=O4J1YDMQNwdjvIQaOWOB89a_c5Kh4FeXXaxSflKgCTQ,105
1365
- angr-9.2.137.dist-info/entry_points.txt,sha256=Vjh1C8PMyr5dZFMnik5WkEP01Uwr2T73I3a6N32sgQU,44
1366
- angr-9.2.137.dist-info/top_level.txt,sha256=dKw0KWTbwLXytFvv15oAAG4sUs3ey47tt6DorJG9-hw,5
1367
- angr-9.2.137.dist-info/RECORD,,
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=O4J1YDMQNwdjvIQaOWOB89a_c5Kh4FeXXaxSflKgCTQ,105
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