angr 9.2.117__py3-none-win_amd64.whl → 9.2.118__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 (1317) 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 +45 -45
  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 +273 -314
  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 +348 -172
  58. angr/analyses/decompiler/condition_processor.py +86 -100
  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 +47 -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 +1 -0
  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 +500 -0
  91. angr/analyses/decompiler/optimization_passes/duplication_reverter/duplication_reverter.py +1211 -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 +88 -23
  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 +163 -158
  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 +19 -36
  195. angr/analyses/decompiler/structuring/phoenix.py +199 -199
  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 +159 -165
  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 +32 -33
  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 +83 -93
  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 +7 -14
  290. angr/analyses/typehoon/typeconsts.py +14 -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 +10 -11
  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 +79 -124
  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 +2 -1
  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 +1 -0
  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 +66 -74
  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 +5 -3
  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 +41 -47
  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 +1 -0
  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 +1 -0
  390. angr/engines/soot/statements/identity.py +1 -0
  391. angr/engines/soot/statements/if_.py +1 -0
  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 +1 -0
  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 +20 -23
  407. angr/engines/syscall.py +9 -9
  408. angr/engines/unicorn.py +12 -7
  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 +13 -12
  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 +2 -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 +2 -5
  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 +3 -2
  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 +25 -42
  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 +3 -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/testing.py +2 -1
  523. angr/misc/ux.py +5 -5
  524. angr/misc/weakpatch.py +1 -0
  525. angr/procedures/__init__.py +1 -0
  526. angr/procedures/cgc/_terminate.py +1 -0
  527. angr/procedures/cgc/allocate.py +1 -0
  528. angr/procedures/cgc/deallocate.py +1 -0
  529. angr/procedures/cgc/fdwait.py +1 -0
  530. angr/procedures/cgc/random.py +1 -0
  531. angr/procedures/cgc/receive.py +26 -26
  532. angr/procedures/cgc/transmit.py +1 -0
  533. angr/procedures/definitions/__init__.py +9 -10
  534. angr/procedures/definitions/cgc.py +1 -0
  535. angr/procedures/definitions/glibc.py +1 -0
  536. angr/procedures/definitions/gnulib.py +1 -0
  537. angr/procedures/definitions/libstdcpp.py +1 -0
  538. angr/procedures/definitions/linux_kernel.py +1 -0
  539. angr/procedures/definitions/linux_loader.py +1 -0
  540. angr/procedures/definitions/msvcr.py +1 -0
  541. angr/procedures/definitions/parse_syscalls_from_local_system.py +2 -1
  542. angr/procedures/definitions/parse_win32json.py +27 -30
  543. angr/procedures/definitions/types_win32.py +1 -0
  544. angr/procedures/definitions/wdk_api-ms-win-dx-d3dkmt-l1-1-4.py +1 -0
  545. angr/procedures/definitions/wdk_api-ms-win-dx-d3dkmt-l1-1-6.py +1 -0
  546. angr/procedures/definitions/wdk_clfs.py +1 -0
  547. angr/procedures/definitions/wdk_fltmgr.py +1 -0
  548. angr/procedures/definitions/wdk_fwpkclnt.py +1 -0
  549. angr/procedures/definitions/wdk_fwpuclnt.py +1 -0
  550. angr/procedures/definitions/wdk_gdi32.py +1 -0
  551. angr/procedures/definitions/wdk_hal.py +1 -0
  552. angr/procedures/definitions/wdk_ksecdd.py +1 -0
  553. angr/procedures/definitions/wdk_ndis.py +1 -0
  554. angr/procedures/definitions/wdk_ntoskrnl.py +1 -0
  555. angr/procedures/definitions/wdk_offreg.py +1 -0
  556. angr/procedures/definitions/wdk_pshed.py +1 -0
  557. angr/procedures/definitions/wdk_secur32.py +1 -0
  558. angr/procedures/definitions/wdk_vhfum.py +1 -0
  559. angr/procedures/definitions/win32_aclui.py +1 -0
  560. angr/procedures/definitions/win32_activeds.py +1 -0
  561. angr/procedures/definitions/win32_advapi32.py +1 -0
  562. angr/procedures/definitions/win32_advpack.py +1 -0
  563. angr/procedures/definitions/win32_amsi.py +1 -0
  564. angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-1.py +1 -0
  565. angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-3.py +1 -0
  566. angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-6.py +1 -0
  567. angr/procedures/definitions/win32_api-ms-win-core-apiquery-l2-1-0.py +1 -0
  568. angr/procedures/definitions/win32_api-ms-win-core-backgroundtask-l1-1-0.py +1 -0
  569. angr/procedures/definitions/win32_api-ms-win-core-comm-l1-1-1.py +1 -0
  570. angr/procedures/definitions/win32_api-ms-win-core-comm-l1-1-2.py +1 -0
  571. angr/procedures/definitions/win32_api-ms-win-core-enclave-l1-1-1.py +1 -0
  572. angr/procedures/definitions/win32_api-ms-win-core-errorhandling-l1-1-3.py +1 -0
  573. angr/procedures/definitions/win32_api-ms-win-core-featurestaging-l1-1-0.py +1 -0
  574. angr/procedures/definitions/win32_api-ms-win-core-featurestaging-l1-1-1.py +1 -0
  575. angr/procedures/definitions/win32_api-ms-win-core-file-fromapp-l1-1-0.py +1 -0
  576. angr/procedures/definitions/win32_api-ms-win-core-handle-l1-1-0.py +1 -0
  577. angr/procedures/definitions/win32_api-ms-win-core-ioring-l1-1-0.py +1 -0
  578. angr/procedures/definitions/win32_api-ms-win-core-marshal-l1-1-0.py +1 -0
  579. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-3.py +1 -0
  580. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-4.py +1 -0
  581. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-5.py +1 -0
  582. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-6.py +1 -0
  583. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-7.py +1 -0
  584. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-8.py +1 -0
  585. angr/procedures/definitions/win32_api-ms-win-core-path-l1-1-0.py +1 -0
  586. angr/procedures/definitions/win32_api-ms-win-core-psm-appnotify-l1-1-0.py +1 -0
  587. angr/procedures/definitions/win32_api-ms-win-core-psm-appnotify-l1-1-1.py +1 -0
  588. angr/procedures/definitions/win32_api-ms-win-core-realtime-l1-1-1.py +1 -0
  589. angr/procedures/definitions/win32_api-ms-win-core-realtime-l1-1-2.py +1 -0
  590. angr/procedures/definitions/win32_api-ms-win-core-slapi-l1-1-0.py +1 -0
  591. angr/procedures/definitions/win32_api-ms-win-core-state-helpers-l1-1-0.py +1 -0
  592. angr/procedures/definitions/win32_api-ms-win-core-synch-l1-2-0.py +1 -0
  593. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-0.py +1 -0
  594. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-3.py +1 -0
  595. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-4.py +1 -0
  596. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-6.py +1 -0
  597. angr/procedures/definitions/win32_api-ms-win-core-util-l1-1-1.py +1 -0
  598. angr/procedures/definitions/win32_api-ms-win-core-winrt-error-l1-1-0.py +1 -0
  599. angr/procedures/definitions/win32_api-ms-win-core-winrt-error-l1-1-1.py +1 -0
  600. angr/procedures/definitions/win32_api-ms-win-core-winrt-l1-1-0.py +1 -0
  601. angr/procedures/definitions/win32_api-ms-win-core-winrt-registration-l1-1-0.py +1 -0
  602. angr/procedures/definitions/win32_api-ms-win-core-winrt-robuffer-l1-1-0.py +1 -0
  603. angr/procedures/definitions/win32_api-ms-win-core-winrt-roparameterizediid-l1-1-0.py +1 -0
  604. angr/procedures/definitions/win32_api-ms-win-core-winrt-string-l1-1-0.py +1 -0
  605. angr/procedures/definitions/win32_api-ms-win-core-winrt-string-l1-1-1.py +1 -0
  606. angr/procedures/definitions/win32_api-ms-win-core-wow64-l1-1-1.py +1 -0
  607. angr/procedures/definitions/win32_api-ms-win-devices-query-l1-1-0.py +1 -0
  608. angr/procedures/definitions/win32_api-ms-win-devices-query-l1-1-1.py +1 -0
  609. angr/procedures/definitions/win32_api-ms-win-dx-d3dkmt-l1-1-0.py +1 -0
  610. angr/procedures/definitions/win32_api-ms-win-gaming-deviceinformation-l1-1-0.py +1 -0
  611. angr/procedures/definitions/win32_api-ms-win-gaming-expandedresources-l1-1-0.py +1 -0
  612. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-0.py +1 -0
  613. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-1.py +1 -0
  614. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-2.py +1 -0
  615. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-3.py +1 -0
  616. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-4.py +1 -0
  617. angr/procedures/definitions/win32_api-ms-win-mm-misc-l1-1-1.py +1 -0
  618. angr/procedures/definitions/win32_api-ms-win-net-isolation-l1-1-0.py +1 -0
  619. angr/procedures/definitions/win32_api-ms-win-security-base-l1-2-2.py +1 -0
  620. angr/procedures/definitions/win32_api-ms-win-security-isolatedcontainer-l1-1-0.py +1 -0
  621. angr/procedures/definitions/win32_api-ms-win-security-isolatedcontainer-l1-1-1.py +1 -0
  622. angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-3.py +1 -0
  623. angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-4.py +1 -0
  624. angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-5.py +1 -0
  625. angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-0.py +1 -0
  626. angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-1.py +1 -0
  627. angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-2.py +1 -0
  628. angr/procedures/definitions/win32_api-ms-win-shcore-stream-winrt-l1-1-0.py +1 -0
  629. angr/procedures/definitions/win32_api-ms-win-wsl-api-l1-1-0.py +1 -0
  630. angr/procedures/definitions/win32_apphelp.py +1 -0
  631. angr/procedures/definitions/win32_authz.py +1 -0
  632. angr/procedures/definitions/win32_avicap32.py +1 -0
  633. angr/procedures/definitions/win32_avifil32.py +1 -0
  634. angr/procedures/definitions/win32_avrt.py +1 -0
  635. angr/procedures/definitions/win32_bcp47mrm.py +1 -0
  636. angr/procedures/definitions/win32_bcrypt.py +1 -0
  637. angr/procedures/definitions/win32_bcryptprimitives.py +1 -0
  638. angr/procedures/definitions/win32_bluetoothapis.py +1 -0
  639. angr/procedures/definitions/win32_bthprops.py +1 -0
  640. angr/procedures/definitions/win32_bthprops_cpl.py +1 -0
  641. angr/procedures/definitions/win32_cabinet.py +1 -0
  642. angr/procedures/definitions/win32_certadm.py +1 -0
  643. angr/procedures/definitions/win32_certpoleng.py +1 -0
  644. angr/procedures/definitions/win32_cfgmgr32.py +1 -0
  645. angr/procedures/definitions/win32_chakra.py +1 -0
  646. angr/procedures/definitions/win32_cldapi.py +1 -0
  647. angr/procedures/definitions/win32_clfsw32.py +1 -0
  648. angr/procedures/definitions/win32_clusapi.py +1 -0
  649. angr/procedures/definitions/win32_comctl32.py +1 -0
  650. angr/procedures/definitions/win32_comdlg32.py +1 -0
  651. angr/procedures/definitions/win32_compstui.py +1 -0
  652. angr/procedures/definitions/win32_computecore.py +1 -0
  653. angr/procedures/definitions/win32_computenetwork.py +1 -0
  654. angr/procedures/definitions/win32_computestorage.py +1 -0
  655. angr/procedures/definitions/win32_comsvcs.py +1 -0
  656. angr/procedures/definitions/win32_coremessaging.py +1 -0
  657. angr/procedures/definitions/win32_credui.py +1 -0
  658. angr/procedures/definitions/win32_crypt32.py +1 -0
  659. angr/procedures/definitions/win32_cryptnet.py +1 -0
  660. angr/procedures/definitions/win32_cryptui.py +1 -0
  661. angr/procedures/definitions/win32_cryptxml.py +1 -0
  662. angr/procedures/definitions/win32_cscapi.py +1 -0
  663. angr/procedures/definitions/win32_d2d1.py +1 -0
  664. angr/procedures/definitions/win32_d3d10.py +1 -0
  665. angr/procedures/definitions/win32_d3d10_1.py +1 -0
  666. angr/procedures/definitions/win32_d3d11.py +1 -0
  667. angr/procedures/definitions/win32_d3d12.py +1 -0
  668. angr/procedures/definitions/win32_d3d9.py +1 -0
  669. angr/procedures/definitions/win32_d3dcompiler_47.py +1 -0
  670. angr/procedures/definitions/win32_d3dcsx.py +1 -0
  671. angr/procedures/definitions/win32_davclnt.py +1 -0
  672. angr/procedures/definitions/win32_dbgeng.py +1 -0
  673. angr/procedures/definitions/win32_dbghelp.py +1 -0
  674. angr/procedures/definitions/win32_dbgmodel.py +1 -0
  675. angr/procedures/definitions/win32_dciman32.py +1 -0
  676. angr/procedures/definitions/win32_dcomp.py +1 -0
  677. angr/procedures/definitions/win32_ddraw.py +1 -0
  678. angr/procedures/definitions/win32_deviceaccess.py +1 -0
  679. angr/procedures/definitions/win32_dflayout.py +1 -0
  680. angr/procedures/definitions/win32_dhcpcsvc.py +1 -0
  681. angr/procedures/definitions/win32_dhcpcsvc6.py +1 -0
  682. angr/procedures/definitions/win32_dhcpsapi.py +1 -0
  683. angr/procedures/definitions/win32_diagnosticdataquery.py +1 -0
  684. angr/procedures/definitions/win32_dinput8.py +1 -0
  685. angr/procedures/definitions/win32_directml.py +1 -0
  686. angr/procedures/definitions/win32_dmprocessxmlfiltered.py +1 -0
  687. angr/procedures/definitions/win32_dnsapi.py +1 -0
  688. angr/procedures/definitions/win32_drt.py +1 -0
  689. angr/procedures/definitions/win32_drtprov.py +1 -0
  690. angr/procedures/definitions/win32_drttransport.py +1 -0
  691. angr/procedures/definitions/win32_dsound.py +1 -0
  692. angr/procedures/definitions/win32_dsparse.py +1 -0
  693. angr/procedures/definitions/win32_dsprop.py +1 -0
  694. angr/procedures/definitions/win32_dssec.py +1 -0
  695. angr/procedures/definitions/win32_dsuiext.py +1 -0
  696. angr/procedures/definitions/win32_dwmapi.py +1 -0
  697. angr/procedures/definitions/win32_dwrite.py +1 -0
  698. angr/procedures/definitions/win32_dxcompiler.py +1 -0
  699. angr/procedures/definitions/win32_dxcore.py +1 -0
  700. angr/procedures/definitions/win32_dxgi.py +1 -0
  701. angr/procedures/definitions/win32_dxva2.py +1 -0
  702. angr/procedures/definitions/win32_eappcfg.py +1 -0
  703. angr/procedures/definitions/win32_eappprxy.py +1 -0
  704. angr/procedures/definitions/win32_efswrt.py +1 -0
  705. angr/procedures/definitions/win32_elscore.py +1 -0
  706. angr/procedures/definitions/win32_esent.py +1 -0
  707. angr/procedures/definitions/win32_evr.py +1 -0
  708. angr/procedures/definitions/win32_faultrep.py +1 -0
  709. angr/procedures/definitions/win32_fhsvcctl.py +1 -0
  710. angr/procedures/definitions/win32_firewallapi.py +1 -0
  711. angr/procedures/definitions/win32_fltlib.py +1 -0
  712. angr/procedures/definitions/win32_fontsub.py +1 -0
  713. angr/procedures/definitions/win32_forceinline.py +1 -0
  714. angr/procedures/definitions/win32_fwpuclnt.py +1 -0
  715. angr/procedures/definitions/win32_fxsutility.py +1 -0
  716. angr/procedures/definitions/win32_gdi32.py +1 -0
  717. angr/procedures/definitions/win32_gdiplus.py +1 -0
  718. angr/procedures/definitions/win32_glu32.py +1 -0
  719. angr/procedures/definitions/win32_gpedit.py +1 -0
  720. angr/procedures/definitions/win32_hhctrl_ocx.py +1 -0
  721. angr/procedures/definitions/win32_hid.py +1 -0
  722. angr/procedures/definitions/win32_hlink.py +1 -0
  723. angr/procedures/definitions/win32_hrtfapo.py +1 -0
  724. angr/procedures/definitions/win32_httpapi.py +1 -0
  725. angr/procedures/definitions/win32_icm32.py +1 -0
  726. angr/procedures/definitions/win32_icmui.py +1 -0
  727. angr/procedures/definitions/win32_icu.py +1 -0
  728. angr/procedures/definitions/win32_ieframe.py +1 -0
  729. angr/procedures/definitions/win32_imagehlp.py +1 -0
  730. angr/procedures/definitions/win32_imgutil.py +1 -0
  731. angr/procedures/definitions/win32_imm32.py +1 -0
  732. angr/procedures/definitions/win32_infocardapi.py +1 -0
  733. angr/procedures/definitions/win32_inkobjcore.py +1 -0
  734. angr/procedures/definitions/win32_iphlpapi.py +1 -0
  735. angr/procedures/definitions/win32_iscsidsc.py +1 -0
  736. angr/procedures/definitions/win32_isolatedwindowsenvironmentutils.py +1 -0
  737. angr/procedures/definitions/win32_kernel32.py +1 -0
  738. angr/procedures/definitions/win32_kernelbase.py +1 -0
  739. angr/procedures/definitions/win32_keycredmgr.py +1 -0
  740. angr/procedures/definitions/win32_ksproxy_ax.py +1 -0
  741. angr/procedures/definitions/win32_ksuser.py +1 -0
  742. angr/procedures/definitions/win32_ktmw32.py +1 -0
  743. angr/procedures/definitions/win32_licenseprotection.py +1 -0
  744. angr/procedures/definitions/win32_loadperf.py +1 -0
  745. angr/procedures/definitions/win32_magnification.py +1 -0
  746. angr/procedures/definitions/win32_mapi32.py +1 -0
  747. angr/procedures/definitions/win32_mdmlocalmanagement.py +1 -0
  748. angr/procedures/definitions/win32_mdmregistration.py +1 -0
  749. angr/procedures/definitions/win32_mf.py +1 -0
  750. angr/procedures/definitions/win32_mfcore.py +1 -0
  751. angr/procedures/definitions/win32_mfplat.py +1 -0
  752. angr/procedures/definitions/win32_mfplay.py +1 -0
  753. angr/procedures/definitions/win32_mfreadwrite.py +1 -0
  754. angr/procedures/definitions/win32_mfsensorgroup.py +1 -0
  755. angr/procedures/definitions/win32_mfsrcsnk.py +1 -0
  756. angr/procedures/definitions/win32_mgmtapi.py +1 -0
  757. angr/procedures/definitions/win32_mi.py +1 -0
  758. angr/procedures/definitions/win32_mmdevapi.py +1 -0
  759. angr/procedures/definitions/win32_mpr.py +1 -0
  760. angr/procedures/definitions/win32_mprapi.py +1 -0
  761. angr/procedures/definitions/win32_mqrt.py +1 -0
  762. angr/procedures/definitions/win32_mrmsupport.py +1 -0
  763. angr/procedures/definitions/win32_msacm32.py +1 -0
  764. angr/procedures/definitions/win32_msajapi.py +1 -0
  765. angr/procedures/definitions/win32_mscms.py +1 -0
  766. angr/procedures/definitions/win32_mscoree.py +1 -0
  767. angr/procedures/definitions/win32_msctfmonitor.py +1 -0
  768. angr/procedures/definitions/win32_msdelta.py +1 -0
  769. angr/procedures/definitions/win32_msdmo.py +1 -0
  770. angr/procedures/definitions/win32_msdrm.py +1 -0
  771. angr/procedures/definitions/win32_msi.py +1 -0
  772. angr/procedures/definitions/win32_msimg32.py +1 -0
  773. angr/procedures/definitions/win32_mspatcha.py +1 -0
  774. angr/procedures/definitions/win32_mspatchc.py +1 -0
  775. angr/procedures/definitions/win32_msports.py +1 -0
  776. angr/procedures/definitions/win32_msrating.py +1 -0
  777. angr/procedures/definitions/win32_mssign32.py +1 -0
  778. angr/procedures/definitions/win32_mstask.py +1 -0
  779. angr/procedures/definitions/win32_msvfw32.py +1 -0
  780. angr/procedures/definitions/win32_mswsock.py +1 -0
  781. angr/procedures/definitions/win32_mtxdm.py +1 -0
  782. angr/procedures/definitions/win32_ncrypt.py +1 -0
  783. angr/procedures/definitions/win32_ndfapi.py +1 -0
  784. angr/procedures/definitions/win32_netapi32.py +1 -0
  785. angr/procedures/definitions/win32_netsh.py +1 -0
  786. angr/procedures/definitions/win32_netshell.py +1 -0
  787. angr/procedures/definitions/win32_newdev.py +1 -0
  788. angr/procedures/definitions/win32_ninput.py +1 -0
  789. angr/procedures/definitions/win32_normaliz.py +1 -0
  790. angr/procedures/definitions/win32_ntdll.py +1 -0
  791. angr/procedures/definitions/win32_ntdllk.py +1 -0
  792. angr/procedures/definitions/win32_ntdsapi.py +1 -0
  793. angr/procedures/definitions/win32_ntlanman.py +1 -0
  794. angr/procedures/definitions/win32_odbc32.py +1 -0
  795. angr/procedures/definitions/win32_odbcbcp.py +1 -0
  796. angr/procedures/definitions/win32_ole32.py +1 -0
  797. angr/procedures/definitions/win32_oleacc.py +1 -0
  798. angr/procedures/definitions/win32_oleaut32.py +1 -0
  799. angr/procedures/definitions/win32_oledlg.py +1 -0
  800. angr/procedures/definitions/win32_ondemandconnroutehelper.py +1 -0
  801. angr/procedures/definitions/win32_opengl32.py +1 -0
  802. angr/procedures/definitions/win32_opmxbox.py +1 -0
  803. angr/procedures/definitions/win32_p2p.py +1 -0
  804. angr/procedures/definitions/win32_p2pgraph.py +1 -0
  805. angr/procedures/definitions/win32_pdh.py +1 -0
  806. angr/procedures/definitions/win32_peerdist.py +1 -0
  807. angr/procedures/definitions/win32_powrprof.py +1 -0
  808. angr/procedures/definitions/win32_prntvpt.py +1 -0
  809. angr/procedures/definitions/win32_projectedfslib.py +1 -0
  810. angr/procedures/definitions/win32_propsys.py +1 -0
  811. angr/procedures/definitions/win32_psapi.py +1 -0
  812. angr/procedures/definitions/win32_quartz.py +1 -0
  813. angr/procedures/definitions/win32_query.py +1 -0
  814. angr/procedures/definitions/win32_qwave.py +1 -0
  815. angr/procedures/definitions/win32_rasapi32.py +1 -0
  816. angr/procedures/definitions/win32_rasdlg.py +1 -0
  817. angr/procedures/definitions/win32_resutils.py +1 -0
  818. angr/procedures/definitions/win32_rometadata.py +1 -0
  819. angr/procedures/definitions/win32_rpcns4.py +1 -0
  820. angr/procedures/definitions/win32_rpcproxy.py +1 -0
  821. angr/procedures/definitions/win32_rpcrt4.py +1 -0
  822. angr/procedures/definitions/win32_rstrtmgr.py +1 -0
  823. angr/procedures/definitions/win32_rtm.py +1 -0
  824. angr/procedures/definitions/win32_rtutils.py +1 -0
  825. angr/procedures/definitions/win32_rtworkq.py +1 -0
  826. angr/procedures/definitions/win32_sas.py +1 -0
  827. angr/procedures/definitions/win32_scarddlg.py +1 -0
  828. angr/procedures/definitions/win32_schannel.py +1 -0
  829. angr/procedures/definitions/win32_sechost.py +1 -0
  830. angr/procedures/definitions/win32_secur32.py +1 -0
  831. angr/procedures/definitions/win32_sensapi.py +1 -0
  832. angr/procedures/definitions/win32_sensorsutilsv2.py +1 -0
  833. angr/procedures/definitions/win32_setupapi.py +1 -0
  834. angr/procedures/definitions/win32_sfc.py +1 -0
  835. angr/procedures/definitions/win32_shdocvw.py +1 -0
  836. angr/procedures/definitions/win32_shell32.py +1 -0
  837. angr/procedures/definitions/win32_shlwapi.py +1 -0
  838. angr/procedures/definitions/win32_slc.py +1 -0
  839. angr/procedures/definitions/win32_slcext.py +1 -0
  840. angr/procedures/definitions/win32_slwga.py +1 -0
  841. angr/procedures/definitions/win32_snmpapi.py +1 -0
  842. angr/procedures/definitions/win32_spoolss.py +1 -0
  843. angr/procedures/definitions/win32_srclient.py +1 -0
  844. angr/procedures/definitions/win32_srpapi.py +1 -0
  845. angr/procedures/definitions/win32_sspicli.py +1 -0
  846. angr/procedures/definitions/win32_sti.py +1 -0
  847. angr/procedures/definitions/win32_t2embed.py +1 -0
  848. angr/procedures/definitions/win32_tapi32.py +1 -0
  849. angr/procedures/definitions/win32_tbs.py +1 -0
  850. angr/procedures/definitions/win32_tdh.py +1 -0
  851. angr/procedures/definitions/win32_tokenbinding.py +1 -0
  852. angr/procedures/definitions/win32_traffic.py +1 -0
  853. angr/procedures/definitions/win32_txfw32.py +1 -0
  854. angr/procedures/definitions/win32_ualapi.py +1 -0
  855. angr/procedures/definitions/win32_uiautomationcore.py +1 -0
  856. angr/procedures/definitions/win32_urlmon.py +1 -0
  857. angr/procedures/definitions/win32_user32.py +1 -0
  858. angr/procedures/definitions/win32_userenv.py +1 -0
  859. angr/procedures/definitions/win32_usp10.py +1 -0
  860. angr/procedures/definitions/win32_uxtheme.py +1 -0
  861. angr/procedures/definitions/win32_verifier.py +1 -0
  862. angr/procedures/definitions/win32_version.py +1 -0
  863. angr/procedures/definitions/win32_vertdll.py +1 -0
  864. angr/procedures/definitions/win32_virtdisk.py +1 -0
  865. angr/procedures/definitions/win32_vmdevicehost.py +1 -0
  866. angr/procedures/definitions/win32_vmsavedstatedumpprovider.py +1 -0
  867. angr/procedures/definitions/win32_vssapi.py +1 -0
  868. angr/procedures/definitions/win32_wcmapi.py +1 -0
  869. angr/procedures/definitions/win32_wdsbp.py +1 -0
  870. angr/procedures/definitions/win32_wdsclientapi.py +1 -0
  871. angr/procedures/definitions/win32_wdsmc.py +1 -0
  872. angr/procedures/definitions/win32_wdspxe.py +1 -0
  873. angr/procedures/definitions/win32_wdstptc.py +1 -0
  874. angr/procedures/definitions/win32_webauthn.py +1 -0
  875. angr/procedures/definitions/win32_webservices.py +1 -0
  876. angr/procedures/definitions/win32_websocket.py +1 -0
  877. angr/procedures/definitions/win32_wecapi.py +1 -0
  878. angr/procedures/definitions/win32_wer.py +1 -0
  879. angr/procedures/definitions/win32_wevtapi.py +1 -0
  880. angr/procedures/definitions/win32_winbio.py +1 -0
  881. angr/procedures/definitions/win32_windows_ai_machinelearning.py +1 -0
  882. angr/procedures/definitions/win32_windows_data_pdf.py +1 -0
  883. angr/procedures/definitions/win32_windows_media_mediacontrol.py +1 -0
  884. angr/procedures/definitions/win32_windows_networking.py +1 -0
  885. angr/procedures/definitions/win32_windows_ui_xaml.py +1 -0
  886. angr/procedures/definitions/win32_windowscodecs.py +1 -0
  887. angr/procedures/definitions/win32_winfax.py +1 -0
  888. angr/procedures/definitions/win32_winhttp.py +1 -0
  889. angr/procedures/definitions/win32_winhvemulation.py +1 -0
  890. angr/procedures/definitions/win32_winhvplatform.py +1 -0
  891. angr/procedures/definitions/win32_wininet.py +1 -0
  892. angr/procedures/definitions/win32_winml.py +1 -0
  893. angr/procedures/definitions/win32_winmm.py +1 -0
  894. angr/procedures/definitions/win32_winscard.py +1 -0
  895. angr/procedures/definitions/win32_winspool.py +1 -0
  896. angr/procedures/definitions/win32_winspool_drv.py +1 -0
  897. angr/procedures/definitions/win32_wintrust.py +1 -0
  898. angr/procedures/definitions/win32_winusb.py +1 -0
  899. angr/procedures/definitions/win32_wlanapi.py +1 -0
  900. angr/procedures/definitions/win32_wlanui.py +1 -0
  901. angr/procedures/definitions/win32_wldap32.py +1 -0
  902. angr/procedures/definitions/win32_wldp.py +1 -0
  903. angr/procedures/definitions/win32_wmvcore.py +1 -0
  904. angr/procedures/definitions/win32_wnvapi.py +1 -0
  905. angr/procedures/definitions/win32_wofutil.py +1 -0
  906. angr/procedures/definitions/win32_ws2_32.py +1 -0
  907. angr/procedures/definitions/win32_wscapi.py +1 -0
  908. angr/procedures/definitions/win32_wsclient.py +1 -0
  909. angr/procedures/definitions/win32_wsdapi.py +1 -0
  910. angr/procedures/definitions/win32_wsmsvc.py +1 -0
  911. angr/procedures/definitions/win32_wsnmp32.py +1 -0
  912. angr/procedures/definitions/win32_wtsapi32.py +1 -0
  913. angr/procedures/definitions/win32_xaudio2_8.py +1 -0
  914. angr/procedures/definitions/win32_xinput1_4.py +1 -0
  915. angr/procedures/definitions/win32_xinputuap.py +1 -0
  916. angr/procedures/definitions/win32_xmllite.py +1 -0
  917. angr/procedures/definitions/win32_xolehlp.py +1 -0
  918. angr/procedures/definitions/win32_xpsprint.py +1 -0
  919. angr/procedures/glibc/__ctype_b_loc.py +2 -3
  920. angr/procedures/glibc/__ctype_tolower_loc.py +2 -3
  921. angr/procedures/glibc/__ctype_toupper_loc.py +2 -3
  922. angr/procedures/glibc/__errno_location.py +1 -0
  923. angr/procedures/glibc/__libc_init.py +1 -0
  924. angr/procedures/glibc/__libc_start_main.py +2 -3
  925. angr/procedures/glibc/dynamic_loading.py +1 -0
  926. angr/procedures/glibc/scanf.py +1 -0
  927. angr/procedures/glibc/sscanf.py +1 -0
  928. angr/procedures/gnulib/xalloc_die.py +1 -0
  929. angr/procedures/gnulib/xstrtol_fatal.py +1 -0
  930. angr/procedures/java/__init__.py +1 -0
  931. angr/procedures/java/unconstrained.py +3 -2
  932. angr/procedures/java_io/read.py +1 -0
  933. angr/procedures/java_io/write.py +1 -0
  934. angr/procedures/java_jni/__init__.py +4 -5
  935. angr/procedures/java_jni/array_operations.py +1 -0
  936. angr/procedures/java_jni/class_and_interface_operations.py +3 -3
  937. angr/procedures/java_jni/field_access.py +3 -6
  938. angr/procedures/java_jni/global_and_local_refs.py +1 -0
  939. angr/procedures/java_jni/method_calls.py +3 -2
  940. angr/procedures/java_jni/not_implemented.py +2 -1
  941. angr/procedures/java_jni/object_operations.py +3 -4
  942. angr/procedures/java_jni/string_operations.py +1 -0
  943. angr/procedures/java_jni/version_information.py +1 -0
  944. angr/procedures/java_lang/character.py +2 -3
  945. angr/procedures/java_lang/double.py +2 -2
  946. angr/procedures/java_lang/exit.py +1 -0
  947. angr/procedures/java_lang/getsimplename.py +2 -2
  948. angr/procedures/java_lang/integer.py +1 -0
  949. angr/procedures/java_lang/load_library.py +1 -0
  950. angr/procedures/java_lang/math.py +1 -0
  951. angr/procedures/java_lang/string.py +2 -2
  952. angr/procedures/java_lang/stringbuilder.py +1 -0
  953. angr/procedures/java_lang/system.py +1 -0
  954. angr/procedures/java_util/collection.py +1 -0
  955. angr/procedures/java_util/iterator.py +1 -0
  956. angr/procedures/java_util/list.py +1 -0
  957. angr/procedures/java_util/map.py +3 -4
  958. angr/procedures/java_util/random.py +1 -0
  959. angr/procedures/java_util/scanner_nextline.py +1 -0
  960. angr/procedures/libc/abort.py +1 -0
  961. angr/procedures/libc/access.py +1 -0
  962. angr/procedures/libc/atoi.py +2 -2
  963. angr/procedures/libc/atol.py +1 -0
  964. angr/procedures/libc/calloc.py +1 -0
  965. angr/procedures/libc/closelog.py +1 -0
  966. angr/procedures/libc/err.py +1 -0
  967. angr/procedures/libc/error.py +2 -3
  968. angr/procedures/libc/exit.py +1 -0
  969. angr/procedures/libc/fclose.py +2 -3
  970. angr/procedures/libc/feof.py +1 -0
  971. angr/procedures/libc/fflush.py +1 -0
  972. angr/procedures/libc/fgetc.py +1 -0
  973. angr/procedures/libc/fgets.py +19 -19
  974. angr/procedures/libc/fopen.py +6 -8
  975. angr/procedures/libc/fprintf.py +1 -0
  976. angr/procedures/libc/fputc.py +1 -0
  977. angr/procedures/libc/fputs.py +1 -0
  978. angr/procedures/libc/fread.py +1 -0
  979. angr/procedures/libc/free.py +1 -0
  980. angr/procedures/libc/fscanf.py +2 -2
  981. angr/procedures/libc/fseek.py +3 -2
  982. angr/procedures/libc/ftell.py +1 -0
  983. angr/procedures/libc/fwrite.py +1 -0
  984. angr/procedures/libc/getchar.py +2 -2
  985. angr/procedures/libc/getdelim.py +25 -25
  986. angr/procedures/libc/getegid.py +1 -0
  987. angr/procedures/libc/geteuid.py +1 -0
  988. angr/procedures/libc/getgid.py +1 -0
  989. angr/procedures/libc/gets.py +18 -18
  990. angr/procedures/libc/getuid.py +1 -0
  991. angr/procedures/libc/malloc.py +1 -0
  992. angr/procedures/libc/memcmp.py +3 -6
  993. angr/procedures/libc/memcpy.py +1 -0
  994. angr/procedures/libc/memset.py +1 -0
  995. angr/procedures/libc/openlog.py +1 -0
  996. angr/procedures/libc/perror.py +1 -0
  997. angr/procedures/libc/printf.py +1 -0
  998. angr/procedures/libc/putchar.py +1 -0
  999. angr/procedures/libc/puts.py +1 -0
  1000. angr/procedures/libc/rand.py +1 -0
  1001. angr/procedures/libc/realloc.py +1 -0
  1002. angr/procedures/libc/rewind.py +2 -1
  1003. angr/procedures/libc/scanf.py +2 -2
  1004. angr/procedures/libc/setbuf.py +1 -0
  1005. angr/procedures/libc/setvbuf.py +1 -0
  1006. angr/procedures/libc/snprintf.py +1 -0
  1007. angr/procedures/libc/sprintf.py +1 -0
  1008. angr/procedures/libc/srand.py +1 -0
  1009. angr/procedures/libc/sscanf.py +2 -2
  1010. angr/procedures/libc/stpcpy.py +2 -2
  1011. angr/procedures/libc/strcat.py +1 -0
  1012. angr/procedures/libc/strchr.py +1 -0
  1013. angr/procedures/libc/strcmp.py +1 -0
  1014. angr/procedures/libc/strcpy.py +2 -2
  1015. angr/procedures/libc/strlen.py +35 -31
  1016. angr/procedures/libc/strncat.py +1 -0
  1017. angr/procedures/libc/strncmp.py +9 -11
  1018. angr/procedures/libc/strncpy.py +1 -0
  1019. angr/procedures/libc/strnlen.py +2 -2
  1020. angr/procedures/libc/strstr.py +8 -4
  1021. angr/procedures/libc/strtol.py +9 -9
  1022. angr/procedures/libc/strtoul.py +2 -2
  1023. angr/procedures/libc/system.py +1 -0
  1024. angr/procedures/libc/time.py +2 -2
  1025. angr/procedures/libc/tmpnam.py +1 -0
  1026. angr/procedures/libc/tolower.py +1 -0
  1027. angr/procedures/libc/toupper.py +1 -0
  1028. angr/procedures/libc/ungetc.py +1 -0
  1029. angr/procedures/libc/vsnprintf.py +1 -0
  1030. angr/procedures/libc/wchar.py +1 -0
  1031. angr/procedures/libstdcpp/_unwind_resume.py +1 -0
  1032. angr/procedures/libstdcpp/std____throw_bad_alloc.py +1 -0
  1033. angr/procedures/libstdcpp/std____throw_bad_cast.py +1 -0
  1034. angr/procedures/libstdcpp/std____throw_length_error.py +1 -0
  1035. angr/procedures/libstdcpp/std____throw_logic_error.py +1 -0
  1036. angr/procedures/libstdcpp/std__terminate.py +1 -0
  1037. angr/procedures/linux_kernel/access.py +1 -0
  1038. angr/procedures/linux_kernel/arch_prctl.py +1 -0
  1039. angr/procedures/linux_kernel/arm_user_helpers.py +1 -0
  1040. angr/procedures/linux_kernel/brk.py +1 -0
  1041. angr/procedures/linux_kernel/cwd.py +1 -0
  1042. angr/procedures/linux_kernel/fstat.py +2 -1
  1043. angr/procedures/linux_kernel/fstat64.py +2 -1
  1044. angr/procedures/linux_kernel/futex.py +3 -3
  1045. angr/procedures/linux_kernel/getegid.py +1 -0
  1046. angr/procedures/linux_kernel/geteuid.py +1 -0
  1047. angr/procedures/linux_kernel/getgid.py +1 -0
  1048. angr/procedures/linux_kernel/getpid.py +1 -0
  1049. angr/procedures/linux_kernel/getrlimit.py +3 -3
  1050. angr/procedures/linux_kernel/gettid.py +1 -0
  1051. angr/procedures/linux_kernel/getuid.py +1 -0
  1052. angr/procedures/linux_kernel/iovec.py +1 -0
  1053. angr/procedures/linux_kernel/lseek.py +1 -0
  1054. angr/procedures/linux_kernel/mmap.py +1 -0
  1055. angr/procedures/linux_kernel/mprotect.py +7 -6
  1056. angr/procedures/linux_kernel/munmap.py +1 -0
  1057. angr/procedures/linux_kernel/openat.py +3 -5
  1058. angr/procedures/linux_kernel/set_tid_address.py +1 -0
  1059. angr/procedures/linux_kernel/sigaction.py +1 -0
  1060. angr/procedures/linux_kernel/sigprocmask.py +1 -0
  1061. angr/procedures/linux_kernel/stat.py +3 -2
  1062. angr/procedures/linux_kernel/sysinfo.py +1 -0
  1063. angr/procedures/linux_kernel/tgkill.py +1 -0
  1064. angr/procedures/linux_kernel/time.py +2 -1
  1065. angr/procedures/linux_kernel/uid.py +1 -0
  1066. angr/procedures/linux_kernel/uname.py +1 -0
  1067. angr/procedures/linux_kernel/unlink.py +2 -2
  1068. angr/procedures/linux_kernel/vsyscall.py +1 -0
  1069. angr/procedures/linux_loader/_dl_initial_error_catch_tsd.py +1 -0
  1070. angr/procedures/linux_loader/_dl_rtld_lock.py +1 -0
  1071. angr/procedures/linux_loader/sim_loader.py +1 -0
  1072. angr/procedures/linux_loader/tls.py +2 -2
  1073. angr/procedures/msvcr/__getmainargs.py +1 -0
  1074. angr/procedures/msvcr/_initterm.py +1 -0
  1075. angr/procedures/msvcr/fmode.py +1 -0
  1076. angr/procedures/ntdll/exceptions.py +4 -3
  1077. angr/procedures/posix/accept.py +2 -2
  1078. angr/procedures/posix/bind.py +1 -0
  1079. angr/procedures/posix/bzero.py +1 -0
  1080. angr/procedures/posix/chroot.py +1 -0
  1081. angr/procedures/posix/close.py +2 -2
  1082. angr/procedures/posix/closedir.py +1 -0
  1083. angr/procedures/posix/dup.py +4 -3
  1084. angr/procedures/posix/fcntl.py +1 -0
  1085. angr/procedures/posix/fdopen.py +16 -19
  1086. angr/procedures/posix/fileno.py +1 -0
  1087. angr/procedures/posix/fork.py +1 -0
  1088. angr/procedures/posix/getenv.py +1 -0
  1089. angr/procedures/posix/gethostbyname.py +1 -0
  1090. angr/procedures/posix/getpass.py +1 -0
  1091. angr/procedures/posix/getsockopt.py +1 -0
  1092. angr/procedures/posix/htonl.py +2 -2
  1093. angr/procedures/posix/htons.py +2 -2
  1094. angr/procedures/posix/inet_ntoa.py +3 -5
  1095. angr/procedures/posix/listen.py +1 -0
  1096. angr/procedures/posix/mmap.py +2 -1
  1097. angr/procedures/posix/open.py +1 -0
  1098. angr/procedures/posix/opendir.py +1 -0
  1099. angr/procedures/posix/poll.py +3 -3
  1100. angr/procedures/posix/pread64.py +1 -0
  1101. angr/procedures/posix/pthread.py +3 -3
  1102. angr/procedures/posix/pwrite64.py +1 -0
  1103. angr/procedures/posix/read.py +1 -0
  1104. angr/procedures/posix/readdir.py +1 -1
  1105. angr/procedures/posix/recv.py +1 -0
  1106. angr/procedures/posix/recvfrom.py +1 -0
  1107. angr/procedures/posix/select.py +7 -7
  1108. angr/procedures/posix/send.py +2 -2
  1109. angr/procedures/posix/setsockopt.py +1 -0
  1110. angr/procedures/posix/sigaction.py +1 -0
  1111. angr/procedures/posix/sim_time.py +1 -0
  1112. angr/procedures/posix/sleep.py +1 -0
  1113. angr/procedures/posix/socket.py +2 -2
  1114. angr/procedures/posix/strcasecmp.py +1 -0
  1115. angr/procedures/posix/strdup.py +1 -0
  1116. angr/procedures/posix/strtok_r.py +32 -36
  1117. angr/procedures/posix/syslog.py +1 -0
  1118. angr/procedures/posix/tz.py +1 -0
  1119. angr/procedures/posix/unlink.py +1 -0
  1120. angr/procedures/posix/usleep.py +1 -0
  1121. angr/procedures/posix/write.py +1 -0
  1122. angr/procedures/procedure_dict.py +1 -0
  1123. angr/procedures/stubs/CallReturn.py +1 -0
  1124. angr/procedures/stubs/NoReturnUnconstrained.py +1 -0
  1125. angr/procedures/stubs/Nop.py +1 -0
  1126. angr/procedures/stubs/PathTerminator.py +1 -0
  1127. angr/procedures/stubs/Redirect.py +2 -1
  1128. angr/procedures/stubs/ReturnChar.py +1 -0
  1129. angr/procedures/stubs/ReturnUnconstrained.py +2 -1
  1130. angr/procedures/stubs/UnresolvableCallTarget.py +1 -0
  1131. angr/procedures/stubs/UnresolvableJumpTarget.py +1 -0
  1132. angr/procedures/stubs/UserHook.py +1 -0
  1133. angr/procedures/stubs/b64_decode.py +1 -0
  1134. angr/procedures/stubs/caller.py +1 -0
  1135. angr/procedures/stubs/crazy_scanf.py +1 -0
  1136. angr/procedures/stubs/format_parser.py +11 -15
  1137. angr/procedures/stubs/syscall_stub.py +6 -7
  1138. angr/procedures/testing/manyargs.py +1 -0
  1139. angr/procedures/testing/retreg.py +2 -2
  1140. angr/procedures/tracer/random.py +1 -0
  1141. angr/procedures/tracer/receive.py +4 -4
  1142. angr/procedures/tracer/transmit.py +4 -4
  1143. angr/procedures/uclibc/__uClibc_main.py +1 -0
  1144. angr/procedures/win32/EncodePointer.py +1 -0
  1145. angr/procedures/win32/ExitProcess.py +1 -0
  1146. angr/procedures/win32/GetCommandLine.py +1 -0
  1147. angr/procedures/win32/GetCurrentProcessId.py +1 -0
  1148. angr/procedures/win32/GetCurrentThreadId.py +1 -0
  1149. angr/procedures/win32/GetLastInputInfo.py +1 -0
  1150. angr/procedures/win32/GetModuleHandle.py +3 -4
  1151. angr/procedures/win32/GetProcessAffinityMask.py +1 -0
  1152. angr/procedures/win32/InterlockedExchange.py +2 -1
  1153. angr/procedures/win32/IsProcessorFeaturePresent.py +1 -0
  1154. angr/procedures/win32/VirtualAlloc.py +2 -1
  1155. angr/procedures/win32/VirtualProtect.py +1 -0
  1156. angr/procedures/win32/critical_section.py +1 -0
  1157. angr/procedures/win32/dynamic_loading.py +2 -1
  1158. angr/procedures/win32/file_handles.py +4 -4
  1159. angr/procedures/win32/gethostbyname.py +2 -2
  1160. angr/procedures/win32/heap.py +1 -0
  1161. angr/procedures/win32/is_bad_ptr.py +1 -0
  1162. angr/procedures/win32/local_storage.py +7 -6
  1163. angr/procedures/win32/mutex.py +1 -0
  1164. angr/procedures/win32/sim_time.py +7 -10
  1165. angr/procedures/win32/system_paths.py +5 -4
  1166. angr/procedures/win32_kernel/ExAllocatePool.py +1 -0
  1167. angr/procedures/win32_kernel/ExFreePoolWithTag.py +1 -0
  1168. angr/procedures/win_user32/chars.py +1 -0
  1169. angr/procedures/win_user32/keyboard.py +1 -0
  1170. angr/procedures/win_user32/messagebox.py +2 -4
  1171. angr/project.py +15 -22
  1172. angr/protos/__init__.py +1 -0
  1173. angr/serializable.py +6 -3
  1174. angr/sim_manager.py +18 -18
  1175. angr/sim_options.py +5 -7
  1176. angr/sim_procedure.py +11 -10
  1177. angr/sim_state.py +40 -54
  1178. angr/sim_state_options.py +9 -15
  1179. angr/sim_type.py +93 -123
  1180. angr/sim_variable.py +23 -38
  1181. angr/simos/__init__.py +3 -1
  1182. angr/simos/cgc.py +2 -1
  1183. angr/simos/javavm.py +77 -83
  1184. angr/simos/linux.py +53 -63
  1185. angr/simos/simos.py +13 -22
  1186. angr/simos/snimmuc_nxp.py +3 -6
  1187. angr/simos/userland.py +6 -6
  1188. angr/simos/windows.py +13 -10
  1189. angr/slicer.py +13 -11
  1190. angr/state_hierarchy.py +3 -3
  1191. angr/state_plugins/__init__.py +1 -0
  1192. angr/state_plugins/callstack.py +19 -18
  1193. angr/state_plugins/cgc.py +5 -4
  1194. angr/state_plugins/concrete.py +7 -8
  1195. angr/state_plugins/debug_variables.py +15 -17
  1196. angr/state_plugins/filesystem.py +13 -19
  1197. angr/state_plugins/gdb.py +3 -2
  1198. angr/state_plugins/globals.py +5 -1
  1199. angr/state_plugins/heap/__init__.py +1 -0
  1200. angr/state_plugins/heap/heap_base.py +1 -0
  1201. angr/state_plugins/heap/heap_brk.py +9 -6
  1202. angr/state_plugins/heap/heap_freelist.py +12 -9
  1203. angr/state_plugins/heap/heap_libc.py +1 -0
  1204. angr/state_plugins/heap/heap_ptmalloc.py +27 -36
  1205. angr/state_plugins/heap/utils.py +1 -0
  1206. angr/state_plugins/history.py +7 -10
  1207. angr/state_plugins/inspect.py +1 -0
  1208. angr/state_plugins/javavm_classloader.py +3 -2
  1209. angr/state_plugins/jni_references.py +2 -1
  1210. angr/state_plugins/libc.py +4 -4
  1211. angr/state_plugins/light_registers.py +6 -8
  1212. angr/state_plugins/log.py +1 -0
  1213. angr/state_plugins/loop_data.py +1 -0
  1214. angr/state_plugins/plugin.py +7 -8
  1215. angr/state_plugins/posix.py +14 -22
  1216. angr/state_plugins/preconstrainer.py +2 -1
  1217. angr/state_plugins/scratch.py +5 -4
  1218. angr/state_plugins/sim_action.py +15 -20
  1219. angr/state_plugins/sim_action_object.py +205 -82
  1220. angr/state_plugins/sim_event.py +1 -0
  1221. angr/state_plugins/solver.py +64 -92
  1222. angr/state_plugins/symbolizer.py +5 -6
  1223. angr/state_plugins/trace_additions.py +24 -34
  1224. angr/state_plugins/uc_manager.py +16 -9
  1225. angr/state_plugins/unicorn_engine.py +21 -37
  1226. angr/state_plugins/view.py +20 -19
  1227. angr/storage/__init__.py +1 -0
  1228. angr/storage/file.py +19 -21
  1229. angr/storage/memory_mixins/__init__.py +12 -15
  1230. angr/storage/memory_mixins/__init__.pyi +13 -14
  1231. angr/storage/memory_mixins/actions_mixin.py +1 -0
  1232. angr/storage/memory_mixins/address_concretization_mixin.py +11 -15
  1233. angr/storage/memory_mixins/bvv_conversion_mixin.py +10 -11
  1234. angr/storage/memory_mixins/clouseau_mixin.py +1 -0
  1235. angr/storage/memory_mixins/conditional_store_mixin.py +1 -0
  1236. angr/storage/memory_mixins/convenient_mappings_mixin.py +1 -0
  1237. angr/storage/memory_mixins/default_filler_mixin.py +12 -14
  1238. angr/storage/memory_mixins/dirty_addrs_mixin.py +1 -0
  1239. angr/storage/memory_mixins/hex_dumper_mixin.py +6 -9
  1240. angr/storage/memory_mixins/javavm_memory/__init__.py +1 -0
  1241. angr/storage/memory_mixins/javavm_memory/javavm_memory_mixin.py +16 -23
  1242. angr/storage/memory_mixins/keyvalue_memory/__init__.py +1 -0
  1243. angr/storage/memory_mixins/keyvalue_memory/keyvalue_memory_mixin.py +2 -1
  1244. angr/storage/memory_mixins/label_merger_mixin.py +2 -2
  1245. angr/storage/memory_mixins/multi_value_merger_mixin.py +1 -0
  1246. angr/storage/memory_mixins/name_resolution_mixin.py +12 -15
  1247. angr/storage/memory_mixins/paged_memory/page_backer_mixins.py +6 -6
  1248. angr/storage/memory_mixins/paged_memory/paged_memory_mixin.py +22 -36
  1249. angr/storage/memory_mixins/paged_memory/paged_memory_multivalue_mixin.py +1 -0
  1250. angr/storage/memory_mixins/paged_memory/pages/__init__.py +1 -2
  1251. angr/storage/memory_mixins/paged_memory/pages/cooperation.py +4 -3
  1252. angr/storage/memory_mixins/paged_memory/pages/history_tracking_mixin.py +4 -4
  1253. angr/storage/memory_mixins/paged_memory/pages/ispo_mixin.py +1 -0
  1254. angr/storage/memory_mixins/paged_memory/pages/list_page.py +12 -20
  1255. angr/storage/memory_mixins/paged_memory/pages/multi_values.py +14 -19
  1256. angr/storage/memory_mixins/paged_memory/pages/mv_list_page.py +26 -32
  1257. angr/storage/memory_mixins/paged_memory/pages/permissions_mixin.py +1 -0
  1258. angr/storage/memory_mixins/paged_memory/pages/refcount_mixin.py +2 -2
  1259. angr/storage/memory_mixins/paged_memory/pages/ultra_page.py +37 -41
  1260. angr/storage/memory_mixins/paged_memory/privileged_mixin.py +1 -0
  1261. angr/storage/memory_mixins/paged_memory/stack_allocation_mixin.py +1 -0
  1262. angr/storage/memory_mixins/regioned_memory/__init__.py +1 -0
  1263. angr/storage/memory_mixins/regioned_memory/abstract_address_descriptor.py +5 -4
  1264. angr/storage/memory_mixins/regioned_memory/abstract_merger_mixin.py +6 -21
  1265. angr/storage/memory_mixins/regioned_memory/region_category_mixin.py +1 -0
  1266. angr/storage/memory_mixins/regioned_memory/region_data.py +4 -5
  1267. angr/storage/memory_mixins/regioned_memory/region_meta_mixin.py +129 -13
  1268. angr/storage/memory_mixins/regioned_memory/regioned_address_concretization_mixin.py +2 -1
  1269. angr/storage/memory_mixins/regioned_memory/regioned_memory_mixin.py +34 -44
  1270. angr/storage/memory_mixins/regioned_memory/static_find_mixin.py +7 -9
  1271. angr/storage/memory_mixins/simple_interface_mixin.py +8 -11
  1272. angr/storage/memory_mixins/simplification_mixin.py +1 -0
  1273. angr/storage/memory_mixins/size_resolution_mixin.py +4 -3
  1274. angr/storage/memory_mixins/slotted_memory.py +3 -3
  1275. angr/storage/memory_mixins/smart_find_mixin.py +1 -0
  1276. angr/storage/memory_mixins/symbolic_merger_mixin.py +1 -0
  1277. angr/storage/memory_mixins/top_merger_mixin.py +2 -2
  1278. angr/storage/memory_mixins/underconstrained_mixin.py +12 -14
  1279. angr/storage/memory_mixins/unwrapper_mixin.py +1 -0
  1280. angr/storage/memory_object.py +30 -28
  1281. angr/storage/pcap.py +3 -3
  1282. angr/tablespecs.py +1 -0
  1283. angr/utils/__init__.py +1 -0
  1284. angr/utils/ail.py +30 -0
  1285. angr/utils/algo.py +1 -0
  1286. angr/utils/bits.py +12 -0
  1287. angr/utils/constants.py +2 -0
  1288. angr/utils/cowdict.py +3 -4
  1289. angr/utils/dynamic_dictlist.py +4 -7
  1290. angr/utils/endness.py +1 -0
  1291. angr/utils/enums_conv.py +1 -0
  1292. angr/utils/env.py +1 -0
  1293. angr/utils/formatting.py +1 -0
  1294. angr/utils/funcid.py +15 -14
  1295. angr/utils/graph.py +52 -19
  1296. angr/utils/lazy_import.py +1 -0
  1297. angr/utils/library.py +10 -13
  1298. angr/utils/loader.py +6 -6
  1299. angr/utils/mp.py +4 -3
  1300. angr/utils/orderedset.py +1 -0
  1301. angr/utils/segment_list.py +7 -9
  1302. angr/utils/ssa/__init__.py +198 -0
  1303. angr/utils/ssa/tmp_uses_collector.py +23 -0
  1304. angr/utils/ssa/vvar_uses_collector.py +37 -0
  1305. angr/utils/timing.py +2 -2
  1306. angr/utils/typing.py +1 -0
  1307. angr/vaults.py +7 -8
  1308. {angr-9.2.117.dist-info → angr-9.2.118.dist-info}/METADATA +7 -8
  1309. angr-9.2.118.dist-info/RECORD +1344 -0
  1310. {angr-9.2.117.dist-info → angr-9.2.118.dist-info}/WHEEL +1 -1
  1311. angr/analyses/decompiler/optimization_passes/spilled_register_finder.py +0 -18
  1312. angr/analyses/decompiler/seq_cf_structure_counter.py +0 -37
  1313. angr/service.py +0 -35
  1314. angr-9.2.117.dist-info/RECORD +0 -1310
  1315. {angr-9.2.117.dist-info → angr-9.2.118.dist-info}/LICENSE +0 -0
  1316. {angr-9.2.117.dist-info → angr-9.2.118.dist-info}/entry_points.txt +0 -0
  1317. {angr-9.2.117.dist-info → angr-9.2.118.dist-info}/top_level.txt +0 -0
@@ -1,4 +1,5 @@
1
1
  # pylint:disable=unsubscriptable-object
2
+ from __future__ import annotations
2
3
  from typing import Any, TYPE_CHECKING
3
4
 
4
5
  from ...utils.cowdict import DefaultChainMapCOW
@@ -20,18 +21,18 @@ class Uses:
20
21
  uses_by_definition: DefaultChainMapCOW | None = None,
21
22
  uses_by_location: DefaultChainMapCOW | None = None,
22
23
  ):
23
- self._uses_by_definition: DefaultChainMapCOW["Definition", set[tuple[CodeLocation, Any | None]]] = (
24
+ self._uses_by_definition: DefaultChainMapCOW[Definition, set[tuple[CodeLocation, Any | None]]] = (
24
25
  DefaultChainMapCOW(default_factory=set, collapse_threshold=25)
25
26
  if uses_by_definition is None
26
27
  else uses_by_definition
27
28
  )
28
- self._uses_by_location: DefaultChainMapCOW[CodeLocation, set[tuple["Definition", Any | None]]] = (
29
+ self._uses_by_location: DefaultChainMapCOW[CodeLocation, set[tuple[Definition, Any | None]]] = (
29
30
  DefaultChainMapCOW(default_factory=set, collapse_threshold=25)
30
31
  if uses_by_location is None
31
32
  else uses_by_location
32
33
  )
33
34
 
34
- def add_use(self, definition: "Definition", codeloc: CodeLocation, expr: Any | None = None):
35
+ def add_use(self, definition: Definition, codeloc: CodeLocation, expr: Any | None = None):
35
36
  """
36
37
  Add a use for a given definition.
37
38
 
@@ -44,7 +45,7 @@ class Uses:
44
45
  self._uses_by_location = self._uses_by_location.clean()
45
46
  self._uses_by_location[codeloc].add((definition, expr))
46
47
 
47
- def get_uses(self, definition: "Definition") -> set[CodeLocation]:
48
+ def get_uses(self, definition: Definition) -> set[CodeLocation]:
48
49
  """
49
50
  Retrieve the uses of a given definition.
50
51
 
@@ -52,7 +53,7 @@ class Uses:
52
53
  """
53
54
  return {codeloc for codeloc, _ in self._uses_by_definition.get(definition, set())}
54
55
 
55
- def get_uses_with_expr(self, definition: "Definition") -> set[tuple[CodeLocation, Any | None]]:
56
+ def get_uses_with_expr(self, definition: Definition) -> set[tuple[CodeLocation, Any | None]]:
56
57
  """
57
58
  Retrieve the uses and the corresponding expressions of a given definition.
58
59
 
@@ -60,7 +61,7 @@ class Uses:
60
61
  """
61
62
  return self._uses_by_definition.get(definition, set())
62
63
 
63
- def remove_use(self, definition: "Definition", codeloc: "CodeLocation", expr: Any | None = None) -> None:
64
+ def remove_use(self, definition: Definition, codeloc: CodeLocation, expr: Any | None = None) -> None:
64
65
  """
65
66
  Remove one use of a given definition.
66
67
 
@@ -69,15 +70,14 @@ class Uses:
69
70
  :param expr: The expression that uses the definition at the given location.
70
71
  :return: None
71
72
  """
72
- if definition in self._uses_by_definition:
73
- if codeloc in self._uses_by_definition[definition]:
74
- self._uses_by_definition = self._uses_by_definition.clean()
75
- if expr is None:
76
- for codeloc_, expr_ in list(self._uses_by_definition[definition]):
77
- if codeloc_ == codeloc:
78
- self._uses_by_definition[definition].remove((codeloc_, expr_))
79
- else:
80
- self._uses_by_definition[definition].remove((codeloc, expr))
73
+ if definition in self._uses_by_definition and codeloc in self._uses_by_definition[definition]:
74
+ self._uses_by_definition = self._uses_by_definition.clean()
75
+ if expr is None:
76
+ for codeloc_, expr_ in list(self._uses_by_definition[definition]):
77
+ if codeloc_ == codeloc:
78
+ self._uses_by_definition[definition].remove((codeloc_, expr_))
79
+ else:
80
+ self._uses_by_definition[definition].remove((codeloc, expr))
81
81
 
82
82
  if codeloc in self._uses_by_location:
83
83
  self._uses_by_location = self._uses_by_location.clean()
@@ -85,7 +85,7 @@ class Uses:
85
85
  if item[0] == definition:
86
86
  self._uses_by_location[codeloc].remove(item)
87
87
 
88
- def remove_uses(self, definition: "Definition"):
88
+ def remove_uses(self, definition: Definition):
89
89
  """
90
90
  Remove all uses of a given definition.
91
91
 
@@ -105,7 +105,7 @@ class Uses:
105
105
 
106
106
  def get_uses_by_location(
107
107
  self, codeloc: CodeLocation, exprs: bool = False
108
- ) -> set["Definition"] | set[tuple["Definition", Any | None]]:
108
+ ) -> set[Definition] | set[tuple[Definition, Any | None]]:
109
109
  """
110
110
  Retrieve all definitions that are used at a given location.
111
111
 
@@ -118,7 +118,7 @@ class Uses:
118
118
 
119
119
  def get_uses_by_insaddr(
120
120
  self, ins_addr: int, exprs: bool = False
121
- ) -> set["Definition"] | set[tuple["Definition", Any | None]]:
121
+ ) -> set[Definition] | set[tuple[Definition, Any | None]]:
122
122
  """
123
123
  Retrieve all definitions that are used at a given location specified by the instruction address.
124
124
 
@@ -135,20 +135,18 @@ class Uses:
135
135
  return all_uses
136
136
  return {item[0] for item in all_uses}
137
137
 
138
- def copy(self) -> "Uses":
138
+ def copy(self) -> Uses:
139
139
  """
140
140
  Copy the instance.
141
141
 
142
142
  :return: Return a new <Uses> instance containing the same data.
143
143
  """
144
- u = Uses(
144
+ return Uses(
145
145
  uses_by_definition=self._uses_by_definition.copy(),
146
146
  uses_by_location=self._uses_by_location.copy(),
147
147
  )
148
148
 
149
- return u
150
-
151
- def merge(self, other: "Uses") -> bool:
149
+ def merge(self, other: Uses) -> bool:
152
150
  """
153
151
  Merge an instance of <Uses> into the current instance.
154
152
 
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  from archinfo.arch_arm import is_arm_arch
2
3
  import cle
3
4
 
@@ -83,8 +84,8 @@ class Labels(KnowledgeBasePlugin):
83
84
 
84
85
  def copy(self):
85
86
  o = Labels(self._kb)
86
- o._labels = {k: v for k, v in self._labels.items()}
87
- o._reverse_labels = {k: v for k, v in self._reverse_labels.items()}
87
+ o._labels = dict(self._labels.items())
88
+ o._reverse_labels = dict(self._reverse_labels.items())
88
89
 
89
90
  def get_unique_label(self, label):
90
91
  """
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  from cle.address_translator import AddressTranslator
2
3
  from sortedcontainers import SortedDict
3
4
 
@@ -93,7 +94,7 @@ class PatchManager(KnowledgeBasePlugin):
93
94
 
94
95
  def apply_patches_to_binary(self, binary_bytes: bytes | None = None, patches: list[Patch] | None = None) -> bytes:
95
96
  if patches is None:
96
- patches = sorted(list(self._patches.values()), key=lambda x: x.addr)
97
+ patches = sorted(self._patches.values(), key=lambda x: x.addr)
97
98
 
98
99
  if binary_bytes is None:
99
100
  with open(self._kb._project.loader.main_object.binary, "rb") as f:
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  from typing import TYPE_CHECKING
2
3
 
3
4
  if TYPE_CHECKING:
@@ -7,7 +8,7 @@ default_plugins = {}
7
8
 
8
9
 
9
10
  class KnowledgeBasePlugin:
10
- def __init__(self, kb: "KnowledgeBase"):
11
+ def __init__(self, kb: KnowledgeBase):
11
12
  # This call is needed, because some Plugins like TypesStore inherit from KnowledgeBasePlugin and something else
12
13
  # So we still need to call the constructor of the other class.
13
14
  super().__init__()
@@ -1,2 +1,3 @@
1
+ from __future__ import annotations
1
2
  from .propagation_model import PropagationModel
2
3
  from .propagation_manager import PropagationManager
@@ -1,4 +1,5 @@
1
- from typing import Any, Optional, TYPE_CHECKING
1
+ from __future__ import annotations
2
+ from typing import Any, TYPE_CHECKING
2
3
  from collections.abc import Iterable, Generator
3
4
 
4
5
  import claripy
@@ -18,7 +19,7 @@ class Detail:
18
19
 
19
20
  __slots__ = ("size", "expr", "def_at")
20
21
 
21
- def __init__(self, size: int, expr: ailment.Expression | None, def_at: Optional["CodeLocation"]):
22
+ def __init__(self, size: int, expr: ailment.Expression | None, def_at: CodeLocation | None):
22
23
  self.size = size
23
24
  self.expr = expr
24
25
  self.def_at = def_at
@@ -54,39 +55,37 @@ class PropValue:
54
55
  Get the expression that starts at offset 0 and covers the entire PropValue. Returns None if there are no
55
56
  expressions or multiple expressions.
56
57
  """
57
- if self.offset_and_details and len(self.offset_and_details) == 1:
58
- if 0 in self.offset_and_details:
59
- detail = self.offset_and_details[0]
60
- if detail.size == self.value.size() // 8:
61
- return detail.expr
58
+ if self.offset_and_details and len(self.offset_and_details) == 1 and 0 in self.offset_and_details:
59
+ detail = self.offset_and_details[0]
60
+ if detail.size == self.value.size() // 8:
61
+ return detail.expr
62
62
  return None
63
63
 
64
64
  @property
65
- def one_defat(self) -> Optional["CodeLocation"]:
65
+ def one_defat(self) -> CodeLocation | None:
66
66
  """
67
67
  Get the definition location of the expression that starts at offset 0 and covers the entire PropValue. Returns
68
68
  None if there are no expressions or multiple expressions.
69
69
  """
70
- if self.offset_and_details and len(self.offset_and_details) == 1:
71
- if 0 in self.offset_and_details:
72
- detail = self.offset_and_details[0]
73
- if detail.size == self.value.size() // 8:
74
- return detail.def_at
70
+ if self.offset_and_details and len(self.offset_and_details) == 1 and 0 in self.offset_and_details:
71
+ detail = self.offset_and_details[0]
72
+ if detail.size == self.value.size() // 8:
73
+ return detail.def_at
75
74
  return None
76
75
 
77
76
  def to_label(self):
78
- raise NotImplementedError()
77
+ raise NotImplementedError
79
78
 
80
- def with_details(self, size: int, expr: ailment.Expression, def_at: "CodeLocation") -> "PropValue":
79
+ def with_details(self, size: int, expr: ailment.Expression, def_at: CodeLocation) -> PropValue:
81
80
  return PropValue(self.value, offset_and_details={0: Detail(size, expr, def_at)})
82
81
 
83
- def all_exprs(self) -> Generator[ailment.Expression, None, None]:
82
+ def all_exprs(self) -> Generator[ailment.Expression]:
84
83
  if not self.offset_and_details:
85
84
  return
86
85
  for detail in self.offset_and_details.values():
87
86
  yield detail.expr
88
87
 
89
- def non_zero_exprs(self) -> Generator[ailment.Expression, None, None]:
88
+ def non_zero_exprs(self) -> Generator[ailment.Expression]:
90
89
  if not self.offset_and_details:
91
90
  return
92
91
  for detail in self.offset_and_details.values():
@@ -110,10 +109,10 @@ class PropValue:
110
109
  value = claripy.fpToIEEEBV(value)
111
110
  return value[chop_start:chop_end]
112
111
 
113
- def value_and_labels(self) -> Generator[tuple[int, claripy.ast.Bits, int, dict | None], None, None]:
112
+ def value_and_labels(self) -> Generator[tuple[int, claripy.ast.Bits, int, dict | None]]:
114
113
  if not self.offset_and_details:
115
114
  return
116
- keys = list(sorted(self.offset_and_details.keys()))
115
+ keys = sorted(self.offset_and_details.keys())
117
116
  if keys[0] != 0:
118
117
  # missing details at 0
119
118
  yield 0, self.chop_value(self.value, 0, keys[0]), keys[0], None
@@ -142,7 +141,7 @@ class PropValue:
142
141
  @staticmethod
143
142
  def from_value_and_labels(
144
143
  value: claripy.ast.Bits, labels: Iterable[tuple[int, int, int, dict[str, Any]]]
145
- ) -> "PropValue":
144
+ ) -> PropValue:
146
145
  if not labels:
147
146
  return PropValue(value)
148
147
  offset_and_details = {}
@@ -159,7 +158,7 @@ class PropValue:
159
158
  return PropValue(value, offset_and_details=offset_and_details)
160
159
 
161
160
  @staticmethod
162
- def from_value_and_details(value: claripy.ast.Bits, size: int, expr: ailment.Expression, def_at: "CodeLocation"):
161
+ def from_value_and_details(value: claripy.ast.Bits, size: int, expr: ailment.Expression, def_at: CodeLocation):
163
162
  d = Detail(size, expr, def_at)
164
163
  return PropValue(value, offset_and_details={0: d})
165
164
 
@@ -176,11 +175,10 @@ class PropValue:
176
175
 
177
176
  if start == 0:
178
177
  return ailment.Expr.Convert(None, expr.bits, bits, False, expr, **expr.tags)
179
- else:
180
- a = ailment.Expr.BinaryOp(
181
- None, "Shr", (expr, ailment.Expr.Const(None, None, bits, expr.bits)), False, **expr.tags
182
- )
183
- return ailment.Expr.Convert(None, a.bits, bits, False, a, **expr.tags)
178
+ a = ailment.Expr.BinaryOp(
179
+ None, "Shr", (expr, ailment.Expr.Const(None, None, bits, expr.bits)), False, **expr.tags
180
+ )
181
+ return ailment.Expr.Convert(None, a.bits, bits, False, a, **expr.tags)
184
182
 
185
183
  @staticmethod
186
184
  def extend_ail_expression(bits: int, expr: ailment.Expr.Expression | None) -> ailment.Expr.Expression | None:
@@ -188,6 +186,6 @@ class PropValue:
188
186
  return None
189
187
  if isinstance(expr, ailment.Expr.Const):
190
188
  return ailment.Expr.Const(expr.idx, expr.variable, expr.value, bits + expr.bits, **expr.tags)
191
- elif isinstance(expr, ailment.Expr.Convert):
189
+ if isinstance(expr, ailment.Expr.Convert):
192
190
  return ailment.Expr.Convert(None, expr.from_bits, bits + expr.to_bits, False, expr.operand, **expr.tags)
193
191
  return ailment.Expr.Convert(None, expr.bits, bits + expr.bits, False, expr, **expr.tags)
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  from angr.knowledge_plugins.plugin import KnowledgeBasePlugin
2
3
  from .propagation_model import PropagationModel
3
4
 
@@ -42,8 +43,7 @@ class PropagationManager(KnowledgeBasePlugin):
42
43
  """
43
44
  if prop_key in self._propagations:
44
45
  return self._propagations[prop_key]
45
- else:
46
- return default
46
+ return default
47
47
 
48
48
  def copy(self):
49
49
  o = PropagationManager(self._kb)
@@ -1,4 +1,5 @@
1
- from typing import DefaultDict, Any
1
+ from __future__ import annotations
2
+ from typing import Any
2
3
  from collections import defaultdict
3
4
 
4
5
  import claripy
@@ -30,10 +31,10 @@ class PropagationModel(Serializable):
30
31
  def __init__(
31
32
  self,
32
33
  prop_key: tuple,
33
- node_iterations: DefaultDict[Any, int] | None = None,
34
+ node_iterations: defaultdict[Any, int] | None = None,
34
35
  states: dict | None = None,
35
36
  block_initial_reg_values: dict | None = None,
36
- replacements: DefaultDict[Any, dict] | None = None,
37
+ replacements: defaultdict[Any, dict] | None = None,
37
38
  equivalence: set | None = None,
38
39
  function: Function | None = None,
39
40
  input_states: dict | None = None,
@@ -59,7 +60,7 @@ class PropagationModel(Serializable):
59
60
 
60
61
  def block_beginning_state(self, block_addr) -> PropagatorState:
61
62
  if self._function is None:
62
- raise NotImplementedError()
63
+ raise NotImplementedError
63
64
 
64
65
  node = self._function.get_node(block_addr)
65
66
  preds = [self.states[pnode.addr] for pnode in self._function.graph.predecessors(node)]
@@ -1,5 +1,6 @@
1
1
  # pylint:disable=too-many-boolean-expressions
2
- from typing import Optional, Union, DefaultDict, Any, TYPE_CHECKING
2
+ from __future__ import annotations
3
+ from typing import Any, TYPE_CHECKING
3
4
  from collections import defaultdict
4
5
  import weakref
5
6
 
@@ -49,7 +50,7 @@ class PropagatorState:
49
50
  Describes the base state used in Propagator.
50
51
 
51
52
  :ivar arch: Architecture of the binary.
52
- :ivar gp: alue of the global pointer for MIPS binaries.
53
+ :ivar gp: value of the global pointer for MIPS binaries.
53
54
  :ivar _replacements: Stores expressions to replace, keyed by CodeLocation instances
54
55
  :ivar _equivalence: Stores equivalence constraints that Propagator discovers during the analysis.
55
56
  :ivar _only_consts: Only track constants.
@@ -81,13 +82,13 @@ class PropagatorState:
81
82
 
82
83
  def __init__(
83
84
  self,
84
- arch: "Arch",
85
- project: Optional["Project"] = None,
85
+ arch: Arch,
86
+ project: Project | None = None,
86
87
  rda=None,
87
- replacements: DefaultDict[CodeLocation, dict] | None = None,
88
+ replacements: defaultdict[CodeLocation, dict] | None = None,
88
89
  only_consts: bool = False,
89
- expr_used_locs: DefaultDict[Any, set[CodeLocation]] | None = None,
90
- equivalence: set["Equivalence"] | None = None,
90
+ expr_used_locs: defaultdict[Any, set[CodeLocation]] | None = None,
91
+ equivalence: set[Equivalence] | None = None,
91
92
  store_tops: bool = True,
92
93
  gp: int | None = None,
93
94
  max_prop_expr_occurrence: int = 1,
@@ -129,7 +130,7 @@ class PropagatorState:
129
130
  max_prop_expr_occurrence=None,
130
131
  initial_codeloc=None,
131
132
  ):
132
- raise NotImplementedError()
133
+ raise NotImplementedError
133
134
 
134
135
  def _get_weakref(self):
135
136
  return weakref.proxy(self)
@@ -142,14 +143,12 @@ class PropagatorState:
142
143
  return True
143
144
  if isinstance(v, claripy.ast.FP) and v.op == "FPV":
144
145
  return True
145
- if isinstance(v, claripy.ast.Bool) and v.op == "BoolV":
146
- return True
147
- return False
146
+ return bool(isinstance(v, claripy.ast.Bool) and v.op == "BoolV")
148
147
 
149
148
  @staticmethod
150
149
  def _mo_cmp(
151
- mo_self: Union["SimMemoryObject", "SimLabeledMemoryObject"],
152
- mo_other: Union["SimMemoryObject", "SimLabeledMemoryObject"],
150
+ mo_self: SimMemoryObject | SimLabeledMemoryObject,
151
+ mo_other: SimMemoryObject | SimLabeledMemoryObject,
153
152
  addr: int,
154
153
  size: int,
155
154
  ): # pylint:disable=unused-argument
@@ -229,21 +228,23 @@ class PropagatorState:
229
228
  replacements_0[loc][var] = t
230
229
  merge_occurred = True
231
230
  elif (
232
- isinstance(replacements_0[loc][var], claripy.ast.Base) or isinstance(repl, claripy.ast.Base)
233
- ) and replacements_0[loc][var] is not repl:
234
- replacements_0[loc][var] = repl
235
- merge_occurred = True
236
- elif (
237
- not isinstance(replacements_0[loc][var], claripy.ast.Base)
238
- and not isinstance(repl, claripy.ast.Base)
239
- and replacements_0[loc][var] != repl
231
+ (
232
+ isinstance(replacements_0[loc][var], claripy.ast.Base)
233
+ or isinstance(repl, claripy.ast.Base)
234
+ )
235
+ and replacements_0[loc][var] is not repl
236
+ or (
237
+ not isinstance(replacements_0[loc][var], claripy.ast.Base)
238
+ and not isinstance(repl, claripy.ast.Base)
239
+ and replacements_0[loc][var] != repl
240
+ )
240
241
  ):
241
242
  replacements_0[loc][var] = repl
242
243
  merge_occurred = True
243
244
  return merge_occurred
244
245
 
245
- def copy(self) -> "PropagatorState":
246
- raise NotImplementedError()
246
+ def copy(self) -> PropagatorState:
247
+ raise NotImplementedError
247
248
 
248
249
  def merge(self, *others):
249
250
  state = self.copy()
@@ -295,9 +296,7 @@ class PropagatorState:
295
296
  return False
296
297
  if codeloc not in self._replacements:
297
298
  return False
298
- if all(self.is_top(replaced_by) for replaced_by in self._replacements[codeloc].values()):
299
- return False
300
- return True
299
+ return not all(self.is_top(replaced_by) for replaced_by in self._replacements[codeloc].values())
301
300
 
302
301
 
303
302
  # VEX state
@@ -351,7 +350,7 @@ class RegisterComparisonAnnotation(claripy.Annotation):
351
350
 
352
351
  def __eq__(self, other):
353
352
  return (
354
- type(other) is RegisterAnnotation
353
+ type(other) is RegisterComparisonAnnotation
355
354
  and self.offset == other.offset
356
355
  and self.size == other.size
357
356
  and self.cmp_op == other.cmp_op
@@ -476,8 +475,8 @@ class PropagatorVEXState(PropagatorState):
476
475
  )
477
476
  return state
478
477
 
479
- def copy(self) -> "PropagatorVEXState":
480
- cp = PropagatorVEXState(
478
+ def copy(self) -> PropagatorVEXState:
479
+ return PropagatorVEXState(
481
480
  self.arch,
482
481
  project=self.project,
483
482
  rda=self.rda,
@@ -495,9 +494,7 @@ class PropagatorVEXState(PropagatorState):
495
494
  artificial_reg_offsets=self._artificial_reg_offsets,
496
495
  )
497
496
 
498
- return cp
499
-
500
- def merge(self, *others: "PropagatorVEXState") -> tuple["PropagatorVEXState", bool]:
497
+ def merge(self, *others: PropagatorVEXState) -> tuple[PropagatorVEXState, bool]:
501
498
  state = self.copy()
502
499
  merge_occurred = state._registers.merge([o._registers for o in others], None)
503
500
  merge_occurred |= state._stack_variables.merge([o._stack_variables for o in others], None)
@@ -636,7 +633,7 @@ class PropagatorAILState(PropagatorState):
636
633
  self._tmps = {}
637
634
  self.temp_expressions = {}
638
635
  self.register_expressions = {}
639
- self.block_initial_reg_values: DefaultDict[
636
+ self.block_initial_reg_values: defaultdict[
640
637
  tuple[int, int], list[tuple[ailment.Expr.Register, ailment.Expr.Const]]
641
638
  ] = (defaultdict(list) if block_initial_reg_values is None else block_initial_reg_values)
642
639
  self._sp_adjusted: bool = sp_adjusted
@@ -732,24 +729,28 @@ class PropagatorAILState(PropagatorState):
732
729
  PropValue(claripy.BVV(0, 8), offset_and_details={0: Detail(1, reg_value, initial_codeloc)}),
733
730
  )
734
731
 
735
- if project is not None and project.simos is not None and project.simos.function_initial_registers:
736
- if func_addr is not None:
737
- for reg_name, reg_value in project.simos.function_initial_registers.items():
738
- reg_size = project.arch.registers[reg_name][1]
739
- reg_expr = ailment.Expr.Register(None, None, project.arch.registers[reg_name][0], reg_size)
740
- reg_value_expr = ailment.Expr.Const(None, None, reg_value, reg_size * 8)
741
- state.store_register(
742
- reg_expr,
743
- PropValue(
744
- claripy.BVV(reg_value, project.arch.bits),
745
- offset_and_details={0: Detail(reg_size, reg_value_expr, initial_codeloc)},
746
- ),
747
- )
732
+ if (
733
+ project is not None
734
+ and project.simos is not None
735
+ and project.simos.function_initial_registers
736
+ and func_addr is not None
737
+ ):
738
+ for reg_name, reg_value in project.simos.function_initial_registers.items():
739
+ reg_size = project.arch.registers[reg_name][1]
740
+ reg_expr = ailment.Expr.Register(None, None, project.arch.registers[reg_name][0], reg_size)
741
+ reg_value_expr = ailment.Expr.Const(None, None, reg_value, reg_size * 8)
742
+ state.store_register(
743
+ reg_expr,
744
+ PropValue(
745
+ claripy.BVV(reg_value, project.arch.bits),
746
+ offset_and_details={0: Detail(reg_size, reg_value_expr, initial_codeloc)},
747
+ ),
748
+ )
748
749
 
749
750
  return state
750
751
 
751
- def copy(self) -> "PropagatorAILState":
752
- rd = PropagatorAILState(
752
+ def copy(self) -> PropagatorAILState:
753
+ return PropagatorAILState(
753
754
  self.arch,
754
755
  project=self.project,
755
756
  rda=self.rda,
@@ -768,8 +769,6 @@ class PropagatorAILState(PropagatorState):
768
769
  artificial_reg_offsets=self._artificial_reg_offsets,
769
770
  )
770
771
 
771
- return rd
772
-
773
772
  @staticmethod
774
773
  def is_const_or_register(value: ailment.Expr.Expression | claripy.ast.Bits | None) -> bool:
775
774
  if value is None:
@@ -783,17 +782,18 @@ class PropagatorAILState(PropagatorState):
783
782
  if isinstance(value, ailment.Expr.StackBaseOffset):
784
783
  return True
785
784
  # more hacks: also store the eq comparisons
786
- if isinstance(value, ailment.Expr.BinaryOp) and value.op == "CmpEQ":
787
- if all(isinstance(arg, (ailment.Expr.Const, ailment.Expr.Tmp)) for arg in value.operands):
788
- return True
789
- # more hacks: also store the conversions
790
- if isinstance(value, ailment.Expr.Convert) and PropagatorAILState.is_const_or_register(value.operand):
785
+ if (
786
+ isinstance(value, ailment.Expr.BinaryOp)
787
+ and value.op == "CmpEQ"
788
+ and all(isinstance(arg, (ailment.Expr.Const, ailment.Expr.Tmp)) for arg in value.operands)
789
+ ):
791
790
  return True
792
- return False
791
+ # more hacks: also store the conversions
792
+ return bool(isinstance(value, ailment.Expr.Convert) and PropagatorAILState.is_const_or_register(value.operand))
793
793
 
794
- def merge(self, *others) -> tuple["PropagatorAILState", bool]:
794
+ def merge(self, *others) -> tuple[PropagatorAILState, bool]:
795
795
  state, merge_occurred = super().merge(*others)
796
- state: "PropagatorAILState"
796
+ state: PropagatorAILState
797
797
 
798
798
  merge_occurred |= state._registers.merge([o._registers for o in others], None)
799
799
  merge_occurred |= state._stack_variables.merge([o._stack_variables for o in others], None)
@@ -838,8 +838,7 @@ class PropagatorAILState(PropagatorState):
838
838
  # value does not exist
839
839
  return None
840
840
 
841
- prop_value = PropValue.from_value_and_labels(value, labels)
842
- return prop_value
841
+ return PropValue.from_value_and_labels(value, labels)
843
842
 
844
843
  def load_stack_variable(self, sp_offset: int, size, endness=None) -> PropValue | None:
845
844
  # normalize sp_offset to handle negative offsets
@@ -866,17 +865,14 @@ class PropagatorAILState(PropagatorState):
866
865
  else:
867
866
  return None
868
867
 
869
- prop_value = PropValue.from_value_and_labels(value, labels)
870
- return prop_value
868
+ return PropValue.from_value_and_labels(value, labels)
871
869
 
872
870
  def should_replace_reg(self, old_reg_offset: int, bp_as_gpr: bool, new_value) -> bool:
873
871
  if old_reg_offset == self.arch.sp_offset or (not bp_as_gpr and old_reg_offset == self.arch.bp_offset):
874
872
  return True
875
873
  if old_reg_offset in self._artificial_reg_offsets:
876
874
  return True
877
- if isinstance(new_value, ailment.Expr.StackBaseOffset):
878
- return True
879
- return False
875
+ return bool(isinstance(new_value, ailment.Expr.StackBaseOffset))
880
876
 
881
877
  def add_replacement(
882
878
  self,
@@ -896,11 +892,10 @@ class PropagatorAILState(PropagatorState):
896
892
  # do not replace anything with a call expression
897
893
  if isinstance(new, ailment.statement.Call):
898
894
  return False
899
- else:
900
- callexpr_finder = CallExprFinder()
901
- callexpr_finder.walk_expression(new)
902
- if callexpr_finder.has_call:
903
- return False
895
+ callexpr_finder = CallExprFinder()
896
+ callexpr_finder.walk_expression(new)
897
+ if callexpr_finder.has_call:
898
+ return False
904
899
 
905
900
  if self.is_top(new):
906
901
  self._replacements[codeloc][old] = self.top(1) # placeholder
@@ -1002,10 +997,9 @@ class PropagatorAILState(PropagatorState):
1002
997
  for key, replace_with in list(self._replacements[codeloc_].items()):
1003
998
  if isinstance(replace_with, dict):
1004
999
  replace_with = replace_with["expr"]
1005
- if not self.is_top(replace_with) and replace_with == replaced_by:
1006
- if to_replace.likes(key):
1007
- self._replacements[codeloc_][key] = self.top(1)
1008
- updated_codelocs.add(codeloc_)
1000
+ if not self.is_top(replace_with) and replace_with == replaced_by and to_replace.likes(key):
1001
+ self._replacements[codeloc_][key] = self.top(1)
1002
+ updated_codelocs.add(codeloc_)
1009
1003
 
1010
1004
  return updated_codelocs
1011
1005
 
@@ -1017,7 +1011,7 @@ class PropagatorAILState(PropagatorState):
1017
1011
  def is_simple_expression(expr: ailment.Expr.Expression) -> bool:
1018
1012
  if PropagatorAILState.is_shallow_expression(expr):
1019
1013
  return True
1020
- if (
1014
+ return bool(
1021
1015
  isinstance(expr, ailment.Expr.BinaryOp)
1022
1016
  and expr.op in {"Add", "Sub"}
1023
1017
  and (
@@ -1026,9 +1020,7 @@ class PropagatorAILState(PropagatorState):
1026
1020
  or isinstance(expr.operands[1], ailment.Expr.Register)
1027
1021
  and PropagatorAILState.is_global_variable_load(expr.operands[0])
1028
1022
  )
1029
- ):
1030
- return True
1031
- return False
1023
+ )
1032
1024
 
1033
1025
  @staticmethod
1034
1026
  def is_shallow_expression(expr: ailment.Expr.Expression) -> bool:
@@ -1038,9 +1030,7 @@ class PropagatorAILState(PropagatorState):
1038
1030
  def is_global_variable_load(expr: ailment.Expr.Expression) -> bool:
1039
1031
  if isinstance(expr, ailment.Expr.Load) and isinstance(expr.addr, ailment.Expr.Const):
1040
1032
  return True
1041
- if isinstance(expr, ailment.Expr.Convert) and PropagatorAILState.is_global_variable_load(expr.operand):
1042
- return True
1043
- return False
1033
+ return bool(isinstance(expr, ailment.Expr.Convert) and PropagatorAILState.is_global_variable_load(expr.operand))
1044
1034
 
1045
1035
  @staticmethod
1046
1036
  def is_expression_too_deep(expr: ailment.Expr.Expression) -> bool:
@@ -1 +1,2 @@
1
+ from __future__ import annotations
1
2
  from .manager import StructuredCodeManager