angr 9.2.118__py3-none-manylinux2014_aarch64.whl → 9.2.120__py3-none-manylinux2014_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of angr might be problematic. Click here for more details.
- angr/__init__.py +217 -2
- angr/__main__.py +14 -4
- angr/analyses/__init__.py +54 -0
- angr/analyses/analysis.py +47 -5
- angr/analyses/backward_slice.py +4 -4
- angr/analyses/bindiff.py +2 -2
- angr/analyses/callee_cleanup_finder.py +1 -1
- angr/analyses/calling_convention.py +21 -15
- angr/analyses/cdg.py +1 -1
- angr/analyses/cfg/__init__.py +12 -1
- angr/analyses/cfg/cfb.py +2 -2
- angr/analyses/cfg/cfg.py +1 -1
- angr/analyses/cfg/cfg_base.py +28 -11
- angr/analyses/cfg/cfg_emulated.py +18 -18
- angr/analyses/cfg/cfg_fast.py +136 -24
- angr/analyses/cfg/cfg_fast_soot.py +5 -5
- angr/analyses/cfg/cfg_job_base.py +3 -3
- angr/analyses/cfg/indirect_jump_resolvers/__init__.py +13 -0
- angr/analyses/cfg/indirect_jump_resolvers/amd64_pe_iat.py +1 -1
- angr/analyses/cfg/indirect_jump_resolvers/arm_elf_fast.py +2 -2
- angr/analyses/cfg/indirect_jump_resolvers/const_resolver.py +4 -4
- angr/analyses/cfg/indirect_jump_resolvers/jumptable.py +21 -18
- angr/analyses/cfg/indirect_jump_resolvers/mips_elf_fast.py +5 -5
- angr/analyses/cfg/indirect_jump_resolvers/resolver.py +2 -2
- angr/analyses/cfg/indirect_jump_resolvers/x86_pe_iat.py +1 -1
- angr/analyses/cfg_slice_to_sink/__init__.py +8 -0
- angr/analyses/class_identifier.py +2 -2
- angr/analyses/code_tagging.py +2 -2
- angr/analyses/complete_calling_conventions.py +3 -3
- angr/analyses/congruency_check.py +1 -2
- angr/analyses/data_dep/__init__.py +13 -0
- angr/analyses/data_dep/data_dependency_analysis.py +5 -5
- angr/analyses/datagraph_meta.py +1 -1
- angr/analyses/ddg.py +3 -3
- angr/analyses/decompiler/__init__.py +25 -0
- angr/analyses/decompiler/ail_simplifier.py +9 -9
- angr/analyses/decompiler/block_simplifier.py +3 -3
- angr/analyses/decompiler/callsite_maker.py +5 -3
- angr/analyses/decompiler/clinic.py +46 -36
- angr/analyses/decompiler/condition_processor.py +48 -21
- angr/analyses/decompiler/counters/__init__.py +11 -0
- angr/analyses/decompiler/decompiler.py +27 -10
- angr/analyses/decompiler/dephication/seqnode_dephication.py +19 -1
- angr/analyses/decompiler/jumptable_entry_condition_rewriter.py +1 -1
- angr/analyses/decompiler/optimization_passes/__init__.py +66 -54
- angr/analyses/decompiler/optimization_passes/const_derefs.py +1 -1
- angr/analyses/decompiler/optimization_passes/const_prop_reverter.py +3 -3
- angr/analyses/decompiler/optimization_passes/cross_jump_reverter.py +1 -1
- angr/analyses/decompiler/optimization_passes/duplication_reverter/__init__.py +3 -0
- angr/analyses/decompiler/optimization_passes/duplication_reverter/ail_merge_graph.py +7 -4
- angr/analyses/decompiler/optimization_passes/duplication_reverter/duplication_reverter.py +13 -9
- angr/analyses/decompiler/optimization_passes/duplication_reverter/similarity.py +1 -1
- angr/analyses/decompiler/optimization_passes/duplication_reverter/utils.py +1 -1
- angr/analyses/decompiler/optimization_passes/engine_base.py +2 -2
- angr/analyses/decompiler/optimization_passes/expr_op_swapper.py +2 -2
- angr/analyses/decompiler/optimization_passes/flip_boolean_cmp.py +4 -4
- angr/analyses/decompiler/optimization_passes/inlined_string_transformation_simplifier.py +19 -19
- angr/analyses/decompiler/optimization_passes/ite_expr_converter.py +6 -6
- angr/analyses/decompiler/optimization_passes/ite_region_converter.py +2 -2
- angr/analyses/decompiler/optimization_passes/lowered_switch_simplifier.py +7 -3
- angr/analyses/decompiler/optimization_passes/optimization_pass.py +34 -28
- angr/analyses/decompiler/optimization_passes/register_save_area_simplifier.py +2 -2
- angr/analyses/decompiler/optimization_passes/ret_addr_save_simplifier.py +1 -1
- angr/analyses/decompiler/optimization_passes/ret_deduplicator.py +3 -3
- angr/analyses/decompiler/optimization_passes/return_duplicator_base.py +5 -5
- angr/analyses/decompiler/optimization_passes/return_duplicator_high.py +1 -1
- angr/analyses/decompiler/peephole_optimizations/__init__.py +61 -19
- angr/analyses/decompiler/peephole_optimizations/simplify_pc_relative_loads.py +1 -1
- angr/analyses/decompiler/presets/__init__.py +20 -0
- angr/analyses/decompiler/presets/basic.py +30 -0
- angr/analyses/decompiler/presets/fast.py +54 -0
- angr/analyses/decompiler/presets/full.py +64 -0
- angr/analyses/decompiler/presets/preset.py +37 -0
- angr/analyses/decompiler/region_identifier.py +21 -7
- angr/analyses/decompiler/region_simplifiers/__init__.py +3 -0
- angr/analyses/decompiler/region_simplifiers/cascading_cond_transformer.py +3 -3
- angr/analyses/decompiler/region_simplifiers/cascading_ifs.py +3 -3
- angr/analyses/decompiler/region_simplifiers/expr_folding.py +2 -2
- angr/analyses/decompiler/region_simplifiers/goto.py +3 -3
- angr/analyses/decompiler/region_simplifiers/if_.py +2 -2
- angr/analyses/decompiler/region_simplifiers/ifelse.py +4 -4
- angr/analyses/decompiler/region_simplifiers/loop.py +4 -4
- angr/analyses/decompiler/region_simplifiers/node_address_finder.py +1 -1
- angr/analyses/decompiler/region_simplifiers/region_simplifier.py +6 -6
- angr/analyses/decompiler/region_simplifiers/switch_cluster_simplifier.py +12 -5
- angr/analyses/decompiler/region_simplifiers/switch_expr_simplifier.py +3 -3
- angr/analyses/decompiler/sequence_walker.py +11 -12
- angr/analyses/decompiler/structured_codegen/__init__.py +14 -0
- angr/analyses/decompiler/structured_codegen/base.py +1 -1
- angr/analyses/decompiler/structured_codegen/c.py +22 -15
- angr/analyses/decompiler/structured_codegen/dwarf_import.py +2 -2
- angr/analyses/decompiler/structuring/__init__.py +11 -1
- angr/analyses/decompiler/structuring/dream.py +16 -15
- angr/analyses/decompiler/structuring/phoenix.py +9 -9
- angr/analyses/decompiler/structuring/recursive_structurer.py +7 -7
- angr/analyses/decompiler/structuring/sailr.py +2 -2
- angr/analyses/decompiler/structuring/structurer_base.py +9 -4
- angr/analyses/decompiler/structuring/structurer_nodes.py +18 -9
- angr/analyses/decompiler/utils.py +4 -2
- angr/analyses/disassembly.py +6 -6
- angr/analyses/disassembly_utils.py +1 -1
- angr/analyses/dominance_frontier.py +1 -1
- angr/analyses/find_objects_static.py +5 -5
- angr/analyses/flirt.py +3 -3
- angr/analyses/forward_analysis/__init__.py +9 -0
- angr/analyses/forward_analysis/forward_analysis.py +4 -4
- angr/analyses/forward_analysis/job_info.py +1 -1
- angr/analyses/forward_analysis/visitors/__init__.py +9 -0
- angr/analyses/forward_analysis/visitors/graph.py +2 -2
- angr/analyses/identifier/__init__.py +3 -0
- angr/analyses/identifier/custom_callable.py +2 -3
- angr/analyses/identifier/errors.py +1 -1
- angr/analyses/identifier/functions/__init__.py +4 -4
- angr/analyses/identifier/functions/atoi.py +1 -1
- angr/analyses/identifier/functions/based_atoi.py +1 -1
- angr/analyses/identifier/functions/fdprintf.py +1 -1
- angr/analyses/identifier/functions/free.py +2 -2
- angr/analyses/identifier/functions/int2str.py +1 -1
- angr/analyses/identifier/functions/malloc.py +2 -2
- angr/analyses/identifier/functions/memcmp.py +1 -1
- angr/analyses/identifier/functions/memcpy.py +3 -3
- angr/analyses/identifier/functions/memset.py +1 -1
- angr/analyses/identifier/functions/printf.py +1 -1
- angr/analyses/identifier/functions/recv_until.py +2 -2
- angr/analyses/identifier/functions/skip_calloc.py +2 -2
- angr/analyses/identifier/functions/skip_realloc.py +2 -2
- angr/analyses/identifier/functions/skip_recv_n.py +1 -1
- angr/analyses/identifier/functions/snprintf.py +1 -1
- angr/analyses/identifier/functions/sprintf.py +1 -1
- angr/analyses/identifier/functions/strcmp.py +1 -1
- angr/analyses/identifier/functions/strcpy.py +1 -1
- angr/analyses/identifier/functions/strlen.py +1 -1
- angr/analyses/identifier/functions/strncmp.py +1 -1
- angr/analyses/identifier/functions/strncpy.py +1 -1
- angr/analyses/identifier/functions/strtol.py +1 -1
- angr/analyses/identifier/identify.py +3 -3
- angr/analyses/identifier/runner.py +6 -6
- angr/analyses/init_finder.py +1 -1
- angr/analyses/loop_analysis.py +2 -2
- angr/analyses/propagator/__init__.py +3 -0
- angr/analyses/propagator/engine_ail.py +6 -5
- angr/analyses/propagator/engine_base.py +2 -2
- angr/analyses/propagator/engine_vex.py +2 -2
- angr/analyses/propagator/outdated_definition_walker.py +3 -3
- angr/analyses/propagator/propagator.py +3 -3
- angr/analyses/propagator/top_checker_mixin.py +1 -1
- angr/analyses/proximity_graph.py +3 -3
- angr/analyses/reaching_definitions/__init__.py +6 -6
- angr/analyses/reaching_definitions/dep_graph.py +5 -5
- angr/analyses/reaching_definitions/engine_ail.py +8 -8
- angr/analyses/reaching_definitions/engine_vex.py +18 -13
- angr/analyses/reaching_definitions/function_handler.py +6 -2
- angr/analyses/reaching_definitions/heap_allocator.py +3 -3
- angr/analyses/reaching_definitions/rd_state.py +4 -10
- angr/analyses/reaching_definitions/reaching_definitions.py +11 -11
- angr/analyses/reaching_definitions/subject.py +3 -3
- angr/analyses/reassembler.py +5 -5
- angr/analyses/{s_propagator/s_propagator.py → s_propagator.py} +1 -1
- angr/analyses/s_reaching_definitions/__init__.py +11 -1
- angr/analyses/s_reaching_definitions/s_rda_model.py +117 -0
- angr/analyses/s_reaching_definitions/s_rda_view.py +213 -0
- angr/analyses/s_reaching_definitions/s_reaching_definitions.py +159 -0
- angr/analyses/stack_pointer_tracker.py +34 -16
- angr/analyses/static_hooker.py +2 -2
- angr/analyses/typehoon/__init__.py +3 -0
- angr/analyses/typehoon/lifter.py +1 -1
- angr/analyses/typehoon/translator.py +21 -4
- angr/analyses/typehoon/typeconsts.py +8 -0
- angr/analyses/typehoon/typehoon.py +3 -3
- angr/analyses/variable_recovery/__init__.py +6 -0
- angr/analyses/variable_recovery/engine_ail.py +5 -5
- angr/analyses/variable_recovery/engine_base.py +7 -7
- angr/analyses/variable_recovery/engine_vex.py +14 -17
- angr/analyses/variable_recovery/variable_recovery.py +5 -5
- angr/analyses/variable_recovery/variable_recovery_base.py +7 -7
- angr/analyses/variable_recovery/variable_recovery_fast.py +7 -7
- angr/analyses/veritesting.py +8 -8
- angr/analyses/vfg.py +13 -13
- angr/analyses/vsa_ddg.py +3 -3
- angr/analyses/vtable.py +1 -1
- angr/analyses/xrefs.py +3 -3
- angr/angrdb/__init__.py +3 -0
- angr/angrdb/db.py +2 -2
- angr/angrdb/serializers/__init__.py +7 -0
- angr/angrdb/serializers/cfg_model.py +2 -2
- angr/angrdb/serializers/comments.py +2 -2
- angr/angrdb/serializers/funcs.py +2 -2
- angr/angrdb/serializers/kb.py +2 -2
- angr/angrdb/serializers/labels.py +2 -2
- angr/angrdb/serializers/loader.py +2 -2
- angr/angrdb/serializers/structured_code.py +4 -4
- angr/angrdb/serializers/variables.py +3 -3
- angr/angrdb/serializers/xrefs.py +2 -2
- angr/calling_conventions.py +69 -24
- angr/concretization_strategies/__init__.py +17 -0
- angr/concretization_strategies/max.py +1 -1
- angr/concretization_strategies/norepeats.py +3 -3
- angr/concretization_strategies/norepeats_range.py +1 -1
- angr/distributed/__init__.py +6 -1
- angr/distributed/server.py +0 -1
- angr/distributed/worker.py +6 -4
- angr/engines/__init__.py +25 -0
- angr/engines/concrete.py +2 -3
- angr/engines/engine.py +3 -3
- angr/engines/failure.py +2 -2
- angr/engines/light/__init__.py +12 -0
- angr/engines/light/data.py +1 -1
- angr/engines/light/engine.py +12 -17
- angr/engines/pcode/__init__.py +7 -1
- angr/engines/pcode/behavior.py +1 -1
- angr/engines/pcode/cc.py +1 -1
- angr/engines/pcode/emulate.py +4 -4
- angr/engines/pcode/engine.py +5 -5
- angr/engines/pcode/lifter.py +7 -7
- angr/engines/procedure.py +3 -3
- angr/engines/soot/__init__.py +3 -0
- angr/engines/soot/engine.py +13 -13
- angr/engines/soot/expressions/__init__.py +33 -0
- angr/engines/soot/expressions/arrayref.py +1 -1
- angr/engines/soot/expressions/base.py +1 -1
- angr/engines/soot/expressions/cast.py +1 -1
- angr/engines/soot/expressions/condition.py +2 -2
- angr/engines/soot/expressions/constants.py +1 -1
- angr/engines/soot/expressions/invoke.py +2 -2
- angr/engines/soot/expressions/new.py +1 -1
- angr/engines/soot/expressions/newArray.py +1 -1
- angr/engines/soot/expressions/newMultiArray.py +1 -1
- angr/engines/soot/statements/__init__.py +16 -0
- angr/engines/soot/statements/assign.py +1 -1
- angr/engines/soot/statements/base.py +3 -3
- angr/engines/soot/statements/goto.py +1 -1
- angr/engines/soot/statements/if_.py +1 -1
- angr/engines/soot/statements/throw.py +1 -1
- angr/engines/soot/values/__init__.py +14 -0
- angr/engines/soot/values/arrayref.py +1 -1
- angr/engines/soot/values/instancefieldref.py +1 -1
- angr/engines/soot/values/staticfieldref.py +1 -1
- angr/engines/soot/values/thisref.py +2 -2
- angr/engines/successors.py +8 -8
- angr/engines/syscall.py +1 -1
- angr/engines/unicorn.py +13 -13
- angr/engines/vex/__init__.py +18 -3
- angr/engines/vex/claripy/__init__.py +3 -0
- angr/engines/vex/claripy/ccall.py +1 -2
- angr/engines/vex/claripy/datalayer.py +3 -3
- angr/engines/vex/heavy/__init__.py +11 -1
- angr/engines/vex/heavy/heavy.py +8 -8
- angr/engines/vex/heavy/inspect.py +2 -2
- angr/engines/vex/heavy/resilience.py +2 -2
- angr/engines/vex/heavy/super_fastpath.py +3 -3
- angr/engines/vex/lifter.py +5 -5
- angr/engines/vex/light/__init__.py +7 -0
- angr/engines/vex/light/light.py +2 -2
- angr/engines/vex/light/slicing.py +1 -1
- angr/errors.py +4 -4
- angr/exploration_techniques/__init__.py +0 -1
- angr/exploration_techniques/bucketizer.py +9 -10
- angr/exploration_techniques/common.py +2 -2
- angr/exploration_techniques/director.py +4 -4
- angr/exploration_techniques/driller_core.py +2 -3
- angr/exploration_techniques/explorer.py +3 -3
- angr/exploration_techniques/loop_seer.py +3 -3
- angr/exploration_techniques/oppologist.py +3 -3
- angr/exploration_techniques/slicecutor.py +1 -1
- angr/exploration_techniques/spiller.py +1 -1
- angr/exploration_techniques/suggestions.py +6 -6
- angr/exploration_techniques/symbion.py +0 -1
- angr/exploration_techniques/threading.py +2 -2
- angr/exploration_techniques/tracer.py +3 -3
- angr/exploration_techniques/veritesting.py +1 -1
- angr/flirt/__init__.py +0 -1
- angr/{knowledge_base/knowledge_base.py → knowledge_base.py} +13 -15
- angr/knowledge_plugins/__init__.py +23 -1
- angr/knowledge_plugins/callsite_prototypes.py +2 -2
- angr/knowledge_plugins/cfg/cfg_manager.py +1 -1
- angr/knowledge_plugins/cfg/cfg_model.py +8 -7
- angr/knowledge_plugins/cfg/indirect_jump.py +1 -1
- angr/knowledge_plugins/cfg/memory_data.py +3 -2
- angr/knowledge_plugins/debug_variables.py +2 -2
- angr/knowledge_plugins/functions/__init__.py +6 -0
- angr/knowledge_plugins/functions/function.py +21 -16
- angr/knowledge_plugins/functions/function_manager.py +2 -2
- angr/knowledge_plugins/functions/function_parser.py +3 -3
- angr/knowledge_plugins/functions/soot_function.py +2 -2
- angr/knowledge_plugins/key_definitions/atoms.py +2 -2
- angr/knowledge_plugins/key_definitions/definition.py +3 -3
- angr/knowledge_plugins/key_definitions/key_definition_manager.py +2 -2
- angr/knowledge_plugins/key_definitions/uses.py +2 -2
- angr/knowledge_plugins/propagations/__init__.py +7 -0
- angr/knowledge_plugins/propagations/prop_value.py +1 -1
- angr/knowledge_plugins/{structured_code/manager.py → structured_code.py} +6 -3
- angr/knowledge_plugins/types.py +1 -1
- angr/knowledge_plugins/variables/__init__.py +6 -0
- angr/knowledge_plugins/variables/variable_access.py +3 -3
- angr/knowledge_plugins/variables/variable_manager.py +7 -7
- angr/knowledge_plugins/xrefs/__init__.py +9 -1
- angr/knowledge_plugins/xrefs/xref.py +5 -5
- angr/knowledge_plugins/xrefs/xref_manager.py +3 -3
- angr/misc/__init__.py +12 -2
- angr/misc/loggers.py +2 -2
- angr/misc/telemetry.py +54 -0
- angr/procedures/__init__.py +9 -0
- angr/procedures/cgc/receive.py +2 -2
- angr/procedures/cgc/transmit.py +1 -1
- angr/procedures/definitions/__init__.py +8 -8
- angr/procedures/definitions/cgc.py +1 -1
- angr/procedures/definitions/glibc.py +2 -15
- angr/procedures/definitions/gnulib.py +2 -6
- angr/procedures/definitions/libstdcpp.py +2 -2
- angr/procedures/definitions/linux_kernel.py +2 -3
- angr/procedures/definitions/linux_loader.py +1 -1
- angr/procedures/definitions/msvcr.py +2 -2
- angr/procedures/definitions/wdk_api-ms-win-dx-d3dkmt-l1-1-4.py +3 -18
- angr/procedures/definitions/wdk_api-ms-win-dx-d3dkmt-l1-1-6.py +3 -18
- angr/procedures/definitions/wdk_clfs.py +3 -18
- angr/procedures/definitions/wdk_fltmgr.py +3 -18
- angr/procedures/definitions/wdk_fwpkclnt.py +3 -18
- angr/procedures/definitions/wdk_fwpuclnt.py +3 -18
- angr/procedures/definitions/wdk_gdi32.py +3 -18
- angr/procedures/definitions/wdk_hal.py +3 -18
- angr/procedures/definitions/wdk_ksecdd.py +3 -18
- angr/procedures/definitions/wdk_ndis.py +3 -18
- angr/procedures/definitions/wdk_ntoskrnl.py +3 -18
- angr/procedures/definitions/wdk_offreg.py +3 -18
- angr/procedures/definitions/wdk_pshed.py +3 -18
- angr/procedures/definitions/wdk_secur32.py +3 -18
- angr/procedures/definitions/wdk_vhfum.py +3 -18
- angr/procedures/definitions/win32_aclui.py +3 -18
- angr/procedures/definitions/win32_activeds.py +3 -18
- angr/procedures/definitions/win32_advapi32.py +3 -18
- angr/procedures/definitions/win32_advpack.py +3 -18
- angr/procedures/definitions/win32_amsi.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-1.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-3.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-6.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-apiquery-l2-1-0.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-backgroundtask-l1-1-0.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-comm-l1-1-1.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-comm-l1-1-2.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-enclave-l1-1-1.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-errorhandling-l1-1-3.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-featurestaging-l1-1-0.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-featurestaging-l1-1-1.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-file-fromapp-l1-1-0.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-handle-l1-1-0.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-ioring-l1-1-0.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-marshal-l1-1-0.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-3.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-4.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-5.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-6.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-7.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-8.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-path-l1-1-0.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-psm-appnotify-l1-1-0.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-psm-appnotify-l1-1-1.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-realtime-l1-1-1.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-realtime-l1-1-2.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-slapi-l1-1-0.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-state-helpers-l1-1-0.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-synch-l1-2-0.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-0.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-3.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-4.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-6.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-util-l1-1-1.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-core-winrt-error-l1-1-0.py +3 -3
- angr/procedures/definitions/win32_api-ms-win-core-winrt-error-l1-1-1.py +3 -3
- angr/procedures/definitions/win32_api-ms-win-core-winrt-l1-1-0.py +3 -3
- angr/procedures/definitions/win32_api-ms-win-core-winrt-registration-l1-1-0.py +3 -3
- angr/procedures/definitions/win32_api-ms-win-core-winrt-robuffer-l1-1-0.py +3 -3
- angr/procedures/definitions/win32_api-ms-win-core-winrt-roparameterizediid-l1-1-0.py +3 -3
- angr/procedures/definitions/win32_api-ms-win-core-winrt-string-l1-1-0.py +3 -3
- angr/procedures/definitions/win32_api-ms-win-core-winrt-string-l1-1-1.py +3 -3
- angr/procedures/definitions/win32_api-ms-win-core-wow64-l1-1-1.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-devices-query-l1-1-0.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-devices-query-l1-1-1.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-dx-d3dkmt-l1-1-0.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-gaming-deviceinformation-l1-1-0.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-gaming-expandedresources-l1-1-0.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-0.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-1.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-2.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-3.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-4.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-mm-misc-l1-1-1.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-net-isolation-l1-1-0.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-security-base-l1-2-2.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-security-isolatedcontainer-l1-1-0.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-security-isolatedcontainer-l1-1-1.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-3.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-4.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-5.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-0.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-1.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-2.py +3 -18
- angr/procedures/definitions/win32_api-ms-win-shcore-stream-winrt-l1-1-0.py +3 -3
- angr/procedures/definitions/win32_api-ms-win-wsl-api-l1-1-0.py +3 -18
- angr/procedures/definitions/win32_apphelp.py +3 -18
- angr/procedures/definitions/win32_authz.py +3 -18
- angr/procedures/definitions/win32_avicap32.py +3 -18
- angr/procedures/definitions/win32_avifil32.py +3 -18
- angr/procedures/definitions/win32_avrt.py +3 -18
- angr/procedures/definitions/win32_bcp47mrm.py +3 -18
- angr/procedures/definitions/win32_bcrypt.py +3 -18
- angr/procedures/definitions/win32_bcryptprimitives.py +3 -18
- angr/procedures/definitions/win32_bluetoothapis.py +3 -18
- angr/procedures/definitions/win32_bthprops.py +3 -3
- angr/procedures/definitions/win32_bthprops_cpl.py +3 -18
- angr/procedures/definitions/win32_cabinet.py +3 -18
- angr/procedures/definitions/win32_certadm.py +3 -18
- angr/procedures/definitions/win32_certpoleng.py +3 -18
- angr/procedures/definitions/win32_cfgmgr32.py +3 -18
- angr/procedures/definitions/win32_chakra.py +3 -18
- angr/procedures/definitions/win32_cldapi.py +3 -18
- angr/procedures/definitions/win32_clfsw32.py +3 -18
- angr/procedures/definitions/win32_clusapi.py +3 -18
- angr/procedures/definitions/win32_comctl32.py +3 -18
- angr/procedures/definitions/win32_comdlg32.py +3 -18
- angr/procedures/definitions/win32_compstui.py +3 -18
- angr/procedures/definitions/win32_computecore.py +3 -18
- angr/procedures/definitions/win32_computenetwork.py +3 -18
- angr/procedures/definitions/win32_computestorage.py +3 -18
- angr/procedures/definitions/win32_comsvcs.py +3 -18
- angr/procedures/definitions/win32_coremessaging.py +3 -3
- angr/procedures/definitions/win32_credui.py +3 -18
- angr/procedures/definitions/win32_crypt32.py +3 -18
- angr/procedures/definitions/win32_cryptnet.py +3 -18
- angr/procedures/definitions/win32_cryptui.py +3 -18
- angr/procedures/definitions/win32_cryptxml.py +3 -18
- angr/procedures/definitions/win32_cscapi.py +3 -18
- angr/procedures/definitions/win32_d2d1.py +3 -18
- angr/procedures/definitions/win32_d3d10.py +3 -18
- angr/procedures/definitions/win32_d3d10_1.py +3 -18
- angr/procedures/definitions/win32_d3d11.py +3 -18
- angr/procedures/definitions/win32_d3d12.py +3 -18
- angr/procedures/definitions/win32_d3d9.py +3 -18
- angr/procedures/definitions/win32_d3dcompiler_47.py +3 -18
- angr/procedures/definitions/win32_d3dcsx.py +3 -18
- angr/procedures/definitions/win32_davclnt.py +3 -18
- angr/procedures/definitions/win32_dbgeng.py +3 -18
- angr/procedures/definitions/win32_dbghelp.py +3 -18
- angr/procedures/definitions/win32_dbgmodel.py +3 -18
- angr/procedures/definitions/win32_dciman32.py +3 -18
- angr/procedures/definitions/win32_dcomp.py +3 -18
- angr/procedures/definitions/win32_ddraw.py +3 -18
- angr/procedures/definitions/win32_deviceaccess.py +3 -18
- angr/procedures/definitions/win32_dflayout.py +3 -18
- angr/procedures/definitions/win32_dhcpcsvc.py +3 -18
- angr/procedures/definitions/win32_dhcpcsvc6.py +3 -18
- angr/procedures/definitions/win32_dhcpsapi.py +3 -18
- angr/procedures/definitions/win32_diagnosticdataquery.py +3 -18
- angr/procedures/definitions/win32_dinput8.py +3 -18
- angr/procedures/definitions/win32_directml.py +3 -18
- angr/procedures/definitions/win32_dmprocessxmlfiltered.py +3 -18
- angr/procedures/definitions/win32_dnsapi.py +3 -18
- angr/procedures/definitions/win32_drt.py +3 -18
- angr/procedures/definitions/win32_drtprov.py +3 -18
- angr/procedures/definitions/win32_drttransport.py +3 -18
- angr/procedures/definitions/win32_dsound.py +3 -18
- angr/procedures/definitions/win32_dsparse.py +3 -18
- angr/procedures/definitions/win32_dsprop.py +3 -18
- angr/procedures/definitions/win32_dssec.py +3 -18
- angr/procedures/definitions/win32_dsuiext.py +3 -18
- angr/procedures/definitions/win32_dwmapi.py +3 -18
- angr/procedures/definitions/win32_dwrite.py +3 -18
- angr/procedures/definitions/win32_dxcompiler.py +3 -18
- angr/procedures/definitions/win32_dxcore.py +3 -18
- angr/procedures/definitions/win32_dxgi.py +3 -18
- angr/procedures/definitions/win32_dxva2.py +3 -18
- angr/procedures/definitions/win32_eappcfg.py +3 -18
- angr/procedures/definitions/win32_eappprxy.py +3 -18
- angr/procedures/definitions/win32_efswrt.py +3 -18
- angr/procedures/definitions/win32_elscore.py +3 -18
- angr/procedures/definitions/win32_esent.py +3 -18
- angr/procedures/definitions/win32_evr.py +3 -18
- angr/procedures/definitions/win32_faultrep.py +3 -18
- angr/procedures/definitions/win32_fhsvcctl.py +3 -18
- angr/procedures/definitions/win32_firewallapi.py +3 -18
- angr/procedures/definitions/win32_fltlib.py +3 -18
- angr/procedures/definitions/win32_fontsub.py +3 -18
- angr/procedures/definitions/win32_forceinline.py +3 -18
- angr/procedures/definitions/win32_fwpuclnt.py +3 -18
- angr/procedures/definitions/win32_fxsutility.py +3 -18
- angr/procedures/definitions/win32_gdi32.py +3 -18
- angr/procedures/definitions/win32_gdiplus.py +3 -18
- angr/procedures/definitions/win32_glu32.py +3 -18
- angr/procedures/definitions/win32_gpedit.py +3 -18
- angr/procedures/definitions/win32_hhctrl_ocx.py +3 -18
- angr/procedures/definitions/win32_hid.py +3 -18
- angr/procedures/definitions/win32_hlink.py +3 -18
- angr/procedures/definitions/win32_hrtfapo.py +3 -18
- angr/procedures/definitions/win32_httpapi.py +3 -18
- angr/procedures/definitions/win32_icm32.py +3 -18
- angr/procedures/definitions/win32_icmui.py +3 -18
- angr/procedures/definitions/win32_icu.py +3 -18
- angr/procedures/definitions/win32_ieframe.py +3 -18
- angr/procedures/definitions/win32_imagehlp.py +3 -18
- angr/procedures/definitions/win32_imgutil.py +3 -18
- angr/procedures/definitions/win32_imm32.py +3 -18
- angr/procedures/definitions/win32_infocardapi.py +3 -18
- angr/procedures/definitions/win32_inkobjcore.py +3 -18
- angr/procedures/definitions/win32_iphlpapi.py +3 -18
- angr/procedures/definitions/win32_iscsidsc.py +3 -18
- angr/procedures/definitions/win32_isolatedwindowsenvironmentutils.py +3 -18
- angr/procedures/definitions/win32_kernel32.py +3 -18
- angr/procedures/definitions/win32_kernelbase.py +3 -18
- angr/procedures/definitions/win32_keycredmgr.py +3 -18
- angr/procedures/definitions/win32_ksproxy_ax.py +3 -18
- angr/procedures/definitions/win32_ksuser.py +3 -18
- angr/procedures/definitions/win32_ktmw32.py +3 -18
- angr/procedures/definitions/win32_licenseprotection.py +3 -18
- angr/procedures/definitions/win32_loadperf.py +3 -18
- angr/procedures/definitions/win32_magnification.py +3 -18
- angr/procedures/definitions/win32_mapi32.py +3 -18
- angr/procedures/definitions/win32_mdmlocalmanagement.py +3 -18
- angr/procedures/definitions/win32_mdmregistration.py +3 -18
- angr/procedures/definitions/win32_mf.py +3 -18
- angr/procedures/definitions/win32_mfcore.py +3 -18
- angr/procedures/definitions/win32_mfplat.py +3 -18
- angr/procedures/definitions/win32_mfplay.py +3 -18
- angr/procedures/definitions/win32_mfreadwrite.py +3 -18
- angr/procedures/definitions/win32_mfsensorgroup.py +3 -18
- angr/procedures/definitions/win32_mfsrcsnk.py +3 -18
- angr/procedures/definitions/win32_mgmtapi.py +3 -18
- angr/procedures/definitions/win32_mi.py +3 -18
- angr/procedures/definitions/win32_mmdevapi.py +3 -18
- angr/procedures/definitions/win32_mpr.py +3 -18
- angr/procedures/definitions/win32_mprapi.py +3 -18
- angr/procedures/definitions/win32_mqrt.py +3 -18
- angr/procedures/definitions/win32_mrmsupport.py +3 -18
- angr/procedures/definitions/win32_msacm32.py +3 -18
- angr/procedures/definitions/win32_msajapi.py +3 -18
- angr/procedures/definitions/win32_mscms.py +3 -18
- angr/procedures/definitions/win32_mscoree.py +3 -18
- angr/procedures/definitions/win32_msctfmonitor.py +3 -18
- angr/procedures/definitions/win32_msdelta.py +3 -18
- angr/procedures/definitions/win32_msdmo.py +3 -18
- angr/procedures/definitions/win32_msdrm.py +3 -18
- angr/procedures/definitions/win32_msi.py +3 -18
- angr/procedures/definitions/win32_msimg32.py +3 -18
- angr/procedures/definitions/win32_mspatcha.py +3 -18
- angr/procedures/definitions/win32_mspatchc.py +3 -18
- angr/procedures/definitions/win32_msports.py +3 -18
- angr/procedures/definitions/win32_msrating.py +3 -18
- angr/procedures/definitions/win32_mssign32.py +3 -18
- angr/procedures/definitions/win32_mstask.py +3 -18
- angr/procedures/definitions/win32_msvfw32.py +3 -18
- angr/procedures/definitions/win32_mswsock.py +3 -18
- angr/procedures/definitions/win32_mtxdm.py +3 -18
- angr/procedures/definitions/win32_ncrypt.py +3 -18
- angr/procedures/definitions/win32_ndfapi.py +3 -18
- angr/procedures/definitions/win32_netapi32.py +3 -18
- angr/procedures/definitions/win32_netsh.py +3 -18
- angr/procedures/definitions/win32_netshell.py +3 -18
- angr/procedures/definitions/win32_newdev.py +3 -18
- angr/procedures/definitions/win32_ninput.py +3 -18
- angr/procedures/definitions/win32_normaliz.py +3 -18
- angr/procedures/definitions/win32_ntdll.py +3 -18
- angr/procedures/definitions/win32_ntdllk.py +3 -18
- angr/procedures/definitions/win32_ntdsapi.py +3 -18
- angr/procedures/definitions/win32_ntlanman.py +3 -18
- angr/procedures/definitions/win32_odbc32.py +3 -18
- angr/procedures/definitions/win32_odbcbcp.py +3 -18
- angr/procedures/definitions/win32_ole32.py +3 -18
- angr/procedures/definitions/win32_oleacc.py +3 -18
- angr/procedures/definitions/win32_oleaut32.py +3 -18
- angr/procedures/definitions/win32_oledlg.py +3 -18
- angr/procedures/definitions/win32_ondemandconnroutehelper.py +3 -18
- angr/procedures/definitions/win32_opengl32.py +3 -18
- angr/procedures/definitions/win32_opmxbox.py +3 -18
- angr/procedures/definitions/win32_p2p.py +3 -18
- angr/procedures/definitions/win32_p2pgraph.py +3 -18
- angr/procedures/definitions/win32_pdh.py +3 -18
- angr/procedures/definitions/win32_peerdist.py +3 -18
- angr/procedures/definitions/win32_powrprof.py +3 -18
- angr/procedures/definitions/win32_prntvpt.py +3 -18
- angr/procedures/definitions/win32_projectedfslib.py +3 -18
- angr/procedures/definitions/win32_propsys.py +3 -18
- angr/procedures/definitions/win32_psapi.py +3 -18
- angr/procedures/definitions/win32_quartz.py +3 -18
- angr/procedures/definitions/win32_query.py +3 -18
- angr/procedures/definitions/win32_qwave.py +3 -18
- angr/procedures/definitions/win32_rasapi32.py +3 -18
- angr/procedures/definitions/win32_rasdlg.py +3 -18
- angr/procedures/definitions/win32_resutils.py +3 -18
- angr/procedures/definitions/win32_rometadata.py +3 -3
- angr/procedures/definitions/win32_rpcns4.py +3 -18
- angr/procedures/definitions/win32_rpcproxy.py +3 -18
- angr/procedures/definitions/win32_rpcrt4.py +3 -18
- angr/procedures/definitions/win32_rstrtmgr.py +3 -18
- angr/procedures/definitions/win32_rtm.py +3 -18
- angr/procedures/definitions/win32_rtutils.py +3 -18
- angr/procedures/definitions/win32_rtworkq.py +3 -18
- angr/procedures/definitions/win32_sas.py +3 -18
- angr/procedures/definitions/win32_scarddlg.py +3 -18
- angr/procedures/definitions/win32_schannel.py +3 -18
- angr/procedures/definitions/win32_sechost.py +3 -18
- angr/procedures/definitions/win32_secur32.py +3 -18
- angr/procedures/definitions/win32_sensapi.py +3 -18
- angr/procedures/definitions/win32_sensorsutilsv2.py +3 -18
- angr/procedures/definitions/win32_setupapi.py +3 -18
- angr/procedures/definitions/win32_sfc.py +3 -18
- angr/procedures/definitions/win32_shdocvw.py +3 -18
- angr/procedures/definitions/win32_shell32.py +3 -18
- angr/procedures/definitions/win32_shlwapi.py +3 -18
- angr/procedures/definitions/win32_slc.py +3 -18
- angr/procedures/definitions/win32_slcext.py +3 -18
- angr/procedures/definitions/win32_slwga.py +3 -18
- angr/procedures/definitions/win32_snmpapi.py +3 -18
- angr/procedures/definitions/win32_spoolss.py +3 -18
- angr/procedures/definitions/win32_srclient.py +3 -18
- angr/procedures/definitions/win32_srpapi.py +3 -18
- angr/procedures/definitions/win32_sspicli.py +3 -18
- angr/procedures/definitions/win32_sti.py +3 -18
- angr/procedures/definitions/win32_t2embed.py +3 -18
- angr/procedures/definitions/win32_tapi32.py +3 -18
- angr/procedures/definitions/win32_tbs.py +3 -18
- angr/procedures/definitions/win32_tdh.py +3 -18
- angr/procedures/definitions/win32_tokenbinding.py +3 -18
- angr/procedures/definitions/win32_traffic.py +3 -18
- angr/procedures/definitions/win32_txfw32.py +3 -18
- angr/procedures/definitions/win32_ualapi.py +3 -18
- angr/procedures/definitions/win32_uiautomationcore.py +3 -18
- angr/procedures/definitions/win32_urlmon.py +3 -18
- angr/procedures/definitions/win32_user32.py +4 -19
- angr/procedures/definitions/win32_userenv.py +3 -18
- angr/procedures/definitions/win32_usp10.py +3 -18
- angr/procedures/definitions/win32_uxtheme.py +3 -18
- angr/procedures/definitions/win32_verifier.py +3 -18
- angr/procedures/definitions/win32_version.py +3 -18
- angr/procedures/definitions/win32_vertdll.py +3 -18
- angr/procedures/definitions/win32_virtdisk.py +3 -18
- angr/procedures/definitions/win32_vmdevicehost.py +3 -18
- angr/procedures/definitions/win32_vmsavedstatedumpprovider.py +3 -18
- angr/procedures/definitions/win32_vssapi.py +3 -18
- angr/procedures/definitions/win32_wcmapi.py +3 -18
- angr/procedures/definitions/win32_wdsbp.py +3 -18
- angr/procedures/definitions/win32_wdsclientapi.py +3 -18
- angr/procedures/definitions/win32_wdsmc.py +3 -18
- angr/procedures/definitions/win32_wdspxe.py +3 -18
- angr/procedures/definitions/win32_wdstptc.py +3 -18
- angr/procedures/definitions/win32_webauthn.py +3 -18
- angr/procedures/definitions/win32_webservices.py +3 -18
- angr/procedures/definitions/win32_websocket.py +3 -18
- angr/procedures/definitions/win32_wecapi.py +3 -18
- angr/procedures/definitions/win32_wer.py +3 -18
- angr/procedures/definitions/win32_wevtapi.py +3 -18
- angr/procedures/definitions/win32_winbio.py +3 -18
- angr/procedures/definitions/win32_windows_ai_machinelearning.py +3 -18
- angr/procedures/definitions/win32_windows_data_pdf.py +3 -3
- angr/procedures/definitions/win32_windows_media_mediacontrol.py +3 -18
- angr/procedures/definitions/win32_windows_networking.py +3 -18
- angr/procedures/definitions/win32_windows_ui_xaml.py +3 -18
- angr/procedures/definitions/win32_windowscodecs.py +3 -18
- angr/procedures/definitions/win32_winfax.py +3 -18
- angr/procedures/definitions/win32_winhttp.py +3 -18
- angr/procedures/definitions/win32_winhvemulation.py +3 -18
- angr/procedures/definitions/win32_winhvplatform.py +3 -18
- angr/procedures/definitions/win32_wininet.py +3 -18
- angr/procedures/definitions/win32_winml.py +3 -18
- angr/procedures/definitions/win32_winmm.py +3 -18
- angr/procedures/definitions/win32_winscard.py +3 -18
- angr/procedures/definitions/win32_winspool.py +3 -3
- angr/procedures/definitions/win32_winspool_drv.py +3 -18
- angr/procedures/definitions/win32_wintrust.py +3 -18
- angr/procedures/definitions/win32_winusb.py +3 -18
- angr/procedures/definitions/win32_wlanapi.py +3 -18
- angr/procedures/definitions/win32_wlanui.py +3 -18
- angr/procedures/definitions/win32_wldap32.py +3 -18
- angr/procedures/definitions/win32_wldp.py +3 -18
- angr/procedures/definitions/win32_wmvcore.py +3 -18
- angr/procedures/definitions/win32_wnvapi.py +3 -18
- angr/procedures/definitions/win32_wofutil.py +3 -18
- angr/procedures/definitions/win32_ws2_32.py +3 -18
- angr/procedures/definitions/win32_wscapi.py +3 -18
- angr/procedures/definitions/win32_wsclient.py +3 -18
- angr/procedures/definitions/win32_wsdapi.py +3 -18
- angr/procedures/definitions/win32_wsmsvc.py +3 -18
- angr/procedures/definitions/win32_wsnmp32.py +3 -18
- angr/procedures/definitions/win32_wtsapi32.py +3 -18
- angr/procedures/definitions/win32_xaudio2_8.py +3 -18
- angr/procedures/definitions/win32_xinput1_4.py +3 -18
- angr/procedures/definitions/win32_xinputuap.py +3 -3
- angr/procedures/definitions/win32_xmllite.py +3 -18
- angr/procedures/definitions/win32_xolehlp.py +3 -18
- angr/procedures/definitions/win32_xpsprint.py +3 -18
- angr/procedures/glibc/scanf.py +2 -2
- angr/procedures/glibc/sscanf.py +1 -1
- angr/procedures/java/__init__.py +6 -3
- angr/procedures/java/unconstrained.py +4 -4
- angr/procedures/java_io/read.py +1 -1
- angr/procedures/java_io/write.py +1 -1
- angr/procedures/java_jni/__init__.py +25 -17
- angr/procedures/java_jni/array_operations.py +2 -2
- angr/procedures/java_jni/field_access.py +3 -3
- angr/procedures/java_jni/method_calls.py +2 -2
- angr/procedures/java_jni/object_operations.py +1 -1
- angr/procedures/java_jni/string_operations.py +2 -2
- angr/procedures/java_lang/character.py +1 -1
- angr/procedures/java_lang/double.py +2 -2
- angr/procedures/java_lang/exit.py +1 -1
- angr/procedures/java_lang/getsimplename.py +1 -1
- angr/procedures/java_lang/integer.py +2 -2
- angr/procedures/java_lang/load_library.py +1 -1
- angr/procedures/java_lang/math.py +1 -1
- angr/procedures/java_lang/string.py +4 -4
- angr/procedures/java_lang/stringbuilder.py +2 -2
- angr/procedures/java_lang/system.py +1 -1
- angr/procedures/java_util/collection.py +2 -2
- angr/procedures/java_util/iterator.py +2 -2
- angr/procedures/java_util/list.py +3 -3
- angr/procedures/java_util/map.py +3 -3
- angr/procedures/java_util/random.py +1 -1
- angr/procedures/java_util/scanner_nextline.py +3 -3
- angr/procedures/libc/fseek.py +1 -1
- angr/procedures/libc/memcpy.py +1 -1
- angr/procedures/libc/strlen.py +12 -4
- angr/procedures/libc/strncmp.py +9 -4
- angr/procedures/linux_kernel/iovec.py +3 -3
- angr/procedures/linux_kernel/mmap.py +1 -1
- angr/procedures/linux_kernel/stat.py +1 -1
- angr/procedures/linux_kernel/sysinfo.py +1 -1
- angr/procedures/linux_kernel/vsyscall.py +1 -1
- angr/procedures/posix/bzero.py +1 -1
- angr/procedures/posix/mmap.py +1 -1
- angr/procedures/posix/send.py +1 -1
- angr/procedures/posix/syslog.py +2 -3
- angr/procedures/procedure_dict.py +2 -2
- angr/procedures/stubs/Redirect.py +1 -1
- angr/procedures/stubs/UserHook.py +1 -1
- angr/procedures/stubs/format_parser.py +6 -6
- angr/procedures/tracer/random.py +1 -1
- angr/procedures/tracer/receive.py +1 -1
- angr/procedures/tracer/transmit.py +1 -1
- angr/procedures/uclibc/__uClibc_main.py +1 -1
- angr/protos/__init__.py +8 -0
- angr/sim_options.py +0 -4
- angr/sim_procedure.py +5 -5
- angr/sim_state.py +21 -34
- angr/sim_type.py +51 -18
- angr/simos/__init__.py +12 -0
- angr/simos/cgc.py +5 -5
- angr/simos/javavm.py +18 -23
- angr/simos/linux.py +6 -6
- angr/simos/simos.py +12 -16
- angr/simos/userland.py +3 -3
- angr/simos/windows.py +6 -11
- angr/state_hierarchy.py +1 -1
- angr/state_plugins/__init__.py +84 -28
- angr/state_plugins/callstack.py +1 -1
- angr/state_plugins/concrete.py +3 -4
- angr/state_plugins/filesystem.py +3 -3
- angr/state_plugins/gdb.py +1 -1
- angr/state_plugins/heap/__init__.py +14 -5
- angr/state_plugins/heap/heap_base.py +5 -4
- angr/state_plugins/heap/heap_brk.py +1 -1
- angr/state_plugins/heap/heap_freelist.py +1 -1
- angr/state_plugins/heap/heap_ptmalloc.py +2 -20
- angr/state_plugins/heap/utils.py +1 -1
- angr/state_plugins/history.py +2 -2
- angr/state_plugins/javavm_classloader.py +3 -3
- angr/state_plugins/jni_references.py +1 -1
- angr/state_plugins/light_registers.py +3 -3
- angr/state_plugins/log.py +1 -1
- angr/state_plugins/plugin.py +3 -2
- angr/state_plugins/posix.py +3 -3
- angr/state_plugins/preconstrainer.py +6 -6
- angr/state_plugins/scratch.py +4 -4
- angr/state_plugins/sim_action_object.py +1 -1
- angr/state_plugins/solver.py +15 -19
- angr/state_plugins/symbolizer.py +2 -3
- angr/state_plugins/trace_additions.py +8 -8
- angr/state_plugins/uc_manager.py +1 -1
- angr/state_plugins/unicorn_engine.py +4 -4
- angr/state_plugins/view.py +1 -1
- angr/storage/__init__.py +9 -3
- angr/storage/file.py +16 -16
- angr/storage/memory_mixins/__init__.py +88 -6
- angr/storage/memory_mixins/actions_mixin.py +3 -3
- angr/storage/memory_mixins/address_concretization_mixin.py +6 -6
- angr/storage/memory_mixins/bvv_conversion_mixin.py +1 -1
- angr/storage/memory_mixins/clouseau_mixin.py +1 -1
- angr/storage/memory_mixins/convenient_mappings_mixin.py +8 -10
- angr/storage/memory_mixins/default_filler_mixin.py +3 -3
- angr/storage/memory_mixins/hex_dumper_mixin.py +1 -1
- angr/storage/memory_mixins/{javavm_memory/javavm_memory_mixin.py → javavm_memory_mixin.py} +15 -12
- angr/storage/memory_mixins/{keyvalue_memory/keyvalue_memory_mixin.py → keyvalue_memory_mixin.py} +11 -6
- angr/storage/memory_mixins/multi_value_merger_mixin.py +5 -5
- angr/storage/memory_mixins/name_resolution_mixin.py +2 -2
- angr/storage/memory_mixins/paged_memory/paged_memory_mixin.py +1 -1
- angr/storage/memory_mixins/paged_memory/paged_memory_multivalue_mixin.py +1 -1
- angr/storage/memory_mixins/paged_memory/pages/__init__.py +15 -0
- angr/storage/memory_mixins/paged_memory/pages/mv_list_page.py +1 -1
- angr/storage/memory_mixins/paged_memory/pages/ultra_page.py +2 -2
- angr/storage/memory_mixins/paged_memory/stack_allocation_mixin.py +2 -2
- angr/storage/memory_mixins/regioned_memory/__init__.py +10 -0
- angr/storage/memory_mixins/regioned_memory/abstract_merger_mixin.py +1 -1
- angr/storage/memory_mixins/regioned_memory/region_category_mixin.py +1 -1
- angr/storage/memory_mixins/regioned_memory/region_data.py +2 -2
- angr/storage/memory_mixins/regioned_memory/region_meta_mixin.py +1 -1
- angr/storage/memory_mixins/regioned_memory/regioned_address_concretization_mixin.py +4 -4
- angr/storage/memory_mixins/regioned_memory/regioned_memory_mixin.py +7 -19
- angr/storage/memory_mixins/regioned_memory/static_find_mixin.py +1 -1
- angr/storage/memory_mixins/simple_interface_mixin.py +1 -1
- angr/storage/memory_mixins/simplification_mixin.py +1 -1
- angr/storage/memory_mixins/size_resolution_mixin.py +2 -2
- angr/storage/memory_mixins/slotted_memory.py +1 -1
- angr/storage/memory_mixins/smart_find_mixin.py +3 -3
- angr/storage/memory_mixins/underconstrained_mixin.py +1 -1
- angr/storage/memory_mixins/unwrapper_mixin.py +1 -1
- angr/storage/memory_object.py +8 -10
- angr/utils/__init__.py +12 -0
- angr/utils/enums_conv.py +1 -1
- angr/utils/library.py +2 -2
- angr/utils/mp.py +1 -1
- angr/utils/timing.py +30 -18
- {angr-9.2.118.dist-info → angr-9.2.120.dist-info}/METADATA +8 -7
- angr-9.2.120.dist-info/RECORD +1340 -0
- angr/analyses/s_liveness/__init__.py +0 -2
- angr/analyses/s_propagator/__init__.py +0 -2
- angr/analyses/s_reaching_definitions/s_rda.py +0 -479
- angr/knowledge_base/__init__.py +0 -2
- angr/knowledge_plugins/structured_code/__init__.py +0 -2
- angr/knowledge_plugins/sync/__init__.py +0 -2
- angr/knowledge_plugins/sync/sync_controller.py +0 -324
- angr/misc/range.py +0 -24
- angr/misc/weakpatch.py +0 -59
- angr/storage/memory_mixins/javavm_memory/__init__.py +0 -2
- angr/storage/memory_mixins/keyvalue_memory/__init__.py +0 -2
- angr/storage/pcap.py +0 -65
- angr/utils/typing.py +0 -18
- angr-9.2.118.dist-info/RECORD +0 -1344
- /angr/analyses/{s_liveness/s_liveness.py → s_liveness.py} +0 -0
- {angr-9.2.118.dist-info → angr-9.2.120.dist-info}/LICENSE +0 -0
- {angr-9.2.118.dist-info → angr-9.2.120.dist-info}/WHEEL +0 -0
- {angr-9.2.118.dist-info → angr-9.2.120.dist-info}/entry_points.txt +0 -0
- {angr-9.2.118.dist-info → angr-9.2.120.dist-info}/top_level.txt +0 -0
|
@@ -1,3 +1,16 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
|
+
|
|
2
3
|
from .data_dependency_analysis import DataDependencyGraphAnalysis
|
|
3
4
|
from .dep_nodes import DepNodeTypes, BaseDepNode, VarDepNode, MemDepNode, ConstantDepNode, TmpDepNode, RegDepNode
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
__all__ = (
|
|
8
|
+
"DataDependencyGraphAnalysis",
|
|
9
|
+
"DepNodeTypes",
|
|
10
|
+
"BaseDepNode",
|
|
11
|
+
"VarDepNode",
|
|
12
|
+
"MemDepNode",
|
|
13
|
+
"ConstantDepNode",
|
|
14
|
+
"TmpDepNode",
|
|
15
|
+
"RegDepNode",
|
|
16
|
+
)
|
|
@@ -12,11 +12,11 @@ import claripy
|
|
|
12
12
|
from claripy.ast.bv import BV
|
|
13
13
|
from .dep_nodes import DepNodeTypes, ConstantDepNode, MemDepNode, VarDepNode, RegDepNode, TmpDepNode
|
|
14
14
|
from .sim_act_location import SimActLocation, DEFAULT_LOCATION, ParsedInstruction
|
|
15
|
-
from
|
|
16
|
-
from
|
|
17
|
-
from
|
|
18
|
-
from
|
|
19
|
-
from
|
|
15
|
+
from angr.analyses import Analysis
|
|
16
|
+
from angr.analyses import AnalysesHub
|
|
17
|
+
from angr.errors import AngrDDGError, AngrAnalysisError, SimValueError
|
|
18
|
+
from angr.state_plugins import SimActionData
|
|
19
|
+
from angr.storage import DefaultMemory
|
|
20
20
|
|
|
21
21
|
if TYPE_CHECKING:
|
|
22
22
|
from .dep_nodes import BaseDepNode
|
angr/analyses/datagraph_meta.py
CHANGED
angr/analyses/ddg.py
CHANGED
|
@@ -6,9 +6,9 @@ import networkx
|
|
|
6
6
|
import pyvex
|
|
7
7
|
from . import Analysis
|
|
8
8
|
|
|
9
|
-
from
|
|
10
|
-
from
|
|
11
|
-
from
|
|
9
|
+
from angr.code_location import CodeLocation
|
|
10
|
+
from angr.errors import SimSolverModeError, SimUnsatError, AngrDDGError
|
|
11
|
+
from angr.sim_variable import (
|
|
12
12
|
SimRegisterVariable,
|
|
13
13
|
SimMemoryVariable,
|
|
14
14
|
SimTemporaryVariable,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
|
+
|
|
2
3
|
from .region_identifier import RegionIdentifier
|
|
3
4
|
from .structured_codegen import CStructuredCodeGenerator, ImportSourceCode
|
|
4
5
|
from .clinic import Clinic
|
|
@@ -10,7 +11,31 @@ from .callsite_maker import CallSiteMaker
|
|
|
10
11
|
from .ail_simplifier import AILSimplifier
|
|
11
12
|
from .ssailification import Ssailification
|
|
12
13
|
from .dephication import GraphDephication, SeqNodeDephication
|
|
14
|
+
from .presets import DECOMPILATION_PRESETS
|
|
13
15
|
from . import structuring
|
|
14
16
|
from . import optimization_passes
|
|
15
17
|
|
|
18
|
+
|
|
16
19
|
StructuredCodeGenerator = CStructuredCodeGenerator
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
__all__ = (
|
|
23
|
+
"RegionIdentifier",
|
|
24
|
+
"CStructuredCodeGenerator",
|
|
25
|
+
"ImportSourceCode",
|
|
26
|
+
"Clinic",
|
|
27
|
+
"RegionSimplifier",
|
|
28
|
+
"Decompiler",
|
|
29
|
+
"options",
|
|
30
|
+
"options_by_category",
|
|
31
|
+
"BlockSimplifier",
|
|
32
|
+
"CallSiteMaker",
|
|
33
|
+
"AILSimplifier",
|
|
34
|
+
"Ssailification",
|
|
35
|
+
"GraphDephication",
|
|
36
|
+
"SeqNodeDephication",
|
|
37
|
+
"DECOMPILATION_PRESETS",
|
|
38
|
+
"structuring",
|
|
39
|
+
"optimization_passes",
|
|
40
|
+
"StructuredCodeGenerator",
|
|
41
|
+
)
|
|
@@ -27,14 +27,14 @@ from ailment.expression import (
|
|
|
27
27
|
|
|
28
28
|
from angr.analyses.s_reaching_definitions import SRDAModel
|
|
29
29
|
from angr.utils.ail import is_phi_assignment, HasExprWalker
|
|
30
|
-
from
|
|
31
|
-
from
|
|
32
|
-
from
|
|
33
|
-
from
|
|
34
|
-
from
|
|
35
|
-
from
|
|
36
|
-
from
|
|
37
|
-
from
|
|
30
|
+
from angr.code_location import CodeLocation, ExternalCodeLocation
|
|
31
|
+
from angr.sim_variable import SimStackVariable, SimMemoryVariable, SimVariable
|
|
32
|
+
from angr.knowledge_plugins.propagations.states import Equivalence
|
|
33
|
+
from angr.knowledge_plugins.key_definitions import atoms
|
|
34
|
+
from angr.knowledge_plugins.key_definitions.definition import Definition
|
|
35
|
+
from angr.knowledge_plugins.key_definitions.constants import OP_BEFORE
|
|
36
|
+
from angr.errors import AngrRuntimeError
|
|
37
|
+
from angr.analyses import Analysis, AnalysesHub
|
|
38
38
|
from .ailgraph_walker import AILGraphWalker
|
|
39
39
|
from .expression_narrower import ExpressionNarrowingWalker
|
|
40
40
|
from .block_simplifier import BlockSimplifier
|
|
@@ -475,7 +475,7 @@ class AILSimplifier(Analysis):
|
|
|
475
475
|
assert is_phi_assignment(stmt)
|
|
476
476
|
|
|
477
477
|
for _, vvar in stmt.src.src_and_vvars:
|
|
478
|
-
if vvar.varid == def_.atom.varid:
|
|
478
|
+
if vvar is not None and vvar.varid == def_.atom.varid:
|
|
479
479
|
use_exprs.append((vvar, loc, ("phi-src-expr", (vvar,))))
|
|
480
480
|
|
|
481
481
|
# replace all uses if necessary
|
|
@@ -10,9 +10,9 @@ from ailment import AILBlockWalkerBase
|
|
|
10
10
|
|
|
11
11
|
from angr.code_location import ExternalCodeLocation, CodeLocation
|
|
12
12
|
|
|
13
|
-
from
|
|
14
|
-
from
|
|
15
|
-
from
|
|
13
|
+
from angr.analyses.s_propagator import SPropagatorAnalysis
|
|
14
|
+
from angr.analyses.s_reaching_definitions import SReachingDefinitionsAnalysis, SRDAModel
|
|
15
|
+
from angr.analyses import Analysis, register_analysis
|
|
16
16
|
from .peephole_optimizations import (
|
|
17
17
|
MULTI_STMT_OPTS,
|
|
18
18
|
STMT_OPTS,
|
|
@@ -11,7 +11,7 @@ from angr.sim_type import SimTypeBottom, SimTypePointer, SimTypeChar, SimTypeInt
|
|
|
11
11
|
from angr.calling_conventions import SimRegArg, SimStackArg, SimCC, SimStructArg
|
|
12
12
|
from angr.knowledge_plugins.key_definitions.constants import OP_BEFORE
|
|
13
13
|
from angr.analyses import Analysis, register_analysis
|
|
14
|
-
from angr.analyses.s_reaching_definitions
|
|
14
|
+
from angr.analyses.s_reaching_definitions import SRDAView
|
|
15
15
|
from angr import SIM_LIBRARIES, SIM_TYPE_COLLECTIONS
|
|
16
16
|
|
|
17
17
|
if TYPE_CHECKING:
|
|
@@ -284,7 +284,9 @@ class CallSiteMaker(Analysis):
|
|
|
284
284
|
|
|
285
285
|
if vvar is not None:
|
|
286
286
|
vvar_value = view.get_vvar_value(vvar)
|
|
287
|
-
|
|
287
|
+
if not isinstance(vvar_value, Expr.Phi):
|
|
288
|
+
return vvar_value, vvar
|
|
289
|
+
return None, vvar
|
|
288
290
|
|
|
289
291
|
return None
|
|
290
292
|
|
|
@@ -311,7 +313,7 @@ class CallSiteMaker(Analysis):
|
|
|
311
313
|
)
|
|
312
314
|
if vvar is not None:
|
|
313
315
|
value = view.get_vvar_value(vvar)
|
|
314
|
-
if value is not None:
|
|
316
|
+
if value is not None and not isinstance(value, Expr.Phi):
|
|
315
317
|
return None, value
|
|
316
318
|
return None, Expr.VirtualVariable(
|
|
317
319
|
self._atom_idx(),
|
|
@@ -12,13 +12,14 @@ import capstone
|
|
|
12
12
|
|
|
13
13
|
import ailment
|
|
14
14
|
|
|
15
|
-
from
|
|
16
|
-
from
|
|
17
|
-
from
|
|
18
|
-
from
|
|
19
|
-
from
|
|
20
|
-
from
|
|
21
|
-
from
|
|
15
|
+
from angr.errors import AngrDecompilationError
|
|
16
|
+
from angr.knowledge_base import KnowledgeBase
|
|
17
|
+
from angr.knowledge_plugins.functions import Function
|
|
18
|
+
from angr.knowledge_plugins.cfg.memory_data import MemoryDataSort
|
|
19
|
+
from angr.codenode import BlockNode
|
|
20
|
+
from angr.utils import timethis
|
|
21
|
+
from angr.calling_conventions import SimRegArg, SimStackArg, SimFunctionArgument
|
|
22
|
+
from angr.sim_type import (
|
|
22
23
|
SimTypeChar,
|
|
23
24
|
SimTypeInt,
|
|
24
25
|
SimTypeLongLong,
|
|
@@ -28,17 +29,16 @@ from ...sim_type import (
|
|
|
28
29
|
SimTypeFloat,
|
|
29
30
|
SimTypePointer,
|
|
30
31
|
)
|
|
31
|
-
from
|
|
32
|
-
from
|
|
33
|
-
from
|
|
34
|
-
from
|
|
35
|
-
from
|
|
36
|
-
from
|
|
37
|
-
from
|
|
32
|
+
from angr.analyses.stack_pointer_tracker import Register, OffsetVal
|
|
33
|
+
from angr.sim_variable import SimVariable, SimStackVariable, SimRegisterVariable, SimMemoryVariable
|
|
34
|
+
from angr.procedures.stubs.UnresolvableCallTarget import UnresolvableCallTarget
|
|
35
|
+
from angr.procedures.stubs.UnresolvableJumpTarget import UnresolvableJumpTarget
|
|
36
|
+
from angr.analyses import Analysis, register_analysis
|
|
37
|
+
from angr.analyses.cfg.cfg_base import CFGBase
|
|
38
|
+
from angr.analyses.reaching_definitions import ReachingDefinitionsAnalysis
|
|
38
39
|
from .return_maker import ReturnMaker
|
|
39
40
|
from .ailgraph_walker import AILGraphWalker, RemoveNodeNotice
|
|
40
41
|
from .optimization_passes import (
|
|
41
|
-
get_default_optimization_passes,
|
|
42
42
|
OptimizationPassStage,
|
|
43
43
|
RegisterSaveAreaSimplifier,
|
|
44
44
|
StackCanarySimplifier,
|
|
@@ -128,7 +128,7 @@ class Clinic(Analysis):
|
|
|
128
128
|
self._func_graph: networkx.DiGraph | None = None
|
|
129
129
|
self._ail_manager = None
|
|
130
130
|
self._blocks_by_addr_and_size = {}
|
|
131
|
-
self.
|
|
131
|
+
self.entry_node_addr: tuple[int, int | None] = self.function.addr, None
|
|
132
132
|
|
|
133
133
|
self._fold_callexprs_into_conditions = fold_callexprs_into_conditions
|
|
134
134
|
self._insert_labels = insert_labels
|
|
@@ -164,8 +164,7 @@ class Clinic(Analysis):
|
|
|
164
164
|
if optimization_passes is not None:
|
|
165
165
|
self._optimization_passes = optimization_passes
|
|
166
166
|
else:
|
|
167
|
-
self._optimization_passes =
|
|
168
|
-
l.debug("Get %d optimization passes for the current binary.", len(self._optimization_passes))
|
|
167
|
+
self._optimization_passes = []
|
|
169
168
|
|
|
170
169
|
if self._mode == ClinicMode.DECOMPILE:
|
|
171
170
|
self._analyze_for_decompiling()
|
|
@@ -712,11 +711,11 @@ class Clinic(Analysis):
|
|
|
712
711
|
if self._func_graph.in_degree(node) == 0 and CFGBase._is_noop_block(
|
|
713
712
|
self.project.arch, self.project.factory.block(node.addr, node.size)
|
|
714
713
|
):
|
|
715
|
-
if (node.addr, None) == self.
|
|
714
|
+
if (node.addr, None) == self.entry_node_addr:
|
|
716
715
|
# this is the entry node. after removing this node, the new entry node will be its successor
|
|
717
716
|
if self._func_graph.out_degree[node] == 1:
|
|
718
717
|
succ = next(iter(self._func_graph.successors(node)))
|
|
719
|
-
self.
|
|
718
|
+
self.entry_node_addr = succ.addr, None
|
|
720
719
|
else:
|
|
721
720
|
# we just don't remove this node...
|
|
722
721
|
continue
|
|
@@ -1210,6 +1209,7 @@ class Clinic(Analysis):
|
|
|
1210
1209
|
# of the graph is applied
|
|
1211
1210
|
self.unoptimized_graph = self._copy_graph(ail_graph)
|
|
1212
1211
|
|
|
1212
|
+
pass_ = timethis(pass_)
|
|
1213
1213
|
a = pass_(
|
|
1214
1214
|
self.function,
|
|
1215
1215
|
blocks_by_addr=addr_to_blocks,
|
|
@@ -1217,6 +1217,7 @@ class Clinic(Analysis):
|
|
|
1217
1217
|
graph=ail_graph,
|
|
1218
1218
|
variable_kb=variable_kb,
|
|
1219
1219
|
vvar_id_start=self.vvar_id_start,
|
|
1220
|
+
entry_node_addr=self.entry_node_addr,
|
|
1220
1221
|
**kwargs,
|
|
1221
1222
|
)
|
|
1222
1223
|
if a.out_graph:
|
|
@@ -1238,7 +1239,7 @@ class Clinic(Analysis):
|
|
|
1238
1239
|
ail_graph: networkx.DiGraph,
|
|
1239
1240
|
arg_vvars: dict[int, tuple[ailment.Expr.VirtualVariable, SimVariable]],
|
|
1240
1241
|
) -> networkx.DiGraph:
|
|
1241
|
-
entrypoint = next(iter(bb for bb in ail_graph if (bb.addr, bb.idx) == self.
|
|
1242
|
+
entrypoint = next(iter(bb for bb in ail_graph if (bb.addr, bb.idx) == self.entry_node_addr))
|
|
1242
1243
|
new_stmts = []
|
|
1243
1244
|
for arg in arg_list:
|
|
1244
1245
|
if not isinstance(arg, SimRegisterVariable):
|
|
@@ -1296,7 +1297,7 @@ class Clinic(Analysis):
|
|
|
1296
1297
|
ssailification = self.project.analyses.Ssailification(
|
|
1297
1298
|
self.function,
|
|
1298
1299
|
ail_graph,
|
|
1299
|
-
entry=next(iter(bb for bb in ail_graph if (bb.addr, bb.idx) == self.
|
|
1300
|
+
entry=next(iter(bb for bb in ail_graph if (bb.addr, bb.idx) == self.entry_node_addr)),
|
|
1300
1301
|
ail_manager=self._ail_manager,
|
|
1301
1302
|
ssa_stackvars=False,
|
|
1302
1303
|
vvar_id_start=self.vvar_id_start,
|
|
@@ -1309,7 +1310,7 @@ class Clinic(Analysis):
|
|
|
1309
1310
|
ssailification = self.project.analyses.Ssailification(
|
|
1310
1311
|
self.function,
|
|
1311
1312
|
ail_graph,
|
|
1312
|
-
entry=next(iter(bb for bb in ail_graph if (bb.addr, bb.idx) == self.
|
|
1313
|
+
entry=next(iter(bb for bb in ail_graph if (bb.addr, bb.idx) == self.entry_node_addr)),
|
|
1313
1314
|
ail_manager=self._ail_manager,
|
|
1314
1315
|
ssa_stackvars=True,
|
|
1315
1316
|
vvar_id_start=self.vvar_id_start,
|
|
@@ -1322,7 +1323,7 @@ class Clinic(Analysis):
|
|
|
1322
1323
|
dephication = self.project.analyses.GraphDephicationVVarMapping(
|
|
1323
1324
|
self.function,
|
|
1324
1325
|
ail_graph,
|
|
1325
|
-
entry=next(iter(bb for bb in ail_graph if (bb.addr, bb.idx) == self.
|
|
1326
|
+
entry=next(iter(bb for bb in ail_graph if (bb.addr, bb.idx) == self.entry_node_addr)),
|
|
1326
1327
|
vvar_id_start=self.vvar_id_start,
|
|
1327
1328
|
)
|
|
1328
1329
|
self.vvar_id_start = dephication.vvar_id_start + 1
|
|
@@ -1794,21 +1795,30 @@ class Clinic(Analysis):
|
|
|
1794
1795
|
if blocks_by_addr_and_size is None:
|
|
1795
1796
|
blocks_by_addr_and_size = self._blocks_by_addr_and_size
|
|
1796
1797
|
|
|
1797
|
-
node_to_block_mapping = {}
|
|
1798
1798
|
graph = networkx.DiGraph()
|
|
1799
1799
|
|
|
1800
|
-
for node in func_graph.
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
graph.add_node(ail_block)
|
|
1806
|
-
|
|
1807
|
-
for src_node, dst_node, data in func_graph.edges(data=True):
|
|
1808
|
-
src = node_to_block_mapping[src_node]
|
|
1809
|
-
dst = node_to_block_mapping[dst_node]
|
|
1800
|
+
entry_node = next(iter(node for node in func_graph if node.addr == self.entry_node_addr[0]), None)
|
|
1801
|
+
if entry_node is None:
|
|
1802
|
+
raise AngrDecompilationError(
|
|
1803
|
+
f"Entry node with address {self.entry_node_addr[0]:#x} not found in the function graph"
|
|
1804
|
+
)
|
|
1810
1805
|
|
|
1811
|
-
|
|
1806
|
+
# add the entry node into the graph
|
|
1807
|
+
ail_block = blocks_by_addr_and_size.get((entry_node.addr, entry_node.size))
|
|
1808
|
+
if ail_block is None:
|
|
1809
|
+
raise AngrDecompilationError(f"AIL block at address {entry_node.addr:#x} not found")
|
|
1810
|
+
graph.add_node(ail_block)
|
|
1811
|
+
|
|
1812
|
+
# get all descendants and only include them in the AIL graph.
|
|
1813
|
+
# this way all unreachable blocks will be excluded from the AIL graph.
|
|
1814
|
+
descendants = networkx.descendants(func_graph, entry_node) | {entry_node}
|
|
1815
|
+
for src_node, dst_node, data in networkx.subgraph_view(
|
|
1816
|
+
func_graph, filter_node=lambda n: n in descendants
|
|
1817
|
+
).edges(data=True):
|
|
1818
|
+
src = blocks_by_addr_and_size.get((src_node.addr, src_node.size))
|
|
1819
|
+
dst = blocks_by_addr_and_size.get((dst_node.addr, dst_node.size))
|
|
1820
|
+
|
|
1821
|
+
if src is not None and dst is not None:
|
|
1812
1822
|
graph.add_edge(src, dst, **data)
|
|
1813
1823
|
|
|
1814
1824
|
return graph
|
|
@@ -12,11 +12,11 @@ from unique_log_filter import UniqueLogFilter
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
from angr.utils.graph import GraphUtils
|
|
15
|
-
from
|
|
16
|
-
from
|
|
17
|
-
from
|
|
18
|
-
from
|
|
19
|
-
from
|
|
15
|
+
from angr.utils.lazy_import import lazy_import
|
|
16
|
+
from angr.utils import is_pyinstaller
|
|
17
|
+
from angr.utils.graph import dominates, inverted_idoms
|
|
18
|
+
from angr.block import Block, BlockNode
|
|
19
|
+
from angr.errors import AngrRuntimeError
|
|
20
20
|
from .peephole_optimizations import InvertNegatedLogicalConjunctionsAndDisjunctions
|
|
21
21
|
from .structuring.structurer_nodes import (
|
|
22
22
|
MultiNode,
|
|
@@ -56,6 +56,25 @@ _UNIFIABLE_COMPARISONS = {
|
|
|
56
56
|
"SGE",
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
+
|
|
60
|
+
_INVERSE_OPERATIONS = {
|
|
61
|
+
"__eq__": "__ne__",
|
|
62
|
+
"__ne__": "__eq__",
|
|
63
|
+
"__gt__": "__le__",
|
|
64
|
+
"__lt__": "__ge__",
|
|
65
|
+
"__ge__": "__lt__",
|
|
66
|
+
"__le__": "__gt__",
|
|
67
|
+
"ULT": "UGE",
|
|
68
|
+
"UGE": "ULT",
|
|
69
|
+
"UGT": "ULE",
|
|
70
|
+
"ULE": "UGT",
|
|
71
|
+
"SLT": "SGE",
|
|
72
|
+
"SGE": "SLT",
|
|
73
|
+
"SLE": "SGT",
|
|
74
|
+
"SGT": "SLE",
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
|
|
59
78
|
#
|
|
60
79
|
# Util methods and mapping used during AIL AST to claripy AST conversion
|
|
61
80
|
#
|
|
@@ -138,6 +157,9 @@ _ail2claripy_op_mapping = {
|
|
|
138
157
|
"SBorrow": lambda expr, _, m: _dummy_bvs(expr, m),
|
|
139
158
|
"ExpCmpNE": lambda expr, _, m: _dummy_bools(expr, m),
|
|
140
159
|
"CmpORD": lambda expr, _, m: _dummy_bvs(expr, m), # in case CmpORDRewriter fails
|
|
160
|
+
"GetMSBs": lambda expr, _, m: _dummy_bvs(expr, m),
|
|
161
|
+
"InterleaveLOV": lambda expr, _, m: _dummy_bvs(expr, m),
|
|
162
|
+
"InterleaveHIV": lambda expr, _, m: _dummy_bvs(expr, m),
|
|
141
163
|
}
|
|
142
164
|
|
|
143
165
|
#
|
|
@@ -178,7 +200,7 @@ class ConditionProcessor:
|
|
|
178
200
|
predicate = self._extract_predicate(src, dst, edge_type)
|
|
179
201
|
except EmptyBlockNotice:
|
|
180
202
|
# catch empty block notice - although this should not really happen
|
|
181
|
-
predicate = claripy.true
|
|
203
|
+
predicate = claripy.true()
|
|
182
204
|
return predicate
|
|
183
205
|
|
|
184
206
|
def recover_edge_conditions(self, region, graph=None) -> dict:
|
|
@@ -254,15 +276,15 @@ class ConditionProcessor:
|
|
|
254
276
|
|
|
255
277
|
if node is head:
|
|
256
278
|
# the head is always reachable
|
|
257
|
-
reaching_condition = claripy.true
|
|
279
|
+
reaching_condition = claripy.true()
|
|
258
280
|
elif idoms is not None and _strictly_postdominates(idoms, node, head):
|
|
259
281
|
# the node that post dominates the head is always reachable
|
|
260
|
-
reaching_conditions[node] = claripy.true
|
|
282
|
+
reaching_conditions[node] = claripy.true()
|
|
261
283
|
else:
|
|
262
284
|
for pred in preds:
|
|
263
285
|
edge = (pred, node)
|
|
264
|
-
pred_condition = reaching_conditions.get(pred, claripy.true)
|
|
265
|
-
edge_condition = edge_conditions.get(edge, claripy.true)
|
|
286
|
+
pred_condition = reaching_conditions.get(pred, claripy.true())
|
|
287
|
+
edge_condition = edge_conditions.get(edge, claripy.true())
|
|
266
288
|
|
|
267
289
|
if reaching_condition is None:
|
|
268
290
|
reaching_condition = claripy.And(pred_condition, edge_condition)
|
|
@@ -596,7 +618,7 @@ class ConditionProcessor:
|
|
|
596
618
|
return claripy.Not(bool_var)
|
|
597
619
|
|
|
598
620
|
if type(src_block) is GraphRegion:
|
|
599
|
-
return claripy.true
|
|
621
|
+
return claripy.true()
|
|
600
622
|
|
|
601
623
|
# sometimes the last statement is the conditional jump. sometimes it's the first statement of the block
|
|
602
624
|
if (
|
|
@@ -609,10 +631,10 @@ class ConditionProcessor:
|
|
|
609
631
|
last_stmt = self.get_last_statement(src_block)
|
|
610
632
|
|
|
611
633
|
if last_stmt is None:
|
|
612
|
-
return claripy.true
|
|
634
|
+
return claripy.true()
|
|
613
635
|
if type(last_stmt) is ailment.Stmt.Jump:
|
|
614
636
|
if isinstance(last_stmt.target, ailment.Expr.Const):
|
|
615
|
-
return claripy.true
|
|
637
|
+
return claripy.true()
|
|
616
638
|
# indirect jump
|
|
617
639
|
target_ast = self.claripy_ast_from_ail_condition(last_stmt.target)
|
|
618
640
|
return target_ast == dst_block.addr
|
|
@@ -622,7 +644,7 @@ class ConditionProcessor:
|
|
|
622
644
|
return bool_var
|
|
623
645
|
return claripy.Not(bool_var)
|
|
624
646
|
|
|
625
|
-
return claripy.true
|
|
647
|
+
return claripy.true()
|
|
626
648
|
|
|
627
649
|
#
|
|
628
650
|
# Expression conversion
|
|
@@ -727,6 +749,7 @@ class ConditionProcessor:
|
|
|
727
749
|
"ZeroExt": lambda cond_, tags: _binary_op_reduce(
|
|
728
750
|
"Concat", [claripy.BVV(0, cond_.args[0]), cond_.args[1]], tags
|
|
729
751
|
),
|
|
752
|
+
"Concat": lambda cond_, tags: _binary_op_reduce("Concat", cond_.args, tags),
|
|
730
753
|
}
|
|
731
754
|
|
|
732
755
|
if cond.op in _mapping:
|
|
@@ -780,8 +803,8 @@ class ConditionProcessor:
|
|
|
780
803
|
var = claripy.BoolV(condition.value)
|
|
781
804
|
else:
|
|
782
805
|
var = claripy.BVV(condition.value, condition.bits)
|
|
783
|
-
if isinstance(var, claripy.Bits) and var.size() == 1:
|
|
784
|
-
var = claripy.true if var.concrete_value == 1 else claripy.false
|
|
806
|
+
if isinstance(var, claripy.ast.Bits) and var.size() == 1:
|
|
807
|
+
var = claripy.true() if var.concrete_value == 1 else claripy.false()
|
|
785
808
|
return var
|
|
786
809
|
if isinstance(condition, ailment.Expr.Tmp):
|
|
787
810
|
l.warning("Left-over ailment.Tmp variable %s.", condition)
|
|
@@ -839,7 +862,7 @@ class ConditionProcessor:
|
|
|
839
862
|
|
|
840
863
|
if ast.op in _UNIFIABLE_COMPARISONS:
|
|
841
864
|
# unify comparisons to enable more simplification opportunities without going "deep" in sympy
|
|
842
|
-
inverse_op = getattr(ast.args[0],
|
|
865
|
+
inverse_op = getattr(ast.args[0], _INVERSE_OPERATIONS[ast.op])
|
|
843
866
|
return sympy.Not(ConditionProcessor.claripy_ast_to_sympy_expr(inverse_op(ast.args[1]), memo=memo))
|
|
844
867
|
|
|
845
868
|
if memo is not None and ast in memo:
|
|
@@ -860,9 +883,9 @@ class ConditionProcessor:
|
|
|
860
883
|
if isinstance(expr, sympy.Not):
|
|
861
884
|
return claripy.Not(ConditionProcessor.sympy_expr_to_claripy_ast(expr.args[0], memo))
|
|
862
885
|
if isinstance(expr, sympy.logic.boolalg.BooleanTrue):
|
|
863
|
-
return claripy.true
|
|
886
|
+
return claripy.true()
|
|
864
887
|
if isinstance(expr, sympy.logic.boolalg.BooleanFalse):
|
|
865
|
-
return claripy.false
|
|
888
|
+
return claripy.false()
|
|
866
889
|
raise AngrRuntimeError("Unreachable reached")
|
|
867
890
|
|
|
868
891
|
@staticmethod
|
|
@@ -1092,7 +1115,9 @@ class ConditionProcessor:
|
|
|
1092
1115
|
for term in all_terms_without_negs:
|
|
1093
1116
|
neg = negations.get(term)
|
|
1094
1117
|
|
|
1095
|
-
replaced_with_true = ConditionProcessor._replace_term_in_ast(
|
|
1118
|
+
replaced_with_true = ConditionProcessor._replace_term_in_ast(
|
|
1119
|
+
cond, term, claripy.true(), neg, claripy.false()
|
|
1120
|
+
)
|
|
1096
1121
|
sat0 = solver.satisfiable(
|
|
1097
1122
|
extra_constraints=(
|
|
1098
1123
|
cond,
|
|
@@ -1108,7 +1133,9 @@ class ConditionProcessor:
|
|
|
1108
1133
|
if sat0 or sat1:
|
|
1109
1134
|
continue
|
|
1110
1135
|
|
|
1111
|
-
replaced_with_false = ConditionProcessor._replace_term_in_ast(
|
|
1136
|
+
replaced_with_false = ConditionProcessor._replace_term_in_ast(
|
|
1137
|
+
cond, term, claripy.false(), neg, claripy.true()
|
|
1138
|
+
)
|
|
1112
1139
|
sat0 = solver.satisfiable(
|
|
1113
1140
|
extra_constraints=(
|
|
1114
1141
|
cond,
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
|
+
|
|
2
3
|
from .boolean_counter import BooleanCounter
|
|
3
4
|
from .call_counter import AILBlockCallCounter
|
|
4
5
|
from .seq_cf_structure_counter import ControlFlowStructureCounter
|
|
5
6
|
from .expression_counters import SingleExpressionCounter, RegisterExpressionCounter, OperatorCounter
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
__all__ = (
|
|
10
|
+
"BooleanCounter",
|
|
11
|
+
"AILBlockCallCounter",
|
|
12
|
+
"ControlFlowStructureCounter",
|
|
13
|
+
"SingleExpressionCounter",
|
|
14
|
+
"RegisterExpressionCounter",
|
|
15
|
+
"OperatorCounter",
|
|
16
|
+
)
|
|
@@ -10,15 +10,14 @@ from cle import SymbolType
|
|
|
10
10
|
import ailment
|
|
11
11
|
|
|
12
12
|
from angr.analyses.cfg import CFGFast
|
|
13
|
-
from
|
|
14
|
-
from
|
|
15
|
-
from
|
|
16
|
-
from
|
|
17
|
-
from
|
|
13
|
+
from angr.knowledge_plugins.functions.function import Function
|
|
14
|
+
from angr.knowledge_base import KnowledgeBase
|
|
15
|
+
from angr.sim_variable import SimMemoryVariable, SimRegisterVariable, SimStackVariable
|
|
16
|
+
from angr.utils import timethis
|
|
17
|
+
from angr.analyses import Analysis, AnalysesHub
|
|
18
18
|
from .structuring import RecursiveStructurer, PhoenixStructurer, DEFAULT_STRUCTURER
|
|
19
19
|
from .region_identifier import RegionIdentifier
|
|
20
20
|
from .optimization_passes.optimization_pass import OptimizationPassStage
|
|
21
|
-
from .optimization_passes import get_default_optimization_passes
|
|
22
21
|
from .ailgraph_walker import AILGraphWalker
|
|
23
22
|
from .condition_processor import ConditionProcessor
|
|
24
23
|
from .decompilation_options import DecompilationOption
|
|
@@ -26,6 +25,7 @@ from .decompilation_cache import DecompilationCache
|
|
|
26
25
|
from .utils import remove_labels
|
|
27
26
|
from .sequence_walker import SequenceWalker
|
|
28
27
|
from .structuring.structurer_nodes import SequenceNode
|
|
28
|
+
from .presets import DECOMPILATION_PRESETS, DecompilationPreset
|
|
29
29
|
|
|
30
30
|
if TYPE_CHECKING:
|
|
31
31
|
from angr.knowledge_plugins.cfg.cfg_model import CFGModel
|
|
@@ -52,6 +52,7 @@ class Decompiler(Analysis):
|
|
|
52
52
|
func: Function | str | int,
|
|
53
53
|
cfg: CFGFast | CFGModel | None = None,
|
|
54
54
|
options=None,
|
|
55
|
+
preset: str | DecompilationPreset | None = None,
|
|
55
56
|
optimization_passes=None,
|
|
56
57
|
sp_tracker_track_memory=True,
|
|
57
58
|
variable_kb=None,
|
|
@@ -73,11 +74,21 @@ class Decompiler(Analysis):
|
|
|
73
74
|
self.func: Function = func
|
|
74
75
|
self._cfg = cfg.model if isinstance(cfg, CFGFast) else cfg
|
|
75
76
|
self._options = options
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
l.debug("Get %d optimization passes for the current binary.", len(self._optimization_passes))
|
|
79
|
-
else:
|
|
77
|
+
|
|
78
|
+
if preset is None and optimization_passes:
|
|
80
79
|
self._optimization_passes = optimization_passes
|
|
80
|
+
else:
|
|
81
|
+
# we use the preset
|
|
82
|
+
if isinstance(preset, str):
|
|
83
|
+
if preset not in DECOMPILATION_PRESETS:
|
|
84
|
+
raise KeyError(f"Decompilation preset {preset} is not found")
|
|
85
|
+
preset = DECOMPILATION_PRESETS[preset]
|
|
86
|
+
elif preset is None:
|
|
87
|
+
preset = DECOMPILATION_PRESETS["default"]
|
|
88
|
+
if not isinstance(preset, DecompilationPreset):
|
|
89
|
+
raise TypeError('"preset" must be a DecompilationPreset instance')
|
|
90
|
+
self._optimization_passes = preset.get_optimization_passes(self.project.arch, self.project.simos.name)
|
|
91
|
+
l.debug("Get %d optimization passes for the current binary.", len(self._optimization_passes))
|
|
81
92
|
self._sp_tracker_track_memory = sp_tracker_track_memory
|
|
82
93
|
self._peephole_optimizations = peephole_optimizations
|
|
83
94
|
self._vars_must_struct = vars_must_struct
|
|
@@ -299,6 +310,7 @@ class Decompiler(Analysis):
|
|
|
299
310
|
update_graph=update_graph,
|
|
300
311
|
force_loop_single_exit=self._force_loop_single_exit,
|
|
301
312
|
complete_successors=self._complete_successors,
|
|
313
|
+
entry_node_addr=self.clinic.entry_node_addr,
|
|
302
314
|
**self.options_to_params(self.options_by_class["region_identifier"]),
|
|
303
315
|
)
|
|
304
316
|
|
|
@@ -334,6 +346,7 @@ class Decompiler(Analysis):
|
|
|
334
346
|
)
|
|
335
347
|
continue
|
|
336
348
|
|
|
349
|
+
pass_ = timethis(pass_)
|
|
337
350
|
a = pass_(
|
|
338
351
|
self.func,
|
|
339
352
|
blocks_by_addr=addr_to_blocks,
|
|
@@ -341,6 +354,7 @@ class Decompiler(Analysis):
|
|
|
341
354
|
graph=ail_graph,
|
|
342
355
|
variable_kb=self._variable_kb,
|
|
343
356
|
reaching_definitions=reaching_definitions,
|
|
357
|
+
entry_node_addr=self.clinic.entry_node_addr,
|
|
344
358
|
**kwargs,
|
|
345
359
|
)
|
|
346
360
|
|
|
@@ -389,6 +403,7 @@ class Decompiler(Analysis):
|
|
|
389
403
|
)
|
|
390
404
|
continue
|
|
391
405
|
|
|
406
|
+
pass_ = timethis(pass_)
|
|
392
407
|
a = pass_(
|
|
393
408
|
self.func,
|
|
394
409
|
blocks_by_addr=addr_to_blocks,
|
|
@@ -398,6 +413,7 @@ class Decompiler(Analysis):
|
|
|
398
413
|
region_identifier=ri,
|
|
399
414
|
reaching_definitions=reaching_definitions,
|
|
400
415
|
vvar_id_start=self.vvar_id_start,
|
|
416
|
+
entry_node_addr=self.clinic.entry_node_addr,
|
|
401
417
|
**kwargs,
|
|
402
418
|
)
|
|
403
419
|
|
|
@@ -425,6 +441,7 @@ class Decompiler(Analysis):
|
|
|
425
441
|
if pass_.STAGE != OptimizationPassStage.AFTER_STRUCTURING:
|
|
426
442
|
continue
|
|
427
443
|
|
|
444
|
+
pass_ = timethis(pass_)
|
|
428
445
|
a = pass_(self.func, seq=seq_node, **kwargs)
|
|
429
446
|
if a.out_seq:
|
|
430
447
|
seq_node = a.out_seq
|