angr 9.2.117__py3-none-manylinux2014_aarch64.whl → 9.2.119__py3-none-manylinux2014_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of angr might be problematic. Click here for more details.
- angr/__init__.py +2 -1
- angr/__main__.py +21 -1
- angr/analyses/__init__.py +4 -0
- angr/analyses/analysis.py +88 -46
- angr/analyses/backward_slice.py +15 -18
- angr/analyses/binary_optimizer.py +29 -34
- angr/analyses/bindiff.py +35 -44
- angr/analyses/boyscout.py +1 -0
- angr/analyses/callee_cleanup_finder.py +3 -4
- angr/analyses/calling_convention.py +98 -98
- angr/analyses/cdg.py +5 -12
- angr/analyses/cfg/__init__.py +1 -0
- angr/analyses/cfg/cfb.py +14 -20
- angr/analyses/cfg/cfg.py +2 -1
- angr/analyses/cfg/cfg_arch_options.py +4 -1
- angr/analyses/cfg/cfg_base.py +122 -165
- angr/analyses/cfg/cfg_emulated.py +60 -92
- angr/analyses/cfg/cfg_fast.py +406 -335
- angr/analyses/cfg/cfg_fast_soot.py +10 -17
- angr/analyses/cfg/cfg_job_base.py +6 -7
- angr/analyses/cfg/indirect_jump_resolvers/__init__.py +1 -0
- angr/analyses/cfg/indirect_jump_resolvers/amd64_elf_got.py +2 -3
- angr/analyses/cfg/indirect_jump_resolvers/amd64_pe_iat.py +2 -3
- angr/analyses/cfg/indirect_jump_resolvers/arm_elf_fast.py +6 -8
- angr/analyses/cfg/indirect_jump_resolvers/const_resolver.py +3 -5
- angr/analyses/cfg/indirect_jump_resolvers/default_resolvers.py +1 -0
- angr/analyses/cfg/indirect_jump_resolvers/jumptable.py +97 -112
- angr/analyses/cfg/indirect_jump_resolvers/mips_elf_fast.py +26 -32
- angr/analyses/cfg/indirect_jump_resolvers/propagator_utils.py +1 -0
- angr/analyses/cfg/indirect_jump_resolvers/resolver.py +7 -7
- angr/analyses/cfg/indirect_jump_resolvers/x86_elf_pic_plt.py +3 -8
- angr/analyses/cfg/indirect_jump_resolvers/x86_pe_iat.py +2 -3
- angr/analyses/cfg_slice_to_sink/__init__.py +1 -0
- angr/analyses/cfg_slice_to_sink/cfg_slice_to_sink.py +4 -4
- angr/analyses/cfg_slice_to_sink/graph.py +4 -1
- angr/analyses/cfg_slice_to_sink/transitions.py +4 -2
- angr/analyses/class_identifier.py +1 -0
- angr/analyses/code_tagging.py +9 -9
- angr/analyses/complete_calling_conventions.py +28 -36
- angr/analyses/congruency_check.py +6 -11
- angr/analyses/data_dep/__init__.py +1 -0
- angr/analyses/data_dep/data_dependency_analysis.py +38 -48
- angr/analyses/data_dep/dep_nodes.py +13 -12
- angr/analyses/data_dep/sim_act_location.py +3 -0
- angr/analyses/datagraph_meta.py +7 -7
- angr/analyses/ddg.py +48 -69
- angr/analyses/decompiler/__init__.py +3 -0
- angr/analyses/decompiler/ail_simplifier.py +929 -400
- angr/analyses/decompiler/ailgraph_walker.py +1 -0
- angr/analyses/decompiler/block_io_finder.py +13 -4
- angr/analyses/decompiler/block_similarity.py +28 -18
- angr/analyses/decompiler/block_simplifier.py +40 -104
- angr/analyses/decompiler/callsite_maker.py +124 -82
- angr/analyses/decompiler/ccall_rewriters/__init__.py +1 -0
- angr/analyses/decompiler/ccall_rewriters/amd64_ccalls.py +115 -105
- angr/analyses/decompiler/ccall_rewriters/rewriter_base.py +2 -1
- angr/analyses/decompiler/clinic.py +371 -184
- angr/analyses/decompiler/condition_processor.py +127 -116
- angr/analyses/decompiler/counters/__init__.py +5 -0
- angr/analyses/decompiler/counters/boolean_counter.py +27 -0
- angr/analyses/decompiler/{call_counter.py → counters/call_counter.py} +5 -4
- angr/analyses/decompiler/{expression_counters.py → counters/expression_counters.py} +5 -4
- angr/analyses/decompiler/counters/seq_cf_structure_counter.py +63 -0
- angr/analyses/decompiler/decompilation_cache.py +2 -1
- angr/analyses/decompiler/decompilation_options.py +1 -0
- angr/analyses/decompiler/decompiler.py +50 -27
- angr/analyses/decompiler/dephication/__init__.py +6 -0
- angr/analyses/decompiler/dephication/dephication_base.py +87 -0
- angr/analyses/decompiler/dephication/graph_dephication.py +63 -0
- angr/analyses/decompiler/dephication/graph_rewriting.py +116 -0
- angr/analyses/decompiler/dephication/graph_vvar_mapping.py +313 -0
- angr/analyses/decompiler/dephication/rewriting_engine.py +247 -0
- angr/analyses/decompiler/dephication/seqnode_dephication.py +106 -0
- angr/analyses/decompiler/empty_node_remover.py +1 -0
- angr/analyses/decompiler/expression_narrower.py +12 -17
- angr/analyses/decompiler/goto_manager.py +43 -4
- angr/analyses/decompiler/graph_region.py +19 -31
- angr/analyses/decompiler/jump_target_collector.py +1 -0
- angr/analyses/decompiler/jumptable_entry_condition_rewriter.py +2 -1
- angr/analyses/decompiler/optimization_passes/__init__.py +7 -3
- angr/analyses/decompiler/optimization_passes/base_ptr_save_simplifier.py +23 -18
- angr/analyses/decompiler/optimization_passes/call_stmt_rewriter.py +46 -0
- angr/analyses/decompiler/optimization_passes/code_motion.py +4 -2
- angr/analyses/decompiler/optimization_passes/const_derefs.py +36 -36
- angr/analyses/decompiler/optimization_passes/const_prop_reverter.py +6 -9
- angr/analyses/decompiler/optimization_passes/cross_jump_reverter.py +4 -3
- angr/analyses/decompiler/optimization_passes/deadblock_remover.py +1 -0
- angr/analyses/decompiler/optimization_passes/div_simplifier.py +78 -72
- angr/analyses/decompiler/optimization_passes/duplication_reverter/__init__.py +2 -0
- angr/analyses/decompiler/optimization_passes/duplication_reverter/ail_merge_graph.py +503 -0
- angr/analyses/decompiler/optimization_passes/duplication_reverter/duplication_reverter.py +1215 -0
- angr/analyses/decompiler/optimization_passes/duplication_reverter/errors.py +16 -0
- angr/analyses/decompiler/optimization_passes/duplication_reverter/similarity.py +126 -0
- angr/analyses/decompiler/optimization_passes/duplication_reverter/utils.py +169 -0
- angr/analyses/decompiler/optimization_passes/engine_base.py +60 -63
- angr/analyses/decompiler/optimization_passes/expr_op_swapper.py +6 -7
- angr/analyses/decompiler/optimization_passes/flip_boolean_cmp.py +1 -0
- angr/analyses/decompiler/optimization_passes/inlined_string_transformation_simplifier.py +102 -37
- angr/analyses/decompiler/optimization_passes/ite_expr_converter.py +8 -10
- angr/analyses/decompiler/optimization_passes/ite_region_converter.py +128 -18
- angr/analyses/decompiler/optimization_passes/lowered_switch_simplifier.py +142 -145
- angr/analyses/decompiler/optimization_passes/mod_simplifier.py +27 -23
- angr/analyses/decompiler/optimization_passes/multi_simplifier.py +30 -34
- angr/analyses/decompiler/optimization_passes/optimization_pass.py +108 -47
- angr/analyses/decompiler/optimization_passes/register_save_area_simplifier.py +10 -3
- angr/analyses/decompiler/optimization_passes/ret_addr_save_simplifier.py +5 -6
- angr/analyses/decompiler/optimization_passes/ret_deduplicator.py +3 -2
- angr/analyses/decompiler/optimization_passes/return_duplicator_base.py +125 -13
- angr/analyses/decompiler/optimization_passes/return_duplicator_high.py +1 -0
- angr/analyses/decompiler/optimization_passes/return_duplicator_low.py +3 -2
- angr/analyses/decompiler/optimization_passes/stack_canary_simplifier.py +52 -21
- angr/analyses/decompiler/optimization_passes/switch_default_case_duplicator.py +3 -2
- angr/analyses/decompiler/optimization_passes/win_stack_canary_simplifier.py +47 -36
- angr/analyses/decompiler/optimization_passes/x86_gcc_getpc_simplifier.py +2 -1
- angr/analyses/decompiler/peephole_optimizations/__init__.py +2 -0
- angr/analyses/decompiler/peephole_optimizations/a_div_const_add_a_mul_n_div_const.py +26 -22
- angr/analyses/decompiler/peephole_optimizations/a_mul_const_div_shr_const.py +2 -2
- angr/analyses/decompiler/peephole_optimizations/a_shl_const_sub_a.py +1 -0
- angr/analyses/decompiler/peephole_optimizations/a_sub_a_div.py +2 -2
- angr/analyses/decompiler/peephole_optimizations/a_sub_a_div_const_mul_const.py +1 -0
- angr/analyses/decompiler/peephole_optimizations/a_sub_a_sub_n.py +8 -4
- angr/analyses/decompiler/peephole_optimizations/arm_cmpf.py +28 -27
- angr/analyses/decompiler/peephole_optimizations/base.py +17 -20
- angr/analyses/decompiler/peephole_optimizations/basepointeroffset_add_n.py +1 -0
- angr/analyses/decompiler/peephole_optimizations/basepointeroffset_and_mask.py +1 -0
- angr/analyses/decompiler/peephole_optimizations/bitwise_or_to_logical_or.py +2 -2
- angr/analyses/decompiler/peephole_optimizations/bool_expr_xor_1.py +2 -2
- angr/analyses/decompiler/peephole_optimizations/bswap.py +29 -22
- angr/analyses/decompiler/peephole_optimizations/cmpord_rewriter.py +3 -4
- angr/analyses/decompiler/peephole_optimizations/coalesce_adjacent_shrs.py +39 -0
- angr/analyses/decompiler/peephole_optimizations/coalesce_same_cascading_ifs.py +2 -1
- angr/analyses/decompiler/peephole_optimizations/const_mull_a_shift.py +94 -29
- angr/analyses/decompiler/peephole_optimizations/constant_derefs.py +1 -0
- angr/analyses/decompiler/peephole_optimizations/conv_a_sub0_shr_and.py +48 -49
- angr/analyses/decompiler/peephole_optimizations/conv_shl_shr.py +1 -0
- angr/analyses/decompiler/peephole_optimizations/eager_eval.py +41 -34
- angr/analyses/decompiler/peephole_optimizations/extended_byte_and_mask.py +2 -1
- angr/analyses/decompiler/peephole_optimizations/inlined_strcpy.py +28 -18
- angr/analyses/decompiler/peephole_optimizations/inlined_strcpy_consolidation.py +8 -4
- angr/analyses/decompiler/peephole_optimizations/inlined_wstrcpy.py +28 -18
- angr/analyses/decompiler/peephole_optimizations/invert_negated_logical_conjuction_disjunction.py +32 -32
- angr/analyses/decompiler/peephole_optimizations/one_sub_bool.py +2 -2
- angr/analyses/decompiler/peephole_optimizations/remove_cascading_conversions.py +23 -3
- angr/analyses/decompiler/peephole_optimizations/remove_empty_if_body.py +2 -1
- angr/analyses/decompiler/peephole_optimizations/remove_noop_conversions.py +4 -0
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_bitmasks.py +1 -0
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_conversions.py +4 -6
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_branch.py +14 -13
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_comparisons.py +2 -2
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_nots.py +1 -0
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_reinterprets.py +3 -2
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts.py +2 -2
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts_around_comparators.py +20 -16
- angr/analyses/decompiler/peephole_optimizations/rewrite_bit_extractions.py +3 -3
- angr/analyses/decompiler/peephole_optimizations/rewrite_mips_gp_loads.py +4 -2
- angr/analyses/decompiler/peephole_optimizations/rol_ror.py +66 -40
- angr/analyses/decompiler/peephole_optimizations/sar_to_signed_div.py +64 -57
- angr/analyses/decompiler/peephole_optimizations/simplify_pc_relative_loads.py +14 -14
- angr/analyses/decompiler/peephole_optimizations/single_bit_cond_to_boolexpr.py +1 -0
- angr/analyses/decompiler/peephole_optimizations/single_bit_xor.py +8 -5
- angr/analyses/decompiler/peephole_optimizations/tidy_stack_addr.py +4 -6
- angr/analyses/decompiler/redundant_label_remover.py +20 -19
- angr/analyses/decompiler/region_identifier.py +64 -77
- angr/analyses/decompiler/region_simplifiers/__init__.py +1 -0
- angr/analyses/decompiler/region_simplifiers/cascading_cond_transformer.py +2 -1
- angr/analyses/decompiler/region_simplifiers/cascading_ifs.py +1 -0
- angr/analyses/decompiler/region_simplifiers/expr_folding.py +43 -29
- angr/analyses/decompiler/region_simplifiers/goto.py +1 -0
- angr/analyses/decompiler/region_simplifiers/if_.py +29 -36
- angr/analyses/decompiler/region_simplifiers/ifelse.py +1 -0
- angr/analyses/decompiler/region_simplifiers/loop.py +27 -13
- angr/analyses/decompiler/region_simplifiers/node_address_finder.py +1 -0
- angr/analyses/decompiler/region_simplifiers/region_simplifier.py +1 -0
- angr/analyses/decompiler/region_simplifiers/switch_cluster_simplifier.py +12 -16
- angr/analyses/decompiler/region_simplifiers/switch_expr_simplifier.py +36 -32
- angr/analyses/decompiler/region_walker.py +1 -0
- angr/analyses/decompiler/return_maker.py +1 -0
- angr/analyses/decompiler/seq_to_blocks.py +1 -0
- angr/analyses/decompiler/sequence_walker.py +5 -10
- angr/analyses/decompiler/ssailification/__init__.py +4 -0
- angr/analyses/decompiler/ssailification/rewriting.py +325 -0
- angr/analyses/decompiler/ssailification/rewriting_engine.py +601 -0
- angr/analyses/decompiler/ssailification/rewriting_state.py +60 -0
- angr/analyses/decompiler/ssailification/ssailification.py +213 -0
- angr/analyses/decompiler/ssailification/traversal.py +97 -0
- angr/analyses/decompiler/ssailification/traversal_engine.py +131 -0
- angr/analyses/decompiler/ssailification/traversal_state.py +42 -0
- angr/analyses/decompiler/structured_codegen/__init__.py +1 -0
- angr/analyses/decompiler/structured_codegen/base.py +2 -2
- angr/analyses/decompiler/structured_codegen/c.py +172 -160
- angr/analyses/decompiler/structured_codegen/dummy.py +1 -0
- angr/analyses/decompiler/structured_codegen/dwarf_import.py +1 -0
- angr/analyses/decompiler/structuring/__init__.py +1 -0
- angr/analyses/decompiler/structuring/dream.py +27 -43
- angr/analyses/decompiler/structuring/phoenix.py +201 -201
- angr/analyses/decompiler/structuring/recursive_structurer.py +4 -3
- angr/analyses/decompiler/structuring/sailr.py +5 -4
- angr/analyses/decompiler/structuring/structurer_base.py +26 -23
- angr/analyses/decompiler/structuring/structurer_nodes.py +14 -24
- angr/analyses/decompiler/utils.py +112 -52
- angr/analyses/disassembly.py +75 -77
- angr/analyses/disassembly_utils.py +10 -13
- angr/analyses/dominance_frontier.py +25 -7
- angr/analyses/find_objects_static.py +3 -2
- angr/analyses/flirt.py +7 -10
- angr/analyses/forward_analysis/__init__.py +1 -0
- angr/analyses/forward_analysis/forward_analysis.py +9 -6
- angr/analyses/forward_analysis/job_info.py +3 -3
- angr/analyses/forward_analysis/visitors/__init__.py +1 -0
- angr/analyses/forward_analysis/visitors/call_graph.py +1 -0
- angr/analyses/forward_analysis/visitors/function_graph.py +3 -2
- angr/analyses/forward_analysis/visitors/graph.py +9 -9
- angr/analyses/forward_analysis/visitors/loop.py +1 -0
- angr/analyses/forward_analysis/visitors/single_node_graph.py +2 -2
- angr/analyses/identifier/__init__.py +1 -0
- angr/analyses/identifier/custom_callable.py +2 -2
- angr/analyses/identifier/errors.py +1 -0
- angr/analyses/identifier/func.py +6 -3
- angr/analyses/identifier/functions/__init__.py +2 -1
- angr/analyses/identifier/functions/atoi.py +2 -4
- angr/analyses/identifier/functions/based_atoi.py +3 -6
- angr/analyses/identifier/functions/fdprintf.py +1 -0
- angr/analyses/identifier/functions/free.py +3 -5
- angr/analyses/identifier/functions/int2str.py +11 -26
- angr/analyses/identifier/functions/malloc.py +4 -6
- angr/analyses/identifier/functions/memcmp.py +2 -4
- angr/analyses/identifier/functions/memcpy.py +2 -2
- angr/analyses/identifier/functions/memset.py +2 -2
- angr/analyses/identifier/functions/printf.py +1 -0
- angr/analyses/identifier/functions/recv_until.py +3 -6
- angr/analyses/identifier/functions/skip_calloc.py +2 -1
- angr/analyses/identifier/functions/skip_realloc.py +4 -6
- angr/analyses/identifier/functions/skip_recv_n.py +4 -6
- angr/analyses/identifier/functions/snprintf.py +2 -4
- angr/analyses/identifier/functions/sprintf.py +1 -0
- angr/analyses/identifier/functions/strcasecmp.py +1 -0
- angr/analyses/identifier/functions/strcmp.py +2 -1
- angr/analyses/identifier/functions/strcpy.py +2 -2
- angr/analyses/identifier/functions/strlen.py +1 -0
- angr/analyses/identifier/functions/strncmp.py +2 -1
- angr/analyses/identifier/functions/strncpy.py +2 -2
- angr/analyses/identifier/functions/strtol.py +2 -4
- angr/analyses/identifier/identify.py +35 -54
- angr/analyses/identifier/runner.py +6 -5
- angr/analyses/init_finder.py +17 -17
- angr/analyses/loop_analysis.py +10 -14
- angr/analyses/loopfinder.py +9 -13
- angr/analyses/propagator/__init__.py +1 -0
- angr/analyses/propagator/engine_ail.py +161 -166
- angr/analyses/propagator/engine_base.py +3 -2
- angr/analyses/propagator/engine_vex.py +47 -48
- angr/analyses/propagator/outdated_definition_walker.py +18 -23
- angr/analyses/propagator/propagator.py +8 -12
- angr/analyses/propagator/tmpvar_finder.py +1 -0
- angr/analyses/propagator/top_checker_mixin.py +2 -4
- angr/analyses/propagator/values.py +1 -0
- angr/analyses/propagator/vex_vars.py +3 -2
- angr/analyses/proximity_graph.py +12 -20
- angr/analyses/reaching_definitions/__init__.py +5 -4
- angr/analyses/reaching_definitions/call_trace.py +7 -6
- angr/analyses/reaching_definitions/dep_graph.py +18 -23
- angr/analyses/reaching_definitions/engine_ail.py +89 -121
- angr/analyses/reaching_definitions/engine_vex.py +20 -32
- angr/analyses/reaching_definitions/function_handler.py +38 -35
- angr/analyses/reaching_definitions/function_handler_library/__init__.py +1 -0
- angr/analyses/reaching_definitions/function_handler_library/stdio.py +4 -6
- angr/analyses/reaching_definitions/function_handler_library/stdlib.py +1 -2
- angr/analyses/reaching_definitions/function_handler_library/string.py +2 -4
- angr/analyses/reaching_definitions/function_handler_library/unistd.py +1 -0
- angr/analyses/reaching_definitions/heap_allocator.py +7 -6
- angr/analyses/reaching_definitions/rd_initializer.py +27 -25
- angr/analyses/reaching_definitions/rd_state.py +14 -16
- angr/analyses/reaching_definitions/reaching_definitions.py +27 -36
- angr/analyses/reaching_definitions/subject.py +3 -2
- angr/analyses/reassembler.py +189 -253
- angr/analyses/s_liveness/__init__.py +2 -0
- angr/analyses/s_liveness/s_liveness.py +153 -0
- angr/analyses/s_propagator/__init__.py +2 -0
- angr/analyses/s_propagator/s_propagator.py +250 -0
- angr/analyses/s_reaching_definitions/__init__.py +2 -0
- angr/analyses/s_reaching_definitions/s_rda.py +479 -0
- angr/analyses/soot_class_hierarchy.py +15 -24
- angr/analyses/stack_pointer_tracker.py +106 -98
- angr/analyses/static_hooker.py +3 -2
- angr/analyses/typehoon/__init__.py +1 -0
- angr/analyses/typehoon/dfa.py +5 -5
- angr/analyses/typehoon/lifter.py +5 -4
- angr/analyses/typehoon/simple_solver.py +80 -64
- angr/analyses/typehoon/translator.py +26 -16
- angr/analyses/typehoon/typeconsts.py +22 -12
- angr/analyses/typehoon/typehoon.py +8 -10
- angr/analyses/typehoon/typevars.py +37 -49
- angr/analyses/typehoon/variance.py +1 -0
- angr/analyses/variable_recovery/__init__.py +1 -0
- angr/analyses/variable_recovery/annotations.py +1 -0
- angr/analyses/variable_recovery/engine_ail.py +78 -32
- angr/analyses/variable_recovery/engine_base.py +233 -59
- angr/analyses/variable_recovery/engine_vex.py +17 -21
- angr/analyses/variable_recovery/irsb_scanner.py +1 -0
- angr/analyses/variable_recovery/variable_recovery.py +14 -16
- angr/analyses/variable_recovery/variable_recovery_base.py +12 -14
- angr/analyses/variable_recovery/variable_recovery_fast.py +67 -47
- angr/analyses/veritesting.py +10 -16
- angr/analyses/vfg.py +102 -148
- angr/analyses/vsa_ddg.py +3 -5
- angr/analyses/vtable.py +6 -6
- angr/analyses/xrefs.py +9 -13
- angr/angrdb/__init__.py +4 -2
- angr/angrdb/db.py +51 -53
- angr/angrdb/models.py +1 -0
- angr/angrdb/serializers/__init__.py +1 -0
- angr/angrdb/serializers/cfg_model.py +2 -2
- angr/angrdb/serializers/comments.py +1 -0
- angr/angrdb/serializers/funcs.py +4 -3
- angr/angrdb/serializers/kb.py +3 -2
- angr/angrdb/serializers/labels.py +1 -0
- angr/angrdb/serializers/structured_code.py +5 -10
- angr/angrdb/serializers/variables.py +6 -6
- angr/angrdb/serializers/xrefs.py +2 -2
- angr/annocfg.py +17 -25
- angr/blade.py +19 -23
- angr/block.py +11 -13
- angr/callable.py +4 -3
- angr/calling_conventions.py +147 -147
- angr/code_location.py +12 -13
- angr/codenode.py +2 -1
- angr/concretization_strategies/__init__.py +6 -6
- angr/concretization_strategies/any.py +5 -4
- angr/concretization_strategies/any_named.py +1 -0
- angr/concretization_strategies/controlled_data.py +1 -0
- angr/concretization_strategies/eval.py +2 -2
- angr/concretization_strategies/logging.py +1 -0
- angr/concretization_strategies/max.py +6 -6
- angr/concretization_strategies/nonzero.py +1 -0
- angr/concretization_strategies/nonzero_range.py +4 -3
- angr/concretization_strategies/norepeats.py +5 -4
- angr/concretization_strategies/norepeats_range.py +1 -0
- angr/concretization_strategies/range.py +1 -0
- angr/concretization_strategies/signed_add.py +13 -9
- angr/concretization_strategies/single.py +2 -0
- angr/concretization_strategies/solutions.py +1 -0
- angr/concretization_strategies/unlimited_range.py +1 -0
- angr/distributed/__init__.py +1 -0
- angr/distributed/server.py +2 -2
- angr/distributed/worker.py +3 -3
- angr/engines/__init__.py +1 -0
- angr/engines/concrete.py +2 -1
- angr/engines/engine.py +4 -6
- angr/engines/failure.py +2 -1
- angr/engines/hook.py +1 -0
- angr/engines/light/__init__.py +1 -0
- angr/engines/light/data.py +221 -255
- angr/engines/light/engine.py +72 -85
- angr/engines/pcode/__init__.py +1 -0
- angr/engines/pcode/behavior.py +3 -3
- angr/engines/pcode/cc.py +1 -0
- angr/engines/pcode/emulate.py +13 -16
- angr/engines/pcode/engine.py +7 -5
- angr/engines/pcode/lifter.py +62 -79
- angr/engines/procedure.py +1 -0
- angr/engines/soot/__init__.py +1 -0
- angr/engines/soot/engine.py +46 -52
- angr/engines/soot/exceptions.py +3 -0
- angr/engines/soot/expressions/__init__.py +1 -0
- angr/engines/soot/expressions/arrayref.py +1 -0
- angr/engines/soot/expressions/base.py +4 -5
- angr/engines/soot/expressions/binop.py +1 -0
- angr/engines/soot/expressions/cast.py +1 -0
- angr/engines/soot/expressions/condition.py +2 -1
- angr/engines/soot/expressions/constants.py +1 -0
- angr/engines/soot/expressions/instanceOf.py +1 -0
- angr/engines/soot/expressions/instancefieldref.py +1 -0
- angr/engines/soot/expressions/invoke.py +7 -9
- angr/engines/soot/expressions/length.py +1 -0
- angr/engines/soot/expressions/local.py +1 -0
- angr/engines/soot/expressions/new.py +1 -0
- angr/engines/soot/expressions/newArray.py +1 -0
- angr/engines/soot/expressions/newMultiArray.py +3 -3
- angr/engines/soot/expressions/paramref.py +1 -0
- angr/engines/soot/expressions/phi.py +1 -0
- angr/engines/soot/expressions/staticfieldref.py +1 -0
- angr/engines/soot/expressions/thisref.py +1 -0
- angr/engines/soot/expressions/unsupported.py +1 -0
- angr/engines/soot/field_dispatcher.py +5 -8
- angr/engines/soot/method_dispatcher.py +4 -7
- angr/engines/soot/statements/__init__.py +4 -4
- angr/engines/soot/statements/assign.py +1 -0
- angr/engines/soot/statements/base.py +6 -7
- angr/engines/soot/statements/goto.py +2 -1
- angr/engines/soot/statements/identity.py +1 -0
- angr/engines/soot/statements/if_.py +2 -1
- angr/engines/soot/statements/invoke.py +1 -0
- angr/engines/soot/statements/return_.py +1 -0
- angr/engines/soot/statements/switch.py +1 -0
- angr/engines/soot/statements/throw.py +2 -1
- angr/engines/soot/values/__init__.py +4 -2
- angr/engines/soot/values/arrayref.py +8 -10
- angr/engines/soot/values/base.py +4 -1
- angr/engines/soot/values/constants.py +1 -0
- angr/engines/soot/values/instancefieldref.py +1 -0
- angr/engines/soot/values/local.py +1 -0
- angr/engines/soot/values/paramref.py +1 -0
- angr/engines/soot/values/staticfieldref.py +1 -0
- angr/engines/soot/values/strref.py +3 -2
- angr/engines/soot/values/thisref.py +1 -0
- angr/engines/successors.py +21 -24
- angr/engines/syscall.py +9 -9
- angr/engines/unicorn.py +14 -9
- angr/engines/vex/__init__.py +1 -0
- angr/engines/vex/claripy/__init__.py +1 -0
- angr/engines/vex/claripy/ccall.py +86 -112
- angr/engines/vex/claripy/datalayer.py +12 -16
- angr/engines/vex/claripy/irop.py +85 -104
- angr/engines/vex/heavy/__init__.py +1 -0
- angr/engines/vex/heavy/actions.py +1 -0
- angr/engines/vex/heavy/concretizers.py +8 -9
- angr/engines/vex/heavy/dirty.py +6 -5
- angr/engines/vex/heavy/heavy.py +15 -14
- angr/engines/vex/heavy/inspect.py +1 -0
- angr/engines/vex/heavy/resilience.py +2 -2
- angr/engines/vex/heavy/super_fastpath.py +2 -2
- angr/engines/vex/lifter.py +28 -35
- angr/engines/vex/light/__init__.py +1 -0
- angr/engines/vex/light/light.py +2 -4
- angr/engines/vex/light/resilience.py +1 -0
- angr/engines/vex/light/slicing.py +1 -0
- angr/errors.py +6 -1
- angr/exploration_techniques/__init__.py +3 -2
- angr/exploration_techniques/bucketizer.py +2 -3
- angr/exploration_techniques/common.py +3 -3
- angr/exploration_techniques/dfs.py +1 -0
- angr/exploration_techniques/director.py +17 -19
- angr/exploration_techniques/driller_core.py +3 -7
- angr/exploration_techniques/explorer.py +7 -3
- angr/exploration_techniques/lengthlimiter.py +1 -0
- angr/exploration_techniques/local_loop_seer.py +2 -2
- angr/exploration_techniques/loop_seer.py +11 -14
- angr/exploration_techniques/manual_mergepoint.py +3 -2
- angr/exploration_techniques/memory_watcher.py +1 -0
- angr/exploration_techniques/oppologist.py +4 -4
- angr/exploration_techniques/slicecutor.py +1 -0
- angr/exploration_techniques/spiller.py +8 -8
- angr/exploration_techniques/spiller_db.py +1 -0
- angr/exploration_techniques/stochastic.py +3 -4
- angr/exploration_techniques/stub_stasher.py +1 -0
- angr/exploration_techniques/suggestions.py +5 -4
- angr/exploration_techniques/symbion.py +1 -0
- angr/exploration_techniques/tech_builder.py +1 -0
- angr/exploration_techniques/threading.py +1 -0
- angr/exploration_techniques/timeout.py +1 -0
- angr/exploration_techniques/tracer.py +34 -39
- angr/exploration_techniques/unique.py +1 -0
- angr/exploration_techniques/veritesting.py +1 -0
- angr/factory.py +9 -9
- angr/flirt/__init__.py +1 -0
- angr/flirt/build_sig.py +8 -12
- angr/keyed_region.py +10 -17
- angr/knowledge_base/__init__.py +1 -0
- angr/knowledge_base/knowledge_base.py +17 -17
- angr/knowledge_plugins/__init__.py +1 -0
- angr/knowledge_plugins/callsite_prototypes.py +1 -0
- angr/knowledge_plugins/cfg/__init__.py +2 -0
- angr/knowledge_plugins/cfg/cfg_manager.py +2 -1
- angr/knowledge_plugins/cfg/cfg_model.py +27 -43
- angr/knowledge_plugins/cfg/cfg_node.py +8 -19
- angr/knowledge_plugins/cfg/indirect_jump.py +3 -5
- angr/knowledge_plugins/cfg/memory_data.py +4 -3
- angr/knowledge_plugins/comments.py +1 -0
- angr/knowledge_plugins/custom_strings.py +1 -0
- angr/knowledge_plugins/data.py +1 -0
- angr/knowledge_plugins/debug_variables.py +18 -23
- angr/knowledge_plugins/functions/__init__.py +1 -0
- angr/knowledge_plugins/functions/function.py +49 -53
- angr/knowledge_plugins/functions/function_manager.py +14 -14
- angr/knowledge_plugins/functions/function_parser.py +38 -42
- angr/knowledge_plugins/functions/soot_function.py +5 -6
- angr/knowledge_plugins/indirect_jumps.py +1 -0
- angr/knowledge_plugins/key_definitions/__init__.py +1 -0
- angr/knowledge_plugins/key_definitions/atoms.py +65 -17
- angr/knowledge_plugins/key_definitions/constants.py +6 -0
- angr/knowledge_plugins/key_definitions/definition.py +22 -25
- angr/knowledge_plugins/key_definitions/environment.py +18 -14
- angr/knowledge_plugins/key_definitions/heap_address.py +4 -3
- angr/knowledge_plugins/key_definitions/key_definition_manager.py +5 -4
- angr/knowledge_plugins/key_definitions/live_definitions.py +36 -45
- angr/knowledge_plugins/key_definitions/liveness.py +18 -23
- angr/knowledge_plugins/key_definitions/rd_model.py +29 -34
- angr/knowledge_plugins/key_definitions/tag.py +7 -6
- angr/knowledge_plugins/key_definitions/undefined.py +3 -0
- angr/knowledge_plugins/key_definitions/unknown_size.py +3 -0
- angr/knowledge_plugins/key_definitions/uses.py +21 -23
- angr/knowledge_plugins/labels.py +3 -2
- angr/knowledge_plugins/patches.py +2 -1
- angr/knowledge_plugins/plugin.py +2 -1
- angr/knowledge_plugins/propagations/__init__.py +1 -0
- angr/knowledge_plugins/propagations/prop_value.py +25 -27
- angr/knowledge_plugins/propagations/propagation_manager.py +2 -2
- angr/knowledge_plugins/propagations/propagation_model.py +5 -4
- angr/knowledge_plugins/propagations/states.py +71 -81
- angr/knowledge_plugins/structured_code/__init__.py +1 -0
- angr/knowledge_plugins/structured_code/manager.py +5 -4
- angr/knowledge_plugins/sync/__init__.py +1 -0
- angr/knowledge_plugins/sync/sync_controller.py +10 -15
- angr/knowledge_plugins/types.py +1 -0
- angr/knowledge_plugins/variables/__init__.py +1 -0
- angr/knowledge_plugins/variables/variable_access.py +9 -10
- angr/knowledge_plugins/variables/variable_manager.py +84 -55
- angr/knowledge_plugins/xrefs/__init__.py +1 -0
- angr/knowledge_plugins/xrefs/xref.py +7 -11
- angr/knowledge_plugins/xrefs/xref_manager.py +1 -0
- angr/knowledge_plugins/xrefs/xref_types.py +3 -0
- angr/misc/__init__.py +1 -0
- angr/misc/ansi.py +1 -0
- angr/misc/autoimport.py +3 -2
- angr/misc/bug_report.py +6 -5
- angr/misc/hookset.py +3 -2
- angr/misc/loggers.py +2 -2
- angr/misc/picklable_lock.py +1 -0
- angr/misc/plugins.py +11 -13
- angr/misc/range.py +3 -0
- angr/misc/telemetry.py +54 -0
- angr/misc/testing.py +2 -1
- angr/misc/ux.py +5 -5
- angr/misc/weakpatch.py +1 -0
- angr/procedures/__init__.py +1 -0
- angr/procedures/cgc/_terminate.py +1 -0
- angr/procedures/cgc/allocate.py +1 -0
- angr/procedures/cgc/deallocate.py +1 -0
- angr/procedures/cgc/fdwait.py +1 -0
- angr/procedures/cgc/random.py +1 -0
- angr/procedures/cgc/receive.py +26 -26
- angr/procedures/cgc/transmit.py +1 -0
- angr/procedures/definitions/__init__.py +9 -10
- angr/procedures/definitions/cgc.py +1 -0
- angr/procedures/definitions/glibc.py +1 -0
- angr/procedures/definitions/gnulib.py +1 -0
- angr/procedures/definitions/libstdcpp.py +1 -0
- angr/procedures/definitions/linux_kernel.py +1 -0
- angr/procedures/definitions/linux_loader.py +1 -0
- angr/procedures/definitions/msvcr.py +1 -0
- angr/procedures/definitions/parse_syscalls_from_local_system.py +2 -1
- angr/procedures/definitions/parse_win32json.py +27 -30
- angr/procedures/definitions/types_win32.py +1 -0
- angr/procedures/definitions/wdk_api-ms-win-dx-d3dkmt-l1-1-4.py +1 -0
- angr/procedures/definitions/wdk_api-ms-win-dx-d3dkmt-l1-1-6.py +1 -0
- angr/procedures/definitions/wdk_clfs.py +1 -0
- angr/procedures/definitions/wdk_fltmgr.py +1 -0
- angr/procedures/definitions/wdk_fwpkclnt.py +1 -0
- angr/procedures/definitions/wdk_fwpuclnt.py +1 -0
- angr/procedures/definitions/wdk_gdi32.py +1 -0
- angr/procedures/definitions/wdk_hal.py +1 -0
- angr/procedures/definitions/wdk_ksecdd.py +1 -0
- angr/procedures/definitions/wdk_ndis.py +1 -0
- angr/procedures/definitions/wdk_ntoskrnl.py +1 -0
- angr/procedures/definitions/wdk_offreg.py +1 -0
- angr/procedures/definitions/wdk_pshed.py +1 -0
- angr/procedures/definitions/wdk_secur32.py +1 -0
- angr/procedures/definitions/wdk_vhfum.py +1 -0
- angr/procedures/definitions/win32_aclui.py +1 -0
- angr/procedures/definitions/win32_activeds.py +1 -0
- angr/procedures/definitions/win32_advapi32.py +1 -0
- angr/procedures/definitions/win32_advpack.py +1 -0
- angr/procedures/definitions/win32_amsi.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-1.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-3.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-6.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-apiquery-l2-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-backgroundtask-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-comm-l1-1-1.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-comm-l1-1-2.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-enclave-l1-1-1.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-errorhandling-l1-1-3.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-featurestaging-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-featurestaging-l1-1-1.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-file-fromapp-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-handle-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-ioring-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-marshal-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-3.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-4.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-5.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-6.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-7.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-8.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-path-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-psm-appnotify-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-psm-appnotify-l1-1-1.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-realtime-l1-1-1.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-realtime-l1-1-2.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-slapi-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-state-helpers-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-synch-l1-2-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-3.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-4.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-6.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-util-l1-1-1.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-winrt-error-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-winrt-error-l1-1-1.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-winrt-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-winrt-registration-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-winrt-robuffer-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-winrt-roparameterizediid-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-winrt-string-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-winrt-string-l1-1-1.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-core-wow64-l1-1-1.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-devices-query-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-devices-query-l1-1-1.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-dx-d3dkmt-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-gaming-deviceinformation-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-gaming-expandedresources-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-1.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-2.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-3.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-4.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-mm-misc-l1-1-1.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-net-isolation-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-security-base-l1-2-2.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-security-isolatedcontainer-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-security-isolatedcontainer-l1-1-1.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-3.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-4.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-5.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-1.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-2.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-shcore-stream-winrt-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_api-ms-win-wsl-api-l1-1-0.py +1 -0
- angr/procedures/definitions/win32_apphelp.py +1 -0
- angr/procedures/definitions/win32_authz.py +1 -0
- angr/procedures/definitions/win32_avicap32.py +1 -0
- angr/procedures/definitions/win32_avifil32.py +1 -0
- angr/procedures/definitions/win32_avrt.py +1 -0
- angr/procedures/definitions/win32_bcp47mrm.py +1 -0
- angr/procedures/definitions/win32_bcrypt.py +1 -0
- angr/procedures/definitions/win32_bcryptprimitives.py +1 -0
- angr/procedures/definitions/win32_bluetoothapis.py +1 -0
- angr/procedures/definitions/win32_bthprops.py +1 -0
- angr/procedures/definitions/win32_bthprops_cpl.py +1 -0
- angr/procedures/definitions/win32_cabinet.py +1 -0
- angr/procedures/definitions/win32_certadm.py +1 -0
- angr/procedures/definitions/win32_certpoleng.py +1 -0
- angr/procedures/definitions/win32_cfgmgr32.py +1 -0
- angr/procedures/definitions/win32_chakra.py +1 -0
- angr/procedures/definitions/win32_cldapi.py +1 -0
- angr/procedures/definitions/win32_clfsw32.py +1 -0
- angr/procedures/definitions/win32_clusapi.py +1 -0
- angr/procedures/definitions/win32_comctl32.py +1 -0
- angr/procedures/definitions/win32_comdlg32.py +1 -0
- angr/procedures/definitions/win32_compstui.py +1 -0
- angr/procedures/definitions/win32_computecore.py +1 -0
- angr/procedures/definitions/win32_computenetwork.py +1 -0
- angr/procedures/definitions/win32_computestorage.py +1 -0
- angr/procedures/definitions/win32_comsvcs.py +1 -0
- angr/procedures/definitions/win32_coremessaging.py +1 -0
- angr/procedures/definitions/win32_credui.py +1 -0
- angr/procedures/definitions/win32_crypt32.py +1 -0
- angr/procedures/definitions/win32_cryptnet.py +1 -0
- angr/procedures/definitions/win32_cryptui.py +1 -0
- angr/procedures/definitions/win32_cryptxml.py +1 -0
- angr/procedures/definitions/win32_cscapi.py +1 -0
- angr/procedures/definitions/win32_d2d1.py +1 -0
- angr/procedures/definitions/win32_d3d10.py +1 -0
- angr/procedures/definitions/win32_d3d10_1.py +1 -0
- angr/procedures/definitions/win32_d3d11.py +1 -0
- angr/procedures/definitions/win32_d3d12.py +1 -0
- angr/procedures/definitions/win32_d3d9.py +1 -0
- angr/procedures/definitions/win32_d3dcompiler_47.py +1 -0
- angr/procedures/definitions/win32_d3dcsx.py +1 -0
- angr/procedures/definitions/win32_davclnt.py +1 -0
- angr/procedures/definitions/win32_dbgeng.py +1 -0
- angr/procedures/definitions/win32_dbghelp.py +1 -0
- angr/procedures/definitions/win32_dbgmodel.py +1 -0
- angr/procedures/definitions/win32_dciman32.py +1 -0
- angr/procedures/definitions/win32_dcomp.py +1 -0
- angr/procedures/definitions/win32_ddraw.py +1 -0
- angr/procedures/definitions/win32_deviceaccess.py +1 -0
- angr/procedures/definitions/win32_dflayout.py +1 -0
- angr/procedures/definitions/win32_dhcpcsvc.py +1 -0
- angr/procedures/definitions/win32_dhcpcsvc6.py +1 -0
- angr/procedures/definitions/win32_dhcpsapi.py +1 -0
- angr/procedures/definitions/win32_diagnosticdataquery.py +1 -0
- angr/procedures/definitions/win32_dinput8.py +1 -0
- angr/procedures/definitions/win32_directml.py +1 -0
- angr/procedures/definitions/win32_dmprocessxmlfiltered.py +1 -0
- angr/procedures/definitions/win32_dnsapi.py +1 -0
- angr/procedures/definitions/win32_drt.py +1 -0
- angr/procedures/definitions/win32_drtprov.py +1 -0
- angr/procedures/definitions/win32_drttransport.py +1 -0
- angr/procedures/definitions/win32_dsound.py +1 -0
- angr/procedures/definitions/win32_dsparse.py +1 -0
- angr/procedures/definitions/win32_dsprop.py +1 -0
- angr/procedures/definitions/win32_dssec.py +1 -0
- angr/procedures/definitions/win32_dsuiext.py +1 -0
- angr/procedures/definitions/win32_dwmapi.py +1 -0
- angr/procedures/definitions/win32_dwrite.py +1 -0
- angr/procedures/definitions/win32_dxcompiler.py +1 -0
- angr/procedures/definitions/win32_dxcore.py +1 -0
- angr/procedures/definitions/win32_dxgi.py +1 -0
- angr/procedures/definitions/win32_dxva2.py +1 -0
- angr/procedures/definitions/win32_eappcfg.py +1 -0
- angr/procedures/definitions/win32_eappprxy.py +1 -0
- angr/procedures/definitions/win32_efswrt.py +1 -0
- angr/procedures/definitions/win32_elscore.py +1 -0
- angr/procedures/definitions/win32_esent.py +1 -0
- angr/procedures/definitions/win32_evr.py +1 -0
- angr/procedures/definitions/win32_faultrep.py +1 -0
- angr/procedures/definitions/win32_fhsvcctl.py +1 -0
- angr/procedures/definitions/win32_firewallapi.py +1 -0
- angr/procedures/definitions/win32_fltlib.py +1 -0
- angr/procedures/definitions/win32_fontsub.py +1 -0
- angr/procedures/definitions/win32_forceinline.py +1 -0
- angr/procedures/definitions/win32_fwpuclnt.py +1 -0
- angr/procedures/definitions/win32_fxsutility.py +1 -0
- angr/procedures/definitions/win32_gdi32.py +1 -0
- angr/procedures/definitions/win32_gdiplus.py +1 -0
- angr/procedures/definitions/win32_glu32.py +1 -0
- angr/procedures/definitions/win32_gpedit.py +1 -0
- angr/procedures/definitions/win32_hhctrl_ocx.py +1 -0
- angr/procedures/definitions/win32_hid.py +1 -0
- angr/procedures/definitions/win32_hlink.py +1 -0
- angr/procedures/definitions/win32_hrtfapo.py +1 -0
- angr/procedures/definitions/win32_httpapi.py +1 -0
- angr/procedures/definitions/win32_icm32.py +1 -0
- angr/procedures/definitions/win32_icmui.py +1 -0
- angr/procedures/definitions/win32_icu.py +1 -0
- angr/procedures/definitions/win32_ieframe.py +1 -0
- angr/procedures/definitions/win32_imagehlp.py +1 -0
- angr/procedures/definitions/win32_imgutil.py +1 -0
- angr/procedures/definitions/win32_imm32.py +1 -0
- angr/procedures/definitions/win32_infocardapi.py +1 -0
- angr/procedures/definitions/win32_inkobjcore.py +1 -0
- angr/procedures/definitions/win32_iphlpapi.py +1 -0
- angr/procedures/definitions/win32_iscsidsc.py +1 -0
- angr/procedures/definitions/win32_isolatedwindowsenvironmentutils.py +1 -0
- angr/procedures/definitions/win32_kernel32.py +1 -0
- angr/procedures/definitions/win32_kernelbase.py +1 -0
- angr/procedures/definitions/win32_keycredmgr.py +1 -0
- angr/procedures/definitions/win32_ksproxy_ax.py +1 -0
- angr/procedures/definitions/win32_ksuser.py +1 -0
- angr/procedures/definitions/win32_ktmw32.py +1 -0
- angr/procedures/definitions/win32_licenseprotection.py +1 -0
- angr/procedures/definitions/win32_loadperf.py +1 -0
- angr/procedures/definitions/win32_magnification.py +1 -0
- angr/procedures/definitions/win32_mapi32.py +1 -0
- angr/procedures/definitions/win32_mdmlocalmanagement.py +1 -0
- angr/procedures/definitions/win32_mdmregistration.py +1 -0
- angr/procedures/definitions/win32_mf.py +1 -0
- angr/procedures/definitions/win32_mfcore.py +1 -0
- angr/procedures/definitions/win32_mfplat.py +1 -0
- angr/procedures/definitions/win32_mfplay.py +1 -0
- angr/procedures/definitions/win32_mfreadwrite.py +1 -0
- angr/procedures/definitions/win32_mfsensorgroup.py +1 -0
- angr/procedures/definitions/win32_mfsrcsnk.py +1 -0
- angr/procedures/definitions/win32_mgmtapi.py +1 -0
- angr/procedures/definitions/win32_mi.py +1 -0
- angr/procedures/definitions/win32_mmdevapi.py +1 -0
- angr/procedures/definitions/win32_mpr.py +1 -0
- angr/procedures/definitions/win32_mprapi.py +1 -0
- angr/procedures/definitions/win32_mqrt.py +1 -0
- angr/procedures/definitions/win32_mrmsupport.py +1 -0
- angr/procedures/definitions/win32_msacm32.py +1 -0
- angr/procedures/definitions/win32_msajapi.py +1 -0
- angr/procedures/definitions/win32_mscms.py +1 -0
- angr/procedures/definitions/win32_mscoree.py +1 -0
- angr/procedures/definitions/win32_msctfmonitor.py +1 -0
- angr/procedures/definitions/win32_msdelta.py +1 -0
- angr/procedures/definitions/win32_msdmo.py +1 -0
- angr/procedures/definitions/win32_msdrm.py +1 -0
- angr/procedures/definitions/win32_msi.py +1 -0
- angr/procedures/definitions/win32_msimg32.py +1 -0
- angr/procedures/definitions/win32_mspatcha.py +1 -0
- angr/procedures/definitions/win32_mspatchc.py +1 -0
- angr/procedures/definitions/win32_msports.py +1 -0
- angr/procedures/definitions/win32_msrating.py +1 -0
- angr/procedures/definitions/win32_mssign32.py +1 -0
- angr/procedures/definitions/win32_mstask.py +1 -0
- angr/procedures/definitions/win32_msvfw32.py +1 -0
- angr/procedures/definitions/win32_mswsock.py +1 -0
- angr/procedures/definitions/win32_mtxdm.py +1 -0
- angr/procedures/definitions/win32_ncrypt.py +1 -0
- angr/procedures/definitions/win32_ndfapi.py +1 -0
- angr/procedures/definitions/win32_netapi32.py +1 -0
- angr/procedures/definitions/win32_netsh.py +1 -0
- angr/procedures/definitions/win32_netshell.py +1 -0
- angr/procedures/definitions/win32_newdev.py +1 -0
- angr/procedures/definitions/win32_ninput.py +1 -0
- angr/procedures/definitions/win32_normaliz.py +1 -0
- angr/procedures/definitions/win32_ntdll.py +1 -0
- angr/procedures/definitions/win32_ntdllk.py +1 -0
- angr/procedures/definitions/win32_ntdsapi.py +1 -0
- angr/procedures/definitions/win32_ntlanman.py +1 -0
- angr/procedures/definitions/win32_odbc32.py +1 -0
- angr/procedures/definitions/win32_odbcbcp.py +1 -0
- angr/procedures/definitions/win32_ole32.py +1 -0
- angr/procedures/definitions/win32_oleacc.py +1 -0
- angr/procedures/definitions/win32_oleaut32.py +1 -0
- angr/procedures/definitions/win32_oledlg.py +1 -0
- angr/procedures/definitions/win32_ondemandconnroutehelper.py +1 -0
- angr/procedures/definitions/win32_opengl32.py +1 -0
- angr/procedures/definitions/win32_opmxbox.py +1 -0
- angr/procedures/definitions/win32_p2p.py +1 -0
- angr/procedures/definitions/win32_p2pgraph.py +1 -0
- angr/procedures/definitions/win32_pdh.py +1 -0
- angr/procedures/definitions/win32_peerdist.py +1 -0
- angr/procedures/definitions/win32_powrprof.py +1 -0
- angr/procedures/definitions/win32_prntvpt.py +1 -0
- angr/procedures/definitions/win32_projectedfslib.py +1 -0
- angr/procedures/definitions/win32_propsys.py +1 -0
- angr/procedures/definitions/win32_psapi.py +1 -0
- angr/procedures/definitions/win32_quartz.py +1 -0
- angr/procedures/definitions/win32_query.py +1 -0
- angr/procedures/definitions/win32_qwave.py +1 -0
- angr/procedures/definitions/win32_rasapi32.py +1 -0
- angr/procedures/definitions/win32_rasdlg.py +1 -0
- angr/procedures/definitions/win32_resutils.py +1 -0
- angr/procedures/definitions/win32_rometadata.py +1 -0
- angr/procedures/definitions/win32_rpcns4.py +1 -0
- angr/procedures/definitions/win32_rpcproxy.py +1 -0
- angr/procedures/definitions/win32_rpcrt4.py +1 -0
- angr/procedures/definitions/win32_rstrtmgr.py +1 -0
- angr/procedures/definitions/win32_rtm.py +1 -0
- angr/procedures/definitions/win32_rtutils.py +1 -0
- angr/procedures/definitions/win32_rtworkq.py +1 -0
- angr/procedures/definitions/win32_sas.py +1 -0
- angr/procedures/definitions/win32_scarddlg.py +1 -0
- angr/procedures/definitions/win32_schannel.py +1 -0
- angr/procedures/definitions/win32_sechost.py +1 -0
- angr/procedures/definitions/win32_secur32.py +1 -0
- angr/procedures/definitions/win32_sensapi.py +1 -0
- angr/procedures/definitions/win32_sensorsutilsv2.py +1 -0
- angr/procedures/definitions/win32_setupapi.py +1 -0
- angr/procedures/definitions/win32_sfc.py +1 -0
- angr/procedures/definitions/win32_shdocvw.py +1 -0
- angr/procedures/definitions/win32_shell32.py +1 -0
- angr/procedures/definitions/win32_shlwapi.py +1 -0
- angr/procedures/definitions/win32_slc.py +1 -0
- angr/procedures/definitions/win32_slcext.py +1 -0
- angr/procedures/definitions/win32_slwga.py +1 -0
- angr/procedures/definitions/win32_snmpapi.py +1 -0
- angr/procedures/definitions/win32_spoolss.py +1 -0
- angr/procedures/definitions/win32_srclient.py +1 -0
- angr/procedures/definitions/win32_srpapi.py +1 -0
- angr/procedures/definitions/win32_sspicli.py +1 -0
- angr/procedures/definitions/win32_sti.py +1 -0
- angr/procedures/definitions/win32_t2embed.py +1 -0
- angr/procedures/definitions/win32_tapi32.py +1 -0
- angr/procedures/definitions/win32_tbs.py +1 -0
- angr/procedures/definitions/win32_tdh.py +1 -0
- angr/procedures/definitions/win32_tokenbinding.py +1 -0
- angr/procedures/definitions/win32_traffic.py +1 -0
- angr/procedures/definitions/win32_txfw32.py +1 -0
- angr/procedures/definitions/win32_ualapi.py +1 -0
- angr/procedures/definitions/win32_uiautomationcore.py +1 -0
- angr/procedures/definitions/win32_urlmon.py +1 -0
- angr/procedures/definitions/win32_user32.py +1 -0
- angr/procedures/definitions/win32_userenv.py +1 -0
- angr/procedures/definitions/win32_usp10.py +1 -0
- angr/procedures/definitions/win32_uxtheme.py +1 -0
- angr/procedures/definitions/win32_verifier.py +1 -0
- angr/procedures/definitions/win32_version.py +1 -0
- angr/procedures/definitions/win32_vertdll.py +1 -0
- angr/procedures/definitions/win32_virtdisk.py +1 -0
- angr/procedures/definitions/win32_vmdevicehost.py +1 -0
- angr/procedures/definitions/win32_vmsavedstatedumpprovider.py +1 -0
- angr/procedures/definitions/win32_vssapi.py +1 -0
- angr/procedures/definitions/win32_wcmapi.py +1 -0
- angr/procedures/definitions/win32_wdsbp.py +1 -0
- angr/procedures/definitions/win32_wdsclientapi.py +1 -0
- angr/procedures/definitions/win32_wdsmc.py +1 -0
- angr/procedures/definitions/win32_wdspxe.py +1 -0
- angr/procedures/definitions/win32_wdstptc.py +1 -0
- angr/procedures/definitions/win32_webauthn.py +1 -0
- angr/procedures/definitions/win32_webservices.py +1 -0
- angr/procedures/definitions/win32_websocket.py +1 -0
- angr/procedures/definitions/win32_wecapi.py +1 -0
- angr/procedures/definitions/win32_wer.py +1 -0
- angr/procedures/definitions/win32_wevtapi.py +1 -0
- angr/procedures/definitions/win32_winbio.py +1 -0
- angr/procedures/definitions/win32_windows_ai_machinelearning.py +1 -0
- angr/procedures/definitions/win32_windows_data_pdf.py +1 -0
- angr/procedures/definitions/win32_windows_media_mediacontrol.py +1 -0
- angr/procedures/definitions/win32_windows_networking.py +1 -0
- angr/procedures/definitions/win32_windows_ui_xaml.py +1 -0
- angr/procedures/definitions/win32_windowscodecs.py +1 -0
- angr/procedures/definitions/win32_winfax.py +1 -0
- angr/procedures/definitions/win32_winhttp.py +1 -0
- angr/procedures/definitions/win32_winhvemulation.py +1 -0
- angr/procedures/definitions/win32_winhvplatform.py +1 -0
- angr/procedures/definitions/win32_wininet.py +1 -0
- angr/procedures/definitions/win32_winml.py +1 -0
- angr/procedures/definitions/win32_winmm.py +1 -0
- angr/procedures/definitions/win32_winscard.py +1 -0
- angr/procedures/definitions/win32_winspool.py +1 -0
- angr/procedures/definitions/win32_winspool_drv.py +1 -0
- angr/procedures/definitions/win32_wintrust.py +1 -0
- angr/procedures/definitions/win32_winusb.py +1 -0
- angr/procedures/definitions/win32_wlanapi.py +1 -0
- angr/procedures/definitions/win32_wlanui.py +1 -0
- angr/procedures/definitions/win32_wldap32.py +1 -0
- angr/procedures/definitions/win32_wldp.py +1 -0
- angr/procedures/definitions/win32_wmvcore.py +1 -0
- angr/procedures/definitions/win32_wnvapi.py +1 -0
- angr/procedures/definitions/win32_wofutil.py +1 -0
- angr/procedures/definitions/win32_ws2_32.py +1 -0
- angr/procedures/definitions/win32_wscapi.py +1 -0
- angr/procedures/definitions/win32_wsclient.py +1 -0
- angr/procedures/definitions/win32_wsdapi.py +1 -0
- angr/procedures/definitions/win32_wsmsvc.py +1 -0
- angr/procedures/definitions/win32_wsnmp32.py +1 -0
- angr/procedures/definitions/win32_wtsapi32.py +1 -0
- angr/procedures/definitions/win32_xaudio2_8.py +1 -0
- angr/procedures/definitions/win32_xinput1_4.py +1 -0
- angr/procedures/definitions/win32_xinputuap.py +1 -0
- angr/procedures/definitions/win32_xmllite.py +1 -0
- angr/procedures/definitions/win32_xolehlp.py +1 -0
- angr/procedures/definitions/win32_xpsprint.py +1 -0
- angr/procedures/glibc/__ctype_b_loc.py +2 -3
- angr/procedures/glibc/__ctype_tolower_loc.py +2 -3
- angr/procedures/glibc/__ctype_toupper_loc.py +2 -3
- angr/procedures/glibc/__errno_location.py +1 -0
- angr/procedures/glibc/__libc_init.py +1 -0
- angr/procedures/glibc/__libc_start_main.py +2 -3
- angr/procedures/glibc/dynamic_loading.py +1 -0
- angr/procedures/glibc/scanf.py +1 -0
- angr/procedures/glibc/sscanf.py +1 -0
- angr/procedures/gnulib/xalloc_die.py +1 -0
- angr/procedures/gnulib/xstrtol_fatal.py +1 -0
- angr/procedures/java/__init__.py +1 -0
- angr/procedures/java/unconstrained.py +4 -3
- angr/procedures/java_io/read.py +1 -0
- angr/procedures/java_io/write.py +1 -0
- angr/procedures/java_jni/__init__.py +25 -18
- angr/procedures/java_jni/array_operations.py +1 -0
- angr/procedures/java_jni/class_and_interface_operations.py +3 -3
- angr/procedures/java_jni/field_access.py +3 -6
- angr/procedures/java_jni/global_and_local_refs.py +1 -0
- angr/procedures/java_jni/method_calls.py +3 -2
- angr/procedures/java_jni/not_implemented.py +2 -1
- angr/procedures/java_jni/object_operations.py +3 -4
- angr/procedures/java_jni/string_operations.py +2 -1
- angr/procedures/java_jni/version_information.py +1 -0
- angr/procedures/java_lang/character.py +2 -3
- angr/procedures/java_lang/double.py +2 -2
- angr/procedures/java_lang/exit.py +1 -0
- angr/procedures/java_lang/getsimplename.py +2 -2
- angr/procedures/java_lang/integer.py +1 -0
- angr/procedures/java_lang/load_library.py +1 -0
- angr/procedures/java_lang/math.py +1 -0
- angr/procedures/java_lang/string.py +3 -3
- angr/procedures/java_lang/stringbuilder.py +1 -0
- angr/procedures/java_lang/system.py +1 -0
- angr/procedures/java_util/collection.py +1 -0
- angr/procedures/java_util/iterator.py +1 -0
- angr/procedures/java_util/list.py +1 -0
- angr/procedures/java_util/map.py +3 -4
- angr/procedures/java_util/random.py +1 -0
- angr/procedures/java_util/scanner_nextline.py +2 -1
- angr/procedures/libc/abort.py +1 -0
- angr/procedures/libc/access.py +1 -0
- angr/procedures/libc/atoi.py +2 -2
- angr/procedures/libc/atol.py +1 -0
- angr/procedures/libc/calloc.py +1 -0
- angr/procedures/libc/closelog.py +1 -0
- angr/procedures/libc/err.py +1 -0
- angr/procedures/libc/error.py +2 -3
- angr/procedures/libc/exit.py +1 -0
- angr/procedures/libc/fclose.py +2 -3
- angr/procedures/libc/feof.py +1 -0
- angr/procedures/libc/fflush.py +1 -0
- angr/procedures/libc/fgetc.py +1 -0
- angr/procedures/libc/fgets.py +19 -19
- angr/procedures/libc/fopen.py +6 -8
- angr/procedures/libc/fprintf.py +1 -0
- angr/procedures/libc/fputc.py +1 -0
- angr/procedures/libc/fputs.py +1 -0
- angr/procedures/libc/fread.py +1 -0
- angr/procedures/libc/free.py +1 -0
- angr/procedures/libc/fscanf.py +2 -2
- angr/procedures/libc/fseek.py +3 -2
- angr/procedures/libc/ftell.py +1 -0
- angr/procedures/libc/fwrite.py +1 -0
- angr/procedures/libc/getchar.py +2 -2
- angr/procedures/libc/getdelim.py +25 -25
- angr/procedures/libc/getegid.py +1 -0
- angr/procedures/libc/geteuid.py +1 -0
- angr/procedures/libc/getgid.py +1 -0
- angr/procedures/libc/gets.py +18 -18
- angr/procedures/libc/getuid.py +1 -0
- angr/procedures/libc/malloc.py +1 -0
- angr/procedures/libc/memcmp.py +3 -6
- angr/procedures/libc/memcpy.py +1 -0
- angr/procedures/libc/memset.py +1 -0
- angr/procedures/libc/openlog.py +1 -0
- angr/procedures/libc/perror.py +1 -0
- angr/procedures/libc/printf.py +1 -0
- angr/procedures/libc/putchar.py +1 -0
- angr/procedures/libc/puts.py +1 -0
- angr/procedures/libc/rand.py +1 -0
- angr/procedures/libc/realloc.py +1 -0
- angr/procedures/libc/rewind.py +2 -1
- angr/procedures/libc/scanf.py +2 -2
- angr/procedures/libc/setbuf.py +1 -0
- angr/procedures/libc/setvbuf.py +1 -0
- angr/procedures/libc/snprintf.py +1 -0
- angr/procedures/libc/sprintf.py +1 -0
- angr/procedures/libc/srand.py +1 -0
- angr/procedures/libc/sscanf.py +2 -2
- angr/procedures/libc/stpcpy.py +2 -2
- angr/procedures/libc/strcat.py +1 -0
- angr/procedures/libc/strchr.py +1 -0
- angr/procedures/libc/strcmp.py +1 -0
- angr/procedures/libc/strcpy.py +2 -2
- angr/procedures/libc/strlen.py +35 -31
- angr/procedures/libc/strncat.py +1 -0
- angr/procedures/libc/strncmp.py +9 -11
- angr/procedures/libc/strncpy.py +1 -0
- angr/procedures/libc/strnlen.py +2 -2
- angr/procedures/libc/strstr.py +8 -4
- angr/procedures/libc/strtol.py +9 -9
- angr/procedures/libc/strtoul.py +2 -2
- angr/procedures/libc/system.py +1 -0
- angr/procedures/libc/time.py +2 -2
- angr/procedures/libc/tmpnam.py +1 -0
- angr/procedures/libc/tolower.py +1 -0
- angr/procedures/libc/toupper.py +1 -0
- angr/procedures/libc/ungetc.py +1 -0
- angr/procedures/libc/vsnprintf.py +1 -0
- angr/procedures/libc/wchar.py +1 -0
- angr/procedures/libstdcpp/_unwind_resume.py +1 -0
- angr/procedures/libstdcpp/std____throw_bad_alloc.py +1 -0
- angr/procedures/libstdcpp/std____throw_bad_cast.py +1 -0
- angr/procedures/libstdcpp/std____throw_length_error.py +1 -0
- angr/procedures/libstdcpp/std____throw_logic_error.py +1 -0
- angr/procedures/libstdcpp/std__terminate.py +1 -0
- angr/procedures/linux_kernel/access.py +1 -0
- angr/procedures/linux_kernel/arch_prctl.py +1 -0
- angr/procedures/linux_kernel/arm_user_helpers.py +1 -0
- angr/procedures/linux_kernel/brk.py +1 -0
- angr/procedures/linux_kernel/cwd.py +1 -0
- angr/procedures/linux_kernel/fstat.py +2 -1
- angr/procedures/linux_kernel/fstat64.py +2 -1
- angr/procedures/linux_kernel/futex.py +3 -3
- angr/procedures/linux_kernel/getegid.py +1 -0
- angr/procedures/linux_kernel/geteuid.py +1 -0
- angr/procedures/linux_kernel/getgid.py +1 -0
- angr/procedures/linux_kernel/getpid.py +1 -0
- angr/procedures/linux_kernel/getrlimit.py +3 -3
- angr/procedures/linux_kernel/gettid.py +1 -0
- angr/procedures/linux_kernel/getuid.py +1 -0
- angr/procedures/linux_kernel/iovec.py +1 -0
- angr/procedures/linux_kernel/lseek.py +1 -0
- angr/procedures/linux_kernel/mmap.py +1 -0
- angr/procedures/linux_kernel/mprotect.py +7 -6
- angr/procedures/linux_kernel/munmap.py +1 -0
- angr/procedures/linux_kernel/openat.py +3 -5
- angr/procedures/linux_kernel/set_tid_address.py +1 -0
- angr/procedures/linux_kernel/sigaction.py +1 -0
- angr/procedures/linux_kernel/sigprocmask.py +1 -0
- angr/procedures/linux_kernel/stat.py +3 -2
- angr/procedures/linux_kernel/sysinfo.py +1 -0
- angr/procedures/linux_kernel/tgkill.py +1 -0
- angr/procedures/linux_kernel/time.py +2 -1
- angr/procedures/linux_kernel/uid.py +1 -0
- angr/procedures/linux_kernel/uname.py +1 -0
- angr/procedures/linux_kernel/unlink.py +2 -2
- angr/procedures/linux_kernel/vsyscall.py +2 -1
- angr/procedures/linux_loader/_dl_initial_error_catch_tsd.py +1 -0
- angr/procedures/linux_loader/_dl_rtld_lock.py +1 -0
- angr/procedures/linux_loader/sim_loader.py +1 -0
- angr/procedures/linux_loader/tls.py +2 -2
- angr/procedures/msvcr/__getmainargs.py +1 -0
- angr/procedures/msvcr/_initterm.py +1 -0
- angr/procedures/msvcr/fmode.py +1 -0
- angr/procedures/ntdll/exceptions.py +4 -3
- angr/procedures/posix/accept.py +2 -2
- angr/procedures/posix/bind.py +1 -0
- angr/procedures/posix/bzero.py +1 -0
- angr/procedures/posix/chroot.py +1 -0
- angr/procedures/posix/close.py +2 -2
- angr/procedures/posix/closedir.py +1 -0
- angr/procedures/posix/dup.py +4 -3
- angr/procedures/posix/fcntl.py +1 -0
- angr/procedures/posix/fdopen.py +16 -19
- angr/procedures/posix/fileno.py +1 -0
- angr/procedures/posix/fork.py +1 -0
- angr/procedures/posix/getenv.py +1 -0
- angr/procedures/posix/gethostbyname.py +1 -0
- angr/procedures/posix/getpass.py +1 -0
- angr/procedures/posix/getsockopt.py +1 -0
- angr/procedures/posix/htonl.py +2 -2
- angr/procedures/posix/htons.py +2 -2
- angr/procedures/posix/inet_ntoa.py +3 -5
- angr/procedures/posix/listen.py +1 -0
- angr/procedures/posix/mmap.py +2 -1
- angr/procedures/posix/open.py +1 -0
- angr/procedures/posix/opendir.py +1 -0
- angr/procedures/posix/poll.py +3 -3
- angr/procedures/posix/pread64.py +1 -0
- angr/procedures/posix/pthread.py +3 -3
- angr/procedures/posix/pwrite64.py +1 -0
- angr/procedures/posix/read.py +1 -0
- angr/procedures/posix/readdir.py +1 -1
- angr/procedures/posix/recv.py +1 -0
- angr/procedures/posix/recvfrom.py +1 -0
- angr/procedures/posix/select.py +7 -7
- angr/procedures/posix/send.py +2 -2
- angr/procedures/posix/setsockopt.py +1 -0
- angr/procedures/posix/sigaction.py +1 -0
- angr/procedures/posix/sim_time.py +1 -0
- angr/procedures/posix/sleep.py +1 -0
- angr/procedures/posix/socket.py +2 -2
- angr/procedures/posix/strcasecmp.py +1 -0
- angr/procedures/posix/strdup.py +1 -0
- angr/procedures/posix/strtok_r.py +32 -36
- angr/procedures/posix/syslog.py +1 -0
- angr/procedures/posix/tz.py +1 -0
- angr/procedures/posix/unlink.py +1 -0
- angr/procedures/posix/usleep.py +1 -0
- angr/procedures/posix/write.py +1 -0
- angr/procedures/procedure_dict.py +1 -0
- angr/procedures/stubs/CallReturn.py +1 -0
- angr/procedures/stubs/NoReturnUnconstrained.py +1 -0
- angr/procedures/stubs/Nop.py +1 -0
- angr/procedures/stubs/PathTerminator.py +1 -0
- angr/procedures/stubs/Redirect.py +3 -2
- angr/procedures/stubs/ReturnChar.py +1 -0
- angr/procedures/stubs/ReturnUnconstrained.py +2 -1
- angr/procedures/stubs/UnresolvableCallTarget.py +1 -0
- angr/procedures/stubs/UnresolvableJumpTarget.py +1 -0
- angr/procedures/stubs/UserHook.py +2 -1
- angr/procedures/stubs/b64_decode.py +1 -0
- angr/procedures/stubs/caller.py +1 -0
- angr/procedures/stubs/crazy_scanf.py +1 -0
- angr/procedures/stubs/format_parser.py +12 -16
- angr/procedures/stubs/syscall_stub.py +6 -7
- angr/procedures/testing/manyargs.py +1 -0
- angr/procedures/testing/retreg.py +2 -2
- angr/procedures/tracer/random.py +1 -0
- angr/procedures/tracer/receive.py +4 -4
- angr/procedures/tracer/transmit.py +4 -4
- angr/procedures/uclibc/__uClibc_main.py +1 -0
- angr/procedures/win32/EncodePointer.py +1 -0
- angr/procedures/win32/ExitProcess.py +1 -0
- angr/procedures/win32/GetCommandLine.py +1 -0
- angr/procedures/win32/GetCurrentProcessId.py +1 -0
- angr/procedures/win32/GetCurrentThreadId.py +1 -0
- angr/procedures/win32/GetLastInputInfo.py +1 -0
- angr/procedures/win32/GetModuleHandle.py +3 -4
- angr/procedures/win32/GetProcessAffinityMask.py +1 -0
- angr/procedures/win32/InterlockedExchange.py +2 -1
- angr/procedures/win32/IsProcessorFeaturePresent.py +1 -0
- angr/procedures/win32/VirtualAlloc.py +2 -1
- angr/procedures/win32/VirtualProtect.py +1 -0
- angr/procedures/win32/critical_section.py +1 -0
- angr/procedures/win32/dynamic_loading.py +2 -1
- angr/procedures/win32/file_handles.py +4 -4
- angr/procedures/win32/gethostbyname.py +2 -2
- angr/procedures/win32/heap.py +1 -0
- angr/procedures/win32/is_bad_ptr.py +1 -0
- angr/procedures/win32/local_storage.py +7 -6
- angr/procedures/win32/mutex.py +1 -0
- angr/procedures/win32/sim_time.py +7 -10
- angr/procedures/win32/system_paths.py +5 -4
- angr/procedures/win32_kernel/ExAllocatePool.py +1 -0
- angr/procedures/win32_kernel/ExFreePoolWithTag.py +1 -0
- angr/procedures/win_user32/chars.py +1 -0
- angr/procedures/win_user32/keyboard.py +1 -0
- angr/procedures/win_user32/messagebox.py +2 -4
- angr/project.py +15 -22
- angr/protos/__init__.py +1 -0
- angr/serializable.py +6 -3
- angr/sim_manager.py +18 -18
- angr/sim_options.py +5 -7
- angr/sim_procedure.py +16 -15
- angr/sim_state.py +61 -88
- angr/sim_state_options.py +9 -15
- angr/sim_type.py +135 -123
- angr/sim_variable.py +23 -38
- angr/simos/__init__.py +3 -1
- angr/simos/cgc.py +2 -1
- angr/simos/javavm.py +84 -95
- angr/simos/linux.py +54 -64
- angr/simos/simos.py +14 -23
- angr/simos/snimmuc_nxp.py +3 -6
- angr/simos/userland.py +6 -6
- angr/simos/windows.py +14 -11
- angr/slicer.py +13 -11
- angr/state_hierarchy.py +4 -4
- angr/state_plugins/__init__.py +1 -0
- angr/state_plugins/callstack.py +19 -18
- angr/state_plugins/cgc.py +5 -4
- angr/state_plugins/concrete.py +7 -8
- angr/state_plugins/debug_variables.py +15 -17
- angr/state_plugins/filesystem.py +13 -19
- angr/state_plugins/gdb.py +3 -2
- angr/state_plugins/globals.py +5 -1
- angr/state_plugins/heap/__init__.py +1 -0
- angr/state_plugins/heap/heap_base.py +1 -0
- angr/state_plugins/heap/heap_brk.py +9 -6
- angr/state_plugins/heap/heap_freelist.py +12 -9
- angr/state_plugins/heap/heap_libc.py +1 -0
- angr/state_plugins/heap/heap_ptmalloc.py +27 -36
- angr/state_plugins/heap/utils.py +1 -0
- angr/state_plugins/history.py +7 -10
- angr/state_plugins/inspect.py +1 -0
- angr/state_plugins/javavm_classloader.py +3 -2
- angr/state_plugins/jni_references.py +2 -1
- angr/state_plugins/libc.py +4 -4
- angr/state_plugins/light_registers.py +6 -8
- angr/state_plugins/log.py +1 -0
- angr/state_plugins/loop_data.py +1 -0
- angr/state_plugins/plugin.py +7 -8
- angr/state_plugins/posix.py +14 -22
- angr/state_plugins/preconstrainer.py +4 -3
- angr/state_plugins/scratch.py +6 -5
- angr/state_plugins/sim_action.py +15 -20
- angr/state_plugins/sim_action_object.py +205 -82
- angr/state_plugins/sim_event.py +1 -0
- angr/state_plugins/solver.py +65 -93
- angr/state_plugins/symbolizer.py +5 -6
- angr/state_plugins/trace_additions.py +32 -42
- angr/state_plugins/uc_manager.py +16 -9
- angr/state_plugins/unicorn_engine.py +21 -37
- angr/state_plugins/view.py +20 -19
- angr/storage/__init__.py +1 -0
- angr/storage/file.py +31 -33
- angr/storage/memory_mixins/__init__.py +12 -15
- angr/storage/memory_mixins/__init__.pyi +13 -14
- angr/storage/memory_mixins/actions_mixin.py +2 -1
- angr/storage/memory_mixins/address_concretization_mixin.py +11 -15
- angr/storage/memory_mixins/bvv_conversion_mixin.py +10 -11
- angr/storage/memory_mixins/clouseau_mixin.py +1 -0
- angr/storage/memory_mixins/conditional_store_mixin.py +1 -0
- angr/storage/memory_mixins/convenient_mappings_mixin.py +7 -8
- angr/storage/memory_mixins/default_filler_mixin.py +12 -14
- angr/storage/memory_mixins/dirty_addrs_mixin.py +1 -0
- angr/storage/memory_mixins/hex_dumper_mixin.py +6 -9
- angr/storage/memory_mixins/javavm_memory/__init__.py +1 -0
- angr/storage/memory_mixins/javavm_memory/javavm_memory_mixin.py +16 -23
- angr/storage/memory_mixins/keyvalue_memory/__init__.py +1 -0
- angr/storage/memory_mixins/keyvalue_memory/keyvalue_memory_mixin.py +2 -1
- angr/storage/memory_mixins/label_merger_mixin.py +2 -2
- angr/storage/memory_mixins/multi_value_merger_mixin.py +6 -5
- angr/storage/memory_mixins/name_resolution_mixin.py +12 -15
- angr/storage/memory_mixins/paged_memory/page_backer_mixins.py +6 -6
- angr/storage/memory_mixins/paged_memory/paged_memory_mixin.py +22 -36
- angr/storage/memory_mixins/paged_memory/paged_memory_multivalue_mixin.py +1 -0
- angr/storage/memory_mixins/paged_memory/pages/__init__.py +1 -2
- angr/storage/memory_mixins/paged_memory/pages/cooperation.py +4 -3
- angr/storage/memory_mixins/paged_memory/pages/history_tracking_mixin.py +4 -4
- angr/storage/memory_mixins/paged_memory/pages/ispo_mixin.py +1 -0
- angr/storage/memory_mixins/paged_memory/pages/list_page.py +12 -20
- angr/storage/memory_mixins/paged_memory/pages/multi_values.py +14 -19
- angr/storage/memory_mixins/paged_memory/pages/mv_list_page.py +26 -32
- angr/storage/memory_mixins/paged_memory/pages/permissions_mixin.py +1 -0
- angr/storage/memory_mixins/paged_memory/pages/refcount_mixin.py +2 -2
- angr/storage/memory_mixins/paged_memory/pages/ultra_page.py +38 -42
- angr/storage/memory_mixins/paged_memory/privileged_mixin.py +1 -0
- angr/storage/memory_mixins/paged_memory/stack_allocation_mixin.py +1 -0
- angr/storage/memory_mixins/regioned_memory/__init__.py +1 -0
- angr/storage/memory_mixins/regioned_memory/abstract_address_descriptor.py +5 -4
- angr/storage/memory_mixins/regioned_memory/abstract_merger_mixin.py +6 -21
- angr/storage/memory_mixins/regioned_memory/region_category_mixin.py +1 -0
- angr/storage/memory_mixins/regioned_memory/region_data.py +4 -5
- angr/storage/memory_mixins/regioned_memory/region_meta_mixin.py +129 -13
- angr/storage/memory_mixins/regioned_memory/regioned_address_concretization_mixin.py +2 -1
- angr/storage/memory_mixins/regioned_memory/regioned_memory_mixin.py +34 -44
- angr/storage/memory_mixins/regioned_memory/static_find_mixin.py +7 -9
- angr/storage/memory_mixins/simple_interface_mixin.py +8 -11
- angr/storage/memory_mixins/simplification_mixin.py +1 -0
- angr/storage/memory_mixins/size_resolution_mixin.py +5 -4
- angr/storage/memory_mixins/slotted_memory.py +3 -3
- angr/storage/memory_mixins/smart_find_mixin.py +3 -2
- angr/storage/memory_mixins/symbolic_merger_mixin.py +1 -0
- angr/storage/memory_mixins/top_merger_mixin.py +2 -2
- angr/storage/memory_mixins/underconstrained_mixin.py +12 -14
- angr/storage/memory_mixins/unwrapper_mixin.py +1 -0
- angr/storage/memory_object.py +35 -35
- angr/storage/pcap.py +3 -3
- angr/tablespecs.py +1 -0
- angr/utils/__init__.py +1 -0
- angr/utils/ail.py +30 -0
- angr/utils/algo.py +1 -0
- angr/utils/bits.py +12 -0
- angr/utils/constants.py +2 -0
- angr/utils/cowdict.py +3 -4
- angr/utils/dynamic_dictlist.py +4 -7
- angr/utils/endness.py +1 -0
- angr/utils/enums_conv.py +1 -0
- angr/utils/env.py +1 -0
- angr/utils/formatting.py +1 -0
- angr/utils/funcid.py +15 -14
- angr/utils/graph.py +52 -19
- angr/utils/lazy_import.py +1 -0
- angr/utils/library.py +10 -13
- angr/utils/loader.py +6 -6
- angr/utils/mp.py +4 -3
- angr/utils/orderedset.py +1 -0
- angr/utils/segment_list.py +7 -9
- angr/utils/ssa/__init__.py +198 -0
- angr/utils/ssa/tmp_uses_collector.py +23 -0
- angr/utils/ssa/vvar_uses_collector.py +37 -0
- angr/utils/timing.py +32 -20
- angr/utils/typing.py +1 -0
- angr/vaults.py +7 -8
- {angr-9.2.117.dist-info → angr-9.2.119.dist-info}/METADATA +9 -8
- angr-9.2.119.dist-info/RECORD +1345 -0
- {angr-9.2.117.dist-info → angr-9.2.119.dist-info}/WHEEL +1 -1
- angr/analyses/decompiler/optimization_passes/spilled_register_finder.py +0 -18
- angr/analyses/decompiler/seq_cf_structure_counter.py +0 -37
- angr/service.py +0 -35
- angr-9.2.117.dist-info/RECORD +0 -1310
- {angr-9.2.117.dist-info → angr-9.2.119.dist-info}/LICENSE +0 -0
- {angr-9.2.117.dist-info → angr-9.2.119.dist-info}/entry_points.txt +0 -0
- {angr-9.2.117.dist-info → angr-9.2.119.dist-info}/top_level.txt +0 -0
angr/calling_conventions.py
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# pylint:disable=line-too-long,missing-class-docstring,no-self-use
|
|
2
|
+
from __future__ import annotations
|
|
2
3
|
import logging
|
|
3
|
-
from typing import
|
|
4
|
+
from typing import cast
|
|
5
|
+
from collections.abc import Iterable
|
|
4
6
|
from collections import defaultdict
|
|
5
7
|
|
|
6
8
|
import claripy
|
|
@@ -31,6 +33,7 @@ from .sim_type import (
|
|
|
31
33
|
)
|
|
32
34
|
from .state_plugins.sim_action_object import SimActionObject
|
|
33
35
|
from .engines.soot.engine import SootMixin
|
|
36
|
+
import contextlib
|
|
34
37
|
|
|
35
38
|
l = logging.getLogger(name=__name__)
|
|
36
39
|
l.addFilter(UniqueLogFilter())
|
|
@@ -47,6 +50,7 @@ class AllocHelper:
|
|
|
47
50
|
self.base = claripy.BVS("alloc_base", ptrsize)
|
|
48
51
|
self.ptr = self.base
|
|
49
52
|
self.stores = {}
|
|
53
|
+
self.store_asts = {}
|
|
50
54
|
|
|
51
55
|
def alloc(self, size):
|
|
52
56
|
out = self.ptr
|
|
@@ -56,7 +60,7 @@ class AllocHelper:
|
|
|
56
60
|
def dump(self, val, state, loc=None):
|
|
57
61
|
if loc is None:
|
|
58
62
|
loc = self.stack_loc(val, state.arch)
|
|
59
|
-
self.stores[self.ptr
|
|
63
|
+
self.stores[self.ptr] = (val, loc)
|
|
60
64
|
return self.alloc(self.calc_size(val, state.arch))
|
|
61
65
|
|
|
62
66
|
def translate(self, val, base):
|
|
@@ -64,7 +68,7 @@ class AllocHelper:
|
|
|
64
68
|
return SimStructValue(
|
|
65
69
|
val.struct, {field: self.translate(subval, base) for field, subval in val._values.items()}
|
|
66
70
|
)
|
|
67
|
-
if isinstance(val, claripy.Bits):
|
|
71
|
+
if isinstance(val, claripy.ast.Bits):
|
|
68
72
|
return val.replace(self.base, base)
|
|
69
73
|
if type(val) is list:
|
|
70
74
|
return [self.translate(subval, base) for subval in val]
|
|
@@ -73,7 +77,7 @@ class AllocHelper:
|
|
|
73
77
|
def apply(self, state, base):
|
|
74
78
|
for ptr, (val, loc) in self.stores.items():
|
|
75
79
|
translated_val = self.translate(val, base)
|
|
76
|
-
translated_ptr = self.translate(ptr
|
|
80
|
+
translated_ptr = self.translate(ptr, base)
|
|
77
81
|
loc.set_value(state, translated_val, stack_base=translated_ptr)
|
|
78
82
|
|
|
79
83
|
def size(self):
|
|
@@ -85,7 +89,7 @@ class AllocHelper:
|
|
|
85
89
|
def calc_size(cls, val, arch):
|
|
86
90
|
if type(val) is SimStructValue:
|
|
87
91
|
return val.struct.size // arch.byte_width
|
|
88
|
-
if isinstance(val, claripy.Bits):
|
|
92
|
+
if isinstance(val, claripy.ast.Bits):
|
|
89
93
|
return len(val) // arch.byte_width
|
|
90
94
|
if type(val) is list:
|
|
91
95
|
# TODO real strides
|
|
@@ -96,7 +100,7 @@ class AllocHelper:
|
|
|
96
100
|
|
|
97
101
|
@classmethod
|
|
98
102
|
def stack_loc(cls, val, arch, offset=0):
|
|
99
|
-
if isinstance(val, claripy.Bits):
|
|
103
|
+
if isinstance(val, claripy.ast.Bits):
|
|
100
104
|
return SimStackArg(offset, len(val) // arch.byte_width)
|
|
101
105
|
if type(val) is list:
|
|
102
106
|
# TODO real strides
|
|
@@ -138,10 +142,7 @@ def refine_locs_with_struct_type(
|
|
|
138
142
|
pieces.append(locs[chunk].refine(size=use_bytes, offset=chunk_offset))
|
|
139
143
|
seen_bytes += use_bytes
|
|
140
144
|
|
|
141
|
-
if len(pieces) == 1
|
|
142
|
-
piece = pieces[0]
|
|
143
|
-
else:
|
|
144
|
-
piece = SimComboArg(pieces)
|
|
145
|
+
piece = pieces[0] if len(pieces) == 1 else SimComboArg(pieces)
|
|
145
146
|
if isinstance(arg_type, SimTypeFloat):
|
|
146
147
|
piece.is_fp = True
|
|
147
148
|
return piece
|
|
@@ -166,7 +167,7 @@ def refine_locs_with_struct_type(
|
|
|
166
167
|
if member.size == arg_type.size:
|
|
167
168
|
return refine_locs_with_struct_type(arch, locs, member, offset)
|
|
168
169
|
|
|
169
|
-
raise TypeError("I don't know how to lay out a
|
|
170
|
+
raise TypeError(f"I don't know how to lay out a {arg_type}")
|
|
170
171
|
|
|
171
172
|
|
|
172
173
|
class SerializableIterator:
|
|
@@ -265,7 +266,7 @@ class SimFunctionArgument:
|
|
|
265
266
|
def refine(self, size, arch=None, offset=None, is_fp=None):
|
|
266
267
|
raise NotImplementedError
|
|
267
268
|
|
|
268
|
-
def get_footprint(self) ->
|
|
269
|
+
def get_footprint(self) -> Iterable[SimRegArg | SimStackArg]:
|
|
269
270
|
"""
|
|
270
271
|
Return a list of SimRegArg and SimStackArgs that are the base components used for this location
|
|
271
272
|
"""
|
|
@@ -290,13 +291,18 @@ class SimRegArg(SimFunctionArgument):
|
|
|
290
291
|
self.clear_entire_reg = clear_entire_reg
|
|
291
292
|
|
|
292
293
|
def get_footprint(self):
|
|
293
|
-
|
|
294
|
+
return {self}
|
|
294
295
|
|
|
295
296
|
def __repr__(self):
|
|
296
|
-
return "
|
|
297
|
+
return f"<{self.reg_name}>"
|
|
297
298
|
|
|
298
299
|
def __eq__(self, other):
|
|
299
|
-
return
|
|
300
|
+
return (
|
|
301
|
+
type(other) is SimRegArg
|
|
302
|
+
and self.reg_name == other.reg_name
|
|
303
|
+
and self.reg_offset == other.reg_offset
|
|
304
|
+
and self.size == other.size
|
|
305
|
+
)
|
|
300
306
|
|
|
301
307
|
def __hash__(self):
|
|
302
308
|
return hash((self.size, self.reg_name, self.reg_offset))
|
|
@@ -320,10 +326,7 @@ class SimRegArg(SimFunctionArgument):
|
|
|
320
326
|
if offset is None:
|
|
321
327
|
if arch is None:
|
|
322
328
|
raise ValueError("Need to specify either offset or arch in order to refine a register argument")
|
|
323
|
-
if arch.register_endness == "Iend_LE"
|
|
324
|
-
offset = 0
|
|
325
|
-
else:
|
|
326
|
-
offset = self.size - size
|
|
329
|
+
offset = 0 if arch.register_endness == "Iend_LE" else self.size - size
|
|
327
330
|
if is_fp is None:
|
|
328
331
|
is_fp = self.is_fp
|
|
329
332
|
return SimRegArg(self.reg_name, size, self.reg_offset + offset, is_fp, clear_entire_reg=passed_offset_none)
|
|
@@ -341,15 +344,15 @@ class SimStackArg(SimFunctionArgument):
|
|
|
341
344
|
:ivar bool is_fp: Whether loads from this location should return a floating point bitvector
|
|
342
345
|
"""
|
|
343
346
|
|
|
344
|
-
def __init__(self, stack_offset, size, is_fp=False):
|
|
347
|
+
def __init__(self, stack_offset: int, size: int, is_fp: bool = False):
|
|
345
348
|
SimFunctionArgument.__init__(self, size, is_fp)
|
|
346
|
-
self.stack_offset = stack_offset
|
|
349
|
+
self.stack_offset: int = stack_offset
|
|
347
350
|
|
|
348
351
|
def get_footprint(self):
|
|
349
|
-
|
|
352
|
+
return {self}
|
|
350
353
|
|
|
351
354
|
def __repr__(self):
|
|
352
|
-
return "[
|
|
355
|
+
return f"[{self.stack_offset:#x}]"
|
|
353
356
|
|
|
354
357
|
def __eq__(self, other):
|
|
355
358
|
return type(other) is SimStackArg and self.stack_offset == other.stack_offset
|
|
@@ -373,10 +376,7 @@ class SimStackArg(SimFunctionArgument):
|
|
|
373
376
|
if offset is None:
|
|
374
377
|
if arch is None:
|
|
375
378
|
raise ValueError("Need to specify either offset or arch in order to refine a stack argument")
|
|
376
|
-
if arch.register_endness == "Iend_LE"
|
|
377
|
-
offset = 0
|
|
378
|
-
else:
|
|
379
|
-
offset = self.size - size
|
|
379
|
+
offset = 0 if arch.register_endness == "Iend_LE" else self.size - size
|
|
380
380
|
if is_fp is None:
|
|
381
381
|
is_fp = self.is_fp
|
|
382
382
|
return SimStackArg(self.stack_offset + offset, size, is_fp)
|
|
@@ -392,11 +392,10 @@ class SimComboArg(SimFunctionArgument):
|
|
|
392
392
|
self.locations = locations
|
|
393
393
|
|
|
394
394
|
def get_footprint(self):
|
|
395
|
-
for x in self.locations
|
|
396
|
-
yield from x.get_footprint()
|
|
395
|
+
return {y for x in self.locations for y in x.get_footprint()}
|
|
397
396
|
|
|
398
397
|
def __repr__(self):
|
|
399
|
-
return "SimComboArg(
|
|
398
|
+
return f"SimComboArg({self.locations!r})"
|
|
400
399
|
|
|
401
400
|
def __eq__(self, other):
|
|
402
401
|
return type(other) is SimComboArg and all(a == b for a, b in zip(self.locations, other.locations))
|
|
@@ -430,8 +429,21 @@ class SimStructArg(SimFunctionArgument):
|
|
|
430
429
|
self.locs = locs
|
|
431
430
|
|
|
432
431
|
def get_footprint(self):
|
|
433
|
-
|
|
434
|
-
|
|
432
|
+
regs: defaultdict[str, set[SimRegArg]] = defaultdict(set)
|
|
433
|
+
others: set[SimRegArg | SimStackArg] = set()
|
|
434
|
+
for loc in self.locs.values():
|
|
435
|
+
for footloc in loc.get_footprint():
|
|
436
|
+
if isinstance(footloc, SimRegArg):
|
|
437
|
+
regs[footloc.reg_name].add(footloc)
|
|
438
|
+
else:
|
|
439
|
+
others.add(footloc)
|
|
440
|
+
|
|
441
|
+
for reg, locset in regs.items():
|
|
442
|
+
min_offset = min(loc.reg_offset for loc in locset)
|
|
443
|
+
max_offset = max(loc.reg_offset + loc.size for loc in locset)
|
|
444
|
+
others.add(SimRegArg(reg, max_offset - min_offset, min_offset))
|
|
445
|
+
|
|
446
|
+
return others
|
|
435
447
|
|
|
436
448
|
def get_value(self, state, **kwargs):
|
|
437
449
|
return SimStructValue(
|
|
@@ -449,8 +461,7 @@ class SimArrayArg(SimFunctionArgument):
|
|
|
449
461
|
self.locs = locs
|
|
450
462
|
|
|
451
463
|
def get_footprint(self):
|
|
452
|
-
for x in self.locs
|
|
453
|
-
yield from x.get_footprint()
|
|
464
|
+
return {y for x in self.locs for y in x.get_footprint()}
|
|
454
465
|
|
|
455
466
|
def get_value(self, state, **kwargs):
|
|
456
467
|
return [getter.get_value(state, **kwargs) for getter in self.locs]
|
|
@@ -477,7 +488,7 @@ class SimReferenceArgument(SimFunctionArgument):
|
|
|
477
488
|
self.main_loc = main_loc
|
|
478
489
|
|
|
479
490
|
def get_footprint(self):
|
|
480
|
-
|
|
491
|
+
return self.main_loc.get_footprint()
|
|
481
492
|
|
|
482
493
|
def get_value(self, state, **kwargs):
|
|
483
494
|
ptr_val = self.ptr_loc.get_value(state, **kwargs)
|
|
@@ -588,7 +599,7 @@ class SimCC:
|
|
|
588
599
|
Returns an iterator of SimFunctionArguments
|
|
589
600
|
"""
|
|
590
601
|
if self.ARG_REGS is None:
|
|
591
|
-
raise NotImplementedError
|
|
602
|
+
raise NotImplementedError
|
|
592
603
|
return SerializableListIterator([SimRegArg(reg, self.arch.bytes) for reg in self.ARG_REGS])
|
|
593
604
|
|
|
594
605
|
@property
|
|
@@ -609,7 +620,7 @@ class SimCC:
|
|
|
609
620
|
Returns an iterator of SimFunctionArguments
|
|
610
621
|
"""
|
|
611
622
|
if self.FP_ARG_REGS is None:
|
|
612
|
-
raise NotImplementedError
|
|
623
|
+
raise NotImplementedError
|
|
613
624
|
return SerializableListIterator([SimRegArg(reg, self.arch.bytes) for reg in self.FP_ARG_REGS])
|
|
614
625
|
|
|
615
626
|
def is_fp_arg(self, arg):
|
|
@@ -714,15 +725,12 @@ class SimCC:
|
|
|
714
725
|
is_fp = isinstance(arg_type, SimTypeFloat)
|
|
715
726
|
size = arg_type.size // self.arch.byte_width
|
|
716
727
|
try:
|
|
717
|
-
if is_fp
|
|
718
|
-
arg = next(session.fp_iter)
|
|
719
|
-
else:
|
|
720
|
-
arg = next(session.int_iter)
|
|
728
|
+
arg = next(session.fp_iter) if is_fp else next(session.int_iter)
|
|
721
729
|
except StopIteration:
|
|
722
730
|
try:
|
|
723
731
|
arg = next(session.both_iter)
|
|
724
|
-
except StopIteration:
|
|
725
|
-
raise TypeError("Accessed too many arguments - exhausted all positions?")
|
|
732
|
+
except StopIteration as err:
|
|
733
|
+
raise TypeError("Accessed too many arguments - exhausted all positions?") from err
|
|
726
734
|
|
|
727
735
|
if size > arg.size:
|
|
728
736
|
if isinstance(arg, SimStackArg):
|
|
@@ -781,7 +789,7 @@ class SimCC:
|
|
|
781
789
|
else:
|
|
782
790
|
raise TypeError("WHAT kind of floating point is this")
|
|
783
791
|
else:
|
|
784
|
-
raise TypeError("Cannot guess FFI type for
|
|
792
|
+
raise TypeError(f"Cannot guess FFI type for {type(arg)}")
|
|
785
793
|
|
|
786
794
|
return result
|
|
787
795
|
|
|
@@ -951,12 +959,12 @@ class SimCC:
|
|
|
951
959
|
def _standardize_value(arg, ty, state, alloc):
|
|
952
960
|
if isinstance(arg, SimActionObject):
|
|
953
961
|
return SimCC._standardize_value(arg.ast, ty, state, alloc)
|
|
954
|
-
|
|
962
|
+
if isinstance(arg, PointerWrapper):
|
|
955
963
|
if not isinstance(ty, (SimTypePointer, SimTypeReference)):
|
|
956
|
-
raise TypeError("Type mismatch: expected
|
|
964
|
+
raise TypeError(f"Type mismatch: expected {ty}, got pointer-wrapper")
|
|
957
965
|
|
|
958
966
|
if arg.buffer:
|
|
959
|
-
if isinstance(arg.value, claripy.Bits):
|
|
967
|
+
if isinstance(arg.value, claripy.ast.Bits):
|
|
960
968
|
real_value = arg.value.chop(state.arch.byte_width)
|
|
961
969
|
elif type(arg.value) in (bytes, str):
|
|
962
970
|
real_value = claripy.BVV(arg.value).chop(8)
|
|
@@ -973,7 +981,7 @@ class SimCC:
|
|
|
973
981
|
) from None
|
|
974
982
|
return alloc(real_value, state)
|
|
975
983
|
|
|
976
|
-
|
|
984
|
+
if isinstance(arg, (str, bytes)):
|
|
977
985
|
# sanitize the argument and request standardization again with SimTypeArray
|
|
978
986
|
if type(arg) is str:
|
|
979
987
|
arg = arg.encode()
|
|
@@ -982,41 +990,39 @@ class SimCC:
|
|
|
982
990
|
pass
|
|
983
991
|
elif isinstance(ty, SimTypeFixedSizeArray) and isinstance(ty.elem_type, SimTypeChar):
|
|
984
992
|
if len(arg) > ty.length:
|
|
985
|
-
raise TypeError(f"String {
|
|
993
|
+
raise TypeError(f"String {arg!r} is too long for {ty}")
|
|
986
994
|
arg = arg.ljust(ty.length, b"\0")
|
|
987
995
|
elif isinstance(ty, SimTypeArray) and isinstance(ty.elem_type, SimTypeChar):
|
|
988
996
|
if ty.length is not None:
|
|
989
997
|
if len(arg) > ty.length:
|
|
990
|
-
raise TypeError(f"String {
|
|
998
|
+
raise TypeError(f"String {arg!r} is too long for {ty}")
|
|
991
999
|
arg = arg.ljust(ty.length, b"\0")
|
|
992
1000
|
elif isinstance(ty, SimTypeString):
|
|
993
1001
|
if len(arg) > ty.length + 1:
|
|
994
|
-
raise TypeError(f"String {
|
|
1002
|
+
raise TypeError(f"String {arg!r} is too long for {ty}")
|
|
995
1003
|
arg = arg.ljust(ty.length + 1, b"\0")
|
|
996
1004
|
else:
|
|
997
|
-
raise TypeError("Type mismatch: Expected
|
|
998
|
-
|
|
999
|
-
return val
|
|
1005
|
+
raise TypeError(f"Type mismatch: Expected {ty}, got char*")
|
|
1006
|
+
return SimCC._standardize_value(list(arg), SimTypeArray(SimTypeChar(), len(arg)), state, alloc)
|
|
1000
1007
|
|
|
1001
|
-
|
|
1008
|
+
if isinstance(arg, list):
|
|
1002
1009
|
if isinstance(ty, (SimTypePointer, SimTypeReference)):
|
|
1003
1010
|
ref = True
|
|
1004
1011
|
subty = ty.pts_to
|
|
1005
1012
|
elif isinstance(ty, SimTypeArray):
|
|
1006
1013
|
ref = True
|
|
1007
1014
|
subty = ty.elem_type
|
|
1008
|
-
if ty.length is not None:
|
|
1009
|
-
|
|
1010
|
-
raise TypeError(f"Array {repr(arg)} is the wrong length for {ty}")
|
|
1015
|
+
if ty.length is not None and len(arg) != ty.length:
|
|
1016
|
+
raise TypeError(f"Array {arg!r} is the wrong length for {ty}")
|
|
1011
1017
|
else:
|
|
1012
|
-
raise TypeError("Type mismatch: Expected
|
|
1018
|
+
raise TypeError(f"Type mismatch: Expected {ty}, got char*")
|
|
1013
1019
|
|
|
1014
1020
|
val = [SimCC._standardize_value(sarg, subty, state, alloc) for sarg in arg]
|
|
1015
1021
|
if ref:
|
|
1016
1022
|
val = alloc(val, state)
|
|
1017
1023
|
return val
|
|
1018
1024
|
|
|
1019
|
-
|
|
1025
|
+
if isinstance(arg, (tuple, dict, SimStructValue)):
|
|
1020
1026
|
if not isinstance(ty, SimStruct):
|
|
1021
1027
|
raise TypeError(f"Type mismatch: Expected {ty}, got {type(arg)} (i.e. struct)")
|
|
1022
1028
|
if type(arg) is not SimStructValue:
|
|
@@ -1027,24 +1033,23 @@ class SimCC:
|
|
|
1027
1033
|
ty, [SimCC._standardize_value(arg[field], ty.fields[field], state, alloc) for field in ty.fields]
|
|
1028
1034
|
)
|
|
1029
1035
|
|
|
1030
|
-
|
|
1036
|
+
if isinstance(arg, int):
|
|
1031
1037
|
if isinstance(ty, SimTypeFloat):
|
|
1032
1038
|
return SimCC._standardize_value(float(arg), ty, state, alloc)
|
|
1033
1039
|
|
|
1034
|
-
|
|
1035
|
-
return val
|
|
1040
|
+
return claripy.BVV(arg, ty.size)
|
|
1036
1041
|
|
|
1037
|
-
|
|
1042
|
+
if isinstance(arg, float):
|
|
1038
1043
|
if isinstance(ty, SimTypeDouble):
|
|
1039
1044
|
sort = claripy.FSORT_DOUBLE
|
|
1040
1045
|
elif isinstance(ty, SimTypeFloat):
|
|
1041
1046
|
sort = claripy.FSORT_FLOAT
|
|
1042
1047
|
else:
|
|
1043
|
-
raise TypeError("Type mismatch: expected
|
|
1048
|
+
raise TypeError(f"Type mismatch: expected {ty}, got float")
|
|
1044
1049
|
|
|
1045
1050
|
return claripy.FPV(arg, sort)
|
|
1046
1051
|
|
|
1047
|
-
|
|
1052
|
+
if isinstance(arg, claripy.ast.FP):
|
|
1048
1053
|
if isinstance(ty, SimTypeFloat):
|
|
1049
1054
|
if len(arg) != ty.size:
|
|
1050
1055
|
raise TypeError(f"Type mismatch: expected {ty}, got {arg.sort}")
|
|
@@ -1053,7 +1058,7 @@ class SimCC:
|
|
|
1053
1058
|
return arg.val_to_bv(ty.size, ty.signed)
|
|
1054
1059
|
raise TypeError(f"Type mismatch: expected {ty}, got {arg.sort}")
|
|
1055
1060
|
|
|
1056
|
-
|
|
1061
|
+
if isinstance(arg, claripy.ast.BV):
|
|
1057
1062
|
if isinstance(ty, (SimTypeReg, SimTypeNum)):
|
|
1058
1063
|
if len(arg) != ty.size:
|
|
1059
1064
|
raise TypeError("Type mismatch: expected %s, got %d bits" % (ty, len(arg)))
|
|
@@ -1063,10 +1068,9 @@ class SimCC:
|
|
|
1063
1068
|
"It's unclear how to coerce a bitvector to %s. "
|
|
1064
1069
|
"Do you want .raw_to_fp or .val_to_fp, and signed or unsigned?"
|
|
1065
1070
|
)
|
|
1066
|
-
raise TypeError("Type mismatch: expected
|
|
1071
|
+
raise TypeError(f"Type mismatch: expected {ty}, got bitvector")
|
|
1067
1072
|
|
|
1068
|
-
|
|
1069
|
-
raise TypeError("I don't know how to serialize %s." % repr(arg))
|
|
1073
|
+
raise TypeError(f"I don't know how to serialize {arg!r}.")
|
|
1070
1074
|
|
|
1071
1075
|
def __repr__(self):
|
|
1072
1076
|
return f"<{self.__class__.__name__}>"
|
|
@@ -1083,15 +1087,21 @@ class SimCC:
|
|
|
1083
1087
|
if sp_delta != cls.STACKARG_SP_DIFF:
|
|
1084
1088
|
return False
|
|
1085
1089
|
|
|
1090
|
+
def _arg_ident(a: SimRegArg | SimStackArg) -> int | str:
|
|
1091
|
+
if isinstance(a, SimRegArg):
|
|
1092
|
+
return a.reg_name
|
|
1093
|
+
return a.stack_offset
|
|
1094
|
+
|
|
1086
1095
|
sample_inst = cls(arch)
|
|
1087
|
-
all_fp_args =
|
|
1088
|
-
all_int_args =
|
|
1096
|
+
all_fp_args: set[int | str] = {_arg_ident(a) for a in sample_inst.fp_args}
|
|
1097
|
+
all_int_args: set[int | str] = {_arg_ident(a) for a in sample_inst.int_args}
|
|
1089
1098
|
both_iter = sample_inst.memory_args
|
|
1090
|
-
some_both_args =
|
|
1099
|
+
some_both_args: set[int | str] = {_arg_ident(next(both_iter)) for _ in range(len(args))}
|
|
1091
1100
|
|
|
1092
1101
|
new_args = []
|
|
1093
1102
|
for arg in args:
|
|
1094
|
-
|
|
1103
|
+
arg_ident = _arg_ident(arg)
|
|
1104
|
+
if arg_ident not in all_fp_args and arg_ident not in all_int_args and arg_ident not in some_both_args:
|
|
1095
1105
|
if isinstance(arg, SimRegArg) and arg.reg_name in sample_inst.CALLER_SAVED_REGS:
|
|
1096
1106
|
continue
|
|
1097
1107
|
return False
|
|
@@ -1105,8 +1115,8 @@ class SimCC:
|
|
|
1105
1115
|
|
|
1106
1116
|
@staticmethod
|
|
1107
1117
|
def find_cc(
|
|
1108
|
-
arch:
|
|
1109
|
-
) ->
|
|
1118
|
+
arch: archinfo.Arch, args: list[SimFunctionArgument], sp_delta: int, platform: str = "Linux"
|
|
1119
|
+
) -> SimCC | None:
|
|
1110
1120
|
"""
|
|
1111
1121
|
Pinpoint the best-fit calling convention and return the corresponding SimCC instance, or None if no fit is
|
|
1112
1122
|
found.
|
|
@@ -1223,12 +1233,8 @@ class SimCCCdecl(SimCC):
|
|
|
1223
1233
|
byte_size = ty.size // self.arch.byte_width
|
|
1224
1234
|
referenced_locs = [SimStackArg(offset, self.arch.bytes) for offset in range(0, byte_size, self.arch.bytes)]
|
|
1225
1235
|
referenced_loc = refine_locs_with_struct_type(self.arch, referenced_locs, ty)
|
|
1226
|
-
if perspective_returned
|
|
1227
|
-
|
|
1228
|
-
else:
|
|
1229
|
-
ptr_loc = SimStackArg(0, 4)
|
|
1230
|
-
reference_loc = SimReferenceArgument(ptr_loc, referenced_loc)
|
|
1231
|
-
return reference_loc
|
|
1236
|
+
ptr_loc = self.RETURN_VAL if perspective_returned else SimStackArg(0, 4)
|
|
1237
|
+
return SimReferenceArgument(ptr_loc, referenced_loc)
|
|
1232
1238
|
|
|
1233
1239
|
return refine_locs_with_struct_type(self.arch, [self.RETURN_VAL, self.OVERFLOW_RETURN_VAL], ty)
|
|
1234
1240
|
|
|
@@ -1276,6 +1282,8 @@ class SimCCMicrosoftAMD64(SimCC):
|
|
|
1276
1282
|
|
|
1277
1283
|
ArgSession = MicrosoftAMD64ArgSession
|
|
1278
1284
|
|
|
1285
|
+
STRUCT_RETURN_THRESHOLD = 64
|
|
1286
|
+
|
|
1279
1287
|
def next_arg(self, session, arg_type):
|
|
1280
1288
|
if isinstance(arg_type, (SimTypeArray, SimTypeFixedSizeArray)): # hack
|
|
1281
1289
|
arg_type = SimTypePointer(arg_type.elem_type).with_arch(self.arch)
|
|
@@ -1295,13 +1303,31 @@ class SimCCMicrosoftAMD64(SimCC):
|
|
|
1295
1303
|
|
|
1296
1304
|
referenced_locs = [SimStackArg(offset, self.arch.bytes) for offset in range(0, byte_size, self.arch.bytes)]
|
|
1297
1305
|
referenced_loc = refine_locs_with_struct_type(self.arch, referenced_locs, arg_type)
|
|
1298
|
-
|
|
1299
|
-
return reference_loc
|
|
1306
|
+
return SimReferenceArgument(int_loc, referenced_loc)
|
|
1300
1307
|
|
|
1301
1308
|
def return_in_implicit_outparam(self, ty):
|
|
1302
1309
|
if isinstance(ty, SimTypeBottom):
|
|
1303
1310
|
return False
|
|
1304
|
-
return not isinstance(ty, SimTypeFloat) and ty.size >
|
|
1311
|
+
return not isinstance(ty, SimTypeFloat) and ty.size > self.STRUCT_RETURN_THRESHOLD
|
|
1312
|
+
|
|
1313
|
+
def return_val(self, ty, perspective_returned=False):
|
|
1314
|
+
if ty._arch is None:
|
|
1315
|
+
ty = ty.with_arch(self.arch)
|
|
1316
|
+
if not isinstance(ty, SimStruct):
|
|
1317
|
+
return super().return_val(ty, perspective_returned)
|
|
1318
|
+
|
|
1319
|
+
if ty.size > self.STRUCT_RETURN_THRESHOLD:
|
|
1320
|
+
# TODO this code is duplicated a ton of places. how should it be a function?
|
|
1321
|
+
byte_size = ty.size // self.arch.byte_width
|
|
1322
|
+
referenced_locs = [SimStackArg(offset, self.arch.bytes) for offset in range(0, byte_size, self.arch.bytes)]
|
|
1323
|
+
referenced_loc = refine_locs_with_struct_type(self.arch, referenced_locs, ty)
|
|
1324
|
+
if perspective_returned:
|
|
1325
|
+
ptr_loc = self.RETURN_VAL
|
|
1326
|
+
else:
|
|
1327
|
+
ptr_loc = self.next_arg(self.ArgSession(self), SimTypePointer(SimTypeBottom()).with_arch(self.arch))
|
|
1328
|
+
return SimReferenceArgument(ptr_loc, referenced_loc)
|
|
1329
|
+
|
|
1330
|
+
return refine_locs_with_struct_type(self.arch, [self.RETURN_VAL], ty)
|
|
1305
1331
|
|
|
1306
1332
|
|
|
1307
1333
|
class SimCCSyscall(SimCC):
|
|
@@ -1314,7 +1340,7 @@ class SimCCSyscall(SimCC):
|
|
|
1314
1340
|
|
|
1315
1341
|
@staticmethod
|
|
1316
1342
|
def syscall_num(state) -> int:
|
|
1317
|
-
raise NotImplementedError
|
|
1343
|
+
raise NotImplementedError
|
|
1318
1344
|
|
|
1319
1345
|
def linux_syscall_update_error_reg(self, state, expr):
|
|
1320
1346
|
# special handling for Linux syscalls: on some architectures (mips/a3, powerpc/cr0_0) a bool indicating success
|
|
@@ -1323,10 +1349,8 @@ class SimCCSyscall(SimCC):
|
|
|
1323
1349
|
return expr
|
|
1324
1350
|
if type(expr) is int:
|
|
1325
1351
|
expr = claripy.BVV(expr, state.arch.bits)
|
|
1326
|
-
|
|
1352
|
+
with contextlib.suppress(AttributeError):
|
|
1327
1353
|
expr = expr.ast
|
|
1328
|
-
except AttributeError:
|
|
1329
|
-
pass
|
|
1330
1354
|
nbits = self.ERROR_REG.size * state.arch.byte_width
|
|
1331
1355
|
error_cond = claripy.UGE(expr, self.SYSCALL_ERRNO_START)
|
|
1332
1356
|
if state.solver.is_false(error_cond):
|
|
@@ -1485,29 +1509,24 @@ class SimCCSystemVAMD64(SimCC):
|
|
|
1485
1509
|
byte_size = ty.size // self.arch.byte_width
|
|
1486
1510
|
referenced_locs = [SimStackArg(offset, self.arch.bytes) for offset in range(0, byte_size, self.arch.bytes)]
|
|
1487
1511
|
referenced_loc = refine_locs_with_struct_type(self.arch, referenced_locs, ty)
|
|
1488
|
-
if perspective_returned
|
|
1489
|
-
|
|
1512
|
+
ptr_loc = self.RETURN_VAL if perspective_returned else SimRegArg("rdi", 8)
|
|
1513
|
+
return SimReferenceArgument(ptr_loc, referenced_loc)
|
|
1514
|
+
mapped_classes = []
|
|
1515
|
+
int_iter = iter([self.RETURN_VAL, self.OVERFLOW_RETURN_VAL])
|
|
1516
|
+
fp_iter = iter([self.FP_RETURN_VAL, self.OVERFLOW_FP_RETURN_VAL])
|
|
1517
|
+
for cls in classification:
|
|
1518
|
+
if cls == "SSEUP":
|
|
1519
|
+
mapped_classes.append(mapped_classes[-1].sse_extend(self.arch.bytes))
|
|
1520
|
+
elif cls == "NO_CLASS":
|
|
1521
|
+
raise NotImplementedError("Bug. Report to @rhelmot")
|
|
1522
|
+
elif cls == "INTEGER":
|
|
1523
|
+
mapped_classes.append(next(int_iter))
|
|
1524
|
+
elif cls == "SSE":
|
|
1525
|
+
mapped_classes.append(next(fp_iter))
|
|
1490
1526
|
else:
|
|
1491
|
-
|
|
1492
|
-
reference_loc = SimReferenceArgument(ptr_loc, referenced_loc)
|
|
1493
|
-
return reference_loc
|
|
1494
|
-
else:
|
|
1495
|
-
mapped_classes = []
|
|
1496
|
-
int_iter = iter([self.RETURN_VAL, self.OVERFLOW_RETURN_VAL])
|
|
1497
|
-
fp_iter = iter([self.FP_RETURN_VAL, self.OVERFLOW_FP_RETURN_VAL])
|
|
1498
|
-
for cls in classification:
|
|
1499
|
-
if cls == "SSEUP":
|
|
1500
|
-
mapped_classes.append(mapped_classes[-1].sse_extend(self.arch.bytes))
|
|
1501
|
-
elif cls == "NO_CLASS":
|
|
1502
|
-
raise NotImplementedError("Bug. Report to @rhelmot")
|
|
1503
|
-
elif cls == "INTEGER":
|
|
1504
|
-
mapped_classes.append(next(int_iter))
|
|
1505
|
-
elif cls == "SSE":
|
|
1506
|
-
mapped_classes.append(next(fp_iter))
|
|
1507
|
-
else:
|
|
1508
|
-
raise NotImplementedError("Bug. Report to @rhelmot")
|
|
1527
|
+
raise NotImplementedError("Bug. Report to @rhelmot")
|
|
1509
1528
|
|
|
1510
|
-
|
|
1529
|
+
return refine_locs_with_struct_type(self.arch, mapped_classes, ty)
|
|
1511
1530
|
|
|
1512
1531
|
def return_in_implicit_outparam(self, ty):
|
|
1513
1532
|
if isinstance(ty, SimTypeBottom):
|
|
@@ -1519,15 +1538,12 @@ class SimCCSystemVAMD64(SimCC):
|
|
|
1519
1538
|
if chunksize is None:
|
|
1520
1539
|
chunksize = self.arch.bytes
|
|
1521
1540
|
# treat BOT as INTEGER
|
|
1522
|
-
if isinstance(ty, SimTypeBottom)
|
|
1523
|
-
nchunks = 1
|
|
1524
|
-
else:
|
|
1525
|
-
nchunks = (ty.size // self.arch.byte_width + chunksize - 1) // chunksize
|
|
1541
|
+
nchunks = 1 if isinstance(ty, SimTypeBottom) else (ty.size // self.arch.byte_width + chunksize - 1) // chunksize
|
|
1526
1542
|
if isinstance(ty, (SimTypeInt, SimTypeChar, SimTypePointer, SimTypeNum, SimTypeBottom, SimTypeReference)):
|
|
1527
1543
|
return ["INTEGER"] * nchunks
|
|
1528
|
-
|
|
1544
|
+
if isinstance(ty, (SimTypeFloat,)):
|
|
1529
1545
|
return ["SSE"] + ["SSEUP"] * (nchunks - 1)
|
|
1530
|
-
|
|
1546
|
+
if isinstance(ty, (SimStruct, SimTypeFixedSizeArray, SimUnion)):
|
|
1531
1547
|
if ty.size > 512:
|
|
1532
1548
|
return ["MEMORY"] * nchunks
|
|
1533
1549
|
flattened = self._flatten(ty)
|
|
@@ -1551,8 +1567,7 @@ class SimCCSystemVAMD64(SimCC):
|
|
|
1551
1567
|
if result[i] == "SSEUP" and result[i - 1] not in ("SSE", "SSEUP"):
|
|
1552
1568
|
result[i] = "SSE"
|
|
1553
1569
|
return result
|
|
1554
|
-
|
|
1555
|
-
raise NotImplementedError("Ummmmm... not sure what goes here. report bug to @rhelmot")
|
|
1570
|
+
raise NotImplementedError("Ummmmm... not sure what goes here. report bug to @rhelmot")
|
|
1556
1571
|
|
|
1557
1572
|
def _flatten(self, ty) -> dict[int, list[SimType]] | None:
|
|
1558
1573
|
result: dict[int, list[SimType]] = defaultdict(list)
|
|
@@ -1670,12 +1685,7 @@ class SimCCARM(SimCC):
|
|
|
1670
1685
|
raise NotImplementedError("Bug. Report to @rhelmot")
|
|
1671
1686
|
elif cls == "MEMORY":
|
|
1672
1687
|
mapped_classes.append(next(session.both_iter))
|
|
1673
|
-
elif cls == "INTEGER":
|
|
1674
|
-
try:
|
|
1675
|
-
mapped_classes.append(next(session.int_iter))
|
|
1676
|
-
except StopIteration:
|
|
1677
|
-
mapped_classes.append(next(session.both_iter))
|
|
1678
|
-
elif cls == "SINGLEP":
|
|
1688
|
+
elif cls == "INTEGER" or cls == "SINGLEP":
|
|
1679
1689
|
try:
|
|
1680
1690
|
mapped_classes.append(next(session.int_iter))
|
|
1681
1691
|
except StopIteration:
|
|
@@ -1692,19 +1702,16 @@ class SimCCARM(SimCC):
|
|
|
1692
1702
|
if chunksize is None:
|
|
1693
1703
|
chunksize = self.arch.bytes
|
|
1694
1704
|
# treat BOT as INTEGER
|
|
1695
|
-
if isinstance(ty, SimTypeBottom)
|
|
1696
|
-
nchunks = 1
|
|
1697
|
-
else:
|
|
1698
|
-
nchunks = (ty.size // self.arch.byte_width + chunksize - 1) // chunksize
|
|
1705
|
+
nchunks = 1 if isinstance(ty, SimTypeBottom) else (ty.size // self.arch.byte_width + chunksize - 1) // chunksize
|
|
1699
1706
|
if isinstance(ty, (SimTypeInt, SimTypeChar, SimTypePointer, SimTypeNum, SimTypeBottom, SimTypeReference)):
|
|
1700
1707
|
return ["INTEGER"] * nchunks
|
|
1701
|
-
|
|
1708
|
+
if isinstance(ty, (SimTypeFloat,)):
|
|
1702
1709
|
if ty.size == 64:
|
|
1703
1710
|
return ["DOUBLEP"]
|
|
1704
|
-
|
|
1711
|
+
if ty.size == 32:
|
|
1705
1712
|
return ["SINGLEP"]
|
|
1706
1713
|
return ["NO_CLASS"]
|
|
1707
|
-
|
|
1714
|
+
if isinstance(ty, (SimStruct, SimTypeFixedSizeArray, SimUnion)):
|
|
1708
1715
|
flattened = self._flatten(ty)
|
|
1709
1716
|
if flattened is None:
|
|
1710
1717
|
return ["MEMORY"] * nchunks
|
|
@@ -1719,8 +1726,7 @@ class SimCCARM(SimCC):
|
|
|
1719
1726
|
subclass = subresult[i * chunksize]
|
|
1720
1727
|
result[idx] = self._combine_classes(result[idx], subclass)
|
|
1721
1728
|
return result
|
|
1722
|
-
|
|
1723
|
-
raise NotImplementedError("Ummmmm... not sure what goes here. report bug to @rhelmot")
|
|
1729
|
+
raise NotImplementedError("Ummmmm... not sure what goes here. report bug to @rhelmot")
|
|
1724
1730
|
|
|
1725
1731
|
def _combine_classes(self, cls1, cls2):
|
|
1726
1732
|
if cls1 == cls2:
|
|
@@ -1806,8 +1812,7 @@ class SimCCARMLinuxSyscall(SimCCSyscall):
|
|
|
1806
1812
|
|
|
1807
1813
|
if len(svc_num) == 32 and (svc_num > 0x900000).is_true() and (svc_num < 0x90FFFF).is_true():
|
|
1808
1814
|
return svc_num - 0x900000
|
|
1809
|
-
|
|
1810
|
-
return state.regs.r7
|
|
1815
|
+
return state.regs.r7
|
|
1811
1816
|
|
|
1812
1817
|
|
|
1813
1818
|
class SimCCAArch64(SimCC):
|
|
@@ -1916,19 +1921,16 @@ class SimCCO32(SimCC):
|
|
|
1916
1921
|
if chunksize is None:
|
|
1917
1922
|
chunksize = self.arch.bytes
|
|
1918
1923
|
# treat BOT as INTEGER
|
|
1919
|
-
if isinstance(ty, SimTypeBottom)
|
|
1920
|
-
nchunks = 1
|
|
1921
|
-
else:
|
|
1922
|
-
nchunks = (ty.size // self.arch.byte_width + chunksize - 1) // chunksize
|
|
1924
|
+
nchunks = 1 if isinstance(ty, SimTypeBottom) else (ty.size // self.arch.byte_width + chunksize - 1) // chunksize
|
|
1923
1925
|
if isinstance(ty, (SimTypeInt, SimTypeChar, SimTypePointer, SimTypeNum, SimTypeBottom, SimTypeReference)):
|
|
1924
1926
|
return ["INTEGER"] * nchunks
|
|
1925
|
-
|
|
1927
|
+
if isinstance(ty, (SimTypeFloat,)):
|
|
1926
1928
|
if ty.size == 64:
|
|
1927
1929
|
return ["DOUBLEP"]
|
|
1928
|
-
|
|
1930
|
+
if ty.size == 32:
|
|
1929
1931
|
return ["SINGLEP"]
|
|
1930
1932
|
return ["NO_CLASS"]
|
|
1931
|
-
|
|
1933
|
+
if isinstance(ty, (SimStruct, SimTypeFixedSizeArray, SimUnion)):
|
|
1932
1934
|
flattened = self._flatten(ty)
|
|
1933
1935
|
if flattened is None:
|
|
1934
1936
|
return ["MEMORY"] * nchunks
|
|
@@ -1943,8 +1945,7 @@ class SimCCO32(SimCC):
|
|
|
1943
1945
|
subclass = subresult[i * chunksize]
|
|
1944
1946
|
result[idx] = self._combine_classes(result[idx], subclass)
|
|
1945
1947
|
return result
|
|
1946
|
-
|
|
1947
|
-
raise NotImplementedError("Ummmmm... not sure what goes here. report bug to @rhelmot")
|
|
1948
|
+
raise NotImplementedError("Ummmmm... not sure what goes here. report bug to @rhelmot")
|
|
1948
1949
|
|
|
1949
1950
|
def _combine_classes(self, cls1, cls2):
|
|
1950
1951
|
if cls1 == cls2:
|
|
@@ -2253,7 +2254,7 @@ ARCH_NAME_ALIASES = {
|
|
|
2253
2254
|
"PPC32": ["powerpc32"],
|
|
2254
2255
|
"PPC64": ["powerpc64"],
|
|
2255
2256
|
"Soot": [],
|
|
2256
|
-
"AVR8": [],
|
|
2257
|
+
"AVR8": ["avr8"],
|
|
2257
2258
|
"MSP": [],
|
|
2258
2259
|
"S390X": [],
|
|
2259
2260
|
}
|
|
@@ -2300,8 +2301,7 @@ def default_cc( # pylint:disable=unused-argument
|
|
|
2300
2301
|
if alias not in cc_map or platform not in cc_map[alias]:
|
|
2301
2302
|
if default is not ...:
|
|
2302
2303
|
return default
|
|
2303
|
-
|
|
2304
|
-
return None
|
|
2304
|
+
return None
|
|
2305
2305
|
return cc_map[alias][platform]
|
|
2306
2306
|
|
|
2307
2307
|
|