angr 9.2.158__cp310-abi3-manylinux2014_x86_64.whl → 9.2.160__cp310-abi3-manylinux2014_x86_64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of angr might be problematic. Click here for more details.
- angr/__init__.py +1 -1
- angr/ailment/__init__.py +81 -0
- angr/ailment/block.py +81 -0
- angr/ailment/block_walker.py +845 -0
- angr/ailment/constant.py +3 -0
- angr/ailment/converter_common.py +11 -0
- angr/ailment/converter_pcode.py +623 -0
- angr/ailment/converter_vex.py +798 -0
- angr/ailment/expression.py +1639 -0
- angr/ailment/manager.py +33 -0
- angr/ailment/statement.py +978 -0
- angr/ailment/tagged_object.py +61 -0
- angr/ailment/utils.py +114 -0
- angr/analyses/calling_convention/calling_convention.py +6 -2
- angr/analyses/decompiler/ail_simplifier.py +5 -5
- angr/analyses/decompiler/block_io_finder.py +4 -4
- angr/analyses/decompiler/block_similarity.py +2 -2
- angr/analyses/decompiler/block_simplifier.py +4 -4
- angr/analyses/decompiler/callsite_maker.py +2 -2
- angr/analyses/decompiler/ccall_rewriters/amd64_ccalls.py +1 -1
- angr/analyses/decompiler/ccall_rewriters/rewriter_base.py +1 -1
- angr/analyses/decompiler/ccall_rewriters/x86_ccalls.py +1 -1
- angr/analyses/decompiler/clinic.py +5 -2
- angr/analyses/decompiler/condition_processor.py +1 -1
- angr/analyses/decompiler/counters/boolean_counter.py +4 -4
- angr/analyses/decompiler/counters/call_counter.py +4 -4
- angr/analyses/decompiler/counters/expression_counters.py +5 -5
- angr/analyses/decompiler/counters/seq_cf_structure_counter.py +1 -1
- angr/analyses/decompiler/decompiler.py +17 -12
- angr/analyses/decompiler/dephication/dephication_base.py +12 -1
- angr/analyses/decompiler/dephication/graph_dephication.py +12 -5
- angr/analyses/decompiler/dephication/graph_rewriting.py +6 -10
- angr/analyses/decompiler/dephication/graph_vvar_mapping.py +109 -72
- angr/analyses/decompiler/dephication/rewriting_engine.py +32 -9
- angr/analyses/decompiler/dephication/seqnode_dephication.py +32 -10
- angr/analyses/decompiler/empty_node_remover.py +2 -2
- angr/analyses/decompiler/expression_narrower.py +6 -6
- angr/analyses/decompiler/goto_manager.py +2 -2
- angr/analyses/decompiler/jump_target_collector.py +1 -1
- angr/analyses/decompiler/label_collector.py +1 -1
- angr/analyses/decompiler/optimization_passes/base_ptr_save_simplifier.py +25 -25
- angr/analyses/decompiler/optimization_passes/call_stmt_rewriter.py +1 -1
- angr/analyses/decompiler/optimization_passes/code_motion.py +2 -2
- angr/analyses/decompiler/optimization_passes/condition_constprop.py +3 -3
- angr/analyses/decompiler/optimization_passes/const_derefs.py +3 -3
- angr/analyses/decompiler/optimization_passes/const_prop_reverter.py +4 -4
- angr/analyses/decompiler/optimization_passes/deadblock_remover.py +2 -2
- angr/analyses/decompiler/optimization_passes/determine_load_sizes.py +3 -3
- angr/analyses/decompiler/optimization_passes/div_simplifier.py +1 -1
- angr/analyses/decompiler/optimization_passes/duplication_reverter/ail_merge_graph.py +2 -2
- angr/analyses/decompiler/optimization_passes/duplication_reverter/duplication_reverter.py +4 -4
- angr/analyses/decompiler/optimization_passes/duplication_reverter/similarity.py +1 -1
- angr/analyses/decompiler/optimization_passes/duplication_reverter/utils.py +4 -4
- angr/analyses/decompiler/optimization_passes/eager_std_string_concatenation.py +3 -3
- angr/analyses/decompiler/optimization_passes/engine_base.py +1 -1
- angr/analyses/decompiler/optimization_passes/expr_op_swapper.py +3 -3
- angr/analyses/decompiler/optimization_passes/flip_boolean_cmp.py +2 -2
- angr/analyses/decompiler/optimization_passes/inlined_string_transformation_simplifier.py +2 -2
- angr/analyses/decompiler/optimization_passes/ite_expr_converter.py +3 -3
- angr/analyses/decompiler/optimization_passes/ite_region_converter.py +3 -3
- angr/analyses/decompiler/optimization_passes/lowered_switch_simplifier.py +4 -4
- angr/analyses/decompiler/optimization_passes/mod_simplifier.py +1 -1
- angr/analyses/decompiler/optimization_passes/optimization_pass.py +25 -1
- angr/analyses/decompiler/optimization_passes/register_save_area_simplifier.py +1 -1
- angr/analyses/decompiler/optimization_passes/ret_addr_save_simplifier.py +1 -1
- angr/analyses/decompiler/optimization_passes/ret_deduplicator.py +2 -2
- angr/analyses/decompiler/optimization_passes/return_duplicator_base.py +4 -4
- angr/analyses/decompiler/optimization_passes/return_duplicator_low.py +2 -2
- angr/analyses/decompiler/optimization_passes/stack_canary_simplifier.py +1 -1
- angr/analyses/decompiler/optimization_passes/switch_default_case_duplicator.py +3 -3
- angr/analyses/decompiler/optimization_passes/switch_reused_entry_rewriter.py +3 -3
- angr/analyses/decompiler/optimization_passes/tag_slicer.py +1 -1
- angr/analyses/decompiler/optimization_passes/win_stack_canary_simplifier.py +1 -1
- angr/analyses/decompiler/optimization_passes/x86_gcc_getpc_simplifier.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/a_div_const_add_a_mul_n_div_const.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/a_mul_const_div_shr_const.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/a_mul_const_sub_a.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/a_shl_const_sub_a.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/a_sub_a_div.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/a_sub_a_div_const_mul_const.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/a_sub_a_shr_const_shr_const.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/a_sub_a_sub_n.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/arm_cmpf.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/base.py +3 -3
- angr/analyses/decompiler/peephole_optimizations/basepointeroffset_add_n.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/basepointeroffset_and_mask.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/bitwise_or_to_logical_or.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/bool_expr_xor_1.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/bswap.py +2 -2
- angr/analyses/decompiler/peephole_optimizations/cas_intrinsics.py +2 -2
- angr/analyses/decompiler/peephole_optimizations/cmpord_rewriter.py +2 -2
- angr/analyses/decompiler/peephole_optimizations/coalesce_adjacent_shrs.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/coalesce_same_cascading_ifs.py +2 -2
- angr/analyses/decompiler/peephole_optimizations/const_mull_a_shift.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/constant_derefs.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/conv_a_sub0_shr_and.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/conv_shl_shr.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/eager_eval.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/extended_byte_and_mask.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/inlined_strcpy.py +2 -2
- angr/analyses/decompiler/peephole_optimizations/inlined_strcpy_consolidation.py +2 -2
- angr/analyses/decompiler/peephole_optimizations/inlined_wstrcpy.py +2 -2
- angr/analyses/decompiler/peephole_optimizations/invert_negated_logical_conjuction_disjunction.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/one_sub_bool.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/remove_cascading_conversions.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/remove_cxx_destructor_calls.py +2 -2
- angr/analyses/decompiler/peephole_optimizations/remove_empty_if_body.py +2 -2
- angr/analyses/decompiler/peephole_optimizations/remove_noop_conversions.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_bitmasks.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_conversions.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_branch.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_comparisons.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_nots.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_reinterprets.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts_around_comparators.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/rewrite_bit_extractions.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/rewrite_conv_mul.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/rewrite_cxx_operator_calls.py +3 -3
- angr/analyses/decompiler/peephole_optimizations/rewrite_mips_gp_loads.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/rol_ror.py +2 -2
- angr/analyses/decompiler/peephole_optimizations/sar_to_signed_div.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/shl_to_mul.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/simplify_pc_relative_loads.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/single_bit_cond_to_boolexpr.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/single_bit_xor.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/tidy_stack_addr.py +2 -2
- angr/analyses/decompiler/peephole_optimizations/utils.py +1 -1
- angr/analyses/decompiler/redundant_label_remover.py +1 -1
- angr/analyses/decompiler/region_identifier.py +4 -4
- angr/analyses/decompiler/region_simplifiers/cascading_cond_transformer.py +1 -1
- angr/analyses/decompiler/region_simplifiers/cascading_ifs.py +1 -1
- angr/analyses/decompiler/region_simplifiers/expr_folding.py +37 -8
- angr/analyses/decompiler/region_simplifiers/goto.py +1 -1
- angr/analyses/decompiler/region_simplifiers/if_.py +1 -1
- angr/analyses/decompiler/region_simplifiers/loop.py +1 -1
- angr/analyses/decompiler/region_simplifiers/node_address_finder.py +1 -1
- angr/analyses/decompiler/region_simplifiers/region_simplifier.py +14 -2
- angr/analyses/decompiler/region_simplifiers/switch_cluster_simplifier.py +3 -3
- angr/analyses/decompiler/region_simplifiers/switch_expr_simplifier.py +1 -1
- angr/analyses/decompiler/return_maker.py +1 -1
- angr/analyses/decompiler/seq_to_blocks.py +1 -1
- angr/analyses/decompiler/sequence_walker.py +2 -2
- angr/analyses/decompiler/ssailification/rewriting.py +4 -4
- angr/analyses/decompiler/ssailification/rewriting_engine.py +4 -4
- angr/analyses/decompiler/ssailification/rewriting_state.py +3 -3
- angr/analyses/decompiler/ssailification/ssailification.py +2 -2
- angr/analyses/decompiler/ssailification/traversal.py +1 -1
- angr/analyses/decompiler/ssailification/traversal_engine.py +11 -2
- angr/analyses/decompiler/structured_codegen/c.py +3 -3
- angr/analyses/decompiler/structuring/dream.py +1 -1
- angr/analyses/decompiler/structuring/phoenix.py +3 -3
- angr/analyses/decompiler/structuring/structurer_base.py +1 -1
- angr/analyses/decompiler/structuring/structurer_nodes.py +1 -2
- angr/analyses/decompiler/utils.py +1 -1
- angr/analyses/deobfuscator/api_obf_peephole_optimizer.py +1 -1
- angr/analyses/deobfuscator/string_obf_opt_passes.py +3 -3
- angr/analyses/deobfuscator/string_obf_peephole_optimizer.py +2 -2
- angr/analyses/propagator/propagator.py +1 -1
- angr/analyses/proximity_graph.py +2 -2
- angr/analyses/reaching_definitions/engine_ail.py +1 -1
- angr/analyses/reaching_definitions/reaching_definitions.py +1 -1
- angr/analyses/reaching_definitions/subject.py +1 -1
- angr/analyses/s_liveness.py +2 -2
- angr/analyses/s_propagator.py +3 -3
- angr/analyses/s_reaching_definitions/s_rda_model.py +1 -1
- angr/analyses/s_reaching_definitions/s_rda_view.py +3 -3
- angr/analyses/s_reaching_definitions/s_reaching_definitions.py +3 -3
- angr/analyses/typehoon/simple_solver.py +231 -29
- angr/analyses/typehoon/typehoon.py +10 -2
- angr/analyses/variable_recovery/engine_ail.py +10 -22
- angr/analyses/variable_recovery/engine_base.py +1 -1
- angr/analyses/variable_recovery/variable_recovery_base.py +1 -1
- angr/analyses/variable_recovery/variable_recovery_fast.py +2 -2
- angr/engines/light/data.py +1 -1
- angr/engines/light/engine.py +1 -1
- angr/knowledge_plugins/key_definitions/atoms.py +1 -1
- angr/knowledge_plugins/propagations/prop_value.py +1 -1
- angr/knowledge_plugins/propagations/propagation_model.py +1 -1
- angr/knowledge_plugins/propagations/states.py +1 -1
- angr/knowledge_plugins/variables/variable_manager.py +1 -1
- angr/rustylib.abi3.so +0 -0
- angr/state_plugins/unicorn_engine.py +4 -4
- angr/utils/ail.py +4 -4
- angr/utils/endness.py +1 -1
- angr/utils/ssa/__init__.py +14 -4
- angr/utils/ssa/tmp_uses_collector.py +4 -4
- angr/utils/ssa/vvar_uses_collector.py +4 -4
- {angr-9.2.158.dist-info → angr-9.2.160.dist-info}/METADATA +6 -7
- {angr-9.2.158.dist-info → angr-9.2.160.dist-info}/RECORD +195 -183
- /angr/{lib/angr_native.so → unicornlib.so} +0 -0
- {angr-9.2.158.dist-info → angr-9.2.160.dist-info}/WHEEL +0 -0
- {angr-9.2.158.dist-info → angr-9.2.160.dist-info}/entry_points.txt +0 -0
- {angr-9.2.158.dist-info → angr-9.2.160.dist-info}/licenses/LICENSE +0 -0
- {angr-9.2.158.dist-info → angr-9.2.160.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
|
|
@@ -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
|
|
|
@@ -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
|
|
|
@@ -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.
|
|
@@ -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
|
|
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
|
|
@@ -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
|
|
|
@@ -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,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,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,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,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
|
|
@@ -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
|