angr 9.2.158__cp310-abi3-macosx_11_0_arm64.whl → 9.2.159__cp310-abi3-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.

Files changed (192) hide show
  1. angr/__init__.py +1 -1
  2. angr/ailment/__init__.py +81 -0
  3. angr/ailment/block.py +81 -0
  4. angr/ailment/block_walker.py +845 -0
  5. angr/ailment/constant.py +3 -0
  6. angr/ailment/converter_common.py +11 -0
  7. angr/ailment/converter_pcode.py +623 -0
  8. angr/ailment/converter_vex.py +798 -0
  9. angr/ailment/expression.py +1639 -0
  10. angr/ailment/manager.py +33 -0
  11. angr/ailment/statement.py +978 -0
  12. angr/ailment/tagged_object.py +61 -0
  13. angr/ailment/utils.py +114 -0
  14. angr/analyses/calling_convention/calling_convention.py +6 -2
  15. angr/analyses/decompiler/ail_simplifier.py +5 -5
  16. angr/analyses/decompiler/block_io_finder.py +4 -4
  17. angr/analyses/decompiler/block_similarity.py +2 -2
  18. angr/analyses/decompiler/block_simplifier.py +4 -4
  19. angr/analyses/decompiler/callsite_maker.py +2 -2
  20. angr/analyses/decompiler/ccall_rewriters/amd64_ccalls.py +1 -1
  21. angr/analyses/decompiler/ccall_rewriters/rewriter_base.py +1 -1
  22. angr/analyses/decompiler/ccall_rewriters/x86_ccalls.py +1 -1
  23. angr/analyses/decompiler/clinic.py +1 -1
  24. angr/analyses/decompiler/condition_processor.py +1 -1
  25. angr/analyses/decompiler/counters/boolean_counter.py +4 -4
  26. angr/analyses/decompiler/counters/call_counter.py +4 -4
  27. angr/analyses/decompiler/counters/expression_counters.py +5 -5
  28. angr/analyses/decompiler/counters/seq_cf_structure_counter.py +1 -1
  29. angr/analyses/decompiler/decompiler.py +5 -3
  30. angr/analyses/decompiler/dephication/dephication_base.py +12 -1
  31. angr/analyses/decompiler/dephication/graph_dephication.py +12 -5
  32. angr/analyses/decompiler/dephication/graph_rewriting.py +6 -10
  33. angr/analyses/decompiler/dephication/graph_vvar_mapping.py +109 -72
  34. angr/analyses/decompiler/dephication/rewriting_engine.py +32 -9
  35. angr/analyses/decompiler/dephication/seqnode_dephication.py +32 -10
  36. angr/analyses/decompiler/empty_node_remover.py +2 -2
  37. angr/analyses/decompiler/expression_narrower.py +6 -6
  38. angr/analyses/decompiler/goto_manager.py +2 -2
  39. angr/analyses/decompiler/jump_target_collector.py +1 -1
  40. angr/analyses/decompiler/label_collector.py +1 -1
  41. angr/analyses/decompiler/optimization_passes/base_ptr_save_simplifier.py +25 -25
  42. angr/analyses/decompiler/optimization_passes/call_stmt_rewriter.py +1 -1
  43. angr/analyses/decompiler/optimization_passes/code_motion.py +2 -2
  44. angr/analyses/decompiler/optimization_passes/condition_constprop.py +3 -3
  45. angr/analyses/decompiler/optimization_passes/const_derefs.py +3 -3
  46. angr/analyses/decompiler/optimization_passes/const_prop_reverter.py +4 -4
  47. angr/analyses/decompiler/optimization_passes/deadblock_remover.py +2 -2
  48. angr/analyses/decompiler/optimization_passes/determine_load_sizes.py +3 -3
  49. angr/analyses/decompiler/optimization_passes/div_simplifier.py +1 -1
  50. angr/analyses/decompiler/optimization_passes/duplication_reverter/ail_merge_graph.py +2 -2
  51. angr/analyses/decompiler/optimization_passes/duplication_reverter/duplication_reverter.py +4 -4
  52. angr/analyses/decompiler/optimization_passes/duplication_reverter/similarity.py +1 -1
  53. angr/analyses/decompiler/optimization_passes/duplication_reverter/utils.py +4 -4
  54. angr/analyses/decompiler/optimization_passes/eager_std_string_concatenation.py +3 -3
  55. angr/analyses/decompiler/optimization_passes/engine_base.py +1 -1
  56. angr/analyses/decompiler/optimization_passes/expr_op_swapper.py +3 -3
  57. angr/analyses/decompiler/optimization_passes/flip_boolean_cmp.py +2 -2
  58. angr/analyses/decompiler/optimization_passes/inlined_string_transformation_simplifier.py +2 -2
  59. angr/analyses/decompiler/optimization_passes/ite_expr_converter.py +3 -3
  60. angr/analyses/decompiler/optimization_passes/ite_region_converter.py +3 -3
  61. angr/analyses/decompiler/optimization_passes/lowered_switch_simplifier.py +4 -4
  62. angr/analyses/decompiler/optimization_passes/mod_simplifier.py +1 -1
  63. angr/analyses/decompiler/optimization_passes/optimization_pass.py +25 -1
  64. angr/analyses/decompiler/optimization_passes/register_save_area_simplifier.py +1 -1
  65. angr/analyses/decompiler/optimization_passes/ret_addr_save_simplifier.py +1 -1
  66. angr/analyses/decompiler/optimization_passes/ret_deduplicator.py +2 -2
  67. angr/analyses/decompiler/optimization_passes/return_duplicator_base.py +4 -4
  68. angr/analyses/decompiler/optimization_passes/return_duplicator_low.py +2 -2
  69. angr/analyses/decompiler/optimization_passes/stack_canary_simplifier.py +1 -1
  70. angr/analyses/decompiler/optimization_passes/switch_default_case_duplicator.py +3 -3
  71. angr/analyses/decompiler/optimization_passes/switch_reused_entry_rewriter.py +3 -3
  72. angr/analyses/decompiler/optimization_passes/tag_slicer.py +1 -1
  73. angr/analyses/decompiler/optimization_passes/win_stack_canary_simplifier.py +1 -1
  74. angr/analyses/decompiler/optimization_passes/x86_gcc_getpc_simplifier.py +1 -1
  75. angr/analyses/decompiler/peephole_optimizations/a_div_const_add_a_mul_n_div_const.py +1 -1
  76. angr/analyses/decompiler/peephole_optimizations/a_mul_const_div_shr_const.py +1 -1
  77. angr/analyses/decompiler/peephole_optimizations/a_mul_const_sub_a.py +1 -1
  78. angr/analyses/decompiler/peephole_optimizations/a_shl_const_sub_a.py +1 -1
  79. angr/analyses/decompiler/peephole_optimizations/a_sub_a_div.py +1 -1
  80. angr/analyses/decompiler/peephole_optimizations/a_sub_a_div_const_mul_const.py +1 -1
  81. angr/analyses/decompiler/peephole_optimizations/a_sub_a_shr_const_shr_const.py +1 -1
  82. angr/analyses/decompiler/peephole_optimizations/a_sub_a_sub_n.py +1 -1
  83. angr/analyses/decompiler/peephole_optimizations/arm_cmpf.py +1 -1
  84. angr/analyses/decompiler/peephole_optimizations/base.py +3 -3
  85. angr/analyses/decompiler/peephole_optimizations/basepointeroffset_add_n.py +1 -1
  86. angr/analyses/decompiler/peephole_optimizations/basepointeroffset_and_mask.py +1 -1
  87. angr/analyses/decompiler/peephole_optimizations/bitwise_or_to_logical_or.py +1 -1
  88. angr/analyses/decompiler/peephole_optimizations/bool_expr_xor_1.py +1 -1
  89. angr/analyses/decompiler/peephole_optimizations/bswap.py +2 -2
  90. angr/analyses/decompiler/peephole_optimizations/cas_intrinsics.py +2 -2
  91. angr/analyses/decompiler/peephole_optimizations/cmpord_rewriter.py +2 -2
  92. angr/analyses/decompiler/peephole_optimizations/coalesce_adjacent_shrs.py +1 -1
  93. angr/analyses/decompiler/peephole_optimizations/coalesce_same_cascading_ifs.py +2 -2
  94. angr/analyses/decompiler/peephole_optimizations/const_mull_a_shift.py +1 -1
  95. angr/analyses/decompiler/peephole_optimizations/constant_derefs.py +1 -1
  96. angr/analyses/decompiler/peephole_optimizations/conv_a_sub0_shr_and.py +1 -1
  97. angr/analyses/decompiler/peephole_optimizations/conv_shl_shr.py +1 -1
  98. angr/analyses/decompiler/peephole_optimizations/eager_eval.py +1 -1
  99. angr/analyses/decompiler/peephole_optimizations/extended_byte_and_mask.py +1 -1
  100. angr/analyses/decompiler/peephole_optimizations/inlined_strcpy.py +2 -2
  101. angr/analyses/decompiler/peephole_optimizations/inlined_strcpy_consolidation.py +2 -2
  102. angr/analyses/decompiler/peephole_optimizations/inlined_wstrcpy.py +2 -2
  103. angr/analyses/decompiler/peephole_optimizations/invert_negated_logical_conjuction_disjunction.py +1 -1
  104. angr/analyses/decompiler/peephole_optimizations/one_sub_bool.py +1 -1
  105. angr/analyses/decompiler/peephole_optimizations/remove_cascading_conversions.py +1 -1
  106. angr/analyses/decompiler/peephole_optimizations/remove_cxx_destructor_calls.py +2 -2
  107. angr/analyses/decompiler/peephole_optimizations/remove_empty_if_body.py +2 -2
  108. angr/analyses/decompiler/peephole_optimizations/remove_noop_conversions.py +1 -1
  109. angr/analyses/decompiler/peephole_optimizations/remove_redundant_bitmasks.py +1 -1
  110. angr/analyses/decompiler/peephole_optimizations/remove_redundant_conversions.py +1 -1
  111. angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_branch.py +1 -1
  112. angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_comparisons.py +1 -1
  113. angr/analyses/decompiler/peephole_optimizations/remove_redundant_nots.py +1 -1
  114. angr/analyses/decompiler/peephole_optimizations/remove_redundant_reinterprets.py +1 -1
  115. angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts.py +1 -1
  116. angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts_around_comparators.py +1 -1
  117. angr/analyses/decompiler/peephole_optimizations/rewrite_bit_extractions.py +1 -1
  118. angr/analyses/decompiler/peephole_optimizations/rewrite_conv_mul.py +1 -1
  119. angr/analyses/decompiler/peephole_optimizations/rewrite_cxx_operator_calls.py +3 -3
  120. angr/analyses/decompiler/peephole_optimizations/rewrite_mips_gp_loads.py +1 -1
  121. angr/analyses/decompiler/peephole_optimizations/rol_ror.py +2 -2
  122. angr/analyses/decompiler/peephole_optimizations/sar_to_signed_div.py +1 -1
  123. angr/analyses/decompiler/peephole_optimizations/shl_to_mul.py +1 -1
  124. angr/analyses/decompiler/peephole_optimizations/simplify_pc_relative_loads.py +1 -1
  125. angr/analyses/decompiler/peephole_optimizations/single_bit_cond_to_boolexpr.py +1 -1
  126. angr/analyses/decompiler/peephole_optimizations/single_bit_xor.py +1 -1
  127. angr/analyses/decompiler/peephole_optimizations/tidy_stack_addr.py +2 -2
  128. angr/analyses/decompiler/peephole_optimizations/utils.py +1 -1
  129. angr/analyses/decompiler/redundant_label_remover.py +1 -1
  130. angr/analyses/decompiler/region_identifier.py +4 -4
  131. angr/analyses/decompiler/region_simplifiers/cascading_cond_transformer.py +1 -1
  132. angr/analyses/decompiler/region_simplifiers/cascading_ifs.py +1 -1
  133. angr/analyses/decompiler/region_simplifiers/expr_folding.py +37 -8
  134. angr/analyses/decompiler/region_simplifiers/goto.py +1 -1
  135. angr/analyses/decompiler/region_simplifiers/if_.py +1 -1
  136. angr/analyses/decompiler/region_simplifiers/loop.py +1 -1
  137. angr/analyses/decompiler/region_simplifiers/node_address_finder.py +1 -1
  138. angr/analyses/decompiler/region_simplifiers/region_simplifier.py +14 -2
  139. angr/analyses/decompiler/region_simplifiers/switch_cluster_simplifier.py +3 -3
  140. angr/analyses/decompiler/region_simplifiers/switch_expr_simplifier.py +1 -1
  141. angr/analyses/decompiler/return_maker.py +1 -1
  142. angr/analyses/decompiler/seq_to_blocks.py +1 -1
  143. angr/analyses/decompiler/sequence_walker.py +2 -2
  144. angr/analyses/decompiler/ssailification/rewriting.py +4 -4
  145. angr/analyses/decompiler/ssailification/rewriting_engine.py +4 -4
  146. angr/analyses/decompiler/ssailification/rewriting_state.py +3 -3
  147. angr/analyses/decompiler/ssailification/ssailification.py +2 -2
  148. angr/analyses/decompiler/ssailification/traversal.py +1 -1
  149. angr/analyses/decompiler/ssailification/traversal_engine.py +11 -2
  150. angr/analyses/decompiler/structured_codegen/c.py +3 -3
  151. angr/analyses/decompiler/structuring/dream.py +1 -1
  152. angr/analyses/decompiler/structuring/phoenix.py +3 -3
  153. angr/analyses/decompiler/structuring/structurer_base.py +1 -1
  154. angr/analyses/decompiler/structuring/structurer_nodes.py +1 -2
  155. angr/analyses/decompiler/utils.py +1 -1
  156. angr/analyses/deobfuscator/api_obf_peephole_optimizer.py +1 -1
  157. angr/analyses/deobfuscator/string_obf_opt_passes.py +3 -3
  158. angr/analyses/deobfuscator/string_obf_peephole_optimizer.py +2 -2
  159. angr/analyses/propagator/propagator.py +1 -1
  160. angr/analyses/proximity_graph.py +2 -2
  161. angr/analyses/reaching_definitions/engine_ail.py +1 -1
  162. angr/analyses/reaching_definitions/reaching_definitions.py +1 -1
  163. angr/analyses/reaching_definitions/subject.py +1 -1
  164. angr/analyses/s_liveness.py +2 -2
  165. angr/analyses/s_propagator.py +3 -3
  166. angr/analyses/s_reaching_definitions/s_rda_model.py +1 -1
  167. angr/analyses/s_reaching_definitions/s_rda_view.py +3 -3
  168. angr/analyses/s_reaching_definitions/s_reaching_definitions.py +3 -3
  169. angr/analyses/variable_recovery/engine_ail.py +2 -2
  170. angr/analyses/variable_recovery/engine_base.py +1 -1
  171. angr/analyses/variable_recovery/variable_recovery_base.py +1 -1
  172. angr/analyses/variable_recovery/variable_recovery_fast.py +2 -2
  173. angr/engines/light/data.py +1 -1
  174. angr/engines/light/engine.py +1 -1
  175. angr/knowledge_plugins/key_definitions/atoms.py +1 -1
  176. angr/knowledge_plugins/propagations/prop_value.py +1 -1
  177. angr/knowledge_plugins/propagations/propagation_model.py +1 -1
  178. angr/knowledge_plugins/propagations/states.py +1 -1
  179. angr/knowledge_plugins/variables/variable_manager.py +1 -1
  180. angr/lib/angr_native.dylib +0 -0
  181. angr/rustylib.abi3.so +0 -0
  182. angr/utils/ail.py +4 -4
  183. angr/utils/endness.py +1 -1
  184. angr/utils/ssa/__init__.py +14 -4
  185. angr/utils/ssa/tmp_uses_collector.py +4 -4
  186. angr/utils/ssa/vvar_uses_collector.py +4 -4
  187. {angr-9.2.158.dist-info → angr-9.2.159.dist-info}/METADATA +6 -6
  188. {angr-9.2.158.dist-info → angr-9.2.159.dist-info}/RECORD +192 -180
  189. {angr-9.2.158.dist-info → angr-9.2.159.dist-info}/WHEEL +0 -0
  190. {angr-9.2.158.dist-info → angr-9.2.159.dist-info}/entry_points.txt +0 -0
  191. {angr-9.2.158.dist-info → angr-9.2.159.dist-info}/licenses/LICENSE +0 -0
  192. {angr-9.2.158.dist-info → angr-9.2.159.dist-info}/top_level.txt +0 -0
@@ -4,8 +4,8 @@ from collections import defaultdict
4
4
 
5
5
  import networkx as nx
6
6
 
7
- from ailment.block import Block
8
- from ailment.statement import ConditionalJump
7
+ from angr.ailment.block import Block
8
+ from angr.ailment.statement import ConditionalJump
9
9
 
10
10
  from .errors import SAILRSemanticError
11
11
  from .similarity import ail_similarity_to_orig_blocks
@@ -6,10 +6,10 @@ import itertools
6
6
 
7
7
  import networkx as nx
8
8
 
9
- import ailment
10
- from ailment.block import Block
11
- from ailment.statement import ConditionalJump, Jump, Assignment, Return, Label
12
- from ailment.expression import Const, Register, Convert, Expression
9
+ import angr.ailment as ailment
10
+ from angr.ailment.block import Block
11
+ from angr.ailment.statement import ConditionalJump, Jump, Assignment, Return, Label
12
+ from angr.ailment.expression import Const, Register, Convert, Expression
13
13
 
14
14
  from .ail_merge_graph import AILMergeGraph, AILBlockSplit
15
15
  from .errors import SAILRSemanticError
@@ -4,7 +4,7 @@ import logging
4
4
 
5
5
  import networkx as nx
6
6
 
7
- from ailment.block import Block
7
+ from angr.ailment.block import Block
8
8
 
9
9
  from .utils import bfs_list_blocks
10
10
  from angr.analyses.decompiler.block_similarity import longest_ail_subseq, is_similar
@@ -3,10 +3,10 @@ import logging
3
3
 
4
4
  import networkx as nx
5
5
 
6
- import ailment
7
- from ailment import Const
8
- from ailment.block import Block
9
- from ailment.statement import Statement, ConditionalJump, Jump
6
+ import angr.ailment as ailment
7
+ from angr.ailment import Const
8
+ from angr.ailment.block import Block
9
+ from angr.ailment.statement import Statement, ConditionalJump, Jump
10
10
 
11
11
  from angr.analyses.decompiler.structuring.structurer_nodes import IncompleteSwitchCaseHeadStatement
12
12
  from .errors import UnsupportedAILNodeError
@@ -6,9 +6,9 @@ import re
6
6
 
7
7
  from archinfo import Endness
8
8
 
9
- from ailment.constant import UNDETERMINED_SIZE
10
- from ailment.statement import Assignment, WeakAssignment
11
- from ailment.expression import VirtualVariable, BinaryOp, Const, Load
9
+ from angr.ailment.constant import UNDETERMINED_SIZE
10
+ from angr.ailment.statement import Assignment, WeakAssignment
11
+ from angr.ailment.expression import VirtualVariable, BinaryOp, Const, Load
12
12
 
13
13
  from .optimization_pass import OptimizationPass, OptimizationPassStage
14
14
 
@@ -2,7 +2,7 @@
2
2
  from __future__ import annotations
3
3
  import logging
4
4
 
5
- import ailment
5
+ import angr.ailment as ailment
6
6
 
7
7
  from angr.engines.light import SimEngineLightAIL
8
8
 
@@ -3,9 +3,9 @@ import logging
3
3
  from typing import Any, TYPE_CHECKING
4
4
  from collections.abc import Callable
5
5
 
6
- from ailment.block import Block as AILBlock
7
- from ailment.statement import Statement
8
- from ailment.expression import Expression, BinaryOp
6
+ from angr.ailment.block import Block as AILBlock
7
+ from angr.ailment.statement import Statement
8
+ from angr.ailment.expression import Expression, BinaryOp
9
9
 
10
10
  from angr.analyses.decompiler.sequence_walker import SequenceWalker
11
11
  from angr.analyses.decompiler.ail_simplifier import AILBlockWalker
@@ -2,8 +2,8 @@
2
2
  from __future__ import annotations
3
3
  from typing import Any
4
4
 
5
- import ailment
6
- from ailment.expression import Op
5
+ import angr.ailment as ailment
6
+ from angr.ailment.expression import Op
7
7
 
8
8
  from angr.analyses.decompiler.structuring.structurer_nodes import ConditionNode
9
9
  from angr.analyses.decompiler.utils import (
@@ -5,7 +5,7 @@ from collections.abc import Callable
5
5
  from collections import defaultdict
6
6
 
7
7
  from archinfo import Endness
8
- from ailment.expression import (
8
+ from angr.ailment.expression import (
9
9
  Const,
10
10
  Register,
11
11
  Expression,
@@ -17,7 +17,7 @@ from ailment.expression import (
17
17
  UnaryOp,
18
18
  VirtualVariableCategory,
19
19
  )
20
- from ailment.statement import ConditionalJump, Jump, Assignment
20
+ from angr.ailment.statement import ConditionalJump, Jump, Assignment
21
21
  import claripy
22
22
 
23
23
  from angr.utils.bits import zeroextend_on_demand
@@ -3,8 +3,8 @@ from __future__ import annotations
3
3
  import logging
4
4
  from typing import Any, TYPE_CHECKING
5
5
 
6
- from ailment.statement import ConditionalJump, Assignment, Statement
7
- from ailment.expression import Const, ITE, Expression
6
+ from angr.ailment.statement import ConditionalJump, Assignment, Statement
7
+ from angr.ailment.expression import Const, ITE, Expression
8
8
 
9
9
  from angr.analyses import ReachingDefinitionsAnalysis
10
10
  from angr.code_location import CodeLocation
@@ -15,7 +15,7 @@ from angr.analyses.decompiler.structuring.structurer_nodes import EmptyBlockNoti
15
15
  from .optimization_pass import OptimizationPass, OptimizationPassStage
16
16
 
17
17
  if TYPE_CHECKING:
18
- from ailment import Block as AILBlock
18
+ from angr.ailment import Block as AILBlock
19
19
 
20
20
 
21
21
  _l = logging.getLogger(__name__)
@@ -2,9 +2,9 @@
2
2
  from __future__ import annotations
3
3
  import logging
4
4
 
5
- from ailment.block import Block
6
- from ailment.statement import Statement, Call, ConditionalJump, Assignment, Jump
7
- from ailment.expression import ITE, Const, VirtualVariable, Phi
5
+ from angr.ailment.block import Block
6
+ from angr.ailment.statement import Statement, Call, ConditionalJump, Assignment, Jump
7
+ from angr.ailment.expression import ITE, Const, VirtualVariable, Phi
8
8
 
9
9
  from angr.utils.ail import is_phi_assignment
10
10
  from angr.utils.graph import subgraph_between_nodes
@@ -5,9 +5,9 @@ import logging
5
5
 
6
6
  import networkx
7
7
 
8
- from ailment import Block, AILBlockWalkerBase
9
- from ailment.statement import ConditionalJump, Label, Assignment, Jump
10
- from ailment.expression import VirtualVariable, Expression, BinaryOp, Const, Load
8
+ from angr.ailment import Block, AILBlockWalkerBase
9
+ from angr.ailment.statement import ConditionalJump, Label, Assignment, Jump
10
+ from angr.ailment.expression import VirtualVariable, Expression, BinaryOp, Const, Load
11
11
 
12
12
  from angr.utils.graph import GraphUtils
13
13
  from angr.analyses.decompiler.utils import first_nonlabel_nonphi_statement, remove_last_statement
@@ -20,7 +20,7 @@ from .optimization_pass import MultipleBlocksException, StructuringOptimizationP
20
20
  from angr.analyses.decompiler.region_simplifiers.switch_cluster_simplifier import SwitchClusterFinder
21
21
 
22
22
  if TYPE_CHECKING:
23
- from ailment.expression import UnaryOp, Convert
23
+ from angr.ailment.expression import UnaryOp, Convert
24
24
 
25
25
  _l = logging.getLogger(name=__name__)
26
26
 
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
  import logging
3
3
 
4
- from ailment import Expr
4
+ from angr.ailment import Expr
5
5
  from unique_log_filter import UniqueLogFilter
6
6
 
7
7
  from .engine_base import SimplifierAILEngine, SimplifierAILState
@@ -8,7 +8,7 @@ from enum import Enum
8
8
 
9
9
  import networkx
10
10
 
11
- import ailment
11
+ import angr.ailment as ailment
12
12
 
13
13
  from angr.analyses.decompiler import RegionIdentifier
14
14
  from angr.analyses.decompiler.ailgraph_walker import AILGraphWalker
@@ -179,6 +179,30 @@ class OptimizationPass(BaseOptimizationPass):
179
179
  # Util methods
180
180
  #
181
181
 
182
+ def bfs_nodes(self, depth: int | None = None, start_node: ailment.Block | None = None) -> Generator[ailment.Block]:
183
+ seen = set()
184
+
185
+ if start_node is None:
186
+ start_node = self._get_block(self._func.addr)
187
+ if start_node is None:
188
+ return
189
+
190
+ queue = [(0, start_node)]
191
+ while queue:
192
+ node_depth, node = queue.pop(0)
193
+ if node in seen:
194
+ continue
195
+ seen.add(node)
196
+
197
+ yield node
198
+
199
+ if depth is not None and node_depth >= depth:
200
+ continue
201
+
202
+ for succ in sorted(self._graph.successors(node), key=lambda x: (x.addr, x.idx if hasattr(x, "idx") else 0)):
203
+ if succ not in seen:
204
+ queue.append((node_depth + 1, succ))
205
+
182
206
  def new_block_addr(self) -> int:
183
207
  """
184
208
  Return a block address that does not conflict with any existing blocks.
@@ -4,7 +4,7 @@ from collections.abc import Iterable
4
4
  import logging
5
5
 
6
6
  import archinfo
7
- import ailment
7
+ import angr.ailment as ailment
8
8
 
9
9
  from angr.calling_conventions import SimRegArg
10
10
  from angr.code_location import CodeLocation
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
  from typing import Any
3
3
  import logging
4
4
 
5
- import ailment
5
+ import angr.ailment as ailment
6
6
 
7
7
  from angr.calling_conventions import SimRegArg, default_cc, DEFAULT_CC
8
8
  from .optimization_pass import OptimizationPass, OptimizationPassStage
@@ -2,8 +2,8 @@
2
2
  from __future__ import annotations
3
3
  import logging
4
4
 
5
- from ailment import Block
6
- from ailment.statement import ConditionalJump, Return
5
+ from angr.ailment import Block
6
+ from angr.ailment.statement import ConditionalJump, Return
7
7
 
8
8
  from angr.analyses.decompiler.structuring import SAILRStructurer, DreamStructurer
9
9
  from angr.utils.graph import subgraph_between_nodes
@@ -3,12 +3,12 @@ from typing import Any
3
3
  import copy
4
4
  import logging
5
5
 
6
- import ailment.expression
6
+ import angr.ailment as ailment
7
7
  import networkx
8
8
 
9
- from ailment import Block, AILBlockWalker
10
- from ailment.statement import Jump, ConditionalJump, Assignment, Return, Label
11
- from ailment.expression import Const, Phi, VirtualVariable
9
+ from angr.ailment import Block, AILBlockWalker
10
+ from angr.ailment.statement import Jump, ConditionalJump, Assignment, Return, Label
11
+ from angr.ailment.expression import Const, Phi, VirtualVariable
12
12
 
13
13
  from angr.utils.ail import is_phi_assignment
14
14
  from angr.analyses.decompiler.condition_processor import ConditionProcessor, EmptyBlockNotice
@@ -5,8 +5,8 @@ from typing import Any
5
5
 
6
6
  import networkx
7
7
 
8
- from ailment import Block
9
- from ailment.statement import ConditionalJump, Label
8
+ from angr.ailment import Block
9
+ from angr.ailment.statement import ConditionalJump, Label
10
10
 
11
11
  from .return_duplicator_base import ReturnDuplicatorBase
12
12
  from .optimization_pass import StructuringOptimizationPass
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  from collections import defaultdict
4
4
  import logging
5
5
 
6
- import ailment
6
+ import angr.ailment as ailment
7
7
 
8
8
  from angr.utils.bits import s2u
9
9
  from angr.analyses.decompiler.stack_item import StackItem, StackItemType
@@ -6,9 +6,9 @@ import logging
6
6
 
7
7
  import networkx
8
8
 
9
- from ailment.block import Block
10
- from ailment.statement import Jump
11
- from ailment.expression import Const
9
+ from angr.ailment.block import Block
10
+ from angr.ailment.statement import Jump
11
+ from angr.ailment.expression import Const
12
12
 
13
13
  from angr.knowledge_plugins.cfg import IndirectJumpType
14
14
  from .optimization_pass import OptimizationPass, OptimizationPassStage
@@ -3,9 +3,9 @@ from __future__ import annotations
3
3
  from itertools import count
4
4
  import logging
5
5
 
6
- from ailment.block import Block
7
- from ailment.statement import Jump
8
- from ailment.expression import Const
6
+ from angr.ailment.block import Block
7
+ from angr.ailment.statement import Jump
8
+ from angr.ailment.expression import Const
9
9
 
10
10
  from angr.knowledge_plugins.cfg import IndirectJumpType
11
11
 
@@ -2,7 +2,7 @@
2
2
  from __future__ import annotations
3
3
  import logging
4
4
 
5
- from ailment.statement import ConditionalJump, Jump, Label
5
+ from angr.ailment.statement import ConditionalJump, Jump, Label
6
6
  from .optimization_pass import OptimizationPass, OptimizationPassStage
7
7
 
8
8
 
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  from collections import defaultdict
4
4
  import logging
5
5
 
6
- import ailment
6
+ import angr.ailment as ailment
7
7
  import cle
8
8
 
9
9
  from angr.utils.funcid import is_function_security_check_cookie
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
  from typing import Any
3
3
  import logging
4
4
 
5
- import ailment
5
+ import angr.ailment as ailment
6
6
 
7
7
  from .optimization_pass import OptimizationPass, OptimizationPassStage
8
8
 
@@ -1,5 +1,5 @@
1
1
  from __future__ import annotations
2
- from ailment.expression import BinaryOp, Const
2
+ from angr.ailment.expression import BinaryOp, Const
3
3
 
4
4
  from .base import PeepholeOptimizationExprBase
5
5
 
@@ -1,5 +1,5 @@
1
1
  from __future__ import annotations
2
- from ailment.expression import BinaryOp, Const
2
+ from angr.ailment.expression import BinaryOp, Const
3
3
 
4
4
  from .base import PeepholeOptimizationExprBase
5
5
 
@@ -1,6 +1,6 @@
1
1
  # pylint:disable=missing-class-docstring,no-self-use,too-many-boolean-expressions
2
2
  from __future__ import annotations
3
- from ailment.expression import BinaryOp, Const
3
+ from angr.ailment.expression import BinaryOp, Const
4
4
 
5
5
  from .base import PeepholeOptimizationExprBase
6
6
 
@@ -1,6 +1,6 @@
1
1
  # pylint:disable=missing-class-docstring,no-self-use
2
2
  from __future__ import annotations
3
- from ailment.expression import BinaryOp, Const
3
+ from angr.ailment.expression import BinaryOp, Const
4
4
 
5
5
  from .base import PeepholeOptimizationExprBase
6
6
 
@@ -1,5 +1,5 @@
1
1
  from __future__ import annotations
2
- from ailment.expression import BinaryOp, Const
2
+ from angr.ailment.expression import BinaryOp, Const
3
3
 
4
4
  from .base import PeepholeOptimizationExprBase
5
5
 
@@ -1,5 +1,5 @@
1
1
  from __future__ import annotations
2
- from ailment.expression import BinaryOp, Const, Convert
2
+ from angr.ailment.expression import BinaryOp, Const, Convert
3
3
 
4
4
  from .base import PeepholeOptimizationExprBase
5
5
 
@@ -1,6 +1,6 @@
1
1
  # pylint:disable=no-self-use,too-many-boolean-expressions
2
2
  from __future__ import annotations
3
- from ailment.expression import BinaryOp, Const
3
+ from angr.ailment.expression import BinaryOp, Const
4
4
 
5
5
  from .base import PeepholeOptimizationExprBase
6
6
 
@@ -1,5 +1,5 @@
1
1
  from __future__ import annotations
2
- from ailment.expression import BinaryOp
2
+ from angr.ailment.expression import BinaryOp
3
3
 
4
4
  from .base import PeepholeOptimizationExprBase
5
5
 
@@ -1,5 +1,5 @@
1
1
  from __future__ import annotations
2
- from ailment.expression import BinaryOp, Const, Convert
2
+ from angr.ailment.expression import BinaryOp, Const, Convert
3
3
 
4
4
  from .base import PeepholeOptimizationExprBase
5
5
 
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
- from ailment.expression import BinaryOp, UnaryOp, Expression
3
- from ailment.statement import Statement, Assignment
4
- from ailment import Block
2
+ from angr.ailment.expression import BinaryOp, UnaryOp, Expression
3
+ from angr.ailment.statement import Statement, Assignment
4
+ from angr.ailment import Block
5
5
  from angr.project import Project
6
6
  from angr.knowledge_base import KnowledgeBase
7
7
  from angr.knowledge_plugins.key_definitions import atoms
@@ -1,5 +1,5 @@
1
1
  from __future__ import annotations
2
- from ailment.expression import BinaryOp, BasePointerOffset, Const
2
+ from angr.ailment.expression import BinaryOp, BasePointerOffset, Const
3
3
 
4
4
  from .base import PeepholeOptimizationExprBase
5
5
 
@@ -1,5 +1,5 @@
1
1
  from __future__ import annotations
2
- from ailment.expression import BinaryOp, BasePointerOffset, Const
2
+ from angr.ailment.expression import BinaryOp, BasePointerOffset, Const
3
3
 
4
4
  from .base import PeepholeOptimizationExprBase
5
5
 
@@ -1,5 +1,5 @@
1
1
  from __future__ import annotations
2
- from ailment.expression import BinaryOp, Const
2
+ from angr.ailment.expression import BinaryOp, Const
3
3
 
4
4
  from .base import PeepholeOptimizationExprBase
5
5
 
@@ -1,5 +1,5 @@
1
1
  from __future__ import annotations
2
- from ailment.expression import BinaryOp, Const, UnaryOp, Convert
2
+ from angr.ailment.expression import BinaryOp, Const, UnaryOp, Convert
3
3
 
4
4
  from .base import PeepholeOptimizationExprBase
5
5
 
@@ -1,7 +1,7 @@
1
1
  # pylint:disable=missing-class-docstring,no-self-use
2
2
  from __future__ import annotations
3
- from ailment.expression import BinaryOp, Const, Expression, Convert
4
- from ailment.statement import Call
3
+ from angr.ailment.expression import BinaryOp, Const, Expression, Convert
4
+ from angr.ailment.statement import Call
5
5
 
6
6
  from .base import PeepholeOptimizationExprBase
7
7
  from .utils import get_expr_shift_left_amount
@@ -1,8 +1,8 @@
1
1
  # pylint:disable=arguments-differ,too-many-boolean-expressions
2
2
  from __future__ import annotations
3
3
 
4
- from ailment.expression import BinaryOp, Load
5
- from ailment.statement import CAS, ConditionalJump, Statement, Assignment, Call
4
+ from angr.ailment.expression import BinaryOp, Load
5
+ from angr.ailment.statement import CAS, ConditionalJump, Statement, Assignment, Call
6
6
 
7
7
  from .base import PeepholeOptimizationMultiStmtBase
8
8
 
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
- from ailment.statement import ConditionalJump
3
- from ailment.expression import BinaryOp, Const
2
+ from angr.ailment.statement import ConditionalJump
3
+ from angr.ailment.expression import BinaryOp, Const
4
4
 
5
5
  from .base import PeepholeOptimizationStmtBase
6
6
 
@@ -1,5 +1,5 @@
1
1
  from __future__ import annotations
2
- from ailment.expression import BinaryOp, Const, Convert
2
+ from angr.ailment.expression import BinaryOp, Const, Convert
3
3
 
4
4
  from .base import PeepholeOptimizationExprBase
5
5
 
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
- from ailment.statement import ConditionalJump
3
- from ailment.expression import ITE
2
+ from angr.ailment.statement import ConditionalJump
3
+ from angr.ailment.expression import ITE
4
4
 
5
5
  from .base import PeepholeOptimizationStmtBase
6
6
 
@@ -1,7 +1,7 @@
1
1
  # pylint:disable=too-many-boolean-expressions
2
2
  from __future__ import annotations
3
3
 
4
- from ailment.expression import Convert, BinaryOp, Const, Expression
4
+ from angr.ailment.expression import Convert, BinaryOp, Const, Expression
5
5
 
6
6
  from .base import PeepholeOptimizationExprBase
7
7
 
@@ -1,5 +1,5 @@
1
1
  from __future__ import annotations
2
- from ailment.expression import Load, Const
2
+ from angr.ailment.expression import Load, Const
3
3
  from cle.backends import Blob, Hex
4
4
 
5
5
  from .base import PeepholeOptimizationExprBase
@@ -1,5 +1,5 @@
1
1
  from __future__ import annotations
2
- from ailment.expression import Convert, BinaryOp, Const
2
+ from angr.ailment.expression import Convert, BinaryOp, Const
3
3
 
4
4
  from .base import PeepholeOptimizationExprBase
5
5
 
@@ -1,5 +1,5 @@
1
1
  from __future__ import annotations
2
- from ailment.expression import Convert, BinaryOp, Const
2
+ from angr.ailment.expression import Convert, BinaryOp, Const
3
3
 
4
4
  from .base import PeepholeOptimizationExprBase
5
5
 
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
  from math import gcd
3
3
 
4
- from ailment.expression import BinaryOp, UnaryOp, Const, Convert, StackBaseOffset
4
+ from angr.ailment.expression import BinaryOp, UnaryOp, Const, Convert, StackBaseOffset
5
5
 
6
6
  from angr.utils.bits import sign_extend
7
7
  from .base import PeepholeOptimizationExprBase
@@ -1,5 +1,5 @@
1
1
  from __future__ import annotations
2
- from ailment.expression import BinaryOp, Const, Convert
2
+ from angr.ailment.expression import BinaryOp, Const, Convert
3
3
 
4
4
  from .base import PeepholeOptimizationExprBase
5
5
 
@@ -4,8 +4,8 @@ import string
4
4
 
5
5
  from archinfo import Endness
6
6
 
7
- from ailment.expression import Const, StackBaseOffset, VirtualVariable
8
- from ailment.statement import Call, Assignment
7
+ from angr.ailment.expression import Const, StackBaseOffset, VirtualVariable
8
+ from angr.ailment.statement import Call, Assignment
9
9
 
10
10
  from angr import SIM_LIBRARIES
11
11
  from angr.utils.endness import ail_const_to_be
@@ -1,8 +1,8 @@
1
1
  # pylint:disable=arguments-differ
2
2
  from __future__ import annotations
3
3
 
4
- from ailment.expression import Expression, BinaryOp, Const, Register, StackBaseOffset
5
- from ailment.statement import Call, Store
4
+ from angr.ailment.expression import Expression, BinaryOp, Const, Register, StackBaseOffset
5
+ from angr.ailment.statement import Call, Store
6
6
 
7
7
  from angr import SIM_LIBRARIES
8
8
  from .base import PeepholeOptimizationMultiStmtBase
@@ -4,8 +4,8 @@ import string
4
4
 
5
5
  from archinfo import Endness
6
6
 
7
- from ailment.expression import Const, StackBaseOffset, VirtualVariable
8
- from ailment.statement import Call, Assignment
7
+ from angr.ailment.expression import Const, StackBaseOffset, VirtualVariable
8
+ from angr.ailment.statement import Call, Assignment
9
9
 
10
10
  from angr.utils.endness import ail_const_to_be
11
11
  from .base import PeepholeOptimizationStmtBase
@@ -1,5 +1,5 @@
1
1
  from __future__ import annotations
2
- from ailment.expression import UnaryOp, BinaryOp
2
+ from angr.ailment.expression import UnaryOp, BinaryOp
3
3
 
4
4
  from .base import PeepholeOptimizationExprBase
5
5