angr 9.2.103__py3-none-macosx_11_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of angr might be problematic. Click here for more details.
- angr/__init__.py +153 -0
- angr/__main__.py +59 -0
- angr/analyses/__init__.py +46 -0
- angr/analyses/analysis.py +359 -0
- angr/analyses/backward_slice.py +691 -0
- angr/analyses/binary_optimizer.py +683 -0
- angr/analyses/bindiff.py +1251 -0
- angr/analyses/boyscout.py +77 -0
- angr/analyses/callee_cleanup_finder.py +75 -0
- angr/analyses/calling_convention.py +956 -0
- angr/analyses/cdg.py +197 -0
- angr/analyses/cfg/__init__.py +11 -0
- angr/analyses/cfg/cfb.py +436 -0
- angr/analyses/cfg/cfg.py +73 -0
- angr/analyses/cfg/cfg_arch_options.py +82 -0
- angr/analyses/cfg/cfg_base.py +2917 -0
- angr/analyses/cfg/cfg_emulated.py +3570 -0
- angr/analyses/cfg/cfg_fast.py +5053 -0
- angr/analyses/cfg/cfg_fast_soot.py +669 -0
- angr/analyses/cfg/cfg_job_base.py +204 -0
- angr/analyses/cfg/indirect_jump_resolvers/__init__.py +8 -0
- angr/analyses/cfg/indirect_jump_resolvers/amd64_elf_got.py +63 -0
- angr/analyses/cfg/indirect_jump_resolvers/amd64_pe_iat.py +52 -0
- angr/analyses/cfg/indirect_jump_resolvers/arm_elf_fast.py +151 -0
- angr/analyses/cfg/indirect_jump_resolvers/const_resolver.py +141 -0
- angr/analyses/cfg/indirect_jump_resolvers/default_resolvers.py +68 -0
- angr/analyses/cfg/indirect_jump_resolvers/jumptable.py +2368 -0
- angr/analyses/cfg/indirect_jump_resolvers/mips_elf_fast.py +517 -0
- angr/analyses/cfg/indirect_jump_resolvers/propagator_utils.py +26 -0
- angr/analyses/cfg/indirect_jump_resolvers/resolver.py +74 -0
- angr/analyses/cfg/indirect_jump_resolvers/x86_elf_pic_plt.py +93 -0
- angr/analyses/cfg/indirect_jump_resolvers/x86_pe_iat.py +51 -0
- angr/analyses/cfg_slice_to_sink/__init__.py +2 -0
- angr/analyses/cfg_slice_to_sink/cfg_slice_to_sink.py +117 -0
- angr/analyses/cfg_slice_to_sink/graph.py +84 -0
- angr/analyses/cfg_slice_to_sink/transitions.py +25 -0
- angr/analyses/class_identifier.py +62 -0
- angr/analyses/code_tagging.py +123 -0
- angr/analyses/complete_calling_conventions.py +424 -0
- angr/analyses/congruency_check.py +384 -0
- angr/analyses/data_dep/__init__.py +2 -0
- angr/analyses/data_dep/data_dependency_analysis.py +605 -0
- angr/analyses/data_dep/dep_nodes.py +170 -0
- angr/analyses/data_dep/sim_act_location.py +46 -0
- angr/analyses/datagraph_meta.py +105 -0
- angr/analyses/ddg.py +1695 -0
- angr/analyses/decompiler/__init__.py +13 -0
- angr/analyses/decompiler/ail_simplifier.py +1408 -0
- angr/analyses/decompiler/ailgraph_walker.py +48 -0
- angr/analyses/decompiler/block_io_finder.py +293 -0
- angr/analyses/decompiler/block_similarity.py +188 -0
- angr/analyses/decompiler/block_simplifier.py +434 -0
- angr/analyses/decompiler/call_counter.py +43 -0
- angr/analyses/decompiler/callsite_maker.py +403 -0
- angr/analyses/decompiler/ccall_rewriters/__init__.py +6 -0
- angr/analyses/decompiler/ccall_rewriters/amd64_ccalls.py +489 -0
- angr/analyses/decompiler/ccall_rewriters/rewriter_base.py +19 -0
- angr/analyses/decompiler/clinic.py +2166 -0
- angr/analyses/decompiler/condition_processor.py +1184 -0
- angr/analyses/decompiler/decompilation_cache.py +38 -0
- angr/analyses/decompiler/decompilation_options.py +274 -0
- angr/analyses/decompiler/decompiler.py +544 -0
- angr/analyses/decompiler/empty_node_remover.py +211 -0
- angr/analyses/decompiler/expression_counters.py +76 -0
- angr/analyses/decompiler/expression_narrower.py +92 -0
- angr/analyses/decompiler/goto_manager.py +73 -0
- angr/analyses/decompiler/graph_region.py +413 -0
- angr/analyses/decompiler/jump_target_collector.py +36 -0
- angr/analyses/decompiler/jumptable_entry_condition_rewriter.py +66 -0
- angr/analyses/decompiler/optimization_passes/__init__.py +108 -0
- angr/analyses/decompiler/optimization_passes/base_ptr_save_simplifier.py +144 -0
- angr/analyses/decompiler/optimization_passes/code_motion.py +360 -0
- angr/analyses/decompiler/optimization_passes/const_derefs.py +265 -0
- angr/analyses/decompiler/optimization_passes/cross_jump_reverter.py +108 -0
- angr/analyses/decompiler/optimization_passes/deadblock_remover.py +73 -0
- angr/analyses/decompiler/optimization_passes/div_simplifier.py +391 -0
- angr/analyses/decompiler/optimization_passes/engine_base.py +303 -0
- angr/analyses/decompiler/optimization_passes/expr_op_swapper.py +136 -0
- angr/analyses/decompiler/optimization_passes/flip_boolean_cmp.py +91 -0
- angr/analyses/decompiler/optimization_passes/inlined_string_transformation_simplifier.py +386 -0
- angr/analyses/decompiler/optimization_passes/ite_expr_converter.py +226 -0
- angr/analyses/decompiler/optimization_passes/ite_region_converter.py +189 -0
- angr/analyses/decompiler/optimization_passes/lowered_switch_simplifier.py +757 -0
- angr/analyses/decompiler/optimization_passes/mod_simplifier.py +86 -0
- angr/analyses/decompiler/optimization_passes/multi_simplifier.py +227 -0
- angr/analyses/decompiler/optimization_passes/optimization_pass.py +397 -0
- angr/analyses/decompiler/optimization_passes/register_save_area_simplifier.py +198 -0
- angr/analyses/decompiler/optimization_passes/ret_addr_save_simplifier.py +172 -0
- angr/analyses/decompiler/optimization_passes/ret_deduplicator.py +219 -0
- angr/analyses/decompiler/optimization_passes/return_duplicator_base.py +448 -0
- angr/analyses/decompiler/optimization_passes/return_duplicator_high.py +57 -0
- angr/analyses/decompiler/optimization_passes/return_duplicator_low.py +121 -0
- angr/analyses/decompiler/optimization_passes/spilled_register_finder.py +18 -0
- angr/analyses/decompiler/optimization_passes/stack_canary_simplifier.py +293 -0
- angr/analyses/decompiler/optimization_passes/switch_default_case_duplicator.py +110 -0
- angr/analyses/decompiler/optimization_passes/win_stack_canary_simplifier.py +281 -0
- angr/analyses/decompiler/optimization_passes/x86_gcc_getpc_simplifier.py +87 -0
- angr/analyses/decompiler/peephole_optimizations/__init__.py +69 -0
- angr/analyses/decompiler/peephole_optimizations/a_div_const_add_a_mul_n_div_const.py +38 -0
- angr/analyses/decompiler/peephole_optimizations/a_mul_const_div_shr_const.py +38 -0
- angr/analyses/decompiler/peephole_optimizations/a_shl_const_sub_a.py +31 -0
- angr/analyses/decompiler/peephole_optimizations/a_sub_a_div.py +25 -0
- angr/analyses/decompiler/peephole_optimizations/a_sub_a_div_const_mul_const.py +56 -0
- angr/analyses/decompiler/peephole_optimizations/a_sub_a_sub_n.py +19 -0
- angr/analyses/decompiler/peephole_optimizations/arm_cmpf.py +235 -0
- angr/analyses/decompiler/peephole_optimizations/base.py +120 -0
- angr/analyses/decompiler/peephole_optimizations/basepointeroffset_add_n.py +33 -0
- angr/analyses/decompiler/peephole_optimizations/basepointeroffset_and_mask.py +35 -0
- angr/analyses/decompiler/peephole_optimizations/bitwise_or_to_logical_or.py +34 -0
- angr/analyses/decompiler/peephole_optimizations/bool_expr_xor_1.py +27 -0
- angr/analyses/decompiler/peephole_optimizations/bswap.py +131 -0
- angr/analyses/decompiler/peephole_optimizations/cmpord_rewriter.py +72 -0
- angr/analyses/decompiler/peephole_optimizations/coalesce_same_cascading_ifs.py +27 -0
- angr/analyses/decompiler/peephole_optimizations/const_mull_a_shift.py +91 -0
- angr/analyses/decompiler/peephole_optimizations/constant_derefs.py +43 -0
- angr/analyses/decompiler/peephole_optimizations/conv_a_sub0_shr_and.py +70 -0
- angr/analyses/decompiler/peephole_optimizations/conv_shl_shr.py +51 -0
- angr/analyses/decompiler/peephole_optimizations/eager_eval.py +225 -0
- angr/analyses/decompiler/peephole_optimizations/extended_byte_and_mask.py +55 -0
- angr/analyses/decompiler/peephole_optimizations/inlined_strcpy.py +146 -0
- angr/analyses/decompiler/peephole_optimizations/inlined_strcpy_consolidation.py +102 -0
- angr/analyses/decompiler/peephole_optimizations/inlined_wstrcpy.py +159 -0
- angr/analyses/decompiler/peephole_optimizations/invert_negated_logical_conjuction_disjunction.py +50 -0
- angr/analyses/decompiler/peephole_optimizations/one_sub_bool.py +33 -0
- angr/analyses/decompiler/peephole_optimizations/remove_cascading_conversions.py +19 -0
- angr/analyses/decompiler/peephole_optimizations/remove_empty_if_body.py +45 -0
- angr/analyses/decompiler/peephole_optimizations/remove_noop_conversions.py +26 -0
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_bitmasks.py +48 -0
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_conversions.py +160 -0
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_branch.py +29 -0
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_comparisons.py +54 -0
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_nots.py +17 -0
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_reinterprets.py +43 -0
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts.py +44 -0
- angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts_around_comparators.py +40 -0
- angr/analyses/decompiler/peephole_optimizations/rewrite_bit_extractions.py +85 -0
- angr/analyses/decompiler/peephole_optimizations/rewrite_mips_gp_loads.py +47 -0
- angr/analyses/decompiler/peephole_optimizations/rol_ror.py +77 -0
- angr/analyses/decompiler/peephole_optimizations/sar_to_signed_div.py +105 -0
- angr/analyses/decompiler/peephole_optimizations/simplify_pc_relative_loads.py +37 -0
- angr/analyses/decompiler/peephole_optimizations/single_bit_cond_to_boolexpr.py +52 -0
- angr/analyses/decompiler/peephole_optimizations/single_bit_xor.py +26 -0
- angr/analyses/decompiler/peephole_optimizations/tidy_stack_addr.py +133 -0
- angr/analyses/decompiler/redundant_label_remover.py +116 -0
- angr/analyses/decompiler/region_identifier.py +1098 -0
- angr/analyses/decompiler/region_simplifiers/__init__.py +1 -0
- angr/analyses/decompiler/region_simplifiers/cascading_cond_transformer.py +93 -0
- angr/analyses/decompiler/region_simplifiers/cascading_ifs.py +81 -0
- angr/analyses/decompiler/region_simplifiers/expr_folding.py +606 -0
- angr/analyses/decompiler/region_simplifiers/goto.py +177 -0
- angr/analyses/decompiler/region_simplifiers/if_.py +142 -0
- angr/analyses/decompiler/region_simplifiers/ifelse.py +90 -0
- angr/analyses/decompiler/region_simplifiers/loop.py +135 -0
- angr/analyses/decompiler/region_simplifiers/node_address_finder.py +23 -0
- angr/analyses/decompiler/region_simplifiers/region_simplifier.py +211 -0
- angr/analyses/decompiler/region_simplifiers/switch_cluster_simplifier.py +644 -0
- angr/analyses/decompiler/region_simplifiers/switch_expr_simplifier.py +83 -0
- angr/analyses/decompiler/region_walker.py +23 -0
- angr/analyses/decompiler/return_maker.py +70 -0
- angr/analyses/decompiler/seq_to_blocks.py +19 -0
- angr/analyses/decompiler/sequence_walker.py +235 -0
- angr/analyses/decompiler/structured_codegen/__init__.py +10 -0
- angr/analyses/decompiler/structured_codegen/base.py +132 -0
- angr/analyses/decompiler/structured_codegen/c.py +3811 -0
- angr/analyses/decompiler/structured_codegen/dummy.py +14 -0
- angr/analyses/decompiler/structured_codegen/dwarf_import.py +186 -0
- angr/analyses/decompiler/structuring/__init__.py +15 -0
- angr/analyses/decompiler/structuring/dream.py +1225 -0
- angr/analyses/decompiler/structuring/phoenix.py +2546 -0
- angr/analyses/decompiler/structuring/recursive_structurer.py +186 -0
- angr/analyses/decompiler/structuring/structurer_base.py +954 -0
- angr/analyses/decompiler/structuring/structurer_nodes.py +414 -0
- angr/analyses/decompiler/utils.py +787 -0
- angr/analyses/disassembly.py +1302 -0
- angr/analyses/disassembly_utils.py +104 -0
- angr/analyses/dominance_frontier.py +39 -0
- angr/analyses/find_objects_static.py +203 -0
- angr/analyses/flirt.py +185 -0
- angr/analyses/forward_analysis/__init__.py +2 -0
- angr/analyses/forward_analysis/forward_analysis.py +527 -0
- angr/analyses/forward_analysis/job_info.py +64 -0
- angr/analyses/forward_analysis/visitors/__init__.py +4 -0
- angr/analyses/forward_analysis/visitors/call_graph.py +28 -0
- angr/analyses/forward_analysis/visitors/function_graph.py +85 -0
- angr/analyses/forward_analysis/visitors/graph.py +250 -0
- angr/analyses/forward_analysis/visitors/loop.py +28 -0
- angr/analyses/forward_analysis/visitors/single_node_graph.py +38 -0
- angr/analyses/identifier/__init__.py +1 -0
- angr/analyses/identifier/custom_callable.py +138 -0
- angr/analyses/identifier/errors.py +9 -0
- angr/analyses/identifier/func.py +57 -0
- angr/analyses/identifier/functions/__init__.py +36 -0
- angr/analyses/identifier/functions/atoi.py +75 -0
- angr/analyses/identifier/functions/based_atoi.py +128 -0
- angr/analyses/identifier/functions/fdprintf.py +122 -0
- angr/analyses/identifier/functions/free.py +64 -0
- angr/analyses/identifier/functions/int2str.py +302 -0
- angr/analyses/identifier/functions/malloc.py +113 -0
- angr/analyses/identifier/functions/memcmp.py +69 -0
- angr/analyses/identifier/functions/memcpy.py +89 -0
- angr/analyses/identifier/functions/memset.py +43 -0
- angr/analyses/identifier/functions/printf.py +122 -0
- angr/analyses/identifier/functions/recv_until.py +315 -0
- angr/analyses/identifier/functions/skip_calloc.py +72 -0
- angr/analyses/identifier/functions/skip_realloc.py +99 -0
- angr/analyses/identifier/functions/skip_recv_n.py +107 -0
- angr/analyses/identifier/functions/snprintf.py +114 -0
- angr/analyses/identifier/functions/sprintf.py +115 -0
- angr/analyses/identifier/functions/strcasecmp.py +32 -0
- angr/analyses/identifier/functions/strcmp.py +112 -0
- angr/analyses/identifier/functions/strcpy.py +43 -0
- angr/analyses/identifier/functions/strlen.py +26 -0
- angr/analyses/identifier/functions/strncmp.py +103 -0
- angr/analyses/identifier/functions/strncpy.py +65 -0
- angr/analyses/identifier/functions/strtol.py +91 -0
- angr/analyses/identifier/identify.py +848 -0
- angr/analyses/identifier/runner.py +359 -0
- angr/analyses/init_finder.py +264 -0
- angr/analyses/loop_analysis.py +353 -0
- angr/analyses/loopfinder.py +174 -0
- angr/analyses/propagator/__init__.py +1 -0
- angr/analyses/propagator/engine_ail.py +1560 -0
- angr/analyses/propagator/engine_base.py +53 -0
- angr/analyses/propagator/engine_vex.py +328 -0
- angr/analyses/propagator/outdated_definition_walker.py +158 -0
- angr/analyses/propagator/propagator.py +422 -0
- angr/analyses/propagator/tmpvar_finder.py +17 -0
- angr/analyses/propagator/top_checker_mixin.py +14 -0
- angr/analyses/propagator/values.py +116 -0
- angr/analyses/propagator/vex_vars.py +67 -0
- angr/analyses/proximity_graph.py +452 -0
- angr/analyses/reaching_definitions/__init__.py +65 -0
- angr/analyses/reaching_definitions/call_trace.py +72 -0
- angr/analyses/reaching_definitions/dep_graph.py +392 -0
- angr/analyses/reaching_definitions/engine_ail.py +1172 -0
- angr/analyses/reaching_definitions/engine_vex.py +1102 -0
- angr/analyses/reaching_definitions/external_codeloc.py +0 -0
- angr/analyses/reaching_definitions/function_handler.py +603 -0
- angr/analyses/reaching_definitions/heap_allocator.py +69 -0
- angr/analyses/reaching_definitions/rd_initializer.py +235 -0
- angr/analyses/reaching_definitions/rd_state.py +613 -0
- angr/analyses/reaching_definitions/reaching_definitions.py +594 -0
- angr/analyses/reaching_definitions/subject.py +64 -0
- angr/analyses/reassembler.py +2970 -0
- angr/analyses/soot_class_hierarchy.py +283 -0
- angr/analyses/stack_pointer_tracker.py +832 -0
- angr/analyses/static_hooker.py +51 -0
- angr/analyses/typehoon/__init__.py +1 -0
- angr/analyses/typehoon/dfa.py +108 -0
- angr/analyses/typehoon/lifter.py +91 -0
- angr/analyses/typehoon/simple_solver.py +1258 -0
- angr/analyses/typehoon/translator.py +242 -0
- angr/analyses/typehoon/typeconsts.py +294 -0
- angr/analyses/typehoon/typehoon.py +239 -0
- angr/analyses/typehoon/typevars.py +565 -0
- angr/analyses/typehoon/variance.py +10 -0
- angr/analyses/variable_recovery/__init__.py +2 -0
- angr/analyses/variable_recovery/annotations.py +57 -0
- angr/analyses/variable_recovery/engine_ail.py +746 -0
- angr/analyses/variable_recovery/engine_base.py +962 -0
- angr/analyses/variable_recovery/engine_vex.py +580 -0
- angr/analyses/variable_recovery/irsb_scanner.py +131 -0
- angr/analyses/variable_recovery/variable_recovery.py +552 -0
- angr/analyses/variable_recovery/variable_recovery_base.py +452 -0
- angr/analyses/variable_recovery/variable_recovery_fast.py +589 -0
- angr/analyses/veritesting.py +635 -0
- angr/analyses/vfg.py +1945 -0
- angr/analyses/vsa_ddg.py +423 -0
- angr/analyses/vtable.py +92 -0
- angr/analyses/xrefs.py +263 -0
- angr/angrdb/__init__.py +9 -0
- angr/angrdb/db.py +208 -0
- angr/angrdb/models.py +183 -0
- angr/angrdb/serializers/__init__.py +2 -0
- angr/angrdb/serializers/cfg_model.py +41 -0
- angr/angrdb/serializers/comments.py +59 -0
- angr/angrdb/serializers/funcs.py +60 -0
- angr/angrdb/serializers/kb.py +110 -0
- angr/angrdb/serializers/labels.py +58 -0
- angr/angrdb/serializers/loader.py +81 -0
- angr/angrdb/serializers/structured_code.py +128 -0
- angr/angrdb/serializers/variables.py +58 -0
- angr/angrdb/serializers/xrefs.py +48 -0
- angr/annocfg.py +320 -0
- angr/blade.py +430 -0
- angr/block.py +506 -0
- angr/callable.py +162 -0
- angr/calling_conventions.py +2383 -0
- angr/code_location.py +168 -0
- angr/codenode.py +140 -0
- angr/concretization_strategies/__init__.py +97 -0
- angr/concretization_strategies/any.py +15 -0
- angr/concretization_strategies/any_named.py +32 -0
- angr/concretization_strategies/controlled_data.py +54 -0
- angr/concretization_strategies/eval.py +18 -0
- angr/concretization_strategies/logging.py +32 -0
- angr/concretization_strategies/max.py +24 -0
- angr/concretization_strategies/nonzero.py +14 -0
- angr/concretization_strategies/nonzero_range.py +20 -0
- angr/concretization_strategies/norepeats.py +35 -0
- angr/concretization_strategies/norepeats_range.py +35 -0
- angr/concretization_strategies/range.py +17 -0
- angr/concretization_strategies/signed_add.py +24 -0
- angr/concretization_strategies/single.py +12 -0
- angr/concretization_strategies/solutions.py +18 -0
- angr/concretization_strategies/unlimited_range.py +15 -0
- angr/distributed/__init__.py +3 -0
- angr/distributed/server.py +198 -0
- angr/distributed/worker.py +183 -0
- angr/engines/__init__.py +41 -0
- angr/engines/concrete.py +178 -0
- angr/engines/engine.py +212 -0
- angr/engines/failure.py +27 -0
- angr/engines/hook.py +67 -0
- angr/engines/light/__init__.py +2 -0
- angr/engines/light/data.py +715 -0
- angr/engines/light/engine.py +1441 -0
- angr/engines/pcode/__init__.py +2 -0
- angr/engines/pcode/behavior.py +995 -0
- angr/engines/pcode/cc.py +123 -0
- angr/engines/pcode/emulate.py +446 -0
- angr/engines/pcode/engine.py +256 -0
- angr/engines/pcode/lifter.py +1423 -0
- angr/engines/procedure.py +71 -0
- angr/engines/soot/__init__.py +1 -0
- angr/engines/soot/engine.py +415 -0
- angr/engines/soot/exceptions.py +14 -0
- angr/engines/soot/expressions/__init__.py +56 -0
- angr/engines/soot/expressions/arrayref.py +21 -0
- angr/engines/soot/expressions/base.py +22 -0
- angr/engines/soot/expressions/binop.py +27 -0
- angr/engines/soot/expressions/cast.py +21 -0
- angr/engines/soot/expressions/condition.py +34 -0
- angr/engines/soot/expressions/constants.py +45 -0
- angr/engines/soot/expressions/instanceOf.py +11 -0
- angr/engines/soot/expressions/instancefieldref.py +7 -0
- angr/engines/soot/expressions/invoke.py +117 -0
- angr/engines/soot/expressions/length.py +7 -0
- angr/engines/soot/expressions/local.py +7 -0
- angr/engines/soot/expressions/new.py +15 -0
- angr/engines/soot/expressions/newArray.py +51 -0
- angr/engines/soot/expressions/newMultiArray.py +84 -0
- angr/engines/soot/expressions/paramref.py +7 -0
- angr/engines/soot/expressions/phi.py +29 -0
- angr/engines/soot/expressions/staticfieldref.py +7 -0
- angr/engines/soot/expressions/thisref.py +6 -0
- angr/engines/soot/expressions/unsupported.py +6 -0
- angr/engines/soot/field_dispatcher.py +49 -0
- angr/engines/soot/method_dispatcher.py +49 -0
- angr/engines/soot/statements/__init__.py +30 -0
- angr/engines/soot/statements/assign.py +29 -0
- angr/engines/soot/statements/base.py +80 -0
- angr/engines/soot/statements/goto.py +11 -0
- angr/engines/soot/statements/identity.py +14 -0
- angr/engines/soot/statements/if_.py +16 -0
- angr/engines/soot/statements/invoke.py +11 -0
- angr/engines/soot/statements/return_.py +19 -0
- angr/engines/soot/statements/switch.py +38 -0
- angr/engines/soot/statements/throw.py +12 -0
- angr/engines/soot/values/__init__.py +24 -0
- angr/engines/soot/values/arrayref.py +124 -0
- angr/engines/soot/values/base.py +4 -0
- angr/engines/soot/values/constants.py +17 -0
- angr/engines/soot/values/instancefieldref.py +42 -0
- angr/engines/soot/values/local.py +17 -0
- angr/engines/soot/values/paramref.py +17 -0
- angr/engines/soot/values/staticfieldref.py +37 -0
- angr/engines/soot/values/strref.py +37 -0
- angr/engines/soot/values/thisref.py +148 -0
- angr/engines/successors.py +540 -0
- angr/engines/syscall.py +53 -0
- angr/engines/unicorn.py +483 -0
- angr/engines/vex/__init__.py +4 -0
- angr/engines/vex/claripy/__init__.py +1 -0
- angr/engines/vex/claripy/ccall.py +2097 -0
- angr/engines/vex/claripy/datalayer.py +149 -0
- angr/engines/vex/claripy/irop.py +1279 -0
- angr/engines/vex/heavy/__init__.py +5 -0
- angr/engines/vex/heavy/actions.py +237 -0
- angr/engines/vex/heavy/concretizers.py +394 -0
- angr/engines/vex/heavy/dirty.py +467 -0
- angr/engines/vex/heavy/heavy.py +379 -0
- angr/engines/vex/heavy/inspect.py +51 -0
- angr/engines/vex/heavy/resilience.py +85 -0
- angr/engines/vex/heavy/super_fastpath.py +34 -0
- angr/engines/vex/lifter.py +424 -0
- angr/engines/vex/light/__init__.py +3 -0
- angr/engines/vex/light/light.py +555 -0
- angr/engines/vex/light/resilience.py +73 -0
- angr/engines/vex/light/slicing.py +51 -0
- angr/errors.py +604 -0
- angr/exploration_techniques/__init__.py +176 -0
- angr/exploration_techniques/bucketizer.py +96 -0
- angr/exploration_techniques/common.py +56 -0
- angr/exploration_techniques/dfs.py +34 -0
- angr/exploration_techniques/director.py +523 -0
- angr/exploration_techniques/driller_core.py +102 -0
- angr/exploration_techniques/explorer.py +146 -0
- angr/exploration_techniques/lengthlimiter.py +20 -0
- angr/exploration_techniques/local_loop_seer.py +64 -0
- angr/exploration_techniques/loop_seer.py +239 -0
- angr/exploration_techniques/manual_mergepoint.py +80 -0
- angr/exploration_techniques/memory_watcher.py +40 -0
- angr/exploration_techniques/oppologist.py +93 -0
- angr/exploration_techniques/slicecutor.py +115 -0
- angr/exploration_techniques/spiller.py +282 -0
- angr/exploration_techniques/spiller_db.py +27 -0
- angr/exploration_techniques/stochastic.py +57 -0
- angr/exploration_techniques/suggestions.py +156 -0
- angr/exploration_techniques/symbion.py +78 -0
- angr/exploration_techniques/tech_builder.py +47 -0
- angr/exploration_techniques/threading.py +77 -0
- angr/exploration_techniques/timeout.py +31 -0
- angr/exploration_techniques/tracer.py +1101 -0
- angr/exploration_techniques/unique.py +104 -0
- angr/exploration_techniques/veritesting.py +36 -0
- angr/factory.py +385 -0
- angr/flirt/__init__.py +126 -0
- angr/flirt/build_sig.py +316 -0
- angr/graph_utils.py +0 -0
- angr/keyed_region.py +532 -0
- angr/knowledge_base/__init__.py +1 -0
- angr/knowledge_base/knowledge_base.py +145 -0
- angr/knowledge_plugins/__init__.py +18 -0
- angr/knowledge_plugins/callsite_prototypes.py +52 -0
- angr/knowledge_plugins/cfg/__init__.py +16 -0
- angr/knowledge_plugins/cfg/cfg_manager.py +94 -0
- angr/knowledge_plugins/cfg/cfg_model.py +1057 -0
- angr/knowledge_plugins/cfg/cfg_node.py +541 -0
- angr/knowledge_plugins/cfg/indirect_jump.py +67 -0
- angr/knowledge_plugins/cfg/memory_data.py +156 -0
- angr/knowledge_plugins/comments.py +15 -0
- angr/knowledge_plugins/custom_strings.py +37 -0
- angr/knowledge_plugins/data.py +21 -0
- angr/knowledge_plugins/debug_variables.py +221 -0
- angr/knowledge_plugins/functions/__init__.py +2 -0
- angr/knowledge_plugins/functions/function.py +1694 -0
- angr/knowledge_plugins/functions/function_manager.py +501 -0
- angr/knowledge_plugins/functions/function_parser.py +295 -0
- angr/knowledge_plugins/functions/soot_function.py +131 -0
- angr/knowledge_plugins/indirect_jumps.py +34 -0
- angr/knowledge_plugins/key_definitions/__init__.py +16 -0
- angr/knowledge_plugins/key_definitions/atoms.py +314 -0
- angr/knowledge_plugins/key_definitions/constants.py +23 -0
- angr/knowledge_plugins/key_definitions/definition.py +217 -0
- angr/knowledge_plugins/key_definitions/environment.py +92 -0
- angr/knowledge_plugins/key_definitions/heap_address.py +32 -0
- angr/knowledge_plugins/key_definitions/key_definition_manager.py +81 -0
- angr/knowledge_plugins/key_definitions/live_definitions.py +1074 -0
- angr/knowledge_plugins/key_definitions/liveness.py +170 -0
- angr/knowledge_plugins/key_definitions/rd_model.py +176 -0
- angr/knowledge_plugins/key_definitions/tag.py +77 -0
- angr/knowledge_plugins/key_definitions/undefined.py +67 -0
- angr/knowledge_plugins/key_definitions/unknown_size.py +83 -0
- angr/knowledge_plugins/key_definitions/uses.py +180 -0
- angr/knowledge_plugins/labels.py +109 -0
- angr/knowledge_plugins/patches.py +125 -0
- angr/knowledge_plugins/plugin.py +23 -0
- angr/knowledge_plugins/propagations/__init__.py +2 -0
- angr/knowledge_plugins/propagations/prop_value.py +193 -0
- angr/knowledge_plugins/propagations/propagation_manager.py +60 -0
- angr/knowledge_plugins/propagations/propagation_model.py +74 -0
- angr/knowledge_plugins/propagations/states.py +1064 -0
- angr/knowledge_plugins/structured_code/__init__.py +1 -0
- angr/knowledge_plugins/structured_code/manager.py +59 -0
- angr/knowledge_plugins/sync/__init__.py +1 -0
- angr/knowledge_plugins/sync/sync_controller.py +329 -0
- angr/knowledge_plugins/types.py +87 -0
- angr/knowledge_plugins/variables/__init__.py +1 -0
- angr/knowledge_plugins/variables/variable_access.py +114 -0
- angr/knowledge_plugins/variables/variable_manager.py +1191 -0
- angr/knowledge_plugins/xrefs/__init__.py +3 -0
- angr/knowledge_plugins/xrefs/xref.py +157 -0
- angr/knowledge_plugins/xrefs/xref_manager.py +122 -0
- angr/knowledge_plugins/xrefs/xref_types.py +13 -0
- angr/lib/angr_native.dylib +0 -0
- angr/misc/__init__.py +8 -0
- angr/misc/ansi.py +46 -0
- angr/misc/autoimport.py +89 -0
- angr/misc/bug_report.py +125 -0
- angr/misc/hookset.py +106 -0
- angr/misc/import_hooks.py +63 -0
- angr/misc/loggers.py +130 -0
- angr/misc/picklable_lock.py +45 -0
- angr/misc/plugins.py +291 -0
- angr/misc/range.py +21 -0
- angr/misc/testing.py +23 -0
- angr/misc/ux.py +31 -0
- angr/misc/weakpatch.py +58 -0
- angr/procedures/__init__.py +2 -0
- angr/procedures/advapi32/__init__.py +0 -0
- angr/procedures/cgc/__init__.py +3 -0
- angr/procedures/cgc/_terminate.py +10 -0
- angr/procedures/cgc/allocate.py +76 -0
- angr/procedures/cgc/deallocate.py +59 -0
- angr/procedures/cgc/fdwait.py +62 -0
- angr/procedures/cgc/random.py +60 -0
- angr/procedures/cgc/receive.py +91 -0
- angr/procedures/cgc/transmit.py +63 -0
- angr/procedures/definitions/__init__.py +784 -0
- angr/procedures/definitions/cgc.py +19 -0
- angr/procedures/definitions/glibc.py +8384 -0
- angr/procedures/definitions/gnulib.py +35 -0
- angr/procedures/definitions/libstdcpp.py +20 -0
- angr/procedures/definitions/linux_kernel.py +6167 -0
- angr/procedures/definitions/linux_loader.py +6 -0
- angr/procedures/definitions/msvcr.py +15 -0
- angr/procedures/definitions/parse_syscalls_from_local_system.py +49 -0
- angr/procedures/definitions/parse_win32json.py +2556 -0
- angr/procedures/definitions/types_win32.py +34481 -0
- angr/procedures/definitions/wdk_api-ms-win-dx-d3dkmt-l1-1-4.py +44 -0
- angr/procedures/definitions/wdk_api-ms-win-dx-d3dkmt-l1-1-6.py +40 -0
- angr/procedures/definitions/wdk_clfs.py +154 -0
- angr/procedures/definitions/wdk_fltmgr.py +570 -0
- angr/procedures/definitions/wdk_fwpkclnt.py +44 -0
- angr/procedures/definitions/wdk_fwpuclnt.py +330 -0
- angr/procedures/definitions/wdk_gdi32.py +380 -0
- angr/procedures/definitions/wdk_hal.py +92 -0
- angr/procedures/definitions/wdk_ksecdd.py +76 -0
- angr/procedures/definitions/wdk_ndis.py +252 -0
- angr/procedures/definitions/wdk_ntoskrnl.py +3463 -0
- angr/procedures/definitions/wdk_offreg.py +86 -0
- angr/procedures/definitions/wdk_pshed.py +50 -0
- angr/procedures/definitions/wdk_secur32.py +54 -0
- angr/procedures/definitions/wdk_vhfum.py +48 -0
- angr/procedures/definitions/win32_aclui.py +44 -0
- angr/procedures/definitions/win32_activeds.py +82 -0
- angr/procedures/definitions/win32_advapi32.py +1698 -0
- angr/procedures/definitions/win32_advpack.py +138 -0
- angr/procedures/definitions/win32_amsi.py +52 -0
- angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-1.py +58 -0
- angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-3.py +48 -0
- angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-6.py +40 -0
- angr/procedures/definitions/win32_api-ms-win-core-apiquery-l2-1-0.py +40 -0
- angr/procedures/definitions/win32_api-ms-win-core-backgroundtask-l1-1-0.py +40 -0
- angr/procedures/definitions/win32_api-ms-win-core-comm-l1-1-1.py +40 -0
- angr/procedures/definitions/win32_api-ms-win-core-comm-l1-1-2.py +40 -0
- angr/procedures/definitions/win32_api-ms-win-core-enclave-l1-1-1.py +44 -0
- angr/procedures/definitions/win32_api-ms-win-core-errorhandling-l1-1-3.py +40 -0
- angr/procedures/definitions/win32_api-ms-win-core-featurestaging-l1-1-0.py +48 -0
- angr/procedures/definitions/win32_api-ms-win-core-featurestaging-l1-1-1.py +40 -0
- angr/procedures/definitions/win32_api-ms-win-core-file-fromapp-l1-1-0.py +60 -0
- angr/procedures/definitions/win32_api-ms-win-core-handle-l1-1-0.py +40 -0
- angr/procedures/definitions/win32_api-ms-win-core-ioring-l1-1-0.py +62 -0
- angr/procedures/definitions/win32_api-ms-win-core-marshal-l1-1-0.py +46 -0
- angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-3.py +46 -0
- angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-4.py +40 -0
- angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-5.py +44 -0
- angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-6.py +46 -0
- angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-7.py +42 -0
- angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-8.py +44 -0
- angr/procedures/definitions/win32_api-ms-win-core-path-l1-1-0.py +82 -0
- angr/procedures/definitions/win32_api-ms-win-core-psm-appnotify-l1-1-0.py +42 -0
- angr/procedures/definitions/win32_api-ms-win-core-psm-appnotify-l1-1-1.py +42 -0
- angr/procedures/definitions/win32_api-ms-win-core-realtime-l1-1-1.py +44 -0
- angr/procedures/definitions/win32_api-ms-win-core-realtime-l1-1-2.py +44 -0
- angr/procedures/definitions/win32_api-ms-win-core-slapi-l1-1-0.py +40 -0
- angr/procedures/definitions/win32_api-ms-win-core-state-helpers-l1-1-0.py +40 -0
- angr/procedures/definitions/win32_api-ms-win-core-synch-l1-2-0.py +44 -0
- angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-0.py +40 -0
- angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-3.py +42 -0
- angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-4.py +42 -0
- angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-6.py +40 -0
- angr/procedures/definitions/win32_api-ms-win-core-util-l1-1-1.py +42 -0
- angr/procedures/definitions/win32_api-ms-win-core-winrt-error-l1-1-0.py +43 -0
- angr/procedures/definitions/win32_api-ms-win-core-winrt-error-l1-1-1.py +37 -0
- angr/procedures/definitions/win32_api-ms-win-core-winrt-l1-1-0.py +39 -0
- angr/procedures/definitions/win32_api-ms-win-core-winrt-registration-l1-1-0.py +23 -0
- angr/procedures/definitions/win32_api-ms-win-core-winrt-robuffer-l1-1-0.py +23 -0
- angr/procedures/definitions/win32_api-ms-win-core-winrt-roparameterizediid-l1-1-0.py +27 -0
- angr/procedures/definitions/win32_api-ms-win-core-winrt-string-l1-1-0.py +75 -0
- angr/procedures/definitions/win32_api-ms-win-core-winrt-string-l1-1-1.py +23 -0
- angr/procedures/definitions/win32_api-ms-win-core-wow64-l1-1-1.py +44 -0
- angr/procedures/definitions/win32_api-ms-win-devices-query-l1-1-0.py +56 -0
- angr/procedures/definitions/win32_api-ms-win-devices-query-l1-1-1.py +48 -0
- angr/procedures/definitions/win32_api-ms-win-dx-d3dkmt-l1-1-0.py +40 -0
- angr/procedures/definitions/win32_api-ms-win-gaming-deviceinformation-l1-1-0.py +40 -0
- angr/procedures/definitions/win32_api-ms-win-gaming-expandedresources-l1-1-0.py +44 -0
- angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-0.py +52 -0
- angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-1.py +42 -0
- angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-2.py +52 -0
- angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-3.py +42 -0
- angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-4.py +54 -0
- angr/procedures/definitions/win32_api-ms-win-mm-misc-l1-1-1.py +40 -0
- angr/procedures/definitions/win32_api-ms-win-net-isolation-l1-1-0.py +54 -0
- angr/procedures/definitions/win32_api-ms-win-security-base-l1-2-2.py +40 -0
- angr/procedures/definitions/win32_api-ms-win-security-isolatedcontainer-l1-1-0.py +40 -0
- angr/procedures/definitions/win32_api-ms-win-security-isolatedcontainer-l1-1-1.py +40 -0
- angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-3.py +40 -0
- angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-4.py +40 -0
- angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-5.py +42 -0
- angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-0.py +44 -0
- angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-1.py +50 -0
- angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-2.py +40 -0
- angr/procedures/definitions/win32_api-ms-win-shcore-stream-winrt-l1-1-0.py +27 -0
- angr/procedures/definitions/win32_api-ms-win-wsl-api-l1-1-0.py +52 -0
- angr/procedures/definitions/win32_apphelp.py +40 -0
- angr/procedures/definitions/win32_authz.py +104 -0
- angr/procedures/definitions/win32_avicap32.py +46 -0
- angr/procedures/definitions/win32_avifil32.py +158 -0
- angr/procedures/definitions/win32_avrt.py +66 -0
- angr/procedures/definitions/win32_bcp47mrm.py +42 -0
- angr/procedures/definitions/win32_bcrypt.py +144 -0
- angr/procedures/definitions/win32_bcryptprimitives.py +42 -0
- angr/procedures/definitions/win32_bluetoothapis.py +120 -0
- angr/procedures/definitions/win32_bthprops.py +33 -0
- angr/procedures/definitions/win32_bthprops_cpl.py +50 -0
- angr/procedures/definitions/win32_cabinet.py +82 -0
- angr/procedures/definitions/win32_certadm.py +74 -0
- angr/procedures/definitions/win32_certpoleng.py +54 -0
- angr/procedures/definitions/win32_cfgmgr32.py +516 -0
- angr/procedures/definitions/win32_chakra.py +212 -0
- angr/procedures/definitions/win32_cldapi.py +110 -0
- angr/procedures/definitions/win32_clfsw32.py +156 -0
- angr/procedures/definitions/win32_clusapi.py +598 -0
- angr/procedures/definitions/win32_comctl32.py +268 -0
- angr/procedures/definitions/win32_comdlg32.py +80 -0
- angr/procedures/definitions/win32_compstui.py +46 -0
- angr/procedures/definitions/win32_computecore.py +146 -0
- angr/procedures/definitions/win32_computenetwork.py +124 -0
- angr/procedures/definitions/win32_computestorage.py +62 -0
- angr/procedures/definitions/win32_comsvcs.py +52 -0
- angr/procedures/definitions/win32_coremessaging.py +23 -0
- angr/procedures/definitions/win32_credui.py +76 -0
- angr/procedures/definitions/win32_crypt32.py +496 -0
- angr/procedures/definitions/win32_cryptnet.py +48 -0
- angr/procedures/definitions/win32_cryptui.py +58 -0
- angr/procedures/definitions/win32_cryptxml.py +76 -0
- angr/procedures/definitions/win32_cscapi.py +46 -0
- angr/procedures/definitions/win32_d2d1.py +64 -0
- angr/procedures/definitions/win32_d3d10.py +92 -0
- angr/procedures/definitions/win32_d3d10_1.py +42 -0
- angr/procedures/definitions/win32_d3d11.py +44 -0
- angr/procedures/definitions/win32_d3d12.py +54 -0
- angr/procedures/definitions/win32_d3d9.py +60 -0
- angr/procedures/definitions/win32_d3dcompiler_47.py +90 -0
- angr/procedures/definitions/win32_d3dcsx.py +56 -0
- angr/procedures/definitions/win32_davclnt.py +74 -0
- angr/procedures/definitions/win32_dbgeng.py +46 -0
- angr/procedures/definitions/win32_dbghelp.py +476 -0
- angr/procedures/definitions/win32_dbgmodel.py +40 -0
- angr/procedures/definitions/win32_dciman32.py +78 -0
- angr/procedures/definitions/win32_dcomp.py +62 -0
- angr/procedures/definitions/win32_ddraw.py +52 -0
- angr/procedures/definitions/win32_deviceaccess.py +40 -0
- angr/procedures/definitions/win32_dflayout.py +40 -0
- angr/procedures/definitions/win32_dhcpcsvc.py +68 -0
- angr/procedures/definitions/win32_dhcpcsvc6.py +50 -0
- angr/procedures/definitions/win32_dhcpsapi.py +430 -0
- angr/procedures/definitions/win32_diagnosticdataquery.py +108 -0
- angr/procedures/definitions/win32_dinput8.py +40 -0
- angr/procedures/definitions/win32_directml.py +42 -0
- angr/procedures/definitions/win32_dmprocessxmlfiltered.py +40 -0
- angr/procedures/definitions/win32_dnsapi.py +166 -0
- angr/procedures/definitions/win32_drt.py +70 -0
- angr/procedures/definitions/win32_drtprov.py +56 -0
- angr/procedures/definitions/win32_drttransport.py +42 -0
- angr/procedures/definitions/win32_dsound.py +58 -0
- angr/procedures/definitions/win32_dsparse.py +76 -0
- angr/procedures/definitions/win32_dsprop.py +52 -0
- angr/procedures/definitions/win32_dssec.py +46 -0
- angr/procedures/definitions/win32_dsuiext.py +46 -0
- angr/procedures/definitions/win32_dwmapi.py +100 -0
- angr/procedures/definitions/win32_dwrite.py +40 -0
- angr/procedures/definitions/win32_dxcompiler.py +42 -0
- angr/procedures/definitions/win32_dxcore.py +40 -0
- angr/procedures/definitions/win32_dxgi.py +50 -0
- angr/procedures/definitions/win32_dxva2.py +114 -0
- angr/procedures/definitions/win32_eappcfg.py +66 -0
- angr/procedures/definitions/win32_eappprxy.py +74 -0
- angr/procedures/definitions/win32_efswrt.py +42 -0
- angr/procedures/definitions/win32_elscore.py +48 -0
- angr/procedures/definitions/win32_esent.py +496 -0
- angr/procedures/definitions/win32_evr.py +52 -0
- angr/procedures/definitions/win32_faultrep.py +46 -0
- angr/procedures/definitions/win32_fhsvcctl.py +52 -0
- angr/procedures/definitions/win32_firewallapi.py +44 -0
- angr/procedures/definitions/win32_fltlib.py +94 -0
- angr/procedures/definitions/win32_fontsub.py +42 -0
- angr/procedures/definitions/win32_forceinline.py +44 -0
- angr/procedures/definitions/win32_fwpuclnt.py +422 -0
- angr/procedures/definitions/win32_fxsutility.py +42 -0
- angr/procedures/definitions/win32_gdi32.py +900 -0
- angr/procedures/definitions/win32_gdiplus.py +1296 -0
- angr/procedures/definitions/win32_glu32.py +142 -0
- angr/procedures/definitions/win32_gpedit.py +50 -0
- angr/procedures/definitions/win32_hhctrl_ocx.py +42 -0
- angr/procedures/definitions/win32_hid.py +128 -0
- angr/procedures/definitions/win32_hlink.py +94 -0
- angr/procedures/definitions/win32_hrtfapo.py +40 -0
- angr/procedures/definitions/win32_httpapi.py +124 -0
- angr/procedures/definitions/win32_icm32.py +80 -0
- angr/procedures/definitions/win32_icmui.py +42 -0
- angr/procedures/definitions/win32_icu.py +2088 -0
- angr/procedures/definitions/win32_ieframe.py +96 -0
- angr/procedures/definitions/win32_imagehlp.py +90 -0
- angr/procedures/definitions/win32_imgutil.py +56 -0
- angr/procedures/definitions/win32_imm32.py +202 -0
- angr/procedures/definitions/win32_infocardapi.py +72 -0
- angr/procedures/definitions/win32_inkobjcore.py +92 -0
- angr/procedures/definitions/win32_iphlpapi.py +440 -0
- angr/procedures/definitions/win32_iscsidsc.py +196 -0
- angr/procedures/definitions/win32_isolatedwindowsenvironmentutils.py +42 -0
- angr/procedures/definitions/win32_kernel32.py +3199 -0
- angr/procedures/definitions/win32_kernelbase.py +50 -0
- angr/procedures/definitions/win32_keycredmgr.py +46 -0
- angr/procedures/definitions/win32_ksproxy_ax.py +50 -0
- angr/procedures/definitions/win32_ksuser.py +54 -0
- angr/procedures/definitions/win32_ktmw32.py +116 -0
- angr/procedures/definitions/win32_licenseprotection.py +42 -0
- angr/procedures/definitions/win32_loadperf.py +62 -0
- angr/procedures/definitions/win32_magnification.py +76 -0
- angr/procedures/definitions/win32_mapi32.py +170 -0
- angr/procedures/definitions/win32_mdmlocalmanagement.py +44 -0
- angr/procedures/definitions/win32_mdmregistration.py +68 -0
- angr/procedures/definitions/win32_mf.py +162 -0
- angr/procedures/definitions/win32_mfcore.py +42 -0
- angr/procedures/definitions/win32_mfplat.py +328 -0
- angr/procedures/definitions/win32_mfplay.py +40 -0
- angr/procedures/definitions/win32_mfreadwrite.py +48 -0
- angr/procedures/definitions/win32_mfsensorgroup.py +58 -0
- angr/procedures/definitions/win32_mfsrcsnk.py +42 -0
- angr/procedures/definitions/win32_mgmtapi.py +56 -0
- angr/procedures/definitions/win32_mi.py +40 -0
- angr/procedures/definitions/win32_mmdevapi.py +40 -0
- angr/procedures/definitions/win32_mpr.py +132 -0
- angr/procedures/definitions/win32_mprapi.py +262 -0
- angr/procedures/definitions/win32_mqrt.py +106 -0
- angr/procedures/definitions/win32_mrmsupport.py +92 -0
- angr/procedures/definitions/win32_msacm32.py +122 -0
- angr/procedures/definitions/win32_msajapi.py +1132 -0
- angr/procedures/definitions/win32_mscms.py +196 -0
- angr/procedures/definitions/win32_mscoree.py +92 -0
- angr/procedures/definitions/win32_msctfmonitor.py +44 -0
- angr/procedures/definitions/win32_msdelta.py +70 -0
- angr/procedures/definitions/win32_msdmo.py +60 -0
- angr/procedures/definitions/win32_msdrm.py +206 -0
- angr/procedures/definitions/win32_msi.py +566 -0
- angr/procedures/definitions/win32_msimg32.py +44 -0
- angr/procedures/definitions/win32_mspatcha.py +70 -0
- angr/procedures/definitions/win32_mspatchc.py +56 -0
- angr/procedures/definitions/win32_msports.py +52 -0
- angr/procedures/definitions/win32_msrating.py +76 -0
- angr/procedures/definitions/win32_mssign32.py +58 -0
- angr/procedures/definitions/win32_mstask.py +42 -0
- angr/procedures/definitions/win32_msvfw32.py +124 -0
- angr/procedures/definitions/win32_mswsock.py +70 -0
- angr/procedures/definitions/win32_mtxdm.py +40 -0
- angr/procedures/definitions/win32_ncrypt.py +116 -0
- angr/procedures/definitions/win32_ndfapi.py +70 -0
- angr/procedures/definitions/win32_netapi32.py +450 -0
- angr/procedures/definitions/win32_netsh.py +54 -0
- angr/procedures/definitions/win32_netshell.py +42 -0
- angr/procedures/definitions/win32_newdev.py +60 -0
- angr/procedures/definitions/win32_ninput.py +98 -0
- angr/procedures/definitions/win32_normaliz.py +42 -0
- angr/procedures/definitions/win32_ntdll.py +185 -0
- angr/procedures/definitions/win32_ntdllk.py +40 -0
- angr/procedures/definitions/win32_ntdsapi.py +200 -0
- angr/procedures/definitions/win32_ntlanman.py +58 -0
- angr/procedures/definitions/win32_odbc32.py +406 -0
- angr/procedures/definitions/win32_odbcbcp.py +92 -0
- angr/procedures/definitions/win32_ole32.py +672 -0
- angr/procedures/definitions/win32_oleacc.py +72 -0
- angr/procedures/definitions/win32_oleaut32.py +848 -0
- angr/procedures/definitions/win32_oledlg.py +84 -0
- angr/procedures/definitions/win32_ondemandconnroutehelper.py +48 -0
- angr/procedures/definitions/win32_opengl32.py +748 -0
- angr/procedures/definitions/win32_opmxbox.py +44 -0
- angr/procedures/definitions/win32_p2p.py +254 -0
- angr/procedures/definitions/win32_p2pgraph.py +112 -0
- angr/procedures/definitions/win32_pdh.py +234 -0
- angr/procedures/definitions/win32_peerdist.py +94 -0
- angr/procedures/definitions/win32_powrprof.py +206 -0
- angr/procedures/definitions/win32_prntvpt.py +60 -0
- angr/procedures/definitions/win32_projectedfslib.py +76 -0
- angr/procedures/definitions/win32_propsys.py +474 -0
- angr/procedures/definitions/win32_psapi.py +92 -0
- angr/procedures/definitions/win32_quartz.py +42 -0
- angr/procedures/definitions/win32_query.py +46 -0
- angr/procedures/definitions/win32_qwave.py +60 -0
- angr/procedures/definitions/win32_rasapi32.py +206 -0
- angr/procedures/definitions/win32_rasdlg.py +50 -0
- angr/procedures/definitions/win32_resutils.py +278 -0
- angr/procedures/definitions/win32_rometadata.py +23 -0
- angr/procedures/definitions/win32_rpcns4.py +160 -0
- angr/procedures/definitions/win32_rpcproxy.py +46 -0
- angr/procedures/definitions/win32_rpcrt4.py +932 -0
- angr/procedures/definitions/win32_rstrtmgr.py +60 -0
- angr/procedures/definitions/win32_rtm.py +190 -0
- angr/procedures/definitions/win32_rtutils.py +120 -0
- angr/procedures/definitions/win32_rtworkq.py +104 -0
- angr/procedures/definitions/win32_sas.py +40 -0
- angr/procedures/definitions/win32_scarddlg.py +48 -0
- angr/procedures/definitions/win32_schannel.py +56 -0
- angr/procedures/definitions/win32_sechost.py +42 -0
- angr/procedures/definitions/win32_secur32.py +216 -0
- angr/procedures/definitions/win32_sensapi.py +44 -0
- angr/procedures/definitions/win32_sensorsutilsv2.py +118 -0
- angr/procedures/definitions/win32_setupapi.py +706 -0
- angr/procedures/definitions/win32_sfc.py +50 -0
- angr/procedures/definitions/win32_shdocvw.py +44 -0
- angr/procedures/definitions/win32_shell32.py +526 -0
- angr/procedures/definitions/win32_shlwapi.py +758 -0
- angr/procedures/definitions/win32_slc.py +102 -0
- angr/procedures/definitions/win32_slcext.py +46 -0
- angr/procedures/definitions/win32_slwga.py +40 -0
- angr/procedures/definitions/win32_snmpapi.py +90 -0
- angr/procedures/definitions/win32_spoolss.py +90 -0
- angr/procedures/definitions/win32_srclient.py +40 -0
- angr/procedures/definitions/win32_srpapi.py +60 -0
- angr/procedures/definitions/win32_sspicli.py +52 -0
- angr/procedures/definitions/win32_sti.py +40 -0
- angr/procedures/definitions/win32_t2embed.py +66 -0
- angr/procedures/definitions/win32_tapi32.py +536 -0
- angr/procedures/definitions/win32_tbs.py +66 -0
- angr/procedures/definitions/win32_tdh.py +92 -0
- angr/procedures/definitions/win32_tokenbinding.py +58 -0
- angr/procedures/definitions/win32_traffic.py +78 -0
- angr/procedures/definitions/win32_txfw32.py +56 -0
- angr/procedures/definitions/win32_ualapi.py +46 -0
- angr/procedures/definitions/win32_uiautomationcore.py +234 -0
- angr/procedures/definitions/win32_urlmon.py +192 -0
- angr/procedures/definitions/win32_user32.py +1565 -0
- angr/procedures/definitions/win32_userenv.py +126 -0
- angr/procedures/definitions/win32_usp10.py +118 -0
- angr/procedures/definitions/win32_uxtheme.py +192 -0
- angr/procedures/definitions/win32_verifier.py +40 -0
- angr/procedures/definitions/win32_version.py +66 -0
- angr/procedures/definitions/win32_vertdll.py +52 -0
- angr/procedures/definitions/win32_virtdisk.py +96 -0
- angr/procedures/definitions/win32_vmdevicehost.py +64 -0
- angr/procedures/definitions/win32_vmsavedstatedumpprovider.py +124 -0
- angr/procedures/definitions/win32_vssapi.py +40 -0
- angr/procedures/definitions/win32_wcmapi.py +48 -0
- angr/procedures/definitions/win32_wdsbp.py +52 -0
- angr/procedures/definitions/win32_wdsclientapi.py +112 -0
- angr/procedures/definitions/win32_wdsmc.py +50 -0
- angr/procedures/definitions/win32_wdspxe.py +100 -0
- angr/procedures/definitions/win32_wdstptc.py +64 -0
- angr/procedures/definitions/win32_webauthn.py +64 -0
- angr/procedures/definitions/win32_webservices.py +424 -0
- angr/procedures/definitions/win32_websocket.py +64 -0
- angr/procedures/definitions/win32_wecapi.py +68 -0
- angr/procedures/definitions/win32_wer.py +80 -0
- angr/procedures/definitions/win32_wevtapi.py +108 -0
- angr/procedures/definitions/win32_winbio.py +146 -0
- angr/procedures/definitions/win32_windows_ai_machinelearning.py +40 -0
- angr/procedures/definitions/win32_windows_data_pdf.py +23 -0
- angr/procedures/definitions/win32_windows_media_mediacontrol.py +54 -0
- angr/procedures/definitions/win32_windows_networking.py +40 -0
- angr/procedures/definitions/win32_windows_ui_xaml.py +42 -0
- angr/procedures/definitions/win32_windowscodecs.py +56 -0
- angr/procedures/definitions/win32_winfax.py +150 -0
- angr/procedures/definitions/win32_winhttp.py +150 -0
- angr/procedures/definitions/win32_winhvemulation.py +46 -0
- angr/procedures/definitions/win32_winhvplatform.py +170 -0
- angr/procedures/definitions/win32_wininet.py +630 -0
- angr/procedures/definitions/win32_winml.py +40 -0
- angr/procedures/definitions/win32_winmm.py +390 -0
- angr/procedures/definitions/win32_winscard.py +178 -0
- angr/procedures/definitions/win32_winspool.py +363 -0
- angr/procedures/definitions/win32_winspool_drv.py +382 -0
- angr/procedures/definitions/win32_wintrust.py +158 -0
- angr/procedures/definitions/win32_winusb.py +106 -0
- angr/procedures/definitions/win32_wlanapi.py +158 -0
- angr/procedures/definitions/win32_wlanui.py +40 -0
- angr/procedures/definitions/win32_wldap32.py +524 -0
- angr/procedures/definitions/win32_wldp.py +56 -0
- angr/procedures/definitions/win32_wmvcore.py +60 -0
- angr/procedures/definitions/win32_wnvapi.py +42 -0
- angr/procedures/definitions/win32_wofutil.py +60 -0
- angr/procedures/definitions/win32_ws2_32.py +358 -0
- angr/procedures/definitions/win32_wscapi.py +50 -0
- angr/procedures/definitions/win32_wsclient.py +44 -0
- angr/procedures/definitions/win32_wsdapi.py +102 -0
- angr/procedures/definitions/win32_wsmsvc.py +104 -0
- angr/procedures/definitions/win32_wsnmp32.py +136 -0
- angr/procedures/definitions/win32_wtsapi32.py +164 -0
- angr/procedures/definitions/win32_xaudio2_8.py +46 -0
- angr/procedures/definitions/win32_xinput1_4.py +52 -0
- angr/procedures/definitions/win32_xinputuap.py +35 -0
- angr/procedures/definitions/win32_xmllite.py +50 -0
- angr/procedures/definitions/win32_xolehlp.py +46 -0
- angr/procedures/definitions/win32_xpsprint.py +42 -0
- angr/procedures/glibc/__ctype_b_loc.py +22 -0
- angr/procedures/glibc/__ctype_tolower_loc.py +22 -0
- angr/procedures/glibc/__ctype_toupper_loc.py +22 -0
- angr/procedures/glibc/__errno_location.py +6 -0
- angr/procedures/glibc/__init__.py +3 -0
- angr/procedures/glibc/__libc_init.py +36 -0
- angr/procedures/glibc/__libc_start_main.py +294 -0
- angr/procedures/glibc/dynamic_loading.py +19 -0
- angr/procedures/glibc/scanf.py +10 -0
- angr/procedures/glibc/sscanf.py +5 -0
- angr/procedures/gnulib/__init__.py +3 -0
- angr/procedures/gnulib/xalloc_die.py +13 -0
- angr/procedures/gnulib/xstrtol_fatal.py +13 -0
- angr/procedures/java/__init__.py +38 -0
- angr/procedures/java/unconstrained.py +64 -0
- angr/procedures/java_io/__init__.py +0 -0
- angr/procedures/java_io/read.py +11 -0
- angr/procedures/java_io/write.py +16 -0
- angr/procedures/java_jni/__init__.py +475 -0
- angr/procedures/java_jni/array_operations.py +309 -0
- angr/procedures/java_jni/class_and_interface_operations.py +31 -0
- angr/procedures/java_jni/field_access.py +176 -0
- angr/procedures/java_jni/global_and_local_refs.py +56 -0
- angr/procedures/java_jni/method_calls.py +364 -0
- angr/procedures/java_jni/not_implemented.py +25 -0
- angr/procedures/java_jni/object_operations.py +95 -0
- angr/procedures/java_jni/string_operations.py +86 -0
- angr/procedures/java_jni/version_information.py +11 -0
- angr/procedures/java_lang/__init__.py +0 -0
- angr/procedures/java_lang/character.py +31 -0
- angr/procedures/java_lang/double.py +24 -0
- angr/procedures/java_lang/exit.py +12 -0
- angr/procedures/java_lang/getsimplename.py +15 -0
- angr/procedures/java_lang/integer.py +42 -0
- angr/procedures/java_lang/load_library.py +8 -0
- angr/procedures/java_lang/math.py +14 -0
- angr/procedures/java_lang/string.py +78 -0
- angr/procedures/java_lang/stringbuilder.py +43 -0
- angr/procedures/java_lang/system.py +17 -0
- angr/procedures/java_util/__init__.py +0 -0
- angr/procedures/java_util/collection.py +34 -0
- angr/procedures/java_util/iterator.py +45 -0
- angr/procedures/java_util/list.py +98 -0
- angr/procedures/java_util/map.py +132 -0
- angr/procedures/java_util/random.py +11 -0
- angr/procedures/java_util/scanner_nextline.py +22 -0
- angr/procedures/libc/__init__.py +3 -0
- angr/procedures/libc/abort.py +8 -0
- angr/procedures/libc/access.py +10 -0
- angr/procedures/libc/atoi.py +14 -0
- angr/procedures/libc/atol.py +12 -0
- angr/procedures/libc/calloc.py +7 -0
- angr/procedures/libc/closelog.py +9 -0
- angr/procedures/libc/err.py +13 -0
- angr/procedures/libc/error.py +55 -0
- angr/procedures/libc/exit.py +10 -0
- angr/procedures/libc/fclose.py +20 -0
- angr/procedures/libc/feof.py +19 -0
- angr/procedures/libc/fflush.py +15 -0
- angr/procedures/libc/fgetc.py +24 -0
- angr/procedures/libc/fgets.py +68 -0
- angr/procedures/libc/fopen.py +64 -0
- angr/procedures/libc/fprintf.py +24 -0
- angr/procedures/libc/fputc.py +22 -0
- angr/procedures/libc/fputs.py +23 -0
- angr/procedures/libc/fread.py +22 -0
- angr/procedures/libc/free.py +8 -0
- angr/procedures/libc/fscanf.py +20 -0
- angr/procedures/libc/fseek.py +32 -0
- angr/procedures/libc/ftell.py +21 -0
- angr/procedures/libc/fwrite.py +18 -0
- angr/procedures/libc/getchar.py +13 -0
- angr/procedures/libc/getdelim.py +96 -0
- angr/procedures/libc/getegid.py +7 -0
- angr/procedures/libc/geteuid.py +7 -0
- angr/procedures/libc/getgid.py +7 -0
- angr/procedures/libc/gets.py +66 -0
- angr/procedures/libc/getuid.py +7 -0
- angr/procedures/libc/malloc.py +11 -0
- angr/procedures/libc/memcmp.py +69 -0
- angr/procedures/libc/memcpy.py +37 -0
- angr/procedures/libc/memset.py +69 -0
- angr/procedures/libc/openlog.py +9 -0
- angr/procedures/libc/perror.py +12 -0
- angr/procedures/libc/printf.py +33 -0
- angr/procedures/libc/putchar.py +12 -0
- angr/procedures/libc/puts.py +16 -0
- angr/procedures/libc/rand.py +7 -0
- angr/procedures/libc/realloc.py +7 -0
- angr/procedures/libc/rewind.py +11 -0
- angr/procedures/libc/scanf.py +20 -0
- angr/procedures/libc/setbuf.py +8 -0
- angr/procedures/libc/setvbuf.py +6 -0
- angr/procedures/libc/snprintf.py +33 -0
- angr/procedures/libc/sprintf.py +22 -0
- angr/procedures/libc/srand.py +6 -0
- angr/procedures/libc/sscanf.py +13 -0
- angr/procedures/libc/stpcpy.py +18 -0
- angr/procedures/libc/strcat.py +13 -0
- angr/procedures/libc/strchr.py +44 -0
- angr/procedures/libc/strcmp.py +28 -0
- angr/procedures/libc/strcpy.py +13 -0
- angr/procedures/libc/strlen.py +99 -0
- angr/procedures/libc/strncat.py +18 -0
- angr/procedures/libc/strncmp.py +180 -0
- angr/procedures/libc/strncpy.py +18 -0
- angr/procedures/libc/strnlen.py +13 -0
- angr/procedures/libc/strstr.py +94 -0
- angr/procedures/libc/strtol.py +263 -0
- angr/procedures/libc/strtoul.py +9 -0
- angr/procedures/libc/system.py +12 -0
- angr/procedures/libc/time.py +9 -0
- angr/procedures/libc/tmpnam.py +19 -0
- angr/procedures/libc/tolower.py +7 -0
- angr/procedures/libc/toupper.py +7 -0
- angr/procedures/libc/ungetc.py +19 -0
- angr/procedures/libc/vsnprintf.py +16 -0
- angr/procedures/libc/wchar.py +15 -0
- angr/procedures/libstdcpp/__init__.py +0 -0
- angr/procedures/libstdcpp/_unwind_resume.py +10 -0
- angr/procedures/libstdcpp/std____throw_bad_alloc.py +12 -0
- angr/procedures/libstdcpp/std____throw_bad_cast.py +12 -0
- angr/procedures/libstdcpp/std____throw_length_error.py +12 -0
- angr/procedures/libstdcpp/std____throw_logic_error.py +12 -0
- angr/procedures/libstdcpp/std__terminate.py +12 -0
- angr/procedures/linux_kernel/__init__.py +3 -0
- angr/procedures/linux_kernel/access.py +17 -0
- angr/procedures/linux_kernel/arch_prctl.py +33 -0
- angr/procedures/linux_kernel/arm_user_helpers.py +58 -0
- angr/procedures/linux_kernel/brk.py +17 -0
- angr/procedures/linux_kernel/cwd.py +27 -0
- angr/procedures/linux_kernel/fstat.py +137 -0
- angr/procedures/linux_kernel/fstat64.py +169 -0
- angr/procedures/linux_kernel/futex.py +17 -0
- angr/procedures/linux_kernel/getegid.py +16 -0
- angr/procedures/linux_kernel/geteuid.py +16 -0
- angr/procedures/linux_kernel/getgid.py +16 -0
- angr/procedures/linux_kernel/getpid.py +13 -0
- angr/procedures/linux_kernel/getrlimit.py +24 -0
- angr/procedures/linux_kernel/gettid.py +8 -0
- angr/procedures/linux_kernel/getuid.py +16 -0
- angr/procedures/linux_kernel/iovec.py +43 -0
- angr/procedures/linux_kernel/lseek.py +39 -0
- angr/procedures/linux_kernel/mmap.py +15 -0
- angr/procedures/linux_kernel/mprotect.py +41 -0
- angr/procedures/linux_kernel/munmap.py +7 -0
- angr/procedures/linux_kernel/openat.py +28 -0
- angr/procedures/linux_kernel/set_tid_address.py +7 -0
- angr/procedures/linux_kernel/sigaction.py +16 -0
- angr/procedures/linux_kernel/sigprocmask.py +20 -0
- angr/procedures/linux_kernel/stat.py +22 -0
- angr/procedures/linux_kernel/sysinfo.py +58 -0
- angr/procedures/linux_kernel/tgkill.py +7 -0
- angr/procedures/linux_kernel/time.py +30 -0
- angr/procedures/linux_kernel/uid.py +29 -0
- angr/procedures/linux_kernel/uname.py +28 -0
- angr/procedures/linux_kernel/unlink.py +22 -0
- angr/procedures/linux_kernel/vsyscall.py +15 -0
- angr/procedures/linux_loader/__init__.py +3 -0
- angr/procedures/linux_loader/_dl_initial_error_catch_tsd.py +6 -0
- angr/procedures/linux_loader/_dl_rtld_lock.py +14 -0
- angr/procedures/linux_loader/sim_loader.py +53 -0
- angr/procedures/linux_loader/tls.py +40 -0
- angr/procedures/msvcr/__getmainargs.py +15 -0
- angr/procedures/msvcr/__init__.py +4 -0
- angr/procedures/msvcr/_initterm.py +37 -0
- angr/procedures/msvcr/fmode.py +28 -0
- angr/procedures/ntdll/__init__.py +0 -0
- angr/procedures/ntdll/exceptions.py +57 -0
- angr/procedures/posix/__init__.py +3 -0
- angr/procedures/posix/accept.py +29 -0
- angr/procedures/posix/bind.py +12 -0
- angr/procedures/posix/bzero.py +6 -0
- angr/procedures/posix/chroot.py +26 -0
- angr/procedures/posix/close.py +9 -0
- angr/procedures/posix/closedir.py +6 -0
- angr/procedures/posix/dup.py +55 -0
- angr/procedures/posix/fcntl.py +9 -0
- angr/procedures/posix/fdopen.py +77 -0
- angr/procedures/posix/fileno.py +17 -0
- angr/procedures/posix/fork.py +10 -0
- angr/procedures/posix/getenv.py +34 -0
- angr/procedures/posix/gethostbyname.py +42 -0
- angr/procedures/posix/getpass.py +18 -0
- angr/procedures/posix/getsockopt.py +10 -0
- angr/procedures/posix/htonl.py +11 -0
- angr/procedures/posix/htons.py +11 -0
- angr/procedures/posix/inet_ntoa.py +61 -0
- angr/procedures/posix/listen.py +12 -0
- angr/procedures/posix/mmap.py +140 -0
- angr/procedures/posix/open.py +17 -0
- angr/procedures/posix/opendir.py +9 -0
- angr/procedures/posix/poll.py +54 -0
- angr/procedures/posix/pread64.py +45 -0
- angr/procedures/posix/pthread.py +87 -0
- angr/procedures/posix/pwrite64.py +45 -0
- angr/procedures/posix/read.py +12 -0
- angr/procedures/posix/readdir.py +59 -0
- angr/procedures/posix/recv.py +12 -0
- angr/procedures/posix/recvfrom.py +12 -0
- angr/procedures/posix/select.py +46 -0
- angr/procedures/posix/send.py +22 -0
- angr/procedures/posix/setsockopt.py +8 -0
- angr/procedures/posix/sigaction.py +20 -0
- angr/procedures/posix/sim_time.py +45 -0
- angr/procedures/posix/sleep.py +7 -0
- angr/procedures/posix/socket.py +18 -0
- angr/procedures/posix/strcasecmp.py +23 -0
- angr/procedures/posix/strdup.py +17 -0
- angr/procedures/posix/strtok_r.py +65 -0
- angr/procedures/posix/syslog.py +15 -0
- angr/procedures/posix/tz.py +8 -0
- angr/procedures/posix/unlink.py +10 -0
- angr/procedures/posix/usleep.py +7 -0
- angr/procedures/posix/write.py +12 -0
- angr/procedures/procedure_dict.py +48 -0
- angr/procedures/stubs/CallReturn.py +12 -0
- angr/procedures/stubs/NoReturnUnconstrained.py +12 -0
- angr/procedures/stubs/Nop.py +6 -0
- angr/procedures/stubs/PathTerminator.py +8 -0
- angr/procedures/stubs/Redirect.py +15 -0
- angr/procedures/stubs/ReturnChar.py +10 -0
- angr/procedures/stubs/ReturnUnconstrained.py +24 -0
- angr/procedures/stubs/UnresolvableCallTarget.py +8 -0
- angr/procedures/stubs/UnresolvableJumpTarget.py +8 -0
- angr/procedures/stubs/UserHook.py +15 -0
- angr/procedures/stubs/__init__.py +3 -0
- angr/procedures/stubs/b64_decode.py +12 -0
- angr/procedures/stubs/caller.py +13 -0
- angr/procedures/stubs/crazy_scanf.py +17 -0
- angr/procedures/stubs/format_parser.py +677 -0
- angr/procedures/stubs/syscall_stub.py +26 -0
- angr/procedures/testing/__init__.py +3 -0
- angr/procedures/testing/manyargs.py +8 -0
- angr/procedures/testing/retreg.py +8 -0
- angr/procedures/tracer/__init__.py +4 -0
- angr/procedures/tracer/random.py +8 -0
- angr/procedures/tracer/receive.py +21 -0
- angr/procedures/tracer/transmit.py +24 -0
- angr/procedures/uclibc/__init__.py +3 -0
- angr/procedures/uclibc/__uClibc_main.py +9 -0
- angr/procedures/win32/EncodePointer.py +6 -0
- angr/procedures/win32/ExitProcess.py +8 -0
- angr/procedures/win32/GetCommandLine.py +11 -0
- angr/procedures/win32/GetCurrentProcessId.py +6 -0
- angr/procedures/win32/GetCurrentThreadId.py +6 -0
- angr/procedures/win32/GetLastInputInfo.py +37 -0
- angr/procedures/win32/GetModuleHandle.py +30 -0
- angr/procedures/win32/GetProcessAffinityMask.py +34 -0
- angr/procedures/win32/InterlockedExchange.py +14 -0
- angr/procedures/win32/IsProcessorFeaturePresent.py +6 -0
- angr/procedures/win32/VirtualAlloc.py +113 -0
- angr/procedures/win32/VirtualProtect.py +59 -0
- angr/procedures/win32/__init__.py +3 -0
- angr/procedures/win32/critical_section.py +11 -0
- angr/procedures/win32/dynamic_loading.py +103 -0
- angr/procedures/win32/file_handles.py +47 -0
- angr/procedures/win32/gethostbyname.py +10 -0
- angr/procedures/win32/heap.py +42 -0
- angr/procedures/win32/is_bad_ptr.py +25 -0
- angr/procedures/win32/local_storage.py +85 -0
- angr/procedures/win32/mutex.py +10 -0
- angr/procedures/win32/sim_time.py +135 -0
- angr/procedures/win32/system_paths.py +34 -0
- angr/procedures/win32_kernel/ExAllocatePool.py +12 -0
- angr/procedures/win32_kernel/ExFreePoolWithTag.py +7 -0
- angr/procedures/win32_kernel/__init__.py +3 -0
- angr/procedures/win_user32/__init__.py +0 -0
- angr/procedures/win_user32/chars.py +12 -0
- angr/procedures/win_user32/keyboard.py +13 -0
- angr/procedures/win_user32/messagebox.py +49 -0
- angr/project.py +834 -0
- angr/protos/__init__.py +13 -0
- angr/protos/cfg_pb2.py +31 -0
- angr/protos/function_pb2.py +37 -0
- angr/protos/primitives_pb2.py +124 -0
- angr/protos/variables_pb2.py +126 -0
- angr/protos/xrefs_pb2.py +34 -0
- angr/py.typed +1 -0
- angr/serializable.py +63 -0
- angr/service.py +35 -0
- angr/sim_manager.py +971 -0
- angr/sim_options.py +444 -0
- angr/sim_procedure.py +606 -0
- angr/sim_state.py +1003 -0
- angr/sim_state_options.py +409 -0
- angr/sim_type.py +3372 -0
- angr/sim_variable.py +562 -0
- angr/simos/__init__.py +31 -0
- angr/simos/cgc.py +152 -0
- angr/simos/javavm.py +471 -0
- angr/simos/linux.py +519 -0
- angr/simos/simos.py +450 -0
- angr/simos/snimmuc_nxp.py +152 -0
- angr/simos/userland.py +163 -0
- angr/simos/windows.py +562 -0
- angr/slicer.py +353 -0
- angr/state_hierarchy.py +262 -0
- angr/state_plugins/__init__.py +29 -0
- angr/state_plugins/callstack.py +404 -0
- angr/state_plugins/cgc.py +153 -0
- angr/state_plugins/concrete.py +297 -0
- angr/state_plugins/debug_variables.py +194 -0
- angr/state_plugins/filesystem.py +469 -0
- angr/state_plugins/gdb.py +146 -0
- angr/state_plugins/globals.py +62 -0
- angr/state_plugins/heap/__init__.py +5 -0
- angr/state_plugins/heap/heap_base.py +126 -0
- angr/state_plugins/heap/heap_brk.py +134 -0
- angr/state_plugins/heap/heap_freelist.py +210 -0
- angr/state_plugins/heap/heap_libc.py +45 -0
- angr/state_plugins/heap/heap_ptmalloc.py +646 -0
- angr/state_plugins/heap/utils.py +21 -0
- angr/state_plugins/history.py +548 -0
- angr/state_plugins/inspect.py +376 -0
- angr/state_plugins/javavm_classloader.py +133 -0
- angr/state_plugins/jni_references.py +93 -0
- angr/state_plugins/libc.py +1263 -0
- angr/state_plugins/light_registers.py +170 -0
- angr/state_plugins/log.py +85 -0
- angr/state_plugins/loop_data.py +92 -0
- angr/state_plugins/plugin.py +155 -0
- angr/state_plugins/posix.py +709 -0
- angr/state_plugins/preconstrainer.py +195 -0
- angr/state_plugins/scratch.py +175 -0
- angr/state_plugins/sim_action.py +334 -0
- angr/state_plugins/sim_action_object.py +148 -0
- angr/state_plugins/sim_event.py +58 -0
- angr/state_plugins/solver.py +1129 -0
- angr/state_plugins/symbolizer.py +292 -0
- angr/state_plugins/trace_additions.py +752 -0
- angr/state_plugins/uc_manager.py +85 -0
- angr/state_plugins/unicorn_engine.py +1899 -0
- angr/state_plugins/view.py +341 -0
- angr/storage/__init__.py +9 -0
- angr/storage/file.py +1219 -0
- angr/storage/memory_mixins/__init__.py +393 -0
- angr/storage/memory_mixins/__init__.pyi +49 -0
- angr/storage/memory_mixins/actions_mixin.py +69 -0
- angr/storage/memory_mixins/address_concretization_mixin.py +388 -0
- angr/storage/memory_mixins/bvv_conversion_mixin.py +74 -0
- angr/storage/memory_mixins/clouseau_mixin.py +131 -0
- angr/storage/memory_mixins/conditional_store_mixin.py +24 -0
- angr/storage/memory_mixins/convenient_mappings_mixin.py +257 -0
- angr/storage/memory_mixins/default_filler_mixin.py +146 -0
- angr/storage/memory_mixins/dirty_addrs_mixin.py +9 -0
- angr/storage/memory_mixins/hex_dumper_mixin.py +85 -0
- angr/storage/memory_mixins/javavm_memory/__init__.py +1 -0
- angr/storage/memory_mixins/javavm_memory/javavm_memory_mixin.py +394 -0
- angr/storage/memory_mixins/keyvalue_memory/__init__.py +1 -0
- angr/storage/memory_mixins/keyvalue_memory/keyvalue_memory_mixin.py +36 -0
- angr/storage/memory_mixins/label_merger_mixin.py +31 -0
- angr/storage/memory_mixins/multi_value_merger_mixin.py +68 -0
- angr/storage/memory_mixins/name_resolution_mixin.py +70 -0
- angr/storage/memory_mixins/paged_memory/__init__.py +0 -0
- angr/storage/memory_mixins/paged_memory/page_backer_mixins.py +266 -0
- angr/storage/memory_mixins/paged_memory/paged_memory_mixin.py +750 -0
- angr/storage/memory_mixins/paged_memory/paged_memory_multivalue_mixin.py +63 -0
- angr/storage/memory_mixins/paged_memory/pages/__init__.py +33 -0
- angr/storage/memory_mixins/paged_memory/pages/cooperation.py +330 -0
- angr/storage/memory_mixins/paged_memory/pages/history_tracking_mixin.py +87 -0
- angr/storage/memory_mixins/paged_memory/pages/ispo_mixin.py +53 -0
- angr/storage/memory_mixins/paged_memory/pages/list_page.py +346 -0
- angr/storage/memory_mixins/paged_memory/pages/multi_values.py +290 -0
- angr/storage/memory_mixins/paged_memory/pages/mv_list_page.py +434 -0
- angr/storage/memory_mixins/paged_memory/pages/permissions_mixin.py +33 -0
- angr/storage/memory_mixins/paged_memory/pages/refcount_mixin.py +51 -0
- angr/storage/memory_mixins/paged_memory/pages/ultra_page.py +468 -0
- angr/storage/memory_mixins/paged_memory/privileged_mixin.py +36 -0
- angr/storage/memory_mixins/paged_memory/stack_allocation_mixin.py +73 -0
- angr/storage/memory_mixins/regioned_memory/__init__.py +6 -0
- angr/storage/memory_mixins/regioned_memory/abstract_address_descriptor.py +35 -0
- angr/storage/memory_mixins/regioned_memory/abstract_merger_mixin.py +43 -0
- angr/storage/memory_mixins/regioned_memory/region_category_mixin.py +7 -0
- angr/storage/memory_mixins/regioned_memory/region_data.py +245 -0
- angr/storage/memory_mixins/regioned_memory/region_meta_mixin.py +125 -0
- angr/storage/memory_mixins/regioned_memory/regioned_address_concretization_mixin.py +118 -0
- angr/storage/memory_mixins/regioned_memory/regioned_memory_mixin.py +462 -0
- angr/storage/memory_mixins/regioned_memory/static_find_mixin.py +70 -0
- angr/storage/memory_mixins/simple_interface_mixin.py +73 -0
- angr/storage/memory_mixins/simplification_mixin.py +13 -0
- angr/storage/memory_mixins/size_resolution_mixin.py +140 -0
- angr/storage/memory_mixins/slotted_memory.py +140 -0
- angr/storage/memory_mixins/smart_find_mixin.py +159 -0
- angr/storage/memory_mixins/symbolic_merger_mixin.py +12 -0
- angr/storage/memory_mixins/top_merger_mixin.py +24 -0
- angr/storage/memory_mixins/underconstrained_mixin.py +67 -0
- angr/storage/memory_mixins/unwrapper_mixin.py +26 -0
- angr/storage/memory_object.py +194 -0
- angr/storage/pcap.py +65 -0
- angr/tablespecs.py +90 -0
- angr/utils/__init__.py +33 -0
- angr/utils/algo.py +33 -0
- angr/utils/constants.py +7 -0
- angr/utils/cowdict.py +64 -0
- angr/utils/dynamic_dictlist.py +92 -0
- angr/utils/enums_conv.py +80 -0
- angr/utils/env.py +11 -0
- angr/utils/formatting.py +124 -0
- angr/utils/funcid.py +133 -0
- angr/utils/graph.py +822 -0
- angr/utils/lazy_import.py +12 -0
- angr/utils/library.py +214 -0
- angr/utils/loader.py +55 -0
- angr/utils/mp.py +64 -0
- angr/utils/segment_list.py +558 -0
- angr/utils/timing.py +45 -0
- angr/utils/typing.py +17 -0
- angr/vaults.py +370 -0
- angr-9.2.103.dist-info/LICENSE +24 -0
- angr-9.2.103.dist-info/METADATA +119 -0
- angr-9.2.103.dist-info/RECORD +1300 -0
- angr-9.2.103.dist-info/WHEEL +5 -0
- angr-9.2.103.dist-info/entry_points.txt +2 -0
- angr-9.2.103.dist-info/top_level.txt +1 -0
angr/sim_state.py
ADDED
|
@@ -0,0 +1,1003 @@
|
|
|
1
|
+
import functools
|
|
2
|
+
import itertools
|
|
3
|
+
import contextlib
|
|
4
|
+
import weakref
|
|
5
|
+
|
|
6
|
+
import logging
|
|
7
|
+
|
|
8
|
+
from typing import TypeVar, TYPE_CHECKING
|
|
9
|
+
|
|
10
|
+
from archinfo import Arch
|
|
11
|
+
|
|
12
|
+
l = logging.getLogger(name=__name__)
|
|
13
|
+
|
|
14
|
+
import claripy
|
|
15
|
+
import archinfo
|
|
16
|
+
from archinfo.arch_soot import SootAddressDescriptor
|
|
17
|
+
|
|
18
|
+
from .misc.plugins import PluginHub, PluginPreset
|
|
19
|
+
from .sim_state_options import SimStateOptions
|
|
20
|
+
from .state_plugins import SimStatePlugin
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def arch_overrideable(f):
|
|
24
|
+
@functools.wraps(f)
|
|
25
|
+
def wrapped_f(self, *args, **kwargs):
|
|
26
|
+
if hasattr(self.arch, f.__name__):
|
|
27
|
+
arch_f = getattr(self.arch, f.__name__)
|
|
28
|
+
return arch_f(self, *args, **kwargs)
|
|
29
|
+
else:
|
|
30
|
+
return f(self, *args, **kwargs)
|
|
31
|
+
|
|
32
|
+
return wrapped_f
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
# This is a counter for the state-merging symbolic variables
|
|
36
|
+
merge_counter = itertools.count()
|
|
37
|
+
|
|
38
|
+
_complained_se = False
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
# pylint: disable=not-callable
|
|
42
|
+
class SimState(PluginHub):
|
|
43
|
+
"""
|
|
44
|
+
The SimState represents the state of a program, including its memory, registers, and so forth.
|
|
45
|
+
|
|
46
|
+
:param angr.Project project: The project instance.
|
|
47
|
+
:param archinfo.Arch|str arch: The architecture of the state.
|
|
48
|
+
|
|
49
|
+
:ivar regs: A convenient view of the state's registers, where each register is a property
|
|
50
|
+
:ivar mem: A convenient view of the state's memory, a :class:`angr.state_plugins.view.SimMemView`
|
|
51
|
+
:ivar registers: The state's register file as a flat memory region
|
|
52
|
+
:ivar memory: The state's memory as a flat memory region
|
|
53
|
+
:ivar solver: The symbolic solver and variable manager for this state
|
|
54
|
+
:ivar inspect: The breakpoint manager, a :class:`angr.state_plugins.inspect.SimInspector`
|
|
55
|
+
:ivar log: Information about the state's history
|
|
56
|
+
:ivar scratch: Information about the current execution step
|
|
57
|
+
:ivar posix: MISNOMER: information about the operating system or environment model
|
|
58
|
+
:ivar fs: The current state of the simulated filesystem
|
|
59
|
+
:ivar libc: Information about the standard library we are emulating
|
|
60
|
+
:ivar cgc: Information about the cgc environment
|
|
61
|
+
:ivar uc_manager: Control of under-constrained symbolic execution
|
|
62
|
+
:ivar unicorn: Control of the Unicorn Engine
|
|
63
|
+
"""
|
|
64
|
+
|
|
65
|
+
# Type Annotations for default plugins to allow type inference
|
|
66
|
+
solver: "SimSolver"
|
|
67
|
+
posix: "SimSystemPosix"
|
|
68
|
+
registers: "DefaultMemory"
|
|
69
|
+
regs: "SimRegNameView"
|
|
70
|
+
memory: "DefaultMemory"
|
|
71
|
+
callstack: "CallStack"
|
|
72
|
+
mem: "SimMemView"
|
|
73
|
+
history: "SimStateHistory"
|
|
74
|
+
inspect: "SimInspector"
|
|
75
|
+
jni_references: "SimStateJNIReferences"
|
|
76
|
+
scratch: "SimStateScratch"
|
|
77
|
+
|
|
78
|
+
def __init__(
|
|
79
|
+
self,
|
|
80
|
+
project=None,
|
|
81
|
+
arch=None,
|
|
82
|
+
plugins=None,
|
|
83
|
+
mode=None,
|
|
84
|
+
options=None,
|
|
85
|
+
add_options=None,
|
|
86
|
+
remove_options=None,
|
|
87
|
+
special_memory_filler=None,
|
|
88
|
+
os_name=None,
|
|
89
|
+
plugin_preset="default",
|
|
90
|
+
cle_memory_backer=None,
|
|
91
|
+
dict_memory_backer=None,
|
|
92
|
+
permissions_map=None,
|
|
93
|
+
default_permissions=3,
|
|
94
|
+
stack_perms=None,
|
|
95
|
+
stack_end=None,
|
|
96
|
+
stack_size=None,
|
|
97
|
+
regioned_memory_cls=None,
|
|
98
|
+
**kwargs,
|
|
99
|
+
):
|
|
100
|
+
if kwargs:
|
|
101
|
+
l.warning("Unused keyword arguments passed to SimState: %s", " ".join(kwargs))
|
|
102
|
+
super().__init__()
|
|
103
|
+
self.project = project
|
|
104
|
+
|
|
105
|
+
# Java & Java JNI
|
|
106
|
+
self._is_java_project = self.project and self.project.is_java_project
|
|
107
|
+
self._is_java_jni_project = self.project and self.project.is_java_jni_project
|
|
108
|
+
|
|
109
|
+
# Arch
|
|
110
|
+
if self._is_java_jni_project:
|
|
111
|
+
self._arch = {"soot": project.arch, "vex": project.simos.native_simos.arch}
|
|
112
|
+
# This flag indicates whether the current ip is a native address or
|
|
113
|
+
# a soot address descriptor.
|
|
114
|
+
# Note: We cannot solely rely on the ip to make that decsision,
|
|
115
|
+
# because the registers (storing the ip) are part of the
|
|
116
|
+
# plugins that are getting toggled (=> mutual dependence).
|
|
117
|
+
self.ip_is_soot_addr = False
|
|
118
|
+
else:
|
|
119
|
+
self._arch = arch if arch is not None else project.arch.copy() if project is not None else None
|
|
120
|
+
if type(self._arch) is str:
|
|
121
|
+
self._arch = archinfo.arch_from_id(self._arch)
|
|
122
|
+
|
|
123
|
+
# the options
|
|
124
|
+
if options is None:
|
|
125
|
+
if mode is None:
|
|
126
|
+
l.warning("SimState defaulting to symbolic mode.")
|
|
127
|
+
mode = "symbolic"
|
|
128
|
+
options = o.modes[mode]
|
|
129
|
+
|
|
130
|
+
if isinstance(options, (set, list)):
|
|
131
|
+
options = SimStateOptions(options)
|
|
132
|
+
if add_options is not None:
|
|
133
|
+
options |= add_options
|
|
134
|
+
if remove_options is not None:
|
|
135
|
+
options -= remove_options
|
|
136
|
+
self.options = options
|
|
137
|
+
self.mode = mode
|
|
138
|
+
self.supports_inspect = False
|
|
139
|
+
|
|
140
|
+
# OS name
|
|
141
|
+
self.os_name = os_name
|
|
142
|
+
|
|
143
|
+
# This is used in static mode as we don't have any constraints there
|
|
144
|
+
self._satisfiable = True
|
|
145
|
+
|
|
146
|
+
self.uninitialized_access_handler = None
|
|
147
|
+
self._special_memory_filler = special_memory_filler
|
|
148
|
+
|
|
149
|
+
# this is a global condition, applied to all added constraints, memory reads, etc
|
|
150
|
+
self._global_condition = None
|
|
151
|
+
self.ip_constraints = []
|
|
152
|
+
|
|
153
|
+
# plugins. lord help us
|
|
154
|
+
if plugin_preset is not None:
|
|
155
|
+
self.use_plugin_preset(plugin_preset)
|
|
156
|
+
|
|
157
|
+
if plugins is not None:
|
|
158
|
+
for n, p in plugins.items():
|
|
159
|
+
self.register_plugin(n, p, inhibit_init=True)
|
|
160
|
+
|
|
161
|
+
if not self.has_plugin("memory"):
|
|
162
|
+
# We don't set the memory endness because, unlike registers, it's hard to understand
|
|
163
|
+
# which endness the data should be read.
|
|
164
|
+
|
|
165
|
+
# If they didn't provide us with either a memory plugin or a plugin preset to use,
|
|
166
|
+
# we have no choice but to use the 'default' plugin preset.
|
|
167
|
+
if self.plugin_preset is None:
|
|
168
|
+
self.use_plugin_preset("default")
|
|
169
|
+
|
|
170
|
+
# Determine memory backend
|
|
171
|
+
if self._is_java_project and not self._is_java_jni_project:
|
|
172
|
+
sim_memory_cls = self.plugin_preset.request_plugin("javavm_memory")
|
|
173
|
+
sim_memory = sim_memory_cls(memory_id="mem")
|
|
174
|
+
|
|
175
|
+
elif o.ABSTRACT_MEMORY in self.options:
|
|
176
|
+
# We use SimAbstractMemory in static mode.
|
|
177
|
+
# Convert memory_backer into 'global' region.
|
|
178
|
+
if cle_memory_backer is not None:
|
|
179
|
+
cle_memory_backer = {"global": cle_memory_backer}
|
|
180
|
+
if dict_memory_backer is not None:
|
|
181
|
+
dict_memory_backer = {"global": dict_memory_backer}
|
|
182
|
+
|
|
183
|
+
# TODO: support permissions backer in SimAbstractMemory
|
|
184
|
+
sim_memory_cls = self.plugin_preset.request_plugin("abs_memory")
|
|
185
|
+
sim_memory = sim_memory_cls(
|
|
186
|
+
cle_memory_backer=cle_memory_backer,
|
|
187
|
+
dict_memory_backer=dict_memory_backer,
|
|
188
|
+
memory_id="mem",
|
|
189
|
+
regioned_memory_cls=regioned_memory_cls,
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
elif o.FAST_MEMORY in self.options:
|
|
193
|
+
sim_memory_cls = self.plugin_preset.request_plugin("fast_memory")
|
|
194
|
+
sim_memory = sim_memory_cls(memory_id="mem")
|
|
195
|
+
|
|
196
|
+
else:
|
|
197
|
+
sim_memory_cls = self.plugin_preset.request_plugin("sym_memory")
|
|
198
|
+
sim_memory = sim_memory_cls(
|
|
199
|
+
cle_memory_backer=cle_memory_backer,
|
|
200
|
+
dict_memory_backer=dict_memory_backer,
|
|
201
|
+
memory_id="mem",
|
|
202
|
+
permissions_map=permissions_map,
|
|
203
|
+
default_permissions=default_permissions,
|
|
204
|
+
stack_perms=stack_perms,
|
|
205
|
+
stack_end=stack_end,
|
|
206
|
+
stack_size=stack_size,
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
# Add memory plugin
|
|
210
|
+
if not self._is_java_jni_project:
|
|
211
|
+
self.register_plugin("memory", sim_memory, inhibit_init=True)
|
|
212
|
+
|
|
213
|
+
else:
|
|
214
|
+
# In case of the JavaVM with JNI support, we add two `memory` plugins; one for modeling the
|
|
215
|
+
# native memory and another one for the JavaVM memory.
|
|
216
|
+
native_sim_memory = sim_memory
|
|
217
|
+
javavm_sim_memory_cls = self.plugin_preset.request_plugin("javavm_memory")
|
|
218
|
+
javavm_sim_memory = javavm_sim_memory_cls(memory_id="mem")
|
|
219
|
+
self.register_plugin("memory_soot", javavm_sim_memory, inhibit_init=True)
|
|
220
|
+
self.register_plugin("memory_vex", native_sim_memory, inhibit_init=True)
|
|
221
|
+
|
|
222
|
+
if not self.has_plugin("registers"):
|
|
223
|
+
# Same as for 'memory' plugin.
|
|
224
|
+
if self.plugin_preset is None:
|
|
225
|
+
self.use_plugin_preset("default")
|
|
226
|
+
|
|
227
|
+
# Get register endness
|
|
228
|
+
if self._is_java_jni_project:
|
|
229
|
+
register_endness = self._arch["vex"].register_endness
|
|
230
|
+
else:
|
|
231
|
+
register_endness = self.arch.register_endness
|
|
232
|
+
|
|
233
|
+
# Determine register backend
|
|
234
|
+
if self._is_java_project and not self._is_java_jni_project:
|
|
235
|
+
sim_registers_cls = self.plugin_preset.request_plugin("keyvalue_memory")
|
|
236
|
+
sim_registers = sim_registers_cls(memory_id="reg")
|
|
237
|
+
|
|
238
|
+
elif o.FAST_REGISTERS in self.options:
|
|
239
|
+
sim_registers_cls = self.plugin_preset.request_plugin("fast_memory")
|
|
240
|
+
sim_registers = sim_registers_cls(memory_id="reg", endness=register_endness)
|
|
241
|
+
else:
|
|
242
|
+
sim_registers_cls = self.plugin_preset.request_plugin("sym_memory")
|
|
243
|
+
sim_registers = sim_registers_cls(memory_id="reg", endness=register_endness)
|
|
244
|
+
|
|
245
|
+
# Add registers plugin
|
|
246
|
+
if not self._is_java_jni_project:
|
|
247
|
+
self.register_plugin("registers", sim_registers, inhibit_init=True)
|
|
248
|
+
|
|
249
|
+
else:
|
|
250
|
+
# Analog to memory, we add two registers plugins
|
|
251
|
+
native_sim_registers = sim_registers
|
|
252
|
+
javavm_sim_registers_cls = self.plugin_preset.request_plugin("keyvalue_memory")
|
|
253
|
+
javavm_sim_registers = javavm_sim_registers_cls(memory_id="reg")
|
|
254
|
+
self.register_plugin("registers_soot", javavm_sim_registers, inhibit_init=True)
|
|
255
|
+
self.register_plugin("registers_vex", native_sim_registers, inhibit_init=True)
|
|
256
|
+
|
|
257
|
+
for p in list(self.plugins.values()):
|
|
258
|
+
p.init_state()
|
|
259
|
+
|
|
260
|
+
def __getstate__(self):
|
|
261
|
+
# Don't pickle attributes for plugins. These will be pickled
|
|
262
|
+
# through self._active_plugins.
|
|
263
|
+
s = {k: v for k, v in self.__dict__.items() if k not in self._active_plugins.keys()}
|
|
264
|
+
s["_active_plugins"] = {k: v for k, v in s["_active_plugins"].items() if k not in ("inspect", "regs", "mem")}
|
|
265
|
+
return s
|
|
266
|
+
|
|
267
|
+
def __setstate__(self, s):
|
|
268
|
+
self.__dict__.update(s)
|
|
269
|
+
for p in self.plugins.values():
|
|
270
|
+
p.set_state(self)
|
|
271
|
+
if p.STRONGREF_STATE:
|
|
272
|
+
p.set_strongref_state(self)
|
|
273
|
+
|
|
274
|
+
def _get_weakref(self):
|
|
275
|
+
return weakref.proxy(self)
|
|
276
|
+
|
|
277
|
+
def _get_strongref(self):
|
|
278
|
+
return self
|
|
279
|
+
|
|
280
|
+
def __repr__(self):
|
|
281
|
+
try:
|
|
282
|
+
addr = self.addr
|
|
283
|
+
if type(addr) is int:
|
|
284
|
+
ip_str = "%#x" % addr
|
|
285
|
+
else:
|
|
286
|
+
ip_str = repr(addr)
|
|
287
|
+
except (SimValueError, SimSolverModeError):
|
|
288
|
+
ip_str = repr(self.regs.ip)
|
|
289
|
+
|
|
290
|
+
return "<SimState @ %s>" % ip_str
|
|
291
|
+
|
|
292
|
+
def __setattr__(self, key, value):
|
|
293
|
+
if key == "options":
|
|
294
|
+
# set options
|
|
295
|
+
# this is done to both keep compatibility and make access to .options fast.
|
|
296
|
+
self._set_options(value)
|
|
297
|
+
return
|
|
298
|
+
super().__setattr__(key, value)
|
|
299
|
+
|
|
300
|
+
def _set_options(self, v):
|
|
301
|
+
if isinstance(v, (set, list)):
|
|
302
|
+
super().__setattr__("options", SimStateOptions(v))
|
|
303
|
+
elif isinstance(v, SimStateOptions):
|
|
304
|
+
super().__setattr__("options", v)
|
|
305
|
+
else:
|
|
306
|
+
raise SimStateError("Unsupported type '%s' in SimState.options.setter()." % type(v))
|
|
307
|
+
|
|
308
|
+
#
|
|
309
|
+
# Easier access to some properties
|
|
310
|
+
#
|
|
311
|
+
|
|
312
|
+
@property
|
|
313
|
+
def plugins(self):
|
|
314
|
+
# TODO: This shouldn't be access directly.
|
|
315
|
+
return self._active_plugins
|
|
316
|
+
|
|
317
|
+
@property
|
|
318
|
+
def se(self):
|
|
319
|
+
"""
|
|
320
|
+
Deprecated alias for `solver`
|
|
321
|
+
"""
|
|
322
|
+
global _complained_se
|
|
323
|
+
if not _complained_se:
|
|
324
|
+
_complained_se = True
|
|
325
|
+
l.critical("The name state.se is deprecated; please use state.solver.")
|
|
326
|
+
return self.get_plugin("solver")
|
|
327
|
+
|
|
328
|
+
@property
|
|
329
|
+
def ip(self):
|
|
330
|
+
"""
|
|
331
|
+
Get the instruction pointer expression, trigger SimInspect breakpoints, and generate SimActions.
|
|
332
|
+
Use ``_ip`` to not trigger breakpoints or generate actions.
|
|
333
|
+
|
|
334
|
+
:return: an expression
|
|
335
|
+
"""
|
|
336
|
+
return self.regs.ip
|
|
337
|
+
|
|
338
|
+
@ip.setter
|
|
339
|
+
def ip(self, val):
|
|
340
|
+
self.regs.ip = val
|
|
341
|
+
|
|
342
|
+
@property
|
|
343
|
+
def _ip(self):
|
|
344
|
+
"""
|
|
345
|
+
Get the instruction pointer expression without triggering SimInspect breakpoints or generating SimActions.
|
|
346
|
+
|
|
347
|
+
:return: an expression
|
|
348
|
+
"""
|
|
349
|
+
try:
|
|
350
|
+
return self.regs._ip
|
|
351
|
+
except AttributeError as e:
|
|
352
|
+
raise TypeError(str(e)) from e
|
|
353
|
+
|
|
354
|
+
@_ip.setter
|
|
355
|
+
def _ip(self, val):
|
|
356
|
+
"""
|
|
357
|
+
Set the instruction pointer without triggering SimInspect breakpoints or generating SimActions.
|
|
358
|
+
|
|
359
|
+
:param val: The new instruction pointer.
|
|
360
|
+
:return: None
|
|
361
|
+
"""
|
|
362
|
+
try:
|
|
363
|
+
self.regs._ip = val
|
|
364
|
+
except AttributeError as e:
|
|
365
|
+
raise TypeError(str(e)) from e
|
|
366
|
+
|
|
367
|
+
@property
|
|
368
|
+
def addr(self):
|
|
369
|
+
"""
|
|
370
|
+
Get the concrete address of the instruction pointer, without triggering SimInspect breakpoints or generating
|
|
371
|
+
SimActions. An integer is returned, or an exception is raised if the instruction pointer is symbolic.
|
|
372
|
+
|
|
373
|
+
:return: an int
|
|
374
|
+
"""
|
|
375
|
+
|
|
376
|
+
ip = self.regs._ip
|
|
377
|
+
if isinstance(ip, SootAddressDescriptor):
|
|
378
|
+
return ip
|
|
379
|
+
return self.solver.eval_one(self.regs._ip)
|
|
380
|
+
|
|
381
|
+
@property
|
|
382
|
+
def arch(self) -> Arch:
|
|
383
|
+
if self._is_java_jni_project:
|
|
384
|
+
return self._arch["soot"] if self.ip_is_soot_addr else self._arch["vex"]
|
|
385
|
+
else:
|
|
386
|
+
return self._arch
|
|
387
|
+
|
|
388
|
+
@arch.setter
|
|
389
|
+
def arch(self, v):
|
|
390
|
+
self._arch = v
|
|
391
|
+
|
|
392
|
+
#
|
|
393
|
+
# Plugin accessors
|
|
394
|
+
#
|
|
395
|
+
|
|
396
|
+
def _inspect(self, *args, **kwargs):
|
|
397
|
+
if self.supports_inspect:
|
|
398
|
+
self.inspect.action(*args, **kwargs)
|
|
399
|
+
|
|
400
|
+
T = TypeVar("T")
|
|
401
|
+
|
|
402
|
+
def _inspect_getattr(self, attr: str, default_value: T):
|
|
403
|
+
if self.supports_inspect:
|
|
404
|
+
if hasattr(self.inspect, attr):
|
|
405
|
+
return getattr(self.inspect, attr)
|
|
406
|
+
|
|
407
|
+
return default_value
|
|
408
|
+
|
|
409
|
+
#
|
|
410
|
+
# Plugins
|
|
411
|
+
#
|
|
412
|
+
|
|
413
|
+
def get_plugin(self, name):
|
|
414
|
+
if self._is_java_jni_project:
|
|
415
|
+
# In case of the JavaVM with JNI support, a state can store the same plugin
|
|
416
|
+
# twice; one for the native and one for the java view of the state.
|
|
417
|
+
suffix = "_soot" if self.ip_is_soot_addr else "_vex"
|
|
418
|
+
name = name + suffix if self.has_plugin(name + suffix) else name
|
|
419
|
+
return super().get_plugin(name)
|
|
420
|
+
|
|
421
|
+
def has_plugin(self, name):
|
|
422
|
+
if self._is_java_jni_project:
|
|
423
|
+
# In case of the JavaVM with JNI support, also check for toggled plugins.
|
|
424
|
+
return super().has_plugin(name) or super().has_plugin(name + "_soot")
|
|
425
|
+
return super().has_plugin(name)
|
|
426
|
+
|
|
427
|
+
def register_plugin(self, name, plugin, inhibit_init=False): # pylint: disable=arguments-differ
|
|
428
|
+
# l.debug("Adding plugin %s of type %s", name, plugin.__class__.__name__)
|
|
429
|
+
self._set_plugin_state(plugin, inhibit_init=inhibit_init)
|
|
430
|
+
return super().register_plugin(name, plugin)
|
|
431
|
+
|
|
432
|
+
def _init_plugin(self, plugin_cls: type[SimStatePlugin]) -> SimStatePlugin:
|
|
433
|
+
plugin = plugin_cls()
|
|
434
|
+
self._set_plugin_state(plugin)
|
|
435
|
+
return plugin
|
|
436
|
+
|
|
437
|
+
def _set_plugin_state(self, plugin: SimStatePlugin, inhibit_init: bool = False):
|
|
438
|
+
plugin.set_state(self)
|
|
439
|
+
if plugin.STRONGREF_STATE:
|
|
440
|
+
plugin.set_strongref_state(self)
|
|
441
|
+
if not inhibit_init:
|
|
442
|
+
plugin.init_state()
|
|
443
|
+
|
|
444
|
+
#
|
|
445
|
+
# Java support
|
|
446
|
+
#
|
|
447
|
+
|
|
448
|
+
@property
|
|
449
|
+
def javavm_memory(self):
|
|
450
|
+
"""
|
|
451
|
+
In case of an JavaVM with JNI support, a state can store the memory
|
|
452
|
+
plugin twice; one for the native and one for the java view of the state.
|
|
453
|
+
|
|
454
|
+
:return: The JavaVM view of the memory plugin.
|
|
455
|
+
"""
|
|
456
|
+
if self._is_java_jni_project:
|
|
457
|
+
return self.get_plugin("memory_soot")
|
|
458
|
+
else:
|
|
459
|
+
return self.get_plugin("memory")
|
|
460
|
+
|
|
461
|
+
@property
|
|
462
|
+
def javavm_registers(self):
|
|
463
|
+
"""
|
|
464
|
+
In case of an JavaVM with JNI support, a state can store the registers
|
|
465
|
+
plugin twice; one for the native and one for the java view of the state.
|
|
466
|
+
|
|
467
|
+
:return: The JavaVM view of the registers plugin.
|
|
468
|
+
"""
|
|
469
|
+
if self._is_java_jni_project:
|
|
470
|
+
return self.get_plugin("registers_soot")
|
|
471
|
+
else:
|
|
472
|
+
return self.get_plugin("registers")
|
|
473
|
+
|
|
474
|
+
#
|
|
475
|
+
# Constraint pass-throughs
|
|
476
|
+
#
|
|
477
|
+
|
|
478
|
+
def simplify(self, *args):
|
|
479
|
+
"""
|
|
480
|
+
Simplify this state's constraints.
|
|
481
|
+
"""
|
|
482
|
+
return self.solver.simplify(*args)
|
|
483
|
+
|
|
484
|
+
def add_constraints(self, *args, **kwargs):
|
|
485
|
+
"""
|
|
486
|
+
Add some constraints to the state.
|
|
487
|
+
|
|
488
|
+
You may pass in any number of symbolic booleans as variadic positional arguments.
|
|
489
|
+
"""
|
|
490
|
+
if len(args) > 0 and isinstance(args[0], (list, tuple)):
|
|
491
|
+
raise Exception("Tuple or list passed to add_constraints!")
|
|
492
|
+
|
|
493
|
+
if o.TRACK_CONSTRAINTS in self.options and len(args) > 0:
|
|
494
|
+
if o.SIMPLIFY_CONSTRAINTS in self.options:
|
|
495
|
+
constraints = [self.simplify(a) for a in args]
|
|
496
|
+
else:
|
|
497
|
+
constraints = args
|
|
498
|
+
|
|
499
|
+
self._inspect("constraints", BP_BEFORE, added_constraints=constraints)
|
|
500
|
+
constraints = self._inspect_getattr("added_constraints", constraints)
|
|
501
|
+
added = self.solver.add(*constraints)
|
|
502
|
+
self._inspect("constraints", BP_AFTER)
|
|
503
|
+
|
|
504
|
+
# add actions for the added constraints
|
|
505
|
+
if o.TRACK_CONSTRAINT_ACTIONS in self.options:
|
|
506
|
+
for c in added:
|
|
507
|
+
sac = SimActionConstraint(self, c)
|
|
508
|
+
self.history.add_action(sac)
|
|
509
|
+
else:
|
|
510
|
+
# preserve the old action logic for when we don't track constraints (why?)
|
|
511
|
+
if "action" in kwargs and kwargs["action"] and o.TRACK_CONSTRAINT_ACTIONS in self.options and len(args) > 0:
|
|
512
|
+
for arg in args:
|
|
513
|
+
if self.solver.symbolic(arg):
|
|
514
|
+
sac = SimActionConstraint(self, arg)
|
|
515
|
+
self.history.add_action(sac)
|
|
516
|
+
|
|
517
|
+
if o.ABSTRACT_SOLVER in self.options and len(args) > 0:
|
|
518
|
+
for arg in args:
|
|
519
|
+
if self.solver.is_false(arg):
|
|
520
|
+
self._satisfiable = False
|
|
521
|
+
return
|
|
522
|
+
|
|
523
|
+
if self.solver.is_true(arg):
|
|
524
|
+
continue
|
|
525
|
+
|
|
526
|
+
# `is_true` and `is_false` does not use VSABackend currently (see commits 97a75366 and 2dfba73e in
|
|
527
|
+
# claripy). There is a chance that VSA backend can in fact handle it.
|
|
528
|
+
# Therefore we try to resolve it with VSABackend again
|
|
529
|
+
if claripy.backends.vsa.is_false(arg):
|
|
530
|
+
self._satisfiable = False
|
|
531
|
+
return
|
|
532
|
+
|
|
533
|
+
if claripy.backends.vsa.is_true(arg):
|
|
534
|
+
continue
|
|
535
|
+
|
|
536
|
+
# It's neither True or False. Let's try to apply the condition
|
|
537
|
+
|
|
538
|
+
# We take the argument, extract a list of constrained SIs out of it (if we could, of course), and
|
|
539
|
+
# then replace each original SI the intersection of original SI and the constrained one.
|
|
540
|
+
|
|
541
|
+
_, converted = self.solver.constraint_to_si(arg)
|
|
542
|
+
|
|
543
|
+
for original_expr, constrained_si in converted:
|
|
544
|
+
if not original_expr.variables:
|
|
545
|
+
l.error(
|
|
546
|
+
"Incorrect original_expression to replace in add_constraints(). "
|
|
547
|
+
"This is due to defects in VSA logics inside claripy. Please report "
|
|
548
|
+
"to Fish and he will fix it if he's free."
|
|
549
|
+
)
|
|
550
|
+
continue
|
|
551
|
+
|
|
552
|
+
new_expr = constrained_si
|
|
553
|
+
self.registers.replace_all(original_expr, new_expr)
|
|
554
|
+
self.memory.replace_all(original_expr, new_expr)
|
|
555
|
+
# tmps
|
|
556
|
+
temps = self.scratch.temps
|
|
557
|
+
for idx in range(len(temps)): # pylint:disable=consider-using-enumerate
|
|
558
|
+
t = temps[idx]
|
|
559
|
+
if t is None:
|
|
560
|
+
continue
|
|
561
|
+
if t.variables.intersection(original_expr.variables):
|
|
562
|
+
# replace
|
|
563
|
+
temps[idx] = t.replace(original_expr, new_expr)
|
|
564
|
+
|
|
565
|
+
l.debug("SimState.add_constraints: Applied to final state.")
|
|
566
|
+
elif o.SYMBOLIC not in self.options and len(args) > 0:
|
|
567
|
+
for arg in args:
|
|
568
|
+
if self.solver.is_false(arg):
|
|
569
|
+
self._satisfiable = False
|
|
570
|
+
return
|
|
571
|
+
|
|
572
|
+
def satisfiable(self, **kwargs):
|
|
573
|
+
"""
|
|
574
|
+
Whether the state's constraints are satisfiable
|
|
575
|
+
"""
|
|
576
|
+
if o.ABSTRACT_SOLVER in self.options or o.SYMBOLIC not in self.options:
|
|
577
|
+
extra_constraints = kwargs.pop("extra_constraints", ())
|
|
578
|
+
for e in extra_constraints:
|
|
579
|
+
if self.solver.is_false(e):
|
|
580
|
+
return False
|
|
581
|
+
|
|
582
|
+
return self._satisfiable
|
|
583
|
+
else:
|
|
584
|
+
return self.solver.satisfiable(**kwargs)
|
|
585
|
+
|
|
586
|
+
def downsize(self):
|
|
587
|
+
"""
|
|
588
|
+
Clean up after the solver engine. Calling this when a state no longer needs to be solved on will reduce memory
|
|
589
|
+
usage.
|
|
590
|
+
"""
|
|
591
|
+
if "solver" in self.plugins:
|
|
592
|
+
self.solver.downsize()
|
|
593
|
+
|
|
594
|
+
#
|
|
595
|
+
# State branching operations
|
|
596
|
+
#
|
|
597
|
+
|
|
598
|
+
def step(self, **kwargs):
|
|
599
|
+
"""
|
|
600
|
+
Perform a step of symbolic execution using this state.
|
|
601
|
+
Any arguments to `AngrObjectFactory.successors` can be passed to this.
|
|
602
|
+
|
|
603
|
+
:return: A SimSuccessors object categorizing the results of the step.
|
|
604
|
+
"""
|
|
605
|
+
return self.project.factory.successors(self, **kwargs)
|
|
606
|
+
|
|
607
|
+
def block(self, *args, **kwargs):
|
|
608
|
+
"""
|
|
609
|
+
Represent the basic block at this state's instruction pointer.
|
|
610
|
+
Any arguments to `AngrObjectFactory.block` can ba passed to this.
|
|
611
|
+
|
|
612
|
+
:return: A Block object describing the basic block of code at this point.
|
|
613
|
+
"""
|
|
614
|
+
if not args and "addr" not in kwargs:
|
|
615
|
+
kwargs["addr"] = self.addr
|
|
616
|
+
return self.project.factory.block(*args, backup_state=self, **kwargs)
|
|
617
|
+
|
|
618
|
+
# Returns a dict that is a copy of all the state's plugins
|
|
619
|
+
def _copy_plugins(self):
|
|
620
|
+
memo = {}
|
|
621
|
+
out = {}
|
|
622
|
+
for n, p in self._active_plugins.items():
|
|
623
|
+
if id(p) in memo:
|
|
624
|
+
out[n] = memo[id(p)]
|
|
625
|
+
else:
|
|
626
|
+
out[n] = p.copy(memo)
|
|
627
|
+
memo[id(p)] = out[n]
|
|
628
|
+
|
|
629
|
+
return out
|
|
630
|
+
|
|
631
|
+
def copy(self):
|
|
632
|
+
"""
|
|
633
|
+
Returns a copy of the state.
|
|
634
|
+
"""
|
|
635
|
+
|
|
636
|
+
if self._global_condition is not None:
|
|
637
|
+
raise SimStateError("global condition was not cleared before state.copy().")
|
|
638
|
+
|
|
639
|
+
c_plugins = self._copy_plugins()
|
|
640
|
+
state = SimState(
|
|
641
|
+
project=self.project,
|
|
642
|
+
arch=self.arch,
|
|
643
|
+
plugins=c_plugins,
|
|
644
|
+
options=self.options.copy(),
|
|
645
|
+
mode=self.mode,
|
|
646
|
+
os_name=self.os_name,
|
|
647
|
+
)
|
|
648
|
+
|
|
649
|
+
if self._is_java_jni_project:
|
|
650
|
+
state.ip_is_soot_addr = self.ip_is_soot_addr
|
|
651
|
+
|
|
652
|
+
state.uninitialized_access_handler = self.uninitialized_access_handler
|
|
653
|
+
state._special_memory_filler = self._special_memory_filler
|
|
654
|
+
state.ip_constraints = self.ip_constraints
|
|
655
|
+
|
|
656
|
+
return state
|
|
657
|
+
|
|
658
|
+
def merge(self, *others, **kwargs):
|
|
659
|
+
"""
|
|
660
|
+
Merges this state with the other states. Returns the merging result, merged state, and the merge flag.
|
|
661
|
+
|
|
662
|
+
:param states: the states to merge
|
|
663
|
+
:param merge_conditions: a tuple of the conditions under which each state holds
|
|
664
|
+
:param common_ancestor: a state that represents the common history between the states being merged. Usually it
|
|
665
|
+
is only available when EFFICIENT_STATE_MERGING is enabled, otherwise weak-refed states
|
|
666
|
+
might be dropped from state history instances.
|
|
667
|
+
:param plugin_whitelist: a list of plugin names that will be merged. If this option is given and is not None,
|
|
668
|
+
any plugin that is not inside this list will not be merged, and will be created as a
|
|
669
|
+
fresh instance in the new state.
|
|
670
|
+
:param common_ancestor_history:
|
|
671
|
+
a SimStateHistory instance that represents the common history between the states being
|
|
672
|
+
merged. This is to allow optimal state merging when EFFICIENT_STATE_MERGING is
|
|
673
|
+
disabled.
|
|
674
|
+
:return: (merged state, merge flag, a bool indicating if any merging occurred)
|
|
675
|
+
"""
|
|
676
|
+
|
|
677
|
+
merge_conditions = kwargs.pop("merge_conditions", None)
|
|
678
|
+
common_ancestor = kwargs.pop("common_ancestor", None)
|
|
679
|
+
plugin_whitelist = kwargs.pop("plugin_whitelist", None)
|
|
680
|
+
common_ancestor_history = kwargs.pop("common_ancestor_history", None)
|
|
681
|
+
|
|
682
|
+
if len(kwargs) != 0:
|
|
683
|
+
raise ValueError("invalid arguments: %s" % kwargs.keys())
|
|
684
|
+
|
|
685
|
+
if merge_conditions is None:
|
|
686
|
+
# TODO: maybe make the length of this smaller? Maybe: math.ceil(math.log(len(others)+1, 2))
|
|
687
|
+
merge_flag = self.solver.BVS("state_merge_%d" % next(merge_counter), 16)
|
|
688
|
+
merge_values = range(len(others) + 1)
|
|
689
|
+
merge_conditions = [merge_flag == b for b in merge_values]
|
|
690
|
+
else:
|
|
691
|
+
merge_conditions = [(self.solver.true if len(mc) == 0 else self.solver.And(*mc)) for mc in merge_conditions]
|
|
692
|
+
|
|
693
|
+
if len({o.arch.name for o in others}) != 1:
|
|
694
|
+
raise SimMergeError("Unable to merge due to different architectures.")
|
|
695
|
+
|
|
696
|
+
all_plugins = set(self.plugins.keys()) | set.union(*(set(o.plugins.keys()) for o in others))
|
|
697
|
+
|
|
698
|
+
if plugin_whitelist is not None:
|
|
699
|
+
all_plugins = all_plugins.intersection(set(plugin_whitelist))
|
|
700
|
+
|
|
701
|
+
merged = self.copy()
|
|
702
|
+
merging_occurred = False
|
|
703
|
+
|
|
704
|
+
# fix parent
|
|
705
|
+
merged.history.parent = self.history
|
|
706
|
+
|
|
707
|
+
# plugins
|
|
708
|
+
for p in all_plugins:
|
|
709
|
+
our_plugin = merged.plugins[p] if p in merged.plugins else None
|
|
710
|
+
their_plugins = [(pl.plugins[p] if p in pl.plugins else None) for pl in others]
|
|
711
|
+
|
|
712
|
+
plugin_classes = ({our_plugin.__class__} | {pl.__class__ for pl in their_plugins}) - {None.__class__}
|
|
713
|
+
if len(plugin_classes) != 1:
|
|
714
|
+
raise SimMergeError(f"There are differing plugin classes ({plugin_classes}) for plugin {p}")
|
|
715
|
+
plugin_class = plugin_classes.pop()
|
|
716
|
+
|
|
717
|
+
our_filled_plugin = our_plugin if our_plugin is not None else merged.register_plugin(p, plugin_class())
|
|
718
|
+
their_filled_plugins = [
|
|
719
|
+
(tp if tp is not None else t.register_plugin(p, plugin_class())) for t, tp in zip(others, their_plugins)
|
|
720
|
+
]
|
|
721
|
+
|
|
722
|
+
plugin_common_ancestor = (
|
|
723
|
+
common_ancestor.plugins[p] if (common_ancestor is not None and p in common_ancestor.plugins) else None
|
|
724
|
+
)
|
|
725
|
+
if (
|
|
726
|
+
plugin_common_ancestor is None
|
|
727
|
+
and plugin_class is SimStateHistory
|
|
728
|
+
and common_ancestor_history is not None
|
|
729
|
+
):
|
|
730
|
+
plugin_common_ancestor = common_ancestor_history
|
|
731
|
+
|
|
732
|
+
plugin_state_merged = our_filled_plugin.merge(
|
|
733
|
+
their_filled_plugins,
|
|
734
|
+
merge_conditions,
|
|
735
|
+
common_ancestor=plugin_common_ancestor,
|
|
736
|
+
)
|
|
737
|
+
if plugin_state_merged:
|
|
738
|
+
l.debug("Merging occurred in %s", p)
|
|
739
|
+
merging_occurred = True
|
|
740
|
+
|
|
741
|
+
merged.add_constraints(merged.solver.Or(*merge_conditions))
|
|
742
|
+
return merged, merge_conditions, merging_occurred
|
|
743
|
+
|
|
744
|
+
def widen(self, *others):
|
|
745
|
+
"""
|
|
746
|
+
Perform a widening between self and other states
|
|
747
|
+
:param others:
|
|
748
|
+
:return:
|
|
749
|
+
"""
|
|
750
|
+
|
|
751
|
+
if len({frozenset(o.plugins.keys()) for o in others}) != 1:
|
|
752
|
+
raise SimMergeError("Unable to widen due to different sets of plugins.")
|
|
753
|
+
if len({o.arch.name for o in others}) != 1:
|
|
754
|
+
raise SimMergeError("Unable to widen due to different architectures.")
|
|
755
|
+
|
|
756
|
+
widened = self.copy()
|
|
757
|
+
widening_occurred = False
|
|
758
|
+
|
|
759
|
+
# plugins
|
|
760
|
+
for p in self.plugins:
|
|
761
|
+
if p in ("solver", "unicorn"):
|
|
762
|
+
continue
|
|
763
|
+
plugin_state_widened = widened.plugins[p].widen([_.plugins[p] for _ in others])
|
|
764
|
+
if plugin_state_widened:
|
|
765
|
+
l.debug("Widening occurred in %s", p)
|
|
766
|
+
widening_occurred = True
|
|
767
|
+
|
|
768
|
+
return widened, widening_occurred
|
|
769
|
+
|
|
770
|
+
#############################################
|
|
771
|
+
### Accessors for tmps, registers, memory ###
|
|
772
|
+
#############################################
|
|
773
|
+
|
|
774
|
+
def reg_concrete(self, *args, **kwargs):
|
|
775
|
+
"""
|
|
776
|
+
Returns the contents of a register but, if that register is symbolic,
|
|
777
|
+
raises a SimValueError.
|
|
778
|
+
"""
|
|
779
|
+
e = self.registers.load(*args, **kwargs)
|
|
780
|
+
if self.solver.symbolic(e):
|
|
781
|
+
raise SimValueError("target of reg_concrete is symbolic!")
|
|
782
|
+
return self.solver.eval(e)
|
|
783
|
+
|
|
784
|
+
def mem_concrete(self, *args, **kwargs):
|
|
785
|
+
"""
|
|
786
|
+
Returns the contents of a memory but, if the contents are symbolic,
|
|
787
|
+
raises a SimValueError.
|
|
788
|
+
"""
|
|
789
|
+
e = self.memory.load(*args, **kwargs)
|
|
790
|
+
if self.solver.symbolic(e):
|
|
791
|
+
raise SimValueError("target of mem_concrete is symbolic!")
|
|
792
|
+
return self.solver.eval(e)
|
|
793
|
+
|
|
794
|
+
###############################
|
|
795
|
+
### Stack operation helpers ###
|
|
796
|
+
###############################
|
|
797
|
+
|
|
798
|
+
@arch_overrideable
|
|
799
|
+
def stack_push(self, thing):
|
|
800
|
+
"""
|
|
801
|
+
Push 'thing' to the stack, writing the thing to memory and adjusting the stack pointer.
|
|
802
|
+
"""
|
|
803
|
+
# increment sp
|
|
804
|
+
sp = self.regs.sp + self.arch.stack_change
|
|
805
|
+
self.regs.sp = sp
|
|
806
|
+
return self.memory.store(sp, thing, endness=self.arch.memory_endness, size=self.arch.bytes)
|
|
807
|
+
|
|
808
|
+
@arch_overrideable
|
|
809
|
+
def stack_pop(self):
|
|
810
|
+
"""
|
|
811
|
+
Pops from the stack and returns the popped thing. The length will be the architecture word size.
|
|
812
|
+
"""
|
|
813
|
+
sp = self.regs.sp
|
|
814
|
+
self.regs.sp = sp - self.arch.stack_change
|
|
815
|
+
return self.memory.load(sp, self.arch.bytes, endness=self.arch.memory_endness)
|
|
816
|
+
|
|
817
|
+
@arch_overrideable
|
|
818
|
+
def stack_read(self, offset, length, bp=False):
|
|
819
|
+
"""
|
|
820
|
+
Reads length bytes, at an offset into the stack.
|
|
821
|
+
|
|
822
|
+
:param offset: The offset from the stack pointer.
|
|
823
|
+
:param length: The number of bytes to read.
|
|
824
|
+
:param bp: If True, offset from the BP instead of the SP. Default: False.
|
|
825
|
+
"""
|
|
826
|
+
sp = self.regs.bp if bp else self.regs.sp
|
|
827
|
+
return self.memory.load(sp + offset, length, endness=self.arch.memory_endness)
|
|
828
|
+
|
|
829
|
+
###############################
|
|
830
|
+
### Other helpful functions ###
|
|
831
|
+
###############################
|
|
832
|
+
|
|
833
|
+
def make_concrete_int(self, expr):
|
|
834
|
+
if isinstance(expr, int):
|
|
835
|
+
return expr
|
|
836
|
+
|
|
837
|
+
if not self.solver.symbolic(expr):
|
|
838
|
+
return self.solver.eval(expr)
|
|
839
|
+
|
|
840
|
+
v = self.solver.eval(expr)
|
|
841
|
+
self.add_constraints(expr == v)
|
|
842
|
+
return v
|
|
843
|
+
|
|
844
|
+
# This handles the preparation of concrete function launches from abstract functions.
|
|
845
|
+
@arch_overrideable
|
|
846
|
+
def prepare_callsite(self, retval, args, cc="wtf"):
|
|
847
|
+
# TODO
|
|
848
|
+
pass
|
|
849
|
+
|
|
850
|
+
def _stack_values_to_string(self, stack_values):
|
|
851
|
+
"""
|
|
852
|
+
Convert each stack value to a string
|
|
853
|
+
|
|
854
|
+
:param stack_values: A list of values
|
|
855
|
+
:return: The converted string
|
|
856
|
+
"""
|
|
857
|
+
|
|
858
|
+
strings = []
|
|
859
|
+
for stack_value in stack_values:
|
|
860
|
+
if self.solver.symbolic(stack_value):
|
|
861
|
+
concretized_value = "SYMBOLIC - %s" % repr(stack_value)
|
|
862
|
+
else:
|
|
863
|
+
if len(self.solver.eval_upto(stack_value, 2)) == 2:
|
|
864
|
+
concretized_value = repr(stack_value)
|
|
865
|
+
else:
|
|
866
|
+
concretized_value = repr(stack_value)
|
|
867
|
+
strings.append(concretized_value)
|
|
868
|
+
|
|
869
|
+
return " .. ".join(strings)
|
|
870
|
+
|
|
871
|
+
def dbg_print_stack(self, depth=None, sp=None):
|
|
872
|
+
"""
|
|
873
|
+
Only used for debugging purposes.
|
|
874
|
+
Return the current stack info in formatted string. If depth is None, the
|
|
875
|
+
current stack frame (from sp to bp) will be printed out.
|
|
876
|
+
"""
|
|
877
|
+
|
|
878
|
+
var_size = self.arch.bytes
|
|
879
|
+
sp_sim = self.regs._sp
|
|
880
|
+
bp_sim = self.regs._bp
|
|
881
|
+
if self.solver.symbolic(sp_sim) and sp is None:
|
|
882
|
+
result = "SP is SYMBOLIC"
|
|
883
|
+
elif self.solver.symbolic(bp_sim) and depth is None:
|
|
884
|
+
result = "BP is SYMBOLIC"
|
|
885
|
+
else:
|
|
886
|
+
sp_value = sp if sp is not None else self.solver.eval(sp_sim)
|
|
887
|
+
if self.solver.symbolic(bp_sim):
|
|
888
|
+
result = "SP = 0x%08x, BP is symbolic\n" % (sp_value)
|
|
889
|
+
bp_value = None
|
|
890
|
+
else:
|
|
891
|
+
bp_value = self.solver.eval(bp_sim)
|
|
892
|
+
result = f"SP = 0x{sp_value:08x}, BP = 0x{bp_value:08x}\n"
|
|
893
|
+
if depth is None:
|
|
894
|
+
# bp_value cannot be None here
|
|
895
|
+
depth = (bp_value - sp_value) // var_size + 1 # Print one more value
|
|
896
|
+
pointer_value = sp_value
|
|
897
|
+
for i in range(depth):
|
|
898
|
+
# For AbstractMemory, we wanna utilize more information from VSA
|
|
899
|
+
stack_values = []
|
|
900
|
+
|
|
901
|
+
if o.ABSTRACT_MEMORY in self.options:
|
|
902
|
+
sp = self.regs._sp
|
|
903
|
+
segment_sizes = self.memory.get_segments(sp + i * var_size, var_size)
|
|
904
|
+
|
|
905
|
+
pos = i * var_size
|
|
906
|
+
for segment_size in segment_sizes:
|
|
907
|
+
stack_values.append(self.stack_read(pos, segment_size, bp=False))
|
|
908
|
+
pos += segment_size
|
|
909
|
+
else:
|
|
910
|
+
stack_values.append(self.stack_read(i * var_size, var_size, bp=False))
|
|
911
|
+
|
|
912
|
+
# Convert it into a big string!
|
|
913
|
+
val = self._stack_values_to_string(stack_values)
|
|
914
|
+
|
|
915
|
+
if pointer_value == sp_value:
|
|
916
|
+
line = f"(sp){pointer_value: 16x} | {val}"
|
|
917
|
+
elif pointer_value == bp_value:
|
|
918
|
+
line = f"(bp){pointer_value: 16x} | {val}"
|
|
919
|
+
else:
|
|
920
|
+
line = f"{pointer_value: 20x} | {val}"
|
|
921
|
+
|
|
922
|
+
pointer_value += var_size
|
|
923
|
+
result += line + "\n"
|
|
924
|
+
return result
|
|
925
|
+
|
|
926
|
+
#
|
|
927
|
+
# Other helper methods
|
|
928
|
+
#
|
|
929
|
+
|
|
930
|
+
def set_mode(self, mode):
|
|
931
|
+
self.mode = mode
|
|
932
|
+
self.options = SimStateOptions(o.modes[mode])
|
|
933
|
+
|
|
934
|
+
@property
|
|
935
|
+
def thumb(self):
|
|
936
|
+
if not self.arch.name.startswith("ARM"):
|
|
937
|
+
return False
|
|
938
|
+
|
|
939
|
+
if self.regs.ip.symbolic:
|
|
940
|
+
# return True when IP can *only* be odd
|
|
941
|
+
new_state = self.copy()
|
|
942
|
+
new_state.add_constraints(new_state.regs.ip % 2 == 1, new_state.regs.ip % 2 != 0)
|
|
943
|
+
return new_state.satisfiable()
|
|
944
|
+
|
|
945
|
+
else:
|
|
946
|
+
concrete_ip = self.solver.eval(self.regs.ip)
|
|
947
|
+
return concrete_ip % 2 == 1
|
|
948
|
+
|
|
949
|
+
#
|
|
950
|
+
# Some pretty fancy global condition stuff!
|
|
951
|
+
#
|
|
952
|
+
|
|
953
|
+
@property
|
|
954
|
+
def with_condition(self):
|
|
955
|
+
@contextlib.contextmanager
|
|
956
|
+
def ctx(c):
|
|
957
|
+
old_condition = self._global_condition
|
|
958
|
+
try:
|
|
959
|
+
new_condition = c if old_condition is None else self.solver.And(old_condition, c)
|
|
960
|
+
self._global_condition = new_condition
|
|
961
|
+
yield
|
|
962
|
+
finally:
|
|
963
|
+
self._global_condition = old_condition
|
|
964
|
+
|
|
965
|
+
return ctx
|
|
966
|
+
|
|
967
|
+
def _adjust_condition(self, c):
|
|
968
|
+
if self._global_condition is None:
|
|
969
|
+
return c
|
|
970
|
+
elif c is None:
|
|
971
|
+
return self._global_condition
|
|
972
|
+
else:
|
|
973
|
+
return self.solver.And(self._global_condition, c)
|
|
974
|
+
|
|
975
|
+
def _adjust_condition_list(self, conditions):
|
|
976
|
+
if self._global_condition is None:
|
|
977
|
+
return conditions
|
|
978
|
+
elif len(conditions) == 0:
|
|
979
|
+
return conditions.__class__((self._global_condition,))
|
|
980
|
+
else:
|
|
981
|
+
return conditions.__class__((self._adjust_condition(self.solver.And(*conditions)),))
|
|
982
|
+
|
|
983
|
+
|
|
984
|
+
default_state_plugin_preset = PluginPreset()
|
|
985
|
+
SimState.register_preset("default", default_state_plugin_preset)
|
|
986
|
+
|
|
987
|
+
from .state_plugins.history import SimStateHistory
|
|
988
|
+
from .state_plugins.inspect import BP_AFTER, BP_BEFORE
|
|
989
|
+
from .state_plugins.sim_action import SimActionConstraint
|
|
990
|
+
|
|
991
|
+
from . import sim_options as o
|
|
992
|
+
from .errors import SimMergeError, SimValueError, SimStateError, SimSolverModeError
|
|
993
|
+
|
|
994
|
+
# Type imports for annotations
|
|
995
|
+
if TYPE_CHECKING:
|
|
996
|
+
from .storage import DefaultMemory
|
|
997
|
+
from .state_plugins.solver import SimSolver
|
|
998
|
+
from .state_plugins.posix import SimSystemPosix
|
|
999
|
+
from .state_plugins.view import SimRegNameView, SimMemView
|
|
1000
|
+
from .state_plugins.callstack import CallStack
|
|
1001
|
+
from .state_plugins.inspect import SimInspector
|
|
1002
|
+
from .state_plugins.jni_references import SimStateJNIReferences
|
|
1003
|
+
from .state_plugins.scratch import SimStateScratch
|