angr 9.2.117__py3-none-win_amd64.whl → 9.2.119__py3-none-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of angr might be problematic. Click here for more details.

Files changed (1318) hide show
  1. angr/__init__.py +2 -1
  2. angr/__main__.py +21 -1
  3. angr/analyses/__init__.py +4 -0
  4. angr/analyses/analysis.py +88 -46
  5. angr/analyses/backward_slice.py +15 -18
  6. angr/analyses/binary_optimizer.py +29 -34
  7. angr/analyses/bindiff.py +35 -44
  8. angr/analyses/boyscout.py +1 -0
  9. angr/analyses/callee_cleanup_finder.py +3 -4
  10. angr/analyses/calling_convention.py +98 -98
  11. angr/analyses/cdg.py +5 -12
  12. angr/analyses/cfg/__init__.py +1 -0
  13. angr/analyses/cfg/cfb.py +14 -20
  14. angr/analyses/cfg/cfg.py +2 -1
  15. angr/analyses/cfg/cfg_arch_options.py +4 -1
  16. angr/analyses/cfg/cfg_base.py +122 -165
  17. angr/analyses/cfg/cfg_emulated.py +60 -92
  18. angr/analyses/cfg/cfg_fast.py +406 -335
  19. angr/analyses/cfg/cfg_fast_soot.py +10 -17
  20. angr/analyses/cfg/cfg_job_base.py +6 -7
  21. angr/analyses/cfg/indirect_jump_resolvers/__init__.py +1 -0
  22. angr/analyses/cfg/indirect_jump_resolvers/amd64_elf_got.py +2 -3
  23. angr/analyses/cfg/indirect_jump_resolvers/amd64_pe_iat.py +2 -3
  24. angr/analyses/cfg/indirect_jump_resolvers/arm_elf_fast.py +6 -8
  25. angr/analyses/cfg/indirect_jump_resolvers/const_resolver.py +3 -5
  26. angr/analyses/cfg/indirect_jump_resolvers/default_resolvers.py +1 -0
  27. angr/analyses/cfg/indirect_jump_resolvers/jumptable.py +97 -112
  28. angr/analyses/cfg/indirect_jump_resolvers/mips_elf_fast.py +26 -32
  29. angr/analyses/cfg/indirect_jump_resolvers/propagator_utils.py +1 -0
  30. angr/analyses/cfg/indirect_jump_resolvers/resolver.py +7 -7
  31. angr/analyses/cfg/indirect_jump_resolvers/x86_elf_pic_plt.py +3 -8
  32. angr/analyses/cfg/indirect_jump_resolvers/x86_pe_iat.py +2 -3
  33. angr/analyses/cfg_slice_to_sink/__init__.py +1 -0
  34. angr/analyses/cfg_slice_to_sink/cfg_slice_to_sink.py +4 -4
  35. angr/analyses/cfg_slice_to_sink/graph.py +4 -1
  36. angr/analyses/cfg_slice_to_sink/transitions.py +4 -2
  37. angr/analyses/class_identifier.py +1 -0
  38. angr/analyses/code_tagging.py +9 -9
  39. angr/analyses/complete_calling_conventions.py +28 -36
  40. angr/analyses/congruency_check.py +6 -11
  41. angr/analyses/data_dep/__init__.py +1 -0
  42. angr/analyses/data_dep/data_dependency_analysis.py +38 -48
  43. angr/analyses/data_dep/dep_nodes.py +13 -12
  44. angr/analyses/data_dep/sim_act_location.py +3 -0
  45. angr/analyses/datagraph_meta.py +7 -7
  46. angr/analyses/ddg.py +48 -69
  47. angr/analyses/decompiler/__init__.py +3 -0
  48. angr/analyses/decompiler/ail_simplifier.py +929 -400
  49. angr/analyses/decompiler/ailgraph_walker.py +1 -0
  50. angr/analyses/decompiler/block_io_finder.py +13 -4
  51. angr/analyses/decompiler/block_similarity.py +28 -18
  52. angr/analyses/decompiler/block_simplifier.py +40 -104
  53. angr/analyses/decompiler/callsite_maker.py +124 -82
  54. angr/analyses/decompiler/ccall_rewriters/__init__.py +1 -0
  55. angr/analyses/decompiler/ccall_rewriters/amd64_ccalls.py +115 -105
  56. angr/analyses/decompiler/ccall_rewriters/rewriter_base.py +2 -1
  57. angr/analyses/decompiler/clinic.py +371 -184
  58. angr/analyses/decompiler/condition_processor.py +127 -116
  59. angr/analyses/decompiler/counters/__init__.py +5 -0
  60. angr/analyses/decompiler/counters/boolean_counter.py +27 -0
  61. angr/analyses/decompiler/{call_counter.py → counters/call_counter.py} +5 -4
  62. angr/analyses/decompiler/{expression_counters.py → counters/expression_counters.py} +5 -4
  63. angr/analyses/decompiler/counters/seq_cf_structure_counter.py +63 -0
  64. angr/analyses/decompiler/decompilation_cache.py +2 -1
  65. angr/analyses/decompiler/decompilation_options.py +1 -0
  66. angr/analyses/decompiler/decompiler.py +50 -27
  67. angr/analyses/decompiler/dephication/__init__.py +6 -0
  68. angr/analyses/decompiler/dephication/dephication_base.py +87 -0
  69. angr/analyses/decompiler/dephication/graph_dephication.py +63 -0
  70. angr/analyses/decompiler/dephication/graph_rewriting.py +116 -0
  71. angr/analyses/decompiler/dephication/graph_vvar_mapping.py +313 -0
  72. angr/analyses/decompiler/dephication/rewriting_engine.py +247 -0
  73. angr/analyses/decompiler/dephication/seqnode_dephication.py +106 -0
  74. angr/analyses/decompiler/empty_node_remover.py +1 -0
  75. angr/analyses/decompiler/expression_narrower.py +12 -17
  76. angr/analyses/decompiler/goto_manager.py +43 -4
  77. angr/analyses/decompiler/graph_region.py +19 -31
  78. angr/analyses/decompiler/jump_target_collector.py +1 -0
  79. angr/analyses/decompiler/jumptable_entry_condition_rewriter.py +2 -1
  80. angr/analyses/decompiler/optimization_passes/__init__.py +7 -3
  81. angr/analyses/decompiler/optimization_passes/base_ptr_save_simplifier.py +23 -18
  82. angr/analyses/decompiler/optimization_passes/call_stmt_rewriter.py +46 -0
  83. angr/analyses/decompiler/optimization_passes/code_motion.py +4 -2
  84. angr/analyses/decompiler/optimization_passes/const_derefs.py +36 -36
  85. angr/analyses/decompiler/optimization_passes/const_prop_reverter.py +6 -9
  86. angr/analyses/decompiler/optimization_passes/cross_jump_reverter.py +4 -3
  87. angr/analyses/decompiler/optimization_passes/deadblock_remover.py +1 -0
  88. angr/analyses/decompiler/optimization_passes/div_simplifier.py +78 -72
  89. angr/analyses/decompiler/optimization_passes/duplication_reverter/__init__.py +2 -0
  90. angr/analyses/decompiler/optimization_passes/duplication_reverter/ail_merge_graph.py +503 -0
  91. angr/analyses/decompiler/optimization_passes/duplication_reverter/duplication_reverter.py +1215 -0
  92. angr/analyses/decompiler/optimization_passes/duplication_reverter/errors.py +16 -0
  93. angr/analyses/decompiler/optimization_passes/duplication_reverter/similarity.py +126 -0
  94. angr/analyses/decompiler/optimization_passes/duplication_reverter/utils.py +169 -0
  95. angr/analyses/decompiler/optimization_passes/engine_base.py +60 -63
  96. angr/analyses/decompiler/optimization_passes/expr_op_swapper.py +6 -7
  97. angr/analyses/decompiler/optimization_passes/flip_boolean_cmp.py +1 -0
  98. angr/analyses/decompiler/optimization_passes/inlined_string_transformation_simplifier.py +102 -37
  99. angr/analyses/decompiler/optimization_passes/ite_expr_converter.py +8 -10
  100. angr/analyses/decompiler/optimization_passes/ite_region_converter.py +128 -18
  101. angr/analyses/decompiler/optimization_passes/lowered_switch_simplifier.py +142 -145
  102. angr/analyses/decompiler/optimization_passes/mod_simplifier.py +27 -23
  103. angr/analyses/decompiler/optimization_passes/multi_simplifier.py +30 -34
  104. angr/analyses/decompiler/optimization_passes/optimization_pass.py +108 -47
  105. angr/analyses/decompiler/optimization_passes/register_save_area_simplifier.py +10 -3
  106. angr/analyses/decompiler/optimization_passes/ret_addr_save_simplifier.py +5 -6
  107. angr/analyses/decompiler/optimization_passes/ret_deduplicator.py +3 -2
  108. angr/analyses/decompiler/optimization_passes/return_duplicator_base.py +125 -13
  109. angr/analyses/decompiler/optimization_passes/return_duplicator_high.py +1 -0
  110. angr/analyses/decompiler/optimization_passes/return_duplicator_low.py +3 -2
  111. angr/analyses/decompiler/optimization_passes/stack_canary_simplifier.py +52 -21
  112. angr/analyses/decompiler/optimization_passes/switch_default_case_duplicator.py +3 -2
  113. angr/analyses/decompiler/optimization_passes/win_stack_canary_simplifier.py +47 -36
  114. angr/analyses/decompiler/optimization_passes/x86_gcc_getpc_simplifier.py +2 -1
  115. angr/analyses/decompiler/peephole_optimizations/__init__.py +2 -0
  116. angr/analyses/decompiler/peephole_optimizations/a_div_const_add_a_mul_n_div_const.py +26 -22
  117. angr/analyses/decompiler/peephole_optimizations/a_mul_const_div_shr_const.py +2 -2
  118. angr/analyses/decompiler/peephole_optimizations/a_shl_const_sub_a.py +1 -0
  119. angr/analyses/decompiler/peephole_optimizations/a_sub_a_div.py +2 -2
  120. angr/analyses/decompiler/peephole_optimizations/a_sub_a_div_const_mul_const.py +1 -0
  121. angr/analyses/decompiler/peephole_optimizations/a_sub_a_sub_n.py +8 -4
  122. angr/analyses/decompiler/peephole_optimizations/arm_cmpf.py +28 -27
  123. angr/analyses/decompiler/peephole_optimizations/base.py +17 -20
  124. angr/analyses/decompiler/peephole_optimizations/basepointeroffset_add_n.py +1 -0
  125. angr/analyses/decompiler/peephole_optimizations/basepointeroffset_and_mask.py +1 -0
  126. angr/analyses/decompiler/peephole_optimizations/bitwise_or_to_logical_or.py +2 -2
  127. angr/analyses/decompiler/peephole_optimizations/bool_expr_xor_1.py +2 -2
  128. angr/analyses/decompiler/peephole_optimizations/bswap.py +29 -22
  129. angr/analyses/decompiler/peephole_optimizations/cmpord_rewriter.py +3 -4
  130. angr/analyses/decompiler/peephole_optimizations/coalesce_adjacent_shrs.py +39 -0
  131. angr/analyses/decompiler/peephole_optimizations/coalesce_same_cascading_ifs.py +2 -1
  132. angr/analyses/decompiler/peephole_optimizations/const_mull_a_shift.py +94 -29
  133. angr/analyses/decompiler/peephole_optimizations/constant_derefs.py +1 -0
  134. angr/analyses/decompiler/peephole_optimizations/conv_a_sub0_shr_and.py +48 -49
  135. angr/analyses/decompiler/peephole_optimizations/conv_shl_shr.py +1 -0
  136. angr/analyses/decompiler/peephole_optimizations/eager_eval.py +41 -34
  137. angr/analyses/decompiler/peephole_optimizations/extended_byte_and_mask.py +2 -1
  138. angr/analyses/decompiler/peephole_optimizations/inlined_strcpy.py +28 -18
  139. angr/analyses/decompiler/peephole_optimizations/inlined_strcpy_consolidation.py +8 -4
  140. angr/analyses/decompiler/peephole_optimizations/inlined_wstrcpy.py +28 -18
  141. angr/analyses/decompiler/peephole_optimizations/invert_negated_logical_conjuction_disjunction.py +32 -32
  142. angr/analyses/decompiler/peephole_optimizations/one_sub_bool.py +2 -2
  143. angr/analyses/decompiler/peephole_optimizations/remove_cascading_conversions.py +23 -3
  144. angr/analyses/decompiler/peephole_optimizations/remove_empty_if_body.py +2 -1
  145. angr/analyses/decompiler/peephole_optimizations/remove_noop_conversions.py +4 -0
  146. angr/analyses/decompiler/peephole_optimizations/remove_redundant_bitmasks.py +1 -0
  147. angr/analyses/decompiler/peephole_optimizations/remove_redundant_conversions.py +4 -6
  148. angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_branch.py +14 -13
  149. angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_comparisons.py +2 -2
  150. angr/analyses/decompiler/peephole_optimizations/remove_redundant_nots.py +1 -0
  151. angr/analyses/decompiler/peephole_optimizations/remove_redundant_reinterprets.py +3 -2
  152. angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts.py +2 -2
  153. angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts_around_comparators.py +20 -16
  154. angr/analyses/decompiler/peephole_optimizations/rewrite_bit_extractions.py +3 -3
  155. angr/analyses/decompiler/peephole_optimizations/rewrite_mips_gp_loads.py +4 -2
  156. angr/analyses/decompiler/peephole_optimizations/rol_ror.py +66 -40
  157. angr/analyses/decompiler/peephole_optimizations/sar_to_signed_div.py +64 -57
  158. angr/analyses/decompiler/peephole_optimizations/simplify_pc_relative_loads.py +14 -14
  159. angr/analyses/decompiler/peephole_optimizations/single_bit_cond_to_boolexpr.py +1 -0
  160. angr/analyses/decompiler/peephole_optimizations/single_bit_xor.py +8 -5
  161. angr/analyses/decompiler/peephole_optimizations/tidy_stack_addr.py +4 -6
  162. angr/analyses/decompiler/redundant_label_remover.py +20 -19
  163. angr/analyses/decompiler/region_identifier.py +64 -77
  164. angr/analyses/decompiler/region_simplifiers/__init__.py +1 -0
  165. angr/analyses/decompiler/region_simplifiers/cascading_cond_transformer.py +2 -1
  166. angr/analyses/decompiler/region_simplifiers/cascading_ifs.py +1 -0
  167. angr/analyses/decompiler/region_simplifiers/expr_folding.py +43 -29
  168. angr/analyses/decompiler/region_simplifiers/goto.py +1 -0
  169. angr/analyses/decompiler/region_simplifiers/if_.py +29 -36
  170. angr/analyses/decompiler/region_simplifiers/ifelse.py +1 -0
  171. angr/analyses/decompiler/region_simplifiers/loop.py +27 -13
  172. angr/analyses/decompiler/region_simplifiers/node_address_finder.py +1 -0
  173. angr/analyses/decompiler/region_simplifiers/region_simplifier.py +1 -0
  174. angr/analyses/decompiler/region_simplifiers/switch_cluster_simplifier.py +12 -16
  175. angr/analyses/decompiler/region_simplifiers/switch_expr_simplifier.py +36 -32
  176. angr/analyses/decompiler/region_walker.py +1 -0
  177. angr/analyses/decompiler/return_maker.py +1 -0
  178. angr/analyses/decompiler/seq_to_blocks.py +1 -0
  179. angr/analyses/decompiler/sequence_walker.py +5 -10
  180. angr/analyses/decompiler/ssailification/__init__.py +4 -0
  181. angr/analyses/decompiler/ssailification/rewriting.py +325 -0
  182. angr/analyses/decompiler/ssailification/rewriting_engine.py +601 -0
  183. angr/analyses/decompiler/ssailification/rewriting_state.py +60 -0
  184. angr/analyses/decompiler/ssailification/ssailification.py +213 -0
  185. angr/analyses/decompiler/ssailification/traversal.py +97 -0
  186. angr/analyses/decompiler/ssailification/traversal_engine.py +131 -0
  187. angr/analyses/decompiler/ssailification/traversal_state.py +42 -0
  188. angr/analyses/decompiler/structured_codegen/__init__.py +1 -0
  189. angr/analyses/decompiler/structured_codegen/base.py +2 -2
  190. angr/analyses/decompiler/structured_codegen/c.py +172 -160
  191. angr/analyses/decompiler/structured_codegen/dummy.py +1 -0
  192. angr/analyses/decompiler/structured_codegen/dwarf_import.py +1 -0
  193. angr/analyses/decompiler/structuring/__init__.py +1 -0
  194. angr/analyses/decompiler/structuring/dream.py +27 -43
  195. angr/analyses/decompiler/structuring/phoenix.py +201 -201
  196. angr/analyses/decompiler/structuring/recursive_structurer.py +4 -3
  197. angr/analyses/decompiler/structuring/sailr.py +5 -4
  198. angr/analyses/decompiler/structuring/structurer_base.py +26 -23
  199. angr/analyses/decompiler/structuring/structurer_nodes.py +14 -24
  200. angr/analyses/decompiler/utils.py +112 -52
  201. angr/analyses/disassembly.py +75 -77
  202. angr/analyses/disassembly_utils.py +10 -13
  203. angr/analyses/dominance_frontier.py +25 -7
  204. angr/analyses/find_objects_static.py +3 -2
  205. angr/analyses/flirt.py +7 -10
  206. angr/analyses/forward_analysis/__init__.py +1 -0
  207. angr/analyses/forward_analysis/forward_analysis.py +9 -6
  208. angr/analyses/forward_analysis/job_info.py +3 -3
  209. angr/analyses/forward_analysis/visitors/__init__.py +1 -0
  210. angr/analyses/forward_analysis/visitors/call_graph.py +1 -0
  211. angr/analyses/forward_analysis/visitors/function_graph.py +3 -2
  212. angr/analyses/forward_analysis/visitors/graph.py +9 -9
  213. angr/analyses/forward_analysis/visitors/loop.py +1 -0
  214. angr/analyses/forward_analysis/visitors/single_node_graph.py +2 -2
  215. angr/analyses/identifier/__init__.py +1 -0
  216. angr/analyses/identifier/custom_callable.py +2 -2
  217. angr/analyses/identifier/errors.py +1 -0
  218. angr/analyses/identifier/func.py +6 -3
  219. angr/analyses/identifier/functions/__init__.py +2 -1
  220. angr/analyses/identifier/functions/atoi.py +2 -4
  221. angr/analyses/identifier/functions/based_atoi.py +3 -6
  222. angr/analyses/identifier/functions/fdprintf.py +1 -0
  223. angr/analyses/identifier/functions/free.py +3 -5
  224. angr/analyses/identifier/functions/int2str.py +11 -26
  225. angr/analyses/identifier/functions/malloc.py +4 -6
  226. angr/analyses/identifier/functions/memcmp.py +2 -4
  227. angr/analyses/identifier/functions/memcpy.py +2 -2
  228. angr/analyses/identifier/functions/memset.py +2 -2
  229. angr/analyses/identifier/functions/printf.py +1 -0
  230. angr/analyses/identifier/functions/recv_until.py +3 -6
  231. angr/analyses/identifier/functions/skip_calloc.py +2 -1
  232. angr/analyses/identifier/functions/skip_realloc.py +4 -6
  233. angr/analyses/identifier/functions/skip_recv_n.py +4 -6
  234. angr/analyses/identifier/functions/snprintf.py +2 -4
  235. angr/analyses/identifier/functions/sprintf.py +1 -0
  236. angr/analyses/identifier/functions/strcasecmp.py +1 -0
  237. angr/analyses/identifier/functions/strcmp.py +2 -1
  238. angr/analyses/identifier/functions/strcpy.py +2 -2
  239. angr/analyses/identifier/functions/strlen.py +1 -0
  240. angr/analyses/identifier/functions/strncmp.py +2 -1
  241. angr/analyses/identifier/functions/strncpy.py +2 -2
  242. angr/analyses/identifier/functions/strtol.py +2 -4
  243. angr/analyses/identifier/identify.py +35 -54
  244. angr/analyses/identifier/runner.py +6 -5
  245. angr/analyses/init_finder.py +17 -17
  246. angr/analyses/loop_analysis.py +10 -14
  247. angr/analyses/loopfinder.py +9 -13
  248. angr/analyses/propagator/__init__.py +1 -0
  249. angr/analyses/propagator/engine_ail.py +161 -166
  250. angr/analyses/propagator/engine_base.py +3 -2
  251. angr/analyses/propagator/engine_vex.py +47 -48
  252. angr/analyses/propagator/outdated_definition_walker.py +18 -23
  253. angr/analyses/propagator/propagator.py +8 -12
  254. angr/analyses/propagator/tmpvar_finder.py +1 -0
  255. angr/analyses/propagator/top_checker_mixin.py +2 -4
  256. angr/analyses/propagator/values.py +1 -0
  257. angr/analyses/propagator/vex_vars.py +3 -2
  258. angr/analyses/proximity_graph.py +12 -20
  259. angr/analyses/reaching_definitions/__init__.py +5 -4
  260. angr/analyses/reaching_definitions/call_trace.py +7 -6
  261. angr/analyses/reaching_definitions/dep_graph.py +18 -23
  262. angr/analyses/reaching_definitions/engine_ail.py +89 -121
  263. angr/analyses/reaching_definitions/engine_vex.py +20 -32
  264. angr/analyses/reaching_definitions/function_handler.py +38 -35
  265. angr/analyses/reaching_definitions/function_handler_library/__init__.py +1 -0
  266. angr/analyses/reaching_definitions/function_handler_library/stdio.py +4 -6
  267. angr/analyses/reaching_definitions/function_handler_library/stdlib.py +1 -2
  268. angr/analyses/reaching_definitions/function_handler_library/string.py +2 -4
  269. angr/analyses/reaching_definitions/function_handler_library/unistd.py +1 -0
  270. angr/analyses/reaching_definitions/heap_allocator.py +7 -6
  271. angr/analyses/reaching_definitions/rd_initializer.py +27 -25
  272. angr/analyses/reaching_definitions/rd_state.py +14 -16
  273. angr/analyses/reaching_definitions/reaching_definitions.py +27 -36
  274. angr/analyses/reaching_definitions/subject.py +3 -2
  275. angr/analyses/reassembler.py +189 -253
  276. angr/analyses/s_liveness/__init__.py +2 -0
  277. angr/analyses/s_liveness/s_liveness.py +153 -0
  278. angr/analyses/s_propagator/__init__.py +2 -0
  279. angr/analyses/s_propagator/s_propagator.py +250 -0
  280. angr/analyses/s_reaching_definitions/__init__.py +2 -0
  281. angr/analyses/s_reaching_definitions/s_rda.py +479 -0
  282. angr/analyses/soot_class_hierarchy.py +15 -24
  283. angr/analyses/stack_pointer_tracker.py +106 -98
  284. angr/analyses/static_hooker.py +3 -2
  285. angr/analyses/typehoon/__init__.py +1 -0
  286. angr/analyses/typehoon/dfa.py +5 -5
  287. angr/analyses/typehoon/lifter.py +5 -4
  288. angr/analyses/typehoon/simple_solver.py +80 -64
  289. angr/analyses/typehoon/translator.py +26 -16
  290. angr/analyses/typehoon/typeconsts.py +22 -12
  291. angr/analyses/typehoon/typehoon.py +8 -10
  292. angr/analyses/typehoon/typevars.py +37 -49
  293. angr/analyses/typehoon/variance.py +1 -0
  294. angr/analyses/variable_recovery/__init__.py +1 -0
  295. angr/analyses/variable_recovery/annotations.py +1 -0
  296. angr/analyses/variable_recovery/engine_ail.py +78 -32
  297. angr/analyses/variable_recovery/engine_base.py +233 -59
  298. angr/analyses/variable_recovery/engine_vex.py +17 -21
  299. angr/analyses/variable_recovery/irsb_scanner.py +1 -0
  300. angr/analyses/variable_recovery/variable_recovery.py +14 -16
  301. angr/analyses/variable_recovery/variable_recovery_base.py +12 -14
  302. angr/analyses/variable_recovery/variable_recovery_fast.py +67 -47
  303. angr/analyses/veritesting.py +10 -16
  304. angr/analyses/vfg.py +102 -148
  305. angr/analyses/vsa_ddg.py +3 -5
  306. angr/analyses/vtable.py +6 -6
  307. angr/analyses/xrefs.py +9 -13
  308. angr/angrdb/__init__.py +4 -2
  309. angr/angrdb/db.py +51 -53
  310. angr/angrdb/models.py +1 -0
  311. angr/angrdb/serializers/__init__.py +1 -0
  312. angr/angrdb/serializers/cfg_model.py +2 -2
  313. angr/angrdb/serializers/comments.py +1 -0
  314. angr/angrdb/serializers/funcs.py +4 -3
  315. angr/angrdb/serializers/kb.py +3 -2
  316. angr/angrdb/serializers/labels.py +1 -0
  317. angr/angrdb/serializers/structured_code.py +5 -10
  318. angr/angrdb/serializers/variables.py +6 -6
  319. angr/angrdb/serializers/xrefs.py +2 -2
  320. angr/annocfg.py +17 -25
  321. angr/blade.py +19 -23
  322. angr/block.py +11 -13
  323. angr/callable.py +4 -3
  324. angr/calling_conventions.py +147 -147
  325. angr/code_location.py +12 -13
  326. angr/codenode.py +2 -1
  327. angr/concretization_strategies/__init__.py +6 -6
  328. angr/concretization_strategies/any.py +5 -4
  329. angr/concretization_strategies/any_named.py +1 -0
  330. angr/concretization_strategies/controlled_data.py +1 -0
  331. angr/concretization_strategies/eval.py +2 -2
  332. angr/concretization_strategies/logging.py +1 -0
  333. angr/concretization_strategies/max.py +6 -6
  334. angr/concretization_strategies/nonzero.py +1 -0
  335. angr/concretization_strategies/nonzero_range.py +4 -3
  336. angr/concretization_strategies/norepeats.py +5 -4
  337. angr/concretization_strategies/norepeats_range.py +1 -0
  338. angr/concretization_strategies/range.py +1 -0
  339. angr/concretization_strategies/signed_add.py +13 -9
  340. angr/concretization_strategies/single.py +2 -0
  341. angr/concretization_strategies/solutions.py +1 -0
  342. angr/concretization_strategies/unlimited_range.py +1 -0
  343. angr/distributed/__init__.py +1 -0
  344. angr/distributed/server.py +2 -2
  345. angr/distributed/worker.py +3 -3
  346. angr/engines/__init__.py +1 -0
  347. angr/engines/concrete.py +2 -1
  348. angr/engines/engine.py +4 -6
  349. angr/engines/failure.py +2 -1
  350. angr/engines/hook.py +1 -0
  351. angr/engines/light/__init__.py +1 -0
  352. angr/engines/light/data.py +221 -255
  353. angr/engines/light/engine.py +72 -85
  354. angr/engines/pcode/__init__.py +1 -0
  355. angr/engines/pcode/behavior.py +3 -3
  356. angr/engines/pcode/cc.py +1 -0
  357. angr/engines/pcode/emulate.py +13 -16
  358. angr/engines/pcode/engine.py +7 -5
  359. angr/engines/pcode/lifter.py +62 -79
  360. angr/engines/procedure.py +1 -0
  361. angr/engines/soot/__init__.py +1 -0
  362. angr/engines/soot/engine.py +46 -52
  363. angr/engines/soot/exceptions.py +3 -0
  364. angr/engines/soot/expressions/__init__.py +1 -0
  365. angr/engines/soot/expressions/arrayref.py +1 -0
  366. angr/engines/soot/expressions/base.py +4 -5
  367. angr/engines/soot/expressions/binop.py +1 -0
  368. angr/engines/soot/expressions/cast.py +1 -0
  369. angr/engines/soot/expressions/condition.py +2 -1
  370. angr/engines/soot/expressions/constants.py +1 -0
  371. angr/engines/soot/expressions/instanceOf.py +1 -0
  372. angr/engines/soot/expressions/instancefieldref.py +1 -0
  373. angr/engines/soot/expressions/invoke.py +7 -9
  374. angr/engines/soot/expressions/length.py +1 -0
  375. angr/engines/soot/expressions/local.py +1 -0
  376. angr/engines/soot/expressions/new.py +1 -0
  377. angr/engines/soot/expressions/newArray.py +1 -0
  378. angr/engines/soot/expressions/newMultiArray.py +3 -3
  379. angr/engines/soot/expressions/paramref.py +1 -0
  380. angr/engines/soot/expressions/phi.py +1 -0
  381. angr/engines/soot/expressions/staticfieldref.py +1 -0
  382. angr/engines/soot/expressions/thisref.py +1 -0
  383. angr/engines/soot/expressions/unsupported.py +1 -0
  384. angr/engines/soot/field_dispatcher.py +5 -8
  385. angr/engines/soot/method_dispatcher.py +4 -7
  386. angr/engines/soot/statements/__init__.py +4 -4
  387. angr/engines/soot/statements/assign.py +1 -0
  388. angr/engines/soot/statements/base.py +6 -7
  389. angr/engines/soot/statements/goto.py +2 -1
  390. angr/engines/soot/statements/identity.py +1 -0
  391. angr/engines/soot/statements/if_.py +2 -1
  392. angr/engines/soot/statements/invoke.py +1 -0
  393. angr/engines/soot/statements/return_.py +1 -0
  394. angr/engines/soot/statements/switch.py +1 -0
  395. angr/engines/soot/statements/throw.py +2 -1
  396. angr/engines/soot/values/__init__.py +4 -2
  397. angr/engines/soot/values/arrayref.py +8 -10
  398. angr/engines/soot/values/base.py +4 -1
  399. angr/engines/soot/values/constants.py +1 -0
  400. angr/engines/soot/values/instancefieldref.py +1 -0
  401. angr/engines/soot/values/local.py +1 -0
  402. angr/engines/soot/values/paramref.py +1 -0
  403. angr/engines/soot/values/staticfieldref.py +1 -0
  404. angr/engines/soot/values/strref.py +3 -2
  405. angr/engines/soot/values/thisref.py +1 -0
  406. angr/engines/successors.py +21 -24
  407. angr/engines/syscall.py +9 -9
  408. angr/engines/unicorn.py +14 -9
  409. angr/engines/vex/__init__.py +1 -0
  410. angr/engines/vex/claripy/__init__.py +1 -0
  411. angr/engines/vex/claripy/ccall.py +86 -112
  412. angr/engines/vex/claripy/datalayer.py +12 -16
  413. angr/engines/vex/claripy/irop.py +85 -104
  414. angr/engines/vex/heavy/__init__.py +1 -0
  415. angr/engines/vex/heavy/actions.py +1 -0
  416. angr/engines/vex/heavy/concretizers.py +8 -9
  417. angr/engines/vex/heavy/dirty.py +6 -5
  418. angr/engines/vex/heavy/heavy.py +15 -14
  419. angr/engines/vex/heavy/inspect.py +1 -0
  420. angr/engines/vex/heavy/resilience.py +2 -2
  421. angr/engines/vex/heavy/super_fastpath.py +2 -2
  422. angr/engines/vex/lifter.py +28 -35
  423. angr/engines/vex/light/__init__.py +1 -0
  424. angr/engines/vex/light/light.py +2 -4
  425. angr/engines/vex/light/resilience.py +1 -0
  426. angr/engines/vex/light/slicing.py +1 -0
  427. angr/errors.py +6 -1
  428. angr/exploration_techniques/__init__.py +3 -2
  429. angr/exploration_techniques/bucketizer.py +2 -3
  430. angr/exploration_techniques/common.py +3 -3
  431. angr/exploration_techniques/dfs.py +1 -0
  432. angr/exploration_techniques/director.py +17 -19
  433. angr/exploration_techniques/driller_core.py +3 -7
  434. angr/exploration_techniques/explorer.py +7 -3
  435. angr/exploration_techniques/lengthlimiter.py +1 -0
  436. angr/exploration_techniques/local_loop_seer.py +2 -2
  437. angr/exploration_techniques/loop_seer.py +11 -14
  438. angr/exploration_techniques/manual_mergepoint.py +3 -2
  439. angr/exploration_techniques/memory_watcher.py +1 -0
  440. angr/exploration_techniques/oppologist.py +4 -4
  441. angr/exploration_techniques/slicecutor.py +1 -0
  442. angr/exploration_techniques/spiller.py +8 -8
  443. angr/exploration_techniques/spiller_db.py +1 -0
  444. angr/exploration_techniques/stochastic.py +3 -4
  445. angr/exploration_techniques/stub_stasher.py +1 -0
  446. angr/exploration_techniques/suggestions.py +5 -4
  447. angr/exploration_techniques/symbion.py +1 -0
  448. angr/exploration_techniques/tech_builder.py +1 -0
  449. angr/exploration_techniques/threading.py +1 -0
  450. angr/exploration_techniques/timeout.py +1 -0
  451. angr/exploration_techniques/tracer.py +34 -39
  452. angr/exploration_techniques/unique.py +1 -0
  453. angr/exploration_techniques/veritesting.py +1 -0
  454. angr/factory.py +9 -9
  455. angr/flirt/__init__.py +1 -0
  456. angr/flirt/build_sig.py +8 -12
  457. angr/keyed_region.py +10 -17
  458. angr/knowledge_base/__init__.py +1 -0
  459. angr/knowledge_base/knowledge_base.py +17 -17
  460. angr/knowledge_plugins/__init__.py +1 -0
  461. angr/knowledge_plugins/callsite_prototypes.py +1 -0
  462. angr/knowledge_plugins/cfg/__init__.py +2 -0
  463. angr/knowledge_plugins/cfg/cfg_manager.py +2 -1
  464. angr/knowledge_plugins/cfg/cfg_model.py +27 -43
  465. angr/knowledge_plugins/cfg/cfg_node.py +8 -19
  466. angr/knowledge_plugins/cfg/indirect_jump.py +3 -5
  467. angr/knowledge_plugins/cfg/memory_data.py +4 -3
  468. angr/knowledge_plugins/comments.py +1 -0
  469. angr/knowledge_plugins/custom_strings.py +1 -0
  470. angr/knowledge_plugins/data.py +1 -0
  471. angr/knowledge_plugins/debug_variables.py +18 -23
  472. angr/knowledge_plugins/functions/__init__.py +1 -0
  473. angr/knowledge_plugins/functions/function.py +49 -53
  474. angr/knowledge_plugins/functions/function_manager.py +14 -14
  475. angr/knowledge_plugins/functions/function_parser.py +38 -42
  476. angr/knowledge_plugins/functions/soot_function.py +5 -6
  477. angr/knowledge_plugins/indirect_jumps.py +1 -0
  478. angr/knowledge_plugins/key_definitions/__init__.py +1 -0
  479. angr/knowledge_plugins/key_definitions/atoms.py +65 -17
  480. angr/knowledge_plugins/key_definitions/constants.py +6 -0
  481. angr/knowledge_plugins/key_definitions/definition.py +22 -25
  482. angr/knowledge_plugins/key_definitions/environment.py +18 -14
  483. angr/knowledge_plugins/key_definitions/heap_address.py +4 -3
  484. angr/knowledge_plugins/key_definitions/key_definition_manager.py +5 -4
  485. angr/knowledge_plugins/key_definitions/live_definitions.py +36 -45
  486. angr/knowledge_plugins/key_definitions/liveness.py +18 -23
  487. angr/knowledge_plugins/key_definitions/rd_model.py +29 -34
  488. angr/knowledge_plugins/key_definitions/tag.py +7 -6
  489. angr/knowledge_plugins/key_definitions/undefined.py +3 -0
  490. angr/knowledge_plugins/key_definitions/unknown_size.py +3 -0
  491. angr/knowledge_plugins/key_definitions/uses.py +21 -23
  492. angr/knowledge_plugins/labels.py +3 -2
  493. angr/knowledge_plugins/patches.py +2 -1
  494. angr/knowledge_plugins/plugin.py +2 -1
  495. angr/knowledge_plugins/propagations/__init__.py +1 -0
  496. angr/knowledge_plugins/propagations/prop_value.py +25 -27
  497. angr/knowledge_plugins/propagations/propagation_manager.py +2 -2
  498. angr/knowledge_plugins/propagations/propagation_model.py +5 -4
  499. angr/knowledge_plugins/propagations/states.py +71 -81
  500. angr/knowledge_plugins/structured_code/__init__.py +1 -0
  501. angr/knowledge_plugins/structured_code/manager.py +5 -4
  502. angr/knowledge_plugins/sync/__init__.py +1 -0
  503. angr/knowledge_plugins/sync/sync_controller.py +10 -15
  504. angr/knowledge_plugins/types.py +1 -0
  505. angr/knowledge_plugins/variables/__init__.py +1 -0
  506. angr/knowledge_plugins/variables/variable_access.py +9 -10
  507. angr/knowledge_plugins/variables/variable_manager.py +84 -55
  508. angr/knowledge_plugins/xrefs/__init__.py +1 -0
  509. angr/knowledge_plugins/xrefs/xref.py +7 -11
  510. angr/knowledge_plugins/xrefs/xref_manager.py +1 -0
  511. angr/knowledge_plugins/xrefs/xref_types.py +3 -0
  512. angr/lib/angr_native.dll +0 -0
  513. angr/misc/__init__.py +1 -0
  514. angr/misc/ansi.py +1 -0
  515. angr/misc/autoimport.py +3 -2
  516. angr/misc/bug_report.py +6 -5
  517. angr/misc/hookset.py +3 -2
  518. angr/misc/loggers.py +2 -2
  519. angr/misc/picklable_lock.py +1 -0
  520. angr/misc/plugins.py +11 -13
  521. angr/misc/range.py +3 -0
  522. angr/misc/telemetry.py +54 -0
  523. angr/misc/testing.py +2 -1
  524. angr/misc/ux.py +5 -5
  525. angr/misc/weakpatch.py +1 -0
  526. angr/procedures/__init__.py +1 -0
  527. angr/procedures/cgc/_terminate.py +1 -0
  528. angr/procedures/cgc/allocate.py +1 -0
  529. angr/procedures/cgc/deallocate.py +1 -0
  530. angr/procedures/cgc/fdwait.py +1 -0
  531. angr/procedures/cgc/random.py +1 -0
  532. angr/procedures/cgc/receive.py +26 -26
  533. angr/procedures/cgc/transmit.py +1 -0
  534. angr/procedures/definitions/__init__.py +9 -10
  535. angr/procedures/definitions/cgc.py +1 -0
  536. angr/procedures/definitions/glibc.py +1 -0
  537. angr/procedures/definitions/gnulib.py +1 -0
  538. angr/procedures/definitions/libstdcpp.py +1 -0
  539. angr/procedures/definitions/linux_kernel.py +1 -0
  540. angr/procedures/definitions/linux_loader.py +1 -0
  541. angr/procedures/definitions/msvcr.py +1 -0
  542. angr/procedures/definitions/parse_syscalls_from_local_system.py +2 -1
  543. angr/procedures/definitions/parse_win32json.py +27 -30
  544. angr/procedures/definitions/types_win32.py +1 -0
  545. angr/procedures/definitions/wdk_api-ms-win-dx-d3dkmt-l1-1-4.py +1 -0
  546. angr/procedures/definitions/wdk_api-ms-win-dx-d3dkmt-l1-1-6.py +1 -0
  547. angr/procedures/definitions/wdk_clfs.py +1 -0
  548. angr/procedures/definitions/wdk_fltmgr.py +1 -0
  549. angr/procedures/definitions/wdk_fwpkclnt.py +1 -0
  550. angr/procedures/definitions/wdk_fwpuclnt.py +1 -0
  551. angr/procedures/definitions/wdk_gdi32.py +1 -0
  552. angr/procedures/definitions/wdk_hal.py +1 -0
  553. angr/procedures/definitions/wdk_ksecdd.py +1 -0
  554. angr/procedures/definitions/wdk_ndis.py +1 -0
  555. angr/procedures/definitions/wdk_ntoskrnl.py +1 -0
  556. angr/procedures/definitions/wdk_offreg.py +1 -0
  557. angr/procedures/definitions/wdk_pshed.py +1 -0
  558. angr/procedures/definitions/wdk_secur32.py +1 -0
  559. angr/procedures/definitions/wdk_vhfum.py +1 -0
  560. angr/procedures/definitions/win32_aclui.py +1 -0
  561. angr/procedures/definitions/win32_activeds.py +1 -0
  562. angr/procedures/definitions/win32_advapi32.py +1 -0
  563. angr/procedures/definitions/win32_advpack.py +1 -0
  564. angr/procedures/definitions/win32_amsi.py +1 -0
  565. angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-1.py +1 -0
  566. angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-3.py +1 -0
  567. angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-6.py +1 -0
  568. angr/procedures/definitions/win32_api-ms-win-core-apiquery-l2-1-0.py +1 -0
  569. angr/procedures/definitions/win32_api-ms-win-core-backgroundtask-l1-1-0.py +1 -0
  570. angr/procedures/definitions/win32_api-ms-win-core-comm-l1-1-1.py +1 -0
  571. angr/procedures/definitions/win32_api-ms-win-core-comm-l1-1-2.py +1 -0
  572. angr/procedures/definitions/win32_api-ms-win-core-enclave-l1-1-1.py +1 -0
  573. angr/procedures/definitions/win32_api-ms-win-core-errorhandling-l1-1-3.py +1 -0
  574. angr/procedures/definitions/win32_api-ms-win-core-featurestaging-l1-1-0.py +1 -0
  575. angr/procedures/definitions/win32_api-ms-win-core-featurestaging-l1-1-1.py +1 -0
  576. angr/procedures/definitions/win32_api-ms-win-core-file-fromapp-l1-1-0.py +1 -0
  577. angr/procedures/definitions/win32_api-ms-win-core-handle-l1-1-0.py +1 -0
  578. angr/procedures/definitions/win32_api-ms-win-core-ioring-l1-1-0.py +1 -0
  579. angr/procedures/definitions/win32_api-ms-win-core-marshal-l1-1-0.py +1 -0
  580. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-3.py +1 -0
  581. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-4.py +1 -0
  582. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-5.py +1 -0
  583. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-6.py +1 -0
  584. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-7.py +1 -0
  585. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-8.py +1 -0
  586. angr/procedures/definitions/win32_api-ms-win-core-path-l1-1-0.py +1 -0
  587. angr/procedures/definitions/win32_api-ms-win-core-psm-appnotify-l1-1-0.py +1 -0
  588. angr/procedures/definitions/win32_api-ms-win-core-psm-appnotify-l1-1-1.py +1 -0
  589. angr/procedures/definitions/win32_api-ms-win-core-realtime-l1-1-1.py +1 -0
  590. angr/procedures/definitions/win32_api-ms-win-core-realtime-l1-1-2.py +1 -0
  591. angr/procedures/definitions/win32_api-ms-win-core-slapi-l1-1-0.py +1 -0
  592. angr/procedures/definitions/win32_api-ms-win-core-state-helpers-l1-1-0.py +1 -0
  593. angr/procedures/definitions/win32_api-ms-win-core-synch-l1-2-0.py +1 -0
  594. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-0.py +1 -0
  595. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-3.py +1 -0
  596. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-4.py +1 -0
  597. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-6.py +1 -0
  598. angr/procedures/definitions/win32_api-ms-win-core-util-l1-1-1.py +1 -0
  599. angr/procedures/definitions/win32_api-ms-win-core-winrt-error-l1-1-0.py +1 -0
  600. angr/procedures/definitions/win32_api-ms-win-core-winrt-error-l1-1-1.py +1 -0
  601. angr/procedures/definitions/win32_api-ms-win-core-winrt-l1-1-0.py +1 -0
  602. angr/procedures/definitions/win32_api-ms-win-core-winrt-registration-l1-1-0.py +1 -0
  603. angr/procedures/definitions/win32_api-ms-win-core-winrt-robuffer-l1-1-0.py +1 -0
  604. angr/procedures/definitions/win32_api-ms-win-core-winrt-roparameterizediid-l1-1-0.py +1 -0
  605. angr/procedures/definitions/win32_api-ms-win-core-winrt-string-l1-1-0.py +1 -0
  606. angr/procedures/definitions/win32_api-ms-win-core-winrt-string-l1-1-1.py +1 -0
  607. angr/procedures/definitions/win32_api-ms-win-core-wow64-l1-1-1.py +1 -0
  608. angr/procedures/definitions/win32_api-ms-win-devices-query-l1-1-0.py +1 -0
  609. angr/procedures/definitions/win32_api-ms-win-devices-query-l1-1-1.py +1 -0
  610. angr/procedures/definitions/win32_api-ms-win-dx-d3dkmt-l1-1-0.py +1 -0
  611. angr/procedures/definitions/win32_api-ms-win-gaming-deviceinformation-l1-1-0.py +1 -0
  612. angr/procedures/definitions/win32_api-ms-win-gaming-expandedresources-l1-1-0.py +1 -0
  613. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-0.py +1 -0
  614. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-1.py +1 -0
  615. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-2.py +1 -0
  616. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-3.py +1 -0
  617. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-4.py +1 -0
  618. angr/procedures/definitions/win32_api-ms-win-mm-misc-l1-1-1.py +1 -0
  619. angr/procedures/definitions/win32_api-ms-win-net-isolation-l1-1-0.py +1 -0
  620. angr/procedures/definitions/win32_api-ms-win-security-base-l1-2-2.py +1 -0
  621. angr/procedures/definitions/win32_api-ms-win-security-isolatedcontainer-l1-1-0.py +1 -0
  622. angr/procedures/definitions/win32_api-ms-win-security-isolatedcontainer-l1-1-1.py +1 -0
  623. angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-3.py +1 -0
  624. angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-4.py +1 -0
  625. angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-5.py +1 -0
  626. angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-0.py +1 -0
  627. angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-1.py +1 -0
  628. angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-2.py +1 -0
  629. angr/procedures/definitions/win32_api-ms-win-shcore-stream-winrt-l1-1-0.py +1 -0
  630. angr/procedures/definitions/win32_api-ms-win-wsl-api-l1-1-0.py +1 -0
  631. angr/procedures/definitions/win32_apphelp.py +1 -0
  632. angr/procedures/definitions/win32_authz.py +1 -0
  633. angr/procedures/definitions/win32_avicap32.py +1 -0
  634. angr/procedures/definitions/win32_avifil32.py +1 -0
  635. angr/procedures/definitions/win32_avrt.py +1 -0
  636. angr/procedures/definitions/win32_bcp47mrm.py +1 -0
  637. angr/procedures/definitions/win32_bcrypt.py +1 -0
  638. angr/procedures/definitions/win32_bcryptprimitives.py +1 -0
  639. angr/procedures/definitions/win32_bluetoothapis.py +1 -0
  640. angr/procedures/definitions/win32_bthprops.py +1 -0
  641. angr/procedures/definitions/win32_bthprops_cpl.py +1 -0
  642. angr/procedures/definitions/win32_cabinet.py +1 -0
  643. angr/procedures/definitions/win32_certadm.py +1 -0
  644. angr/procedures/definitions/win32_certpoleng.py +1 -0
  645. angr/procedures/definitions/win32_cfgmgr32.py +1 -0
  646. angr/procedures/definitions/win32_chakra.py +1 -0
  647. angr/procedures/definitions/win32_cldapi.py +1 -0
  648. angr/procedures/definitions/win32_clfsw32.py +1 -0
  649. angr/procedures/definitions/win32_clusapi.py +1 -0
  650. angr/procedures/definitions/win32_comctl32.py +1 -0
  651. angr/procedures/definitions/win32_comdlg32.py +1 -0
  652. angr/procedures/definitions/win32_compstui.py +1 -0
  653. angr/procedures/definitions/win32_computecore.py +1 -0
  654. angr/procedures/definitions/win32_computenetwork.py +1 -0
  655. angr/procedures/definitions/win32_computestorage.py +1 -0
  656. angr/procedures/definitions/win32_comsvcs.py +1 -0
  657. angr/procedures/definitions/win32_coremessaging.py +1 -0
  658. angr/procedures/definitions/win32_credui.py +1 -0
  659. angr/procedures/definitions/win32_crypt32.py +1 -0
  660. angr/procedures/definitions/win32_cryptnet.py +1 -0
  661. angr/procedures/definitions/win32_cryptui.py +1 -0
  662. angr/procedures/definitions/win32_cryptxml.py +1 -0
  663. angr/procedures/definitions/win32_cscapi.py +1 -0
  664. angr/procedures/definitions/win32_d2d1.py +1 -0
  665. angr/procedures/definitions/win32_d3d10.py +1 -0
  666. angr/procedures/definitions/win32_d3d10_1.py +1 -0
  667. angr/procedures/definitions/win32_d3d11.py +1 -0
  668. angr/procedures/definitions/win32_d3d12.py +1 -0
  669. angr/procedures/definitions/win32_d3d9.py +1 -0
  670. angr/procedures/definitions/win32_d3dcompiler_47.py +1 -0
  671. angr/procedures/definitions/win32_d3dcsx.py +1 -0
  672. angr/procedures/definitions/win32_davclnt.py +1 -0
  673. angr/procedures/definitions/win32_dbgeng.py +1 -0
  674. angr/procedures/definitions/win32_dbghelp.py +1 -0
  675. angr/procedures/definitions/win32_dbgmodel.py +1 -0
  676. angr/procedures/definitions/win32_dciman32.py +1 -0
  677. angr/procedures/definitions/win32_dcomp.py +1 -0
  678. angr/procedures/definitions/win32_ddraw.py +1 -0
  679. angr/procedures/definitions/win32_deviceaccess.py +1 -0
  680. angr/procedures/definitions/win32_dflayout.py +1 -0
  681. angr/procedures/definitions/win32_dhcpcsvc.py +1 -0
  682. angr/procedures/definitions/win32_dhcpcsvc6.py +1 -0
  683. angr/procedures/definitions/win32_dhcpsapi.py +1 -0
  684. angr/procedures/definitions/win32_diagnosticdataquery.py +1 -0
  685. angr/procedures/definitions/win32_dinput8.py +1 -0
  686. angr/procedures/definitions/win32_directml.py +1 -0
  687. angr/procedures/definitions/win32_dmprocessxmlfiltered.py +1 -0
  688. angr/procedures/definitions/win32_dnsapi.py +1 -0
  689. angr/procedures/definitions/win32_drt.py +1 -0
  690. angr/procedures/definitions/win32_drtprov.py +1 -0
  691. angr/procedures/definitions/win32_drttransport.py +1 -0
  692. angr/procedures/definitions/win32_dsound.py +1 -0
  693. angr/procedures/definitions/win32_dsparse.py +1 -0
  694. angr/procedures/definitions/win32_dsprop.py +1 -0
  695. angr/procedures/definitions/win32_dssec.py +1 -0
  696. angr/procedures/definitions/win32_dsuiext.py +1 -0
  697. angr/procedures/definitions/win32_dwmapi.py +1 -0
  698. angr/procedures/definitions/win32_dwrite.py +1 -0
  699. angr/procedures/definitions/win32_dxcompiler.py +1 -0
  700. angr/procedures/definitions/win32_dxcore.py +1 -0
  701. angr/procedures/definitions/win32_dxgi.py +1 -0
  702. angr/procedures/definitions/win32_dxva2.py +1 -0
  703. angr/procedures/definitions/win32_eappcfg.py +1 -0
  704. angr/procedures/definitions/win32_eappprxy.py +1 -0
  705. angr/procedures/definitions/win32_efswrt.py +1 -0
  706. angr/procedures/definitions/win32_elscore.py +1 -0
  707. angr/procedures/definitions/win32_esent.py +1 -0
  708. angr/procedures/definitions/win32_evr.py +1 -0
  709. angr/procedures/definitions/win32_faultrep.py +1 -0
  710. angr/procedures/definitions/win32_fhsvcctl.py +1 -0
  711. angr/procedures/definitions/win32_firewallapi.py +1 -0
  712. angr/procedures/definitions/win32_fltlib.py +1 -0
  713. angr/procedures/definitions/win32_fontsub.py +1 -0
  714. angr/procedures/definitions/win32_forceinline.py +1 -0
  715. angr/procedures/definitions/win32_fwpuclnt.py +1 -0
  716. angr/procedures/definitions/win32_fxsutility.py +1 -0
  717. angr/procedures/definitions/win32_gdi32.py +1 -0
  718. angr/procedures/definitions/win32_gdiplus.py +1 -0
  719. angr/procedures/definitions/win32_glu32.py +1 -0
  720. angr/procedures/definitions/win32_gpedit.py +1 -0
  721. angr/procedures/definitions/win32_hhctrl_ocx.py +1 -0
  722. angr/procedures/definitions/win32_hid.py +1 -0
  723. angr/procedures/definitions/win32_hlink.py +1 -0
  724. angr/procedures/definitions/win32_hrtfapo.py +1 -0
  725. angr/procedures/definitions/win32_httpapi.py +1 -0
  726. angr/procedures/definitions/win32_icm32.py +1 -0
  727. angr/procedures/definitions/win32_icmui.py +1 -0
  728. angr/procedures/definitions/win32_icu.py +1 -0
  729. angr/procedures/definitions/win32_ieframe.py +1 -0
  730. angr/procedures/definitions/win32_imagehlp.py +1 -0
  731. angr/procedures/definitions/win32_imgutil.py +1 -0
  732. angr/procedures/definitions/win32_imm32.py +1 -0
  733. angr/procedures/definitions/win32_infocardapi.py +1 -0
  734. angr/procedures/definitions/win32_inkobjcore.py +1 -0
  735. angr/procedures/definitions/win32_iphlpapi.py +1 -0
  736. angr/procedures/definitions/win32_iscsidsc.py +1 -0
  737. angr/procedures/definitions/win32_isolatedwindowsenvironmentutils.py +1 -0
  738. angr/procedures/definitions/win32_kernel32.py +1 -0
  739. angr/procedures/definitions/win32_kernelbase.py +1 -0
  740. angr/procedures/definitions/win32_keycredmgr.py +1 -0
  741. angr/procedures/definitions/win32_ksproxy_ax.py +1 -0
  742. angr/procedures/definitions/win32_ksuser.py +1 -0
  743. angr/procedures/definitions/win32_ktmw32.py +1 -0
  744. angr/procedures/definitions/win32_licenseprotection.py +1 -0
  745. angr/procedures/definitions/win32_loadperf.py +1 -0
  746. angr/procedures/definitions/win32_magnification.py +1 -0
  747. angr/procedures/definitions/win32_mapi32.py +1 -0
  748. angr/procedures/definitions/win32_mdmlocalmanagement.py +1 -0
  749. angr/procedures/definitions/win32_mdmregistration.py +1 -0
  750. angr/procedures/definitions/win32_mf.py +1 -0
  751. angr/procedures/definitions/win32_mfcore.py +1 -0
  752. angr/procedures/definitions/win32_mfplat.py +1 -0
  753. angr/procedures/definitions/win32_mfplay.py +1 -0
  754. angr/procedures/definitions/win32_mfreadwrite.py +1 -0
  755. angr/procedures/definitions/win32_mfsensorgroup.py +1 -0
  756. angr/procedures/definitions/win32_mfsrcsnk.py +1 -0
  757. angr/procedures/definitions/win32_mgmtapi.py +1 -0
  758. angr/procedures/definitions/win32_mi.py +1 -0
  759. angr/procedures/definitions/win32_mmdevapi.py +1 -0
  760. angr/procedures/definitions/win32_mpr.py +1 -0
  761. angr/procedures/definitions/win32_mprapi.py +1 -0
  762. angr/procedures/definitions/win32_mqrt.py +1 -0
  763. angr/procedures/definitions/win32_mrmsupport.py +1 -0
  764. angr/procedures/definitions/win32_msacm32.py +1 -0
  765. angr/procedures/definitions/win32_msajapi.py +1 -0
  766. angr/procedures/definitions/win32_mscms.py +1 -0
  767. angr/procedures/definitions/win32_mscoree.py +1 -0
  768. angr/procedures/definitions/win32_msctfmonitor.py +1 -0
  769. angr/procedures/definitions/win32_msdelta.py +1 -0
  770. angr/procedures/definitions/win32_msdmo.py +1 -0
  771. angr/procedures/definitions/win32_msdrm.py +1 -0
  772. angr/procedures/definitions/win32_msi.py +1 -0
  773. angr/procedures/definitions/win32_msimg32.py +1 -0
  774. angr/procedures/definitions/win32_mspatcha.py +1 -0
  775. angr/procedures/definitions/win32_mspatchc.py +1 -0
  776. angr/procedures/definitions/win32_msports.py +1 -0
  777. angr/procedures/definitions/win32_msrating.py +1 -0
  778. angr/procedures/definitions/win32_mssign32.py +1 -0
  779. angr/procedures/definitions/win32_mstask.py +1 -0
  780. angr/procedures/definitions/win32_msvfw32.py +1 -0
  781. angr/procedures/definitions/win32_mswsock.py +1 -0
  782. angr/procedures/definitions/win32_mtxdm.py +1 -0
  783. angr/procedures/definitions/win32_ncrypt.py +1 -0
  784. angr/procedures/definitions/win32_ndfapi.py +1 -0
  785. angr/procedures/definitions/win32_netapi32.py +1 -0
  786. angr/procedures/definitions/win32_netsh.py +1 -0
  787. angr/procedures/definitions/win32_netshell.py +1 -0
  788. angr/procedures/definitions/win32_newdev.py +1 -0
  789. angr/procedures/definitions/win32_ninput.py +1 -0
  790. angr/procedures/definitions/win32_normaliz.py +1 -0
  791. angr/procedures/definitions/win32_ntdll.py +1 -0
  792. angr/procedures/definitions/win32_ntdllk.py +1 -0
  793. angr/procedures/definitions/win32_ntdsapi.py +1 -0
  794. angr/procedures/definitions/win32_ntlanman.py +1 -0
  795. angr/procedures/definitions/win32_odbc32.py +1 -0
  796. angr/procedures/definitions/win32_odbcbcp.py +1 -0
  797. angr/procedures/definitions/win32_ole32.py +1 -0
  798. angr/procedures/definitions/win32_oleacc.py +1 -0
  799. angr/procedures/definitions/win32_oleaut32.py +1 -0
  800. angr/procedures/definitions/win32_oledlg.py +1 -0
  801. angr/procedures/definitions/win32_ondemandconnroutehelper.py +1 -0
  802. angr/procedures/definitions/win32_opengl32.py +1 -0
  803. angr/procedures/definitions/win32_opmxbox.py +1 -0
  804. angr/procedures/definitions/win32_p2p.py +1 -0
  805. angr/procedures/definitions/win32_p2pgraph.py +1 -0
  806. angr/procedures/definitions/win32_pdh.py +1 -0
  807. angr/procedures/definitions/win32_peerdist.py +1 -0
  808. angr/procedures/definitions/win32_powrprof.py +1 -0
  809. angr/procedures/definitions/win32_prntvpt.py +1 -0
  810. angr/procedures/definitions/win32_projectedfslib.py +1 -0
  811. angr/procedures/definitions/win32_propsys.py +1 -0
  812. angr/procedures/definitions/win32_psapi.py +1 -0
  813. angr/procedures/definitions/win32_quartz.py +1 -0
  814. angr/procedures/definitions/win32_query.py +1 -0
  815. angr/procedures/definitions/win32_qwave.py +1 -0
  816. angr/procedures/definitions/win32_rasapi32.py +1 -0
  817. angr/procedures/definitions/win32_rasdlg.py +1 -0
  818. angr/procedures/definitions/win32_resutils.py +1 -0
  819. angr/procedures/definitions/win32_rometadata.py +1 -0
  820. angr/procedures/definitions/win32_rpcns4.py +1 -0
  821. angr/procedures/definitions/win32_rpcproxy.py +1 -0
  822. angr/procedures/definitions/win32_rpcrt4.py +1 -0
  823. angr/procedures/definitions/win32_rstrtmgr.py +1 -0
  824. angr/procedures/definitions/win32_rtm.py +1 -0
  825. angr/procedures/definitions/win32_rtutils.py +1 -0
  826. angr/procedures/definitions/win32_rtworkq.py +1 -0
  827. angr/procedures/definitions/win32_sas.py +1 -0
  828. angr/procedures/definitions/win32_scarddlg.py +1 -0
  829. angr/procedures/definitions/win32_schannel.py +1 -0
  830. angr/procedures/definitions/win32_sechost.py +1 -0
  831. angr/procedures/definitions/win32_secur32.py +1 -0
  832. angr/procedures/definitions/win32_sensapi.py +1 -0
  833. angr/procedures/definitions/win32_sensorsutilsv2.py +1 -0
  834. angr/procedures/definitions/win32_setupapi.py +1 -0
  835. angr/procedures/definitions/win32_sfc.py +1 -0
  836. angr/procedures/definitions/win32_shdocvw.py +1 -0
  837. angr/procedures/definitions/win32_shell32.py +1 -0
  838. angr/procedures/definitions/win32_shlwapi.py +1 -0
  839. angr/procedures/definitions/win32_slc.py +1 -0
  840. angr/procedures/definitions/win32_slcext.py +1 -0
  841. angr/procedures/definitions/win32_slwga.py +1 -0
  842. angr/procedures/definitions/win32_snmpapi.py +1 -0
  843. angr/procedures/definitions/win32_spoolss.py +1 -0
  844. angr/procedures/definitions/win32_srclient.py +1 -0
  845. angr/procedures/definitions/win32_srpapi.py +1 -0
  846. angr/procedures/definitions/win32_sspicli.py +1 -0
  847. angr/procedures/definitions/win32_sti.py +1 -0
  848. angr/procedures/definitions/win32_t2embed.py +1 -0
  849. angr/procedures/definitions/win32_tapi32.py +1 -0
  850. angr/procedures/definitions/win32_tbs.py +1 -0
  851. angr/procedures/definitions/win32_tdh.py +1 -0
  852. angr/procedures/definitions/win32_tokenbinding.py +1 -0
  853. angr/procedures/definitions/win32_traffic.py +1 -0
  854. angr/procedures/definitions/win32_txfw32.py +1 -0
  855. angr/procedures/definitions/win32_ualapi.py +1 -0
  856. angr/procedures/definitions/win32_uiautomationcore.py +1 -0
  857. angr/procedures/definitions/win32_urlmon.py +1 -0
  858. angr/procedures/definitions/win32_user32.py +1 -0
  859. angr/procedures/definitions/win32_userenv.py +1 -0
  860. angr/procedures/definitions/win32_usp10.py +1 -0
  861. angr/procedures/definitions/win32_uxtheme.py +1 -0
  862. angr/procedures/definitions/win32_verifier.py +1 -0
  863. angr/procedures/definitions/win32_version.py +1 -0
  864. angr/procedures/definitions/win32_vertdll.py +1 -0
  865. angr/procedures/definitions/win32_virtdisk.py +1 -0
  866. angr/procedures/definitions/win32_vmdevicehost.py +1 -0
  867. angr/procedures/definitions/win32_vmsavedstatedumpprovider.py +1 -0
  868. angr/procedures/definitions/win32_vssapi.py +1 -0
  869. angr/procedures/definitions/win32_wcmapi.py +1 -0
  870. angr/procedures/definitions/win32_wdsbp.py +1 -0
  871. angr/procedures/definitions/win32_wdsclientapi.py +1 -0
  872. angr/procedures/definitions/win32_wdsmc.py +1 -0
  873. angr/procedures/definitions/win32_wdspxe.py +1 -0
  874. angr/procedures/definitions/win32_wdstptc.py +1 -0
  875. angr/procedures/definitions/win32_webauthn.py +1 -0
  876. angr/procedures/definitions/win32_webservices.py +1 -0
  877. angr/procedures/definitions/win32_websocket.py +1 -0
  878. angr/procedures/definitions/win32_wecapi.py +1 -0
  879. angr/procedures/definitions/win32_wer.py +1 -0
  880. angr/procedures/definitions/win32_wevtapi.py +1 -0
  881. angr/procedures/definitions/win32_winbio.py +1 -0
  882. angr/procedures/definitions/win32_windows_ai_machinelearning.py +1 -0
  883. angr/procedures/definitions/win32_windows_data_pdf.py +1 -0
  884. angr/procedures/definitions/win32_windows_media_mediacontrol.py +1 -0
  885. angr/procedures/definitions/win32_windows_networking.py +1 -0
  886. angr/procedures/definitions/win32_windows_ui_xaml.py +1 -0
  887. angr/procedures/definitions/win32_windowscodecs.py +1 -0
  888. angr/procedures/definitions/win32_winfax.py +1 -0
  889. angr/procedures/definitions/win32_winhttp.py +1 -0
  890. angr/procedures/definitions/win32_winhvemulation.py +1 -0
  891. angr/procedures/definitions/win32_winhvplatform.py +1 -0
  892. angr/procedures/definitions/win32_wininet.py +1 -0
  893. angr/procedures/definitions/win32_winml.py +1 -0
  894. angr/procedures/definitions/win32_winmm.py +1 -0
  895. angr/procedures/definitions/win32_winscard.py +1 -0
  896. angr/procedures/definitions/win32_winspool.py +1 -0
  897. angr/procedures/definitions/win32_winspool_drv.py +1 -0
  898. angr/procedures/definitions/win32_wintrust.py +1 -0
  899. angr/procedures/definitions/win32_winusb.py +1 -0
  900. angr/procedures/definitions/win32_wlanapi.py +1 -0
  901. angr/procedures/definitions/win32_wlanui.py +1 -0
  902. angr/procedures/definitions/win32_wldap32.py +1 -0
  903. angr/procedures/definitions/win32_wldp.py +1 -0
  904. angr/procedures/definitions/win32_wmvcore.py +1 -0
  905. angr/procedures/definitions/win32_wnvapi.py +1 -0
  906. angr/procedures/definitions/win32_wofutil.py +1 -0
  907. angr/procedures/definitions/win32_ws2_32.py +1 -0
  908. angr/procedures/definitions/win32_wscapi.py +1 -0
  909. angr/procedures/definitions/win32_wsclient.py +1 -0
  910. angr/procedures/definitions/win32_wsdapi.py +1 -0
  911. angr/procedures/definitions/win32_wsmsvc.py +1 -0
  912. angr/procedures/definitions/win32_wsnmp32.py +1 -0
  913. angr/procedures/definitions/win32_wtsapi32.py +1 -0
  914. angr/procedures/definitions/win32_xaudio2_8.py +1 -0
  915. angr/procedures/definitions/win32_xinput1_4.py +1 -0
  916. angr/procedures/definitions/win32_xinputuap.py +1 -0
  917. angr/procedures/definitions/win32_xmllite.py +1 -0
  918. angr/procedures/definitions/win32_xolehlp.py +1 -0
  919. angr/procedures/definitions/win32_xpsprint.py +1 -0
  920. angr/procedures/glibc/__ctype_b_loc.py +2 -3
  921. angr/procedures/glibc/__ctype_tolower_loc.py +2 -3
  922. angr/procedures/glibc/__ctype_toupper_loc.py +2 -3
  923. angr/procedures/glibc/__errno_location.py +1 -0
  924. angr/procedures/glibc/__libc_init.py +1 -0
  925. angr/procedures/glibc/__libc_start_main.py +2 -3
  926. angr/procedures/glibc/dynamic_loading.py +1 -0
  927. angr/procedures/glibc/scanf.py +1 -0
  928. angr/procedures/glibc/sscanf.py +1 -0
  929. angr/procedures/gnulib/xalloc_die.py +1 -0
  930. angr/procedures/gnulib/xstrtol_fatal.py +1 -0
  931. angr/procedures/java/__init__.py +1 -0
  932. angr/procedures/java/unconstrained.py +4 -3
  933. angr/procedures/java_io/read.py +1 -0
  934. angr/procedures/java_io/write.py +1 -0
  935. angr/procedures/java_jni/__init__.py +25 -18
  936. angr/procedures/java_jni/array_operations.py +1 -0
  937. angr/procedures/java_jni/class_and_interface_operations.py +3 -3
  938. angr/procedures/java_jni/field_access.py +3 -6
  939. angr/procedures/java_jni/global_and_local_refs.py +1 -0
  940. angr/procedures/java_jni/method_calls.py +3 -2
  941. angr/procedures/java_jni/not_implemented.py +2 -1
  942. angr/procedures/java_jni/object_operations.py +3 -4
  943. angr/procedures/java_jni/string_operations.py +2 -1
  944. angr/procedures/java_jni/version_information.py +1 -0
  945. angr/procedures/java_lang/character.py +2 -3
  946. angr/procedures/java_lang/double.py +2 -2
  947. angr/procedures/java_lang/exit.py +1 -0
  948. angr/procedures/java_lang/getsimplename.py +2 -2
  949. angr/procedures/java_lang/integer.py +1 -0
  950. angr/procedures/java_lang/load_library.py +1 -0
  951. angr/procedures/java_lang/math.py +1 -0
  952. angr/procedures/java_lang/string.py +3 -3
  953. angr/procedures/java_lang/stringbuilder.py +1 -0
  954. angr/procedures/java_lang/system.py +1 -0
  955. angr/procedures/java_util/collection.py +1 -0
  956. angr/procedures/java_util/iterator.py +1 -0
  957. angr/procedures/java_util/list.py +1 -0
  958. angr/procedures/java_util/map.py +3 -4
  959. angr/procedures/java_util/random.py +1 -0
  960. angr/procedures/java_util/scanner_nextline.py +2 -1
  961. angr/procedures/libc/abort.py +1 -0
  962. angr/procedures/libc/access.py +1 -0
  963. angr/procedures/libc/atoi.py +2 -2
  964. angr/procedures/libc/atol.py +1 -0
  965. angr/procedures/libc/calloc.py +1 -0
  966. angr/procedures/libc/closelog.py +1 -0
  967. angr/procedures/libc/err.py +1 -0
  968. angr/procedures/libc/error.py +2 -3
  969. angr/procedures/libc/exit.py +1 -0
  970. angr/procedures/libc/fclose.py +2 -3
  971. angr/procedures/libc/feof.py +1 -0
  972. angr/procedures/libc/fflush.py +1 -0
  973. angr/procedures/libc/fgetc.py +1 -0
  974. angr/procedures/libc/fgets.py +19 -19
  975. angr/procedures/libc/fopen.py +6 -8
  976. angr/procedures/libc/fprintf.py +1 -0
  977. angr/procedures/libc/fputc.py +1 -0
  978. angr/procedures/libc/fputs.py +1 -0
  979. angr/procedures/libc/fread.py +1 -0
  980. angr/procedures/libc/free.py +1 -0
  981. angr/procedures/libc/fscanf.py +2 -2
  982. angr/procedures/libc/fseek.py +3 -2
  983. angr/procedures/libc/ftell.py +1 -0
  984. angr/procedures/libc/fwrite.py +1 -0
  985. angr/procedures/libc/getchar.py +2 -2
  986. angr/procedures/libc/getdelim.py +25 -25
  987. angr/procedures/libc/getegid.py +1 -0
  988. angr/procedures/libc/geteuid.py +1 -0
  989. angr/procedures/libc/getgid.py +1 -0
  990. angr/procedures/libc/gets.py +18 -18
  991. angr/procedures/libc/getuid.py +1 -0
  992. angr/procedures/libc/malloc.py +1 -0
  993. angr/procedures/libc/memcmp.py +3 -6
  994. angr/procedures/libc/memcpy.py +1 -0
  995. angr/procedures/libc/memset.py +1 -0
  996. angr/procedures/libc/openlog.py +1 -0
  997. angr/procedures/libc/perror.py +1 -0
  998. angr/procedures/libc/printf.py +1 -0
  999. angr/procedures/libc/putchar.py +1 -0
  1000. angr/procedures/libc/puts.py +1 -0
  1001. angr/procedures/libc/rand.py +1 -0
  1002. angr/procedures/libc/realloc.py +1 -0
  1003. angr/procedures/libc/rewind.py +2 -1
  1004. angr/procedures/libc/scanf.py +2 -2
  1005. angr/procedures/libc/setbuf.py +1 -0
  1006. angr/procedures/libc/setvbuf.py +1 -0
  1007. angr/procedures/libc/snprintf.py +1 -0
  1008. angr/procedures/libc/sprintf.py +1 -0
  1009. angr/procedures/libc/srand.py +1 -0
  1010. angr/procedures/libc/sscanf.py +2 -2
  1011. angr/procedures/libc/stpcpy.py +2 -2
  1012. angr/procedures/libc/strcat.py +1 -0
  1013. angr/procedures/libc/strchr.py +1 -0
  1014. angr/procedures/libc/strcmp.py +1 -0
  1015. angr/procedures/libc/strcpy.py +2 -2
  1016. angr/procedures/libc/strlen.py +35 -31
  1017. angr/procedures/libc/strncat.py +1 -0
  1018. angr/procedures/libc/strncmp.py +9 -11
  1019. angr/procedures/libc/strncpy.py +1 -0
  1020. angr/procedures/libc/strnlen.py +2 -2
  1021. angr/procedures/libc/strstr.py +8 -4
  1022. angr/procedures/libc/strtol.py +9 -9
  1023. angr/procedures/libc/strtoul.py +2 -2
  1024. angr/procedures/libc/system.py +1 -0
  1025. angr/procedures/libc/time.py +2 -2
  1026. angr/procedures/libc/tmpnam.py +1 -0
  1027. angr/procedures/libc/tolower.py +1 -0
  1028. angr/procedures/libc/toupper.py +1 -0
  1029. angr/procedures/libc/ungetc.py +1 -0
  1030. angr/procedures/libc/vsnprintf.py +1 -0
  1031. angr/procedures/libc/wchar.py +1 -0
  1032. angr/procedures/libstdcpp/_unwind_resume.py +1 -0
  1033. angr/procedures/libstdcpp/std____throw_bad_alloc.py +1 -0
  1034. angr/procedures/libstdcpp/std____throw_bad_cast.py +1 -0
  1035. angr/procedures/libstdcpp/std____throw_length_error.py +1 -0
  1036. angr/procedures/libstdcpp/std____throw_logic_error.py +1 -0
  1037. angr/procedures/libstdcpp/std__terminate.py +1 -0
  1038. angr/procedures/linux_kernel/access.py +1 -0
  1039. angr/procedures/linux_kernel/arch_prctl.py +1 -0
  1040. angr/procedures/linux_kernel/arm_user_helpers.py +1 -0
  1041. angr/procedures/linux_kernel/brk.py +1 -0
  1042. angr/procedures/linux_kernel/cwd.py +1 -0
  1043. angr/procedures/linux_kernel/fstat.py +2 -1
  1044. angr/procedures/linux_kernel/fstat64.py +2 -1
  1045. angr/procedures/linux_kernel/futex.py +3 -3
  1046. angr/procedures/linux_kernel/getegid.py +1 -0
  1047. angr/procedures/linux_kernel/geteuid.py +1 -0
  1048. angr/procedures/linux_kernel/getgid.py +1 -0
  1049. angr/procedures/linux_kernel/getpid.py +1 -0
  1050. angr/procedures/linux_kernel/getrlimit.py +3 -3
  1051. angr/procedures/linux_kernel/gettid.py +1 -0
  1052. angr/procedures/linux_kernel/getuid.py +1 -0
  1053. angr/procedures/linux_kernel/iovec.py +1 -0
  1054. angr/procedures/linux_kernel/lseek.py +1 -0
  1055. angr/procedures/linux_kernel/mmap.py +1 -0
  1056. angr/procedures/linux_kernel/mprotect.py +7 -6
  1057. angr/procedures/linux_kernel/munmap.py +1 -0
  1058. angr/procedures/linux_kernel/openat.py +3 -5
  1059. angr/procedures/linux_kernel/set_tid_address.py +1 -0
  1060. angr/procedures/linux_kernel/sigaction.py +1 -0
  1061. angr/procedures/linux_kernel/sigprocmask.py +1 -0
  1062. angr/procedures/linux_kernel/stat.py +3 -2
  1063. angr/procedures/linux_kernel/sysinfo.py +1 -0
  1064. angr/procedures/linux_kernel/tgkill.py +1 -0
  1065. angr/procedures/linux_kernel/time.py +2 -1
  1066. angr/procedures/linux_kernel/uid.py +1 -0
  1067. angr/procedures/linux_kernel/uname.py +1 -0
  1068. angr/procedures/linux_kernel/unlink.py +2 -2
  1069. angr/procedures/linux_kernel/vsyscall.py +2 -1
  1070. angr/procedures/linux_loader/_dl_initial_error_catch_tsd.py +1 -0
  1071. angr/procedures/linux_loader/_dl_rtld_lock.py +1 -0
  1072. angr/procedures/linux_loader/sim_loader.py +1 -0
  1073. angr/procedures/linux_loader/tls.py +2 -2
  1074. angr/procedures/msvcr/__getmainargs.py +1 -0
  1075. angr/procedures/msvcr/_initterm.py +1 -0
  1076. angr/procedures/msvcr/fmode.py +1 -0
  1077. angr/procedures/ntdll/exceptions.py +4 -3
  1078. angr/procedures/posix/accept.py +2 -2
  1079. angr/procedures/posix/bind.py +1 -0
  1080. angr/procedures/posix/bzero.py +1 -0
  1081. angr/procedures/posix/chroot.py +1 -0
  1082. angr/procedures/posix/close.py +2 -2
  1083. angr/procedures/posix/closedir.py +1 -0
  1084. angr/procedures/posix/dup.py +4 -3
  1085. angr/procedures/posix/fcntl.py +1 -0
  1086. angr/procedures/posix/fdopen.py +16 -19
  1087. angr/procedures/posix/fileno.py +1 -0
  1088. angr/procedures/posix/fork.py +1 -0
  1089. angr/procedures/posix/getenv.py +1 -0
  1090. angr/procedures/posix/gethostbyname.py +1 -0
  1091. angr/procedures/posix/getpass.py +1 -0
  1092. angr/procedures/posix/getsockopt.py +1 -0
  1093. angr/procedures/posix/htonl.py +2 -2
  1094. angr/procedures/posix/htons.py +2 -2
  1095. angr/procedures/posix/inet_ntoa.py +3 -5
  1096. angr/procedures/posix/listen.py +1 -0
  1097. angr/procedures/posix/mmap.py +2 -1
  1098. angr/procedures/posix/open.py +1 -0
  1099. angr/procedures/posix/opendir.py +1 -0
  1100. angr/procedures/posix/poll.py +3 -3
  1101. angr/procedures/posix/pread64.py +1 -0
  1102. angr/procedures/posix/pthread.py +3 -3
  1103. angr/procedures/posix/pwrite64.py +1 -0
  1104. angr/procedures/posix/read.py +1 -0
  1105. angr/procedures/posix/readdir.py +1 -1
  1106. angr/procedures/posix/recv.py +1 -0
  1107. angr/procedures/posix/recvfrom.py +1 -0
  1108. angr/procedures/posix/select.py +7 -7
  1109. angr/procedures/posix/send.py +2 -2
  1110. angr/procedures/posix/setsockopt.py +1 -0
  1111. angr/procedures/posix/sigaction.py +1 -0
  1112. angr/procedures/posix/sim_time.py +1 -0
  1113. angr/procedures/posix/sleep.py +1 -0
  1114. angr/procedures/posix/socket.py +2 -2
  1115. angr/procedures/posix/strcasecmp.py +1 -0
  1116. angr/procedures/posix/strdup.py +1 -0
  1117. angr/procedures/posix/strtok_r.py +32 -36
  1118. angr/procedures/posix/syslog.py +1 -0
  1119. angr/procedures/posix/tz.py +1 -0
  1120. angr/procedures/posix/unlink.py +1 -0
  1121. angr/procedures/posix/usleep.py +1 -0
  1122. angr/procedures/posix/write.py +1 -0
  1123. angr/procedures/procedure_dict.py +1 -0
  1124. angr/procedures/stubs/CallReturn.py +1 -0
  1125. angr/procedures/stubs/NoReturnUnconstrained.py +1 -0
  1126. angr/procedures/stubs/Nop.py +1 -0
  1127. angr/procedures/stubs/PathTerminator.py +1 -0
  1128. angr/procedures/stubs/Redirect.py +3 -2
  1129. angr/procedures/stubs/ReturnChar.py +1 -0
  1130. angr/procedures/stubs/ReturnUnconstrained.py +2 -1
  1131. angr/procedures/stubs/UnresolvableCallTarget.py +1 -0
  1132. angr/procedures/stubs/UnresolvableJumpTarget.py +1 -0
  1133. angr/procedures/stubs/UserHook.py +2 -1
  1134. angr/procedures/stubs/b64_decode.py +1 -0
  1135. angr/procedures/stubs/caller.py +1 -0
  1136. angr/procedures/stubs/crazy_scanf.py +1 -0
  1137. angr/procedures/stubs/format_parser.py +12 -16
  1138. angr/procedures/stubs/syscall_stub.py +6 -7
  1139. angr/procedures/testing/manyargs.py +1 -0
  1140. angr/procedures/testing/retreg.py +2 -2
  1141. angr/procedures/tracer/random.py +1 -0
  1142. angr/procedures/tracer/receive.py +4 -4
  1143. angr/procedures/tracer/transmit.py +4 -4
  1144. angr/procedures/uclibc/__uClibc_main.py +1 -0
  1145. angr/procedures/win32/EncodePointer.py +1 -0
  1146. angr/procedures/win32/ExitProcess.py +1 -0
  1147. angr/procedures/win32/GetCommandLine.py +1 -0
  1148. angr/procedures/win32/GetCurrentProcessId.py +1 -0
  1149. angr/procedures/win32/GetCurrentThreadId.py +1 -0
  1150. angr/procedures/win32/GetLastInputInfo.py +1 -0
  1151. angr/procedures/win32/GetModuleHandle.py +3 -4
  1152. angr/procedures/win32/GetProcessAffinityMask.py +1 -0
  1153. angr/procedures/win32/InterlockedExchange.py +2 -1
  1154. angr/procedures/win32/IsProcessorFeaturePresent.py +1 -0
  1155. angr/procedures/win32/VirtualAlloc.py +2 -1
  1156. angr/procedures/win32/VirtualProtect.py +1 -0
  1157. angr/procedures/win32/critical_section.py +1 -0
  1158. angr/procedures/win32/dynamic_loading.py +2 -1
  1159. angr/procedures/win32/file_handles.py +4 -4
  1160. angr/procedures/win32/gethostbyname.py +2 -2
  1161. angr/procedures/win32/heap.py +1 -0
  1162. angr/procedures/win32/is_bad_ptr.py +1 -0
  1163. angr/procedures/win32/local_storage.py +7 -6
  1164. angr/procedures/win32/mutex.py +1 -0
  1165. angr/procedures/win32/sim_time.py +7 -10
  1166. angr/procedures/win32/system_paths.py +5 -4
  1167. angr/procedures/win32_kernel/ExAllocatePool.py +1 -0
  1168. angr/procedures/win32_kernel/ExFreePoolWithTag.py +1 -0
  1169. angr/procedures/win_user32/chars.py +1 -0
  1170. angr/procedures/win_user32/keyboard.py +1 -0
  1171. angr/procedures/win_user32/messagebox.py +2 -4
  1172. angr/project.py +15 -22
  1173. angr/protos/__init__.py +1 -0
  1174. angr/serializable.py +6 -3
  1175. angr/sim_manager.py +18 -18
  1176. angr/sim_options.py +5 -7
  1177. angr/sim_procedure.py +16 -15
  1178. angr/sim_state.py +61 -88
  1179. angr/sim_state_options.py +9 -15
  1180. angr/sim_type.py +135 -123
  1181. angr/sim_variable.py +23 -38
  1182. angr/simos/__init__.py +3 -1
  1183. angr/simos/cgc.py +2 -1
  1184. angr/simos/javavm.py +84 -95
  1185. angr/simos/linux.py +54 -64
  1186. angr/simos/simos.py +14 -23
  1187. angr/simos/snimmuc_nxp.py +3 -6
  1188. angr/simos/userland.py +6 -6
  1189. angr/simos/windows.py +14 -11
  1190. angr/slicer.py +13 -11
  1191. angr/state_hierarchy.py +4 -4
  1192. angr/state_plugins/__init__.py +1 -0
  1193. angr/state_plugins/callstack.py +19 -18
  1194. angr/state_plugins/cgc.py +5 -4
  1195. angr/state_plugins/concrete.py +7 -8
  1196. angr/state_plugins/debug_variables.py +15 -17
  1197. angr/state_plugins/filesystem.py +13 -19
  1198. angr/state_plugins/gdb.py +3 -2
  1199. angr/state_plugins/globals.py +5 -1
  1200. angr/state_plugins/heap/__init__.py +1 -0
  1201. angr/state_plugins/heap/heap_base.py +1 -0
  1202. angr/state_plugins/heap/heap_brk.py +9 -6
  1203. angr/state_plugins/heap/heap_freelist.py +12 -9
  1204. angr/state_plugins/heap/heap_libc.py +1 -0
  1205. angr/state_plugins/heap/heap_ptmalloc.py +27 -36
  1206. angr/state_plugins/heap/utils.py +1 -0
  1207. angr/state_plugins/history.py +7 -10
  1208. angr/state_plugins/inspect.py +1 -0
  1209. angr/state_plugins/javavm_classloader.py +3 -2
  1210. angr/state_plugins/jni_references.py +2 -1
  1211. angr/state_plugins/libc.py +4 -4
  1212. angr/state_plugins/light_registers.py +6 -8
  1213. angr/state_plugins/log.py +1 -0
  1214. angr/state_plugins/loop_data.py +1 -0
  1215. angr/state_plugins/plugin.py +7 -8
  1216. angr/state_plugins/posix.py +14 -22
  1217. angr/state_plugins/preconstrainer.py +4 -3
  1218. angr/state_plugins/scratch.py +6 -5
  1219. angr/state_plugins/sim_action.py +15 -20
  1220. angr/state_plugins/sim_action_object.py +205 -82
  1221. angr/state_plugins/sim_event.py +1 -0
  1222. angr/state_plugins/solver.py +65 -93
  1223. angr/state_plugins/symbolizer.py +5 -6
  1224. angr/state_plugins/trace_additions.py +32 -42
  1225. angr/state_plugins/uc_manager.py +16 -9
  1226. angr/state_plugins/unicorn_engine.py +21 -37
  1227. angr/state_plugins/view.py +20 -19
  1228. angr/storage/__init__.py +1 -0
  1229. angr/storage/file.py +31 -33
  1230. angr/storage/memory_mixins/__init__.py +12 -15
  1231. angr/storage/memory_mixins/__init__.pyi +13 -14
  1232. angr/storage/memory_mixins/actions_mixin.py +2 -1
  1233. angr/storage/memory_mixins/address_concretization_mixin.py +11 -15
  1234. angr/storage/memory_mixins/bvv_conversion_mixin.py +10 -11
  1235. angr/storage/memory_mixins/clouseau_mixin.py +1 -0
  1236. angr/storage/memory_mixins/conditional_store_mixin.py +1 -0
  1237. angr/storage/memory_mixins/convenient_mappings_mixin.py +7 -8
  1238. angr/storage/memory_mixins/default_filler_mixin.py +12 -14
  1239. angr/storage/memory_mixins/dirty_addrs_mixin.py +1 -0
  1240. angr/storage/memory_mixins/hex_dumper_mixin.py +6 -9
  1241. angr/storage/memory_mixins/javavm_memory/__init__.py +1 -0
  1242. angr/storage/memory_mixins/javavm_memory/javavm_memory_mixin.py +16 -23
  1243. angr/storage/memory_mixins/keyvalue_memory/__init__.py +1 -0
  1244. angr/storage/memory_mixins/keyvalue_memory/keyvalue_memory_mixin.py +2 -1
  1245. angr/storage/memory_mixins/label_merger_mixin.py +2 -2
  1246. angr/storage/memory_mixins/multi_value_merger_mixin.py +6 -5
  1247. angr/storage/memory_mixins/name_resolution_mixin.py +12 -15
  1248. angr/storage/memory_mixins/paged_memory/page_backer_mixins.py +6 -6
  1249. angr/storage/memory_mixins/paged_memory/paged_memory_mixin.py +22 -36
  1250. angr/storage/memory_mixins/paged_memory/paged_memory_multivalue_mixin.py +1 -0
  1251. angr/storage/memory_mixins/paged_memory/pages/__init__.py +1 -2
  1252. angr/storage/memory_mixins/paged_memory/pages/cooperation.py +4 -3
  1253. angr/storage/memory_mixins/paged_memory/pages/history_tracking_mixin.py +4 -4
  1254. angr/storage/memory_mixins/paged_memory/pages/ispo_mixin.py +1 -0
  1255. angr/storage/memory_mixins/paged_memory/pages/list_page.py +12 -20
  1256. angr/storage/memory_mixins/paged_memory/pages/multi_values.py +14 -19
  1257. angr/storage/memory_mixins/paged_memory/pages/mv_list_page.py +26 -32
  1258. angr/storage/memory_mixins/paged_memory/pages/permissions_mixin.py +1 -0
  1259. angr/storage/memory_mixins/paged_memory/pages/refcount_mixin.py +2 -2
  1260. angr/storage/memory_mixins/paged_memory/pages/ultra_page.py +38 -42
  1261. angr/storage/memory_mixins/paged_memory/privileged_mixin.py +1 -0
  1262. angr/storage/memory_mixins/paged_memory/stack_allocation_mixin.py +1 -0
  1263. angr/storage/memory_mixins/regioned_memory/__init__.py +1 -0
  1264. angr/storage/memory_mixins/regioned_memory/abstract_address_descriptor.py +5 -4
  1265. angr/storage/memory_mixins/regioned_memory/abstract_merger_mixin.py +6 -21
  1266. angr/storage/memory_mixins/regioned_memory/region_category_mixin.py +1 -0
  1267. angr/storage/memory_mixins/regioned_memory/region_data.py +4 -5
  1268. angr/storage/memory_mixins/regioned_memory/region_meta_mixin.py +129 -13
  1269. angr/storage/memory_mixins/regioned_memory/regioned_address_concretization_mixin.py +2 -1
  1270. angr/storage/memory_mixins/regioned_memory/regioned_memory_mixin.py +34 -44
  1271. angr/storage/memory_mixins/regioned_memory/static_find_mixin.py +7 -9
  1272. angr/storage/memory_mixins/simple_interface_mixin.py +8 -11
  1273. angr/storage/memory_mixins/simplification_mixin.py +1 -0
  1274. angr/storage/memory_mixins/size_resolution_mixin.py +5 -4
  1275. angr/storage/memory_mixins/slotted_memory.py +3 -3
  1276. angr/storage/memory_mixins/smart_find_mixin.py +3 -2
  1277. angr/storage/memory_mixins/symbolic_merger_mixin.py +1 -0
  1278. angr/storage/memory_mixins/top_merger_mixin.py +2 -2
  1279. angr/storage/memory_mixins/underconstrained_mixin.py +12 -14
  1280. angr/storage/memory_mixins/unwrapper_mixin.py +1 -0
  1281. angr/storage/memory_object.py +35 -35
  1282. angr/storage/pcap.py +3 -3
  1283. angr/tablespecs.py +1 -0
  1284. angr/utils/__init__.py +1 -0
  1285. angr/utils/ail.py +30 -0
  1286. angr/utils/algo.py +1 -0
  1287. angr/utils/bits.py +12 -0
  1288. angr/utils/constants.py +2 -0
  1289. angr/utils/cowdict.py +3 -4
  1290. angr/utils/dynamic_dictlist.py +4 -7
  1291. angr/utils/endness.py +1 -0
  1292. angr/utils/enums_conv.py +1 -0
  1293. angr/utils/env.py +1 -0
  1294. angr/utils/formatting.py +1 -0
  1295. angr/utils/funcid.py +15 -14
  1296. angr/utils/graph.py +52 -19
  1297. angr/utils/lazy_import.py +1 -0
  1298. angr/utils/library.py +10 -13
  1299. angr/utils/loader.py +6 -6
  1300. angr/utils/mp.py +4 -3
  1301. angr/utils/orderedset.py +1 -0
  1302. angr/utils/segment_list.py +7 -9
  1303. angr/utils/ssa/__init__.py +198 -0
  1304. angr/utils/ssa/tmp_uses_collector.py +23 -0
  1305. angr/utils/ssa/vvar_uses_collector.py +37 -0
  1306. angr/utils/timing.py +32 -20
  1307. angr/utils/typing.py +1 -0
  1308. angr/vaults.py +7 -8
  1309. {angr-9.2.117.dist-info → angr-9.2.119.dist-info}/METADATA +9 -8
  1310. angr-9.2.119.dist-info/RECORD +1345 -0
  1311. {angr-9.2.117.dist-info → angr-9.2.119.dist-info}/WHEEL +1 -1
  1312. angr/analyses/decompiler/optimization_passes/spilled_register_finder.py +0 -18
  1313. angr/analyses/decompiler/seq_cf_structure_counter.py +0 -37
  1314. angr/service.py +0 -35
  1315. angr-9.2.117.dist-info/RECORD +0 -1310
  1316. {angr-9.2.117.dist-info → angr-9.2.119.dist-info}/LICENSE +0 -0
  1317. {angr-9.2.117.dist-info → angr-9.2.119.dist-info}/entry_points.txt +0 -0
  1318. {angr-9.2.117.dist-info → angr-9.2.119.dist-info}/top_level.txt +0 -0
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  from mmap import mmap
2
3
  from typing import Union
3
4
  from collections.abc import Generator
@@ -93,9 +94,9 @@ class ClemoryBackerMixin(PagedMemoryMixin):
93
94
  # initialize the page
94
95
  if isinstance(backer, (bytes, bytearray, mmap)):
95
96
  return self._data_from_bytes_backer(addr, backer, backer_start, backer_iter)
96
- elif isinstance(backer, list):
97
+ if isinstance(backer, list):
97
98
  return self._data_from_lists_backer(addr, backer, backer_start, backer_iter)
98
- raise TypeError("Unsupported backer type %s." % type(backer))
99
+ raise TypeError(f"Unsupported backer type {type(backer)}.")
99
100
 
100
101
  def _calc_page_starts(self, addr: int, backer_start: int, backer_length: int) -> tuple[int, int, int]:
101
102
  # lord help me. why do I keep having to write code that looks like this
@@ -118,7 +119,7 @@ class ClemoryBackerMixin(PagedMemoryMixin):
118
119
  addr: int,
119
120
  backer: bytes | bytearray,
120
121
  backer_start: int,
121
- backer_iter: Generator[tuple[int, bytes | bytearray], None, None],
122
+ backer_iter: Generator[tuple[int, bytes | bytearray]],
122
123
  ) -> claripy.ast.BV:
123
124
  if backer_start <= addr and backer_start + len(backer) >= addr + self.page_size:
124
125
  # fast case
@@ -145,7 +146,7 @@ class ClemoryBackerMixin(PagedMemoryMixin):
145
146
  return data
146
147
 
147
148
  def _data_from_lists_backer(
148
- self, addr: int, backer: list[int], backer_start: int, backer_iter: Generator[tuple[int, list[int]], None, None]
149
+ self, addr: int, backer: list[int], backer_start: int, backer_iter: Generator[tuple[int, list[int]]]
149
150
  ) -> claripy.ast.BV:
150
151
  page_data = [0] * self.page_size
151
152
  while backer_start < addr + self.page_size:
@@ -161,8 +162,7 @@ class ClemoryBackerMixin(PagedMemoryMixin):
161
162
  except StopIteration:
162
163
  break
163
164
 
164
- data = claripy.Concat(*map(lambda v: claripy.BVV(v, self.state.arch.byte_width), page_data))
165
- return data
165
+ return claripy.Concat(*(claripy.BVV(v, self.state.arch.byte_width) for v in page_data))
166
166
 
167
167
  def _cle_permissions_lookup(self, addr):
168
168
  if self._cle_loader is None:
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  import cffi
2
3
  from typing import Any
3
4
  from collections.abc import Iterable
@@ -109,7 +110,7 @@ class PagedMemoryMixin(MemoryMixin):
109
110
  def _divide_addr(self, addr: int) -> tuple[int, int]:
110
111
  return divmod(addr, self.page_size)
111
112
 
112
- def load(self, addr: int, size: int = None, endness=None, **kwargs):
113
+ def load(self, addr: int, size: int | None = None, endness=None, **kwargs):
113
114
  if endness is None:
114
115
  endness = self.endness
115
116
 
@@ -163,7 +164,7 @@ class PagedMemoryMixin(MemoryMixin):
163
164
  l.debug("%s.load(%#x, %d, %s) = %s", self.id, addr, size, endness, out)
164
165
  return out
165
166
 
166
- def store(self, addr: int, data, size: int = None, endness=None, **kwargs):
167
+ def store(self, addr: int, data, size: int | None = None, endness=None, **kwargs):
167
168
  if endness is None:
168
169
  endness = self.endness
169
170
 
@@ -252,7 +253,7 @@ class PagedMemoryMixin(MemoryMixin):
252
253
  pageno = (pageno + 1) % max_pageno
253
254
  pageoff = 0
254
255
 
255
- def merge(self, others: Iterable["PagedMemoryMixin"], merge_conditions, common_ancestor=None) -> bool:
256
+ def merge(self, others: Iterable[PagedMemoryMixin], merge_conditions, common_ancestor=None) -> bool:
256
257
  changed_pages_and_offsets: dict[int, set[int] | None] = {}
257
258
  for o in others:
258
259
  for changed_page, changed_offsets in self.changed_pages(o).items():
@@ -295,7 +296,7 @@ class PagedMemoryMixin(MemoryMixin):
295
296
 
296
297
  return bool(merged_bytes)
297
298
 
298
- def compare(self, other: "PagedMemoryMixin") -> bool:
299
+ def compare(self, other: PagedMemoryMixin) -> bool:
299
300
  changed_pages_and_offsets: dict[int, set[int] | None] = dict(self.changed_pages(other))
300
301
 
301
302
  for page_no in sorted(changed_pages_and_offsets):
@@ -320,7 +321,7 @@ class PagedMemoryMixin(MemoryMixin):
320
321
  try:
321
322
  page = self._get_page(pageno, permissions is not None, allow_default=False, **kwargs)
322
323
  except SimMemoryError as e:
323
- raise SimMemoryError("%#x is not mapped" % addr) from e
324
+ raise SimMemoryError(f"{addr:#x} is not mapped") from e
324
325
 
325
326
  if type(permissions) is int:
326
327
  permissions = claripy.BVV(permissions, 3)
@@ -403,9 +404,8 @@ class PagedMemoryMixin(MemoryMixin):
403
404
  if result.op == "BVV":
404
405
  if with_bitmap:
405
406
  return memoryview(result.args[0].to_bytes(size, "big")), memoryview(bytes(size))
406
- else:
407
- return memoryview(result.args[0].to_bytes(size, "big"))
408
- elif result.op == "Concat":
407
+ return memoryview(result.args[0].to_bytes(size, "big"))
408
+ if result.op == "Concat":
409
409
  bytes_out = bytearray(size)
410
410
  bitmap_out = bytearray(size)
411
411
  bit_idx = 0
@@ -423,18 +423,12 @@ class PagedMemoryMixin(MemoryMixin):
423
423
  bitmap_out[byte_idx] = 1
424
424
  continue
425
425
 
426
- if bit_idx % byte_width != 0:
427
- # if the current element has at least byte_width bits, the top `hi_chop` bits should be removed
428
- hi_chop = byte_width - (bit_idx % byte_width)
429
- else:
430
- hi_chop = 0
426
+ # if the current element has at least byte_width bits, the top `hi_chop` bits should be removed
427
+ hi_chop = byte_width - bit_idx % byte_width if bit_idx % byte_width != 0 else 0
431
428
 
432
- if (bit_idx + len(element)) % byte_width != 0:
433
- # if the current element does not have enough bits to extend to the next byte boundary, the
434
- # bottom `lo_chop` bits should be removed
435
- lo_chop = (bit_idx + len(element)) % byte_width
436
- else:
437
- lo_chop = 0
429
+ # if the current element does not have enough bits to extend to the next byte boundary, the
430
+ # bottom `lo_chop` bits should be removed
431
+ lo_chop = (bit_idx + len(element)) % byte_width if (bit_idx + len(element)) % byte_width != 0 else 0
438
432
 
439
433
  if hi_chop + lo_chop == len(element):
440
434
  # the entire element will be removed
@@ -470,13 +464,10 @@ class PagedMemoryMixin(MemoryMixin):
470
464
  bitmap_out[bit_idx // byte_width] = 1
471
465
  if with_bitmap:
472
466
  return memoryview(bytes(bytes_out)), memoryview(bytes(bitmap_out))
473
- else:
474
- return memoryview(bytes(bytes_out))
475
- else:
476
- if with_bitmap:
477
- return memoryview(bytes(size)), memoryview(b"\x01" * size)
478
- else:
479
- return memoryview(b"")
467
+ return memoryview(bytes(bytes_out))
468
+ if with_bitmap:
469
+ return memoryview(bytes(size)), memoryview(b"\x01" * size)
470
+ return memoryview(b"")
480
471
 
481
472
  def concrete_load(self, addr, size, writing=False, with_bitmap=False, **kwargs):
482
473
  pageno, offset = self._divide_addr(addr)
@@ -486,8 +477,7 @@ class PagedMemoryMixin(MemoryMixin):
486
477
  except SimMemoryError:
487
478
  if with_bitmap:
488
479
  return memoryview(b""), memoryview(b"")
489
- else:
490
- return memoryview(b"")
480
+ return memoryview(b"")
491
481
 
492
482
  if not page.SUPPORTS_CONCRETE_LOAD:
493
483
  # the page does not support concrete_load
@@ -572,9 +562,7 @@ class PagedMemoryMixin(MemoryMixin):
572
562
 
573
563
  if (my_page is None) ^ (other_page is None):
574
564
  changes.update(range(pageno * self.page_size, (pageno + 1) * self.page_size))
575
- elif my_page is None:
576
- pass
577
- elif my_page is other_page:
565
+ elif my_page is None or my_page is other_page:
578
566
  pass
579
567
  else:
580
568
  changes.update(
@@ -597,9 +585,7 @@ class PagedMemoryMixin(MemoryMixin):
597
585
 
598
586
  if (my_page is None) ^ (other_page is None):
599
587
  changes[pageno] = None
600
- elif my_page is None:
601
- pass
602
- elif my_page is other_page:
588
+ elif my_page is None or my_page is other_page:
603
589
  pass
604
590
  else:
605
591
  changed_offsets = my_page.changed_bytes(other_page, page_addr=pageno * self.page_size)
@@ -657,7 +643,7 @@ class PagedMemoryMixin(MemoryMixin):
657
643
 
658
644
  class LabeledPagesMixin(PagedMemoryMixin):
659
645
  def load_with_labels(
660
- self, addr: int, size: int = None, endness=None, **kwargs
646
+ self, addr: int, size: int | None = None, endness=None, **kwargs
661
647
  ) -> tuple[claripy.ast.Base, tuple[tuple[int, int, int, Any]]]:
662
648
  if endness is None:
663
649
  endness = self.endness
@@ -726,7 +712,7 @@ class MVListPagesMixin(PagedMemoryMixin):
726
712
  self.skip_missing_values_during_merging = skip_missing_values_during_merging
727
713
 
728
714
  @MemoryMixin.memo
729
- def copy(self, memo) -> "MVListPagesMixin":
715
+ def copy(self, memo) -> MVListPagesMixin:
730
716
  r = super().copy(memo)
731
717
  r.skip_missing_values_during_merging = self.skip_missing_values_during_merging
732
718
  return r
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  from .. import MemoryMixin
2
3
 
3
4
 
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  import typing
2
3
 
3
4
  from angr.storage.memory_mixins import MemoryMixin
@@ -23,8 +24,6 @@ class PageBase(HistoryTrackingMixin, RefcountMixin, CooperationBase, ISPOMixin,
23
24
  Read the docstrings for each of the constituent classes to understand the nuances of their functionalities
24
25
  """
25
26
 
26
- pass
27
-
28
27
 
29
28
  PageType = typing.TypeVar("PageType", bound=PageBase)
30
29
 
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  from typing import Any
2
3
 
3
4
  import claripy
@@ -207,13 +208,13 @@ class MemoryObjectSetMixin(CooperationBase):
207
208
  return MultiValues(offset_to_values={0: elements[0]})
208
209
 
209
210
  if endness == "Iend_LE":
210
- elements = list(reversed(elements))
211
+ elements.reverse()
211
212
 
212
213
  mv = MultiValues()
213
214
  offset = 0
214
215
  start_offset = 0
215
216
  prev_value = ...
216
- for i, value_set in enumerate(elements):
217
+ for value_set in elements:
217
218
  if len(value_set) == 1:
218
219
  if prev_value is ...:
219
220
  prev_value = next(iter(value_set))
@@ -258,7 +259,7 @@ class MemoryObjectSetMixin(CooperationBase):
258
259
  )
259
260
  )
260
261
 
261
- sorted_offsets = list(sorted(offset_to_mos.keys()))
262
+ sorted_offsets = sorted(offset_to_mos.keys())
262
263
  pos = 0
263
264
  while pos < len(sorted_offsets):
264
265
  mos = set(offset_to_mos[sorted_offsets[pos]])
@@ -1,4 +1,5 @@
1
1
  # pylint:disable=arguments-differ,unused-argument,no-member
2
+ from __future__ import annotations
2
3
 
3
4
  from angr.storage.memory_mixins import MemoryMixin
4
5
  from angr.utils.segment_list import SegmentList
@@ -26,8 +27,7 @@ class HistoryTrackingMixin(RefcountMixin, MemoryMixin):
26
27
  return super().store(addr, data, **kwargs)
27
28
 
28
29
  def copy(self, memo):
29
- o = super().copy(memo)
30
- return o
30
+ return super().copy(memo)
31
31
 
32
32
  def acquire_unique(self):
33
33
  page = super().acquire_unique()
@@ -52,8 +52,8 @@ class HistoryTrackingMixin(RefcountMixin, MemoryMixin):
52
52
  def changed_bytes(self, other, **kwargs) -> set[int] | None:
53
53
  candidates: set[int] = set()
54
54
 
55
- self_history_list = [self] + list(self.parents())
56
- other_history_list = [other] + list(other.parents())
55
+ self_history_list = [self, *list(self.parents())]
56
+ other_history_list = [other, *list(other.parents())]
57
57
  if self_history_list and other_history_list and self_history_list[-1] is other_history_list[-1]:
58
58
  # two pages have the same root. we can get a list of candidate offsets this way
59
59
 
@@ -1,4 +1,5 @@
1
1
  # pylint:disable=arguments-differ
2
+ from __future__ import annotations
2
3
  from angr.storage.memory_mixins import MemoryMixin
3
4
 
4
5
 
@@ -1,4 +1,5 @@
1
1
  # pylint:disable=abstract-method,arguments-differ
2
+ from __future__ import annotations
2
3
  import logging
3
4
 
4
5
  import claripy
@@ -24,9 +25,8 @@ class ListPage(MemoryObjectMixin, PageBase):
24
25
  DynamicDictList(max_size=memory.page_size, content=content) if content is not None else None
25
26
  )
26
27
  self.stored_offset = set()
27
- if self.content is None:
28
- if memory is not None:
29
- self.content: DynamicDictList[SimMemoryObject | None] = DynamicDictList(max_size=memory.page_size)
28
+ if self.content is None and memory is not None:
29
+ self.content: DynamicDictList[SimMemoryObject | None] = DynamicDictList(max_size=memory.page_size)
30
30
  self._mo_cmp = mo_cmp
31
31
 
32
32
  self.sinkhole: SimMemoryObject | None = sinkhole
@@ -113,10 +113,10 @@ class ListPage(MemoryObjectMixin, PageBase):
113
113
 
114
114
  def merge(
115
115
  self,
116
- others: list["ListPage"],
116
+ others: list[ListPage],
117
117
  merge_conditions,
118
118
  common_ancestor=None,
119
- page_addr: int = None,
119
+ page_addr: int | None = None,
120
120
  memory=None,
121
121
  changed_offsets: set[int] | None = None,
122
122
  ):
@@ -125,7 +125,7 @@ class ListPage(MemoryObjectMixin, PageBase):
125
125
  for other in others:
126
126
  changed_offsets |= self.changed_bytes(other, page_addr)
127
127
 
128
- all_pages: list["ListPage"] = [self] + others
128
+ all_pages: list[ListPage] = [self, *others]
129
129
  if merge_conditions is None:
130
130
  merge_conditions = [None] * len(all_pages)
131
131
 
@@ -165,7 +165,7 @@ class ListPage(MemoryObjectMixin, PageBase):
165
165
  to_merge = [(mo.object, fv) for mo, fv in memory_objects]
166
166
 
167
167
  # Update `merged_to`
168
- mo_base = list(mo_bases)[0]
168
+ mo_base = next(iter(mo_bases))
169
169
  mo_length = memory_objects[0][0].length
170
170
  size = mo_length - (page_addr + b - mo_base)
171
171
  merged_to = b + size
@@ -202,7 +202,7 @@ class ListPage(MemoryObjectMixin, PageBase):
202
202
  if min_size is None or mo_size < min_size:
203
203
  min_size = mo_size
204
204
  for um, _ in unconstrained_in:
205
- for i in range(0, min_size):
205
+ for i in range(min_size):
206
206
  if um._contains(b + i, page_addr):
207
207
  min_size = i
208
208
  break
@@ -240,7 +240,7 @@ class ListPage(MemoryObjectMixin, PageBase):
240
240
  self.stored_offset |= merged_offsets
241
241
  return merged_offsets
242
242
 
243
- def changed_bytes(self, other: "ListPage", page_addr: int = None):
243
+ def changed_bytes(self, other: ListPage, page_addr: int | None = None):
244
244
  candidates = super().changed_bytes(other)
245
245
  if candidates is None:
246
246
  candidates: set[int] = set()
@@ -263,16 +263,11 @@ class ListPage(MemoryObjectMixin, PageBase):
263
263
  for c in candidates:
264
264
  s_contains = self._contains(c, page_addr)
265
265
  o_contains = other._contains(c, page_addr)
266
- if not s_contains and o_contains:
267
- differences.add(c)
268
- elif s_contains and not o_contains:
266
+ if not s_contains and o_contains or s_contains and not o_contains:
269
267
  differences.add(c)
270
268
  else:
271
269
  if self.content[c] is None:
272
- if self.sinkhole is None:
273
- v = claripy.BVV(0, 8)
274
- else:
275
- v = (self.sinkhole.bytes_at(page_addr + c, 1),)
270
+ v = claripy.BVV(0, 8) if self.sinkhole is None else (self.sinkhole.bytes_at(page_addr + c, 1),)
276
271
  self.content[c] = SimMemoryObject(
277
272
  v,
278
273
  page_addr + c,
@@ -280,10 +275,7 @@ class ListPage(MemoryObjectMixin, PageBase):
280
275
  endness="Iend_BE",
281
276
  )
282
277
  if other.content[c] is None:
283
- if other.sinkhole is None:
284
- v = claripy.BVV(0, 8)
285
- else:
286
- v = (other.sinkhole.bytes_at(page_addr + c, 1),)
278
+ v = claripy.BVV(0, 8) if other.sinkhole is None else (other.sinkhole.bytes_at(page_addr + c, 1),)
287
279
  other.content[c] = SimMemoryObject(
288
280
  v,
289
281
  page_addr + c,
@@ -1,4 +1,4 @@
1
- from typing import Union
1
+ from __future__ import annotations
2
2
  from collections.abc import Iterator
3
3
  import archinfo
4
4
 
@@ -25,7 +25,7 @@ class MultiValues:
25
25
 
26
26
  def __init__(
27
27
  self,
28
- v: Union[claripy.ast.Bits, "MultiValues", None, dict[int, set[claripy.ast.Bits]]] = None,
28
+ v: claripy.ast.Bits | MultiValues | None | dict[int, set[claripy.ast.Bits]] = None,
29
29
  offset_to_values=None,
30
30
  ):
31
31
  if v is not None and offset_to_values is not None:
@@ -46,10 +46,9 @@ class MultiValues:
46
46
  self._values = {}
47
47
 
48
48
  # if only one value is passed in, assign it to self._single_value
49
- if self._values:
50
- if len(self._values) == 1 and 0 in self._values and len(self._values[0]) == 1:
51
- self._single_value = next(iter(self._values[0]))
52
- self._values = None
49
+ if self._values and len(self._values) == 1 and 0 in self._values and len(self._values[0]) == 1:
50
+ self._single_value = next(iter(self._values[0]))
51
+ self._values = None
53
52
 
54
53
  if self._values:
55
54
  # sanity check
@@ -156,7 +155,7 @@ class MultiValues:
156
155
  max_len = max(x.size() for x in self._values[max_offset])
157
156
  return max_offset * 8 + max_len # FIXME: we are assuming byte_width of 8
158
157
 
159
- def merge(self, mv: "MultiValues") -> "MultiValues":
158
+ def merge(self, mv: MultiValues) -> MultiValues:
160
159
  new_values = {k: set(v) for k, v in self.items()}
161
160
  for off, vs in mv.items():
162
161
  if off not in new_values:
@@ -178,10 +177,7 @@ class MultiValues:
178
177
  assert other._values is not None
179
178
  if set(self._values.keys()) != set(other._values.keys()):
180
179
  return False
181
- for k in self._values.keys():
182
- if self._values[k] != other._values[k]:
183
- return False
184
- return True
180
+ return all(self._values[k] == other._values[k] for k in self._values)
185
181
 
186
182
  def __repr__(self):
187
183
  if self._single_value is not None:
@@ -197,9 +193,9 @@ class MultiValues:
197
193
  if self._single_value is not None:
198
194
  if offset == 0:
199
195
  return {self._single_value}
200
- raise KeyError()
201
- elif not self._values:
202
- raise KeyError()
196
+ raise KeyError
197
+ if not self._values:
198
+ raise KeyError
203
199
  return self._values[offset]
204
200
 
205
201
  def keys(self) -> set[int]:
@@ -231,7 +227,7 @@ class MultiValues:
231
227
  return 0
232
228
  return len(self._values)
233
229
 
234
- def extract(self, offset: int, length: int, endness: str) -> "MultiValues":
230
+ def extract(self, offset: int, length: int, endness: str) -> MultiValues:
235
231
  end = offset + length
236
232
  result = MultiValues(claripy.BVV(b""))
237
233
  for obj_offset, values in self.items():
@@ -250,7 +246,7 @@ class MultiValues:
250
246
 
251
247
  return result
252
248
 
253
- def concat(self, other: Union["MultiValues", claripy.ast.Bits, bytes]) -> "MultiValues":
249
+ def concat(self, other: MultiValues | claripy.ast.Bits | bytes) -> MultiValues:
254
250
  if isinstance(other, bytes):
255
251
  other = claripy.BVV(other)
256
252
  if isinstance(other, claripy.ast.Bits):
@@ -276,14 +272,13 @@ class MultiValues:
276
272
  :return: The adjacent offset as requested. If the requested adjacent offset does not exist, return None.
277
273
  """
278
274
 
279
- sorted_offsets = list(sorted(self._values.keys())) if self._values is not None else [0]
275
+ sorted_offsets = sorted(self._values.keys()) if self._values is not None else [0]
280
276
 
281
277
  for i, off in enumerate(sorted_offsets):
282
278
  if off == offset:
283
279
  if before:
284
280
  return sorted_offsets[i - 1] if i > 0 else None
285
- else:
286
- return sorted_offsets[i + 1] if i + 1 < len(sorted_offsets) else None
281
+ return sorted_offsets[i + 1] if i + 1 < len(sorted_offsets) else None
287
282
  if off > offset:
288
283
  # we missed it...
289
284
  return None
@@ -1,4 +1,5 @@
1
1
  # pylint:disable=abstract-method,arguments-differ,assignment-from-no-return
2
+ from __future__ import annotations
2
3
  import logging
3
4
  from typing import Union, Any
4
5
  from collections.abc import Callable
@@ -35,15 +36,12 @@ class MVListPage(
35
36
  self.stored_offset = set()
36
37
  self._mo_cmp: Callable | None = mo_cmp
37
38
 
38
- if self.content is None:
39
- if memory is not None:
40
- self.content: DynamicDictList[_MOTYPE | set[_MOTYPE] | None] = DynamicDictList(
41
- max_size=memory.page_size
42
- )
39
+ if self.content is None and memory is not None:
40
+ self.content: DynamicDictList[_MOTYPE | set[_MOTYPE] | None] = DynamicDictList(max_size=memory.page_size)
43
41
 
44
42
  self.sinkhole: _MOTYPE | None = sinkhole
45
43
 
46
- def copy(self, memo) -> "MVListPage":
44
+ def copy(self, memo) -> MVListPage:
47
45
  o = super().copy(memo)
48
46
  o.content = DynamicDictList(max_size=self.content.max_size, content=self.content)
49
47
  o.sinkhole = self.sinkhole
@@ -142,10 +140,10 @@ class MVListPage(
142
140
 
143
141
  def merge(
144
142
  self,
145
- others: list["MVListPage"],
143
+ others: list[MVListPage],
146
144
  merge_conditions,
147
145
  common_ancestor=None,
148
- page_addr: int = None,
146
+ page_addr: int | None = None,
149
147
  memory=None,
150
148
  changed_offsets: set[int] | None = None,
151
149
  ):
@@ -154,7 +152,7 @@ class MVListPage(
154
152
  for other in others:
155
153
  changed_offsets |= self.changed_bytes(other, page_addr)
156
154
 
157
- all_pages: list["MVListPage"] = [self] + others
155
+ all_pages: list[MVListPage] = [self, *others]
158
156
  if merge_conditions is None:
159
157
  merge_conditions = [None] * len(all_pages)
160
158
 
@@ -217,7 +215,7 @@ class MVListPage(
217
215
  to_merge.append((mo.object, fv))
218
216
 
219
217
  # Update `merged_to`
220
- mo_base = list(mo_bases)[0]
218
+ mo_base = next(iter(mo_bases))
221
219
  mo_length = next(iter(mo_lengths))
222
220
  size = min(mo_length - (page_addr + b - mo_base), len(self.content) - b)
223
221
  merged_to = b + size
@@ -245,7 +243,7 @@ class MVListPage(
245
243
  for mo in mo_set:
246
244
  min_size = min(min_size, mo.length - ((b + page_addr - mo.base) & mask))
247
245
  for um, _ in unconstrained_in:
248
- for i in range(0, min_size):
246
+ for i in range(min_size):
249
247
  if um._contains(b + i, page_addr):
250
248
  min_size = i
251
249
  break
@@ -280,7 +278,7 @@ class MVListPage(
280
278
  return merged_offsets
281
279
 
282
280
  def compare(
283
- self, other: "MVListPage", page_addr: int = None, memory=None, changed_offsets=None
281
+ self, other: MVListPage, page_addr: int | None = None, memory=None, changed_offsets=None
284
282
  ) -> bool: # pylint: disable=unused-argument
285
283
  compared_to = None
286
284
  for b in sorted(changed_offsets):
@@ -312,7 +310,7 @@ class MVListPage(
312
310
 
313
311
  return True
314
312
 
315
- def changed_bytes(self, other: "MVListPage", page_addr: int = None):
313
+ def changed_bytes(self, other: MVListPage, page_addr: int | None = None):
316
314
  candidates: set[int] = super().changed_bytes(other)
317
315
  if candidates is not None:
318
316
  # using the result from the history tracking mixin as an approximation
@@ -341,27 +339,23 @@ class MVListPage(
341
339
  for c in candidates:
342
340
  s_contains = self._contains(c, page_addr)
343
341
  o_contains = other._contains(c, page_addr)
344
- if not s_contains and o_contains:
345
- differences.add(c)
346
- elif s_contains and not o_contains:
342
+ if not s_contains and o_contains or s_contains and not o_contains:
347
343
  differences.add(c)
348
344
  else:
349
- if self.content[c] is None:
350
- if self.sinkhole is not None:
351
- self.content[c] = SimMemoryObject(
352
- self.sinkhole.bytes_at(page_addr + c, 1),
353
- page_addr + c,
354
- byte_width=byte_width,
355
- endness="Iend_BE",
356
- )
357
- if other.content[c] is None:
358
- if other.sinkhole is not None:
359
- other.content[c] = SimMemoryObject(
360
- other.sinkhole.bytes_at(page_addr + c, 1),
361
- page_addr + c,
362
- byte_width=byte_width,
363
- endness="Iend_BE",
364
- )
345
+ if self.content[c] is None and self.sinkhole is not None:
346
+ self.content[c] = SimMemoryObject(
347
+ self.sinkhole.bytes_at(page_addr + c, 1),
348
+ page_addr + c,
349
+ byte_width=byte_width,
350
+ endness="Iend_BE",
351
+ )
352
+ if other.content[c] is None and other.sinkhole is not None:
353
+ other.content[c] = SimMemoryObject(
354
+ other.sinkhole.bytes_at(page_addr + c, 1),
355
+ page_addr + c,
356
+ byte_width=byte_width,
357
+ endness="Iend_BE",
358
+ )
365
359
  if s_contains and self.content[c] != other.content[c]:
366
360
  same = None
367
361
  if self._mo_cmp is not None:
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  import claripy
2
3
 
3
4
  from angr.storage.memory_mixins import MemoryMixin
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  from angr.storage.memory_mixins import MemoryMixin
2
3
  from angr.misc import PicklableLock
3
4
 
@@ -29,8 +30,7 @@ class RefcountMixin(MemoryMixin):
29
30
  with self.lock:
30
31
  if self.refcount == 1:
31
32
  return self
32
- else:
33
- self.refcount -= 1
33
+ self.refcount -= 1
34
34
  return self.copy(
35
35
  {}
36
36
  ) # TODO: evaluate if it's worth making the lock a reentrant lock (RLock) so this can go in the else arm