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

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

Potentially problematic release.


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

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