angr 9.2.192__cp311-cp311-macosx_10_12_x86_64.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.
Files changed (1442) hide show
  1. angr/__init__.py +366 -0
  2. angr/__main__.py +182 -0
  3. angr/ail_callable.py +79 -0
  4. angr/ailment/__init__.py +83 -0
  5. angr/ailment/block.py +88 -0
  6. angr/ailment/block_walker.py +856 -0
  7. angr/ailment/constant.py +3 -0
  8. angr/ailment/converter_common.py +11 -0
  9. angr/ailment/converter_pcode.py +648 -0
  10. angr/ailment/converter_vex.py +829 -0
  11. angr/ailment/expression.py +1655 -0
  12. angr/ailment/manager.py +34 -0
  13. angr/ailment/statement.py +973 -0
  14. angr/ailment/tagged_object.py +58 -0
  15. angr/ailment/utils.py +114 -0
  16. angr/analyses/__init__.py +117 -0
  17. angr/analyses/analysis.py +429 -0
  18. angr/analyses/backward_slice.py +686 -0
  19. angr/analyses/binary_optimizer.py +670 -0
  20. angr/analyses/bindiff.py +1512 -0
  21. angr/analyses/boyscout.py +76 -0
  22. angr/analyses/callee_cleanup_finder.py +74 -0
  23. angr/analyses/calling_convention/__init__.py +6 -0
  24. angr/analyses/calling_convention/calling_convention.py +1113 -0
  25. angr/analyses/calling_convention/fact_collector.py +647 -0
  26. angr/analyses/calling_convention/utils.py +60 -0
  27. angr/analyses/cdg.py +189 -0
  28. angr/analyses/cfg/__init__.py +23 -0
  29. angr/analyses/cfg/cfb.py +451 -0
  30. angr/analyses/cfg/cfg.py +74 -0
  31. angr/analyses/cfg/cfg_arch_options.py +95 -0
  32. angr/analyses/cfg/cfg_base.py +2954 -0
  33. angr/analyses/cfg/cfg_emulated.py +3451 -0
  34. angr/analyses/cfg/cfg_fast.py +5431 -0
  35. angr/analyses/cfg/cfg_fast_soot.py +662 -0
  36. angr/analyses/cfg/cfg_job_base.py +203 -0
  37. angr/analyses/cfg/indirect_jump_resolvers/__init__.py +30 -0
  38. angr/analyses/cfg/indirect_jump_resolvers/aarch64_macho_got.py +77 -0
  39. angr/analyses/cfg/indirect_jump_resolvers/amd64_elf_got.py +62 -0
  40. angr/analyses/cfg/indirect_jump_resolvers/amd64_pe_iat.py +51 -0
  41. angr/analyses/cfg/indirect_jump_resolvers/arm_elf_fast.py +159 -0
  42. angr/analyses/cfg/indirect_jump_resolvers/const_resolver.py +339 -0
  43. angr/analyses/cfg/indirect_jump_resolvers/constant_value_manager.py +107 -0
  44. angr/analyses/cfg/indirect_jump_resolvers/default_resolvers.py +82 -0
  45. angr/analyses/cfg/indirect_jump_resolvers/jumptable.py +2490 -0
  46. angr/analyses/cfg/indirect_jump_resolvers/memload_resolver.py +81 -0
  47. angr/analyses/cfg/indirect_jump_resolvers/mips_elf_fast.py +286 -0
  48. angr/analyses/cfg/indirect_jump_resolvers/mips_elf_got.py +148 -0
  49. angr/analyses/cfg/indirect_jump_resolvers/propagator_utils.py +46 -0
  50. angr/analyses/cfg/indirect_jump_resolvers/resolver.py +74 -0
  51. angr/analyses/cfg/indirect_jump_resolvers/syscall_resolver.py +92 -0
  52. angr/analyses/cfg/indirect_jump_resolvers/x86_elf_pic_plt.py +88 -0
  53. angr/analyses/cfg/indirect_jump_resolvers/x86_pe_iat.py +47 -0
  54. angr/analyses/cfg_slice_to_sink/__init__.py +11 -0
  55. angr/analyses/cfg_slice_to_sink/cfg_slice_to_sink.py +117 -0
  56. angr/analyses/cfg_slice_to_sink/graph.py +87 -0
  57. angr/analyses/cfg_slice_to_sink/transitions.py +27 -0
  58. angr/analyses/class_identifier.py +63 -0
  59. angr/analyses/code_tagging.py +123 -0
  60. angr/analyses/codecave.py +77 -0
  61. angr/analyses/complete_calling_conventions.py +475 -0
  62. angr/analyses/congruency_check.py +377 -0
  63. angr/analyses/data_dep/__init__.py +16 -0
  64. angr/analyses/data_dep/data_dependency_analysis.py +595 -0
  65. angr/analyses/data_dep/dep_nodes.py +171 -0
  66. angr/analyses/data_dep/sim_act_location.py +49 -0
  67. angr/analyses/datagraph_meta.py +105 -0
  68. angr/analyses/ddg.py +1670 -0
  69. angr/analyses/decompiler/__init__.py +41 -0
  70. angr/analyses/decompiler/ail_simplifier.py +2246 -0
  71. angr/analyses/decompiler/ailgraph_walker.py +49 -0
  72. angr/analyses/decompiler/block_io_finder.py +302 -0
  73. angr/analyses/decompiler/block_similarity.py +199 -0
  74. angr/analyses/decompiler/block_simplifier.py +397 -0
  75. angr/analyses/decompiler/callsite_maker.py +579 -0
  76. angr/analyses/decompiler/ccall_rewriters/__init__.py +9 -0
  77. angr/analyses/decompiler/ccall_rewriters/amd64_ccalls.py +618 -0
  78. angr/analyses/decompiler/ccall_rewriters/rewriter_base.py +24 -0
  79. angr/analyses/decompiler/ccall_rewriters/x86_ccalls.py +354 -0
  80. angr/analyses/decompiler/clinic.py +3662 -0
  81. angr/analyses/decompiler/condition_processor.py +1323 -0
  82. angr/analyses/decompiler/counters/__init__.py +16 -0
  83. angr/analyses/decompiler/counters/boolean_counter.py +27 -0
  84. angr/analyses/decompiler/counters/call_counter.py +77 -0
  85. angr/analyses/decompiler/counters/expression_counters.py +77 -0
  86. angr/analyses/decompiler/counters/seq_cf_structure_counter.py +63 -0
  87. angr/analyses/decompiler/decompilation_cache.py +54 -0
  88. angr/analyses/decompiler/decompilation_options.py +317 -0
  89. angr/analyses/decompiler/decompiler.py +796 -0
  90. angr/analyses/decompiler/dephication/__init__.py +6 -0
  91. angr/analyses/decompiler/dephication/dephication_base.py +100 -0
  92. angr/analyses/decompiler/dephication/graph_dephication.py +70 -0
  93. angr/analyses/decompiler/dephication/graph_rewriting.py +112 -0
  94. angr/analyses/decompiler/dephication/graph_vvar_mapping.py +357 -0
  95. angr/analyses/decompiler/dephication/rewriting_engine.py +528 -0
  96. angr/analyses/decompiler/dephication/seqnode_dephication.py +156 -0
  97. angr/analyses/decompiler/dirty_rewriters/__init__.py +7 -0
  98. angr/analyses/decompiler/dirty_rewriters/amd64_dirty.py +74 -0
  99. angr/analyses/decompiler/dirty_rewriters/rewriter_base.py +27 -0
  100. angr/analyses/decompiler/empty_node_remover.py +212 -0
  101. angr/analyses/decompiler/expression_narrower.py +290 -0
  102. angr/analyses/decompiler/goto_manager.py +112 -0
  103. angr/analyses/decompiler/graph_region.py +441 -0
  104. angr/analyses/decompiler/jump_target_collector.py +37 -0
  105. angr/analyses/decompiler/jumptable_entry_condition_rewriter.py +67 -0
  106. angr/analyses/decompiler/label_collector.py +32 -0
  107. angr/analyses/decompiler/node_replacer.py +42 -0
  108. angr/analyses/decompiler/notes/__init__.py +9 -0
  109. angr/analyses/decompiler/notes/decompilation_note.py +48 -0
  110. angr/analyses/decompiler/notes/deobfuscated_strings.py +56 -0
  111. angr/analyses/decompiler/optimization_passes/__init__.py +164 -0
  112. angr/analyses/decompiler/optimization_passes/base_ptr_save_simplifier.py +157 -0
  113. angr/analyses/decompiler/optimization_passes/call_stmt_rewriter.py +46 -0
  114. angr/analyses/decompiler/optimization_passes/code_motion.py +362 -0
  115. angr/analyses/decompiler/optimization_passes/condition_constprop.py +211 -0
  116. angr/analyses/decompiler/optimization_passes/const_derefs.py +127 -0
  117. angr/analyses/decompiler/optimization_passes/const_prop_reverter.py +365 -0
  118. angr/analyses/decompiler/optimization_passes/cross_jump_reverter.py +106 -0
  119. angr/analyses/decompiler/optimization_passes/deadblock_remover.py +82 -0
  120. angr/analyses/decompiler/optimization_passes/determine_load_sizes.py +64 -0
  121. angr/analyses/decompiler/optimization_passes/div_simplifier.py +425 -0
  122. angr/analyses/decompiler/optimization_passes/duplication_reverter/__init__.py +5 -0
  123. angr/analyses/decompiler/optimization_passes/duplication_reverter/ail_merge_graph.py +503 -0
  124. angr/analyses/decompiler/optimization_passes/duplication_reverter/duplication_reverter.py +1221 -0
  125. angr/analyses/decompiler/optimization_passes/duplication_reverter/errors.py +16 -0
  126. angr/analyses/decompiler/optimization_passes/duplication_reverter/similarity.py +126 -0
  127. angr/analyses/decompiler/optimization_passes/duplication_reverter/utils.py +167 -0
  128. angr/analyses/decompiler/optimization_passes/eager_std_string_concatenation.py +236 -0
  129. angr/analyses/decompiler/optimization_passes/eager_std_string_eval.py +186 -0
  130. angr/analyses/decompiler/optimization_passes/engine_base.py +502 -0
  131. angr/analyses/decompiler/optimization_passes/expr_op_swapper.py +138 -0
  132. angr/analyses/decompiler/optimization_passes/flip_boolean_cmp.py +113 -0
  133. angr/analyses/decompiler/optimization_passes/inlined_string_transformation_simplifier.py +618 -0
  134. angr/analyses/decompiler/optimization_passes/inlined_strlen_simplifier.py +274 -0
  135. angr/analyses/decompiler/optimization_passes/ite_expr_converter.py +224 -0
  136. angr/analyses/decompiler/optimization_passes/ite_region_converter.py +337 -0
  137. angr/analyses/decompiler/optimization_passes/lowered_switch_simplifier.py +939 -0
  138. angr/analyses/decompiler/optimization_passes/mod_simplifier.py +99 -0
  139. angr/analyses/decompiler/optimization_passes/optimization_pass.py +710 -0
  140. angr/analyses/decompiler/optimization_passes/peephole_simplifier.py +75 -0
  141. angr/analyses/decompiler/optimization_passes/register_save_area_simplifier.py +263 -0
  142. angr/analyses/decompiler/optimization_passes/register_save_area_simplifier_adv.py +198 -0
  143. angr/analyses/decompiler/optimization_passes/ret_addr_save_simplifier.py +171 -0
  144. angr/analyses/decompiler/optimization_passes/ret_deduplicator.py +222 -0
  145. angr/analyses/decompiler/optimization_passes/return_duplicator_base.py +632 -0
  146. angr/analyses/decompiler/optimization_passes/return_duplicator_high.py +61 -0
  147. angr/analyses/decompiler/optimization_passes/return_duplicator_low.py +166 -0
  148. angr/analyses/decompiler/optimization_passes/stack_canary_simplifier.py +333 -0
  149. angr/analyses/decompiler/optimization_passes/static_vvar_rewriter.py +336 -0
  150. angr/analyses/decompiler/optimization_passes/switch_default_case_duplicator.py +166 -0
  151. angr/analyses/decompiler/optimization_passes/switch_reused_entry_rewriter.py +102 -0
  152. angr/analyses/decompiler/optimization_passes/tag_slicer.py +41 -0
  153. angr/analyses/decompiler/optimization_passes/win_stack_canary_simplifier.py +477 -0
  154. angr/analyses/decompiler/optimization_passes/x86_gcc_getpc_simplifier.py +88 -0
  155. angr/analyses/decompiler/peephole_optimizations/__init__.py +136 -0
  156. angr/analyses/decompiler/peephole_optimizations/a_div_const_add_a_mul_n_div_const.py +42 -0
  157. angr/analyses/decompiler/peephole_optimizations/a_mul_const_div_shr_const.py +38 -0
  158. angr/analyses/decompiler/peephole_optimizations/a_mul_const_sub_a.py +34 -0
  159. angr/analyses/decompiler/peephole_optimizations/a_shl_const_sub_a.py +34 -0
  160. angr/analyses/decompiler/peephole_optimizations/a_sub_a_div.py +25 -0
  161. angr/analyses/decompiler/peephole_optimizations/a_sub_a_shr_const_shr_const.py +37 -0
  162. angr/analyses/decompiler/peephole_optimizations/a_sub_a_sub_n.py +23 -0
  163. angr/analyses/decompiler/peephole_optimizations/arm_cmpf.py +236 -0
  164. angr/analyses/decompiler/peephole_optimizations/base.py +157 -0
  165. angr/analyses/decompiler/peephole_optimizations/basepointeroffset_add_n.py +34 -0
  166. angr/analyses/decompiler/peephole_optimizations/basepointeroffset_and_mask.py +36 -0
  167. angr/analyses/decompiler/peephole_optimizations/bitwise_or_to_logical_or.py +34 -0
  168. angr/analyses/decompiler/peephole_optimizations/bool_expr_xor_1.py +27 -0
  169. angr/analyses/decompiler/peephole_optimizations/bswap.py +142 -0
  170. angr/analyses/decompiler/peephole_optimizations/cas_intrinsics.py +182 -0
  171. angr/analyses/decompiler/peephole_optimizations/cmpord_rewriter.py +71 -0
  172. angr/analyses/decompiler/peephole_optimizations/coalesce_adjacent_shrs.py +39 -0
  173. angr/analyses/decompiler/peephole_optimizations/coalesce_same_cascading_ifs.py +28 -0
  174. angr/analyses/decompiler/peephole_optimizations/constant_derefs.py +44 -0
  175. angr/analyses/decompiler/peephole_optimizations/conv_a_sub0_shr_and.py +69 -0
  176. angr/analyses/decompiler/peephole_optimizations/conv_shl_shr.py +52 -0
  177. angr/analyses/decompiler/peephole_optimizations/eager_eval.py +436 -0
  178. angr/analyses/decompiler/peephole_optimizations/extended_byte_and_mask.py +56 -0
  179. angr/analyses/decompiler/peephole_optimizations/inlined_memcpy.py +78 -0
  180. angr/analyses/decompiler/peephole_optimizations/inlined_memset.py +262 -0
  181. angr/analyses/decompiler/peephole_optimizations/inlined_strcpy.py +217 -0
  182. angr/analyses/decompiler/peephole_optimizations/inlined_strcpy_consolidation.py +106 -0
  183. angr/analyses/decompiler/peephole_optimizations/inlined_wcscpy.py +256 -0
  184. angr/analyses/decompiler/peephole_optimizations/inlined_wcscpy_consolidation.py +296 -0
  185. angr/analyses/decompiler/peephole_optimizations/invert_negated_logical_conjuction_disjunction.py +50 -0
  186. angr/analyses/decompiler/peephole_optimizations/modulo_simplifier.py +89 -0
  187. angr/analyses/decompiler/peephole_optimizations/one_sub_bool.py +33 -0
  188. angr/analyses/decompiler/peephole_optimizations/optimized_div_simplifier.py +356 -0
  189. angr/analyses/decompiler/peephole_optimizations/remove_cascading_conversions.py +45 -0
  190. angr/analyses/decompiler/peephole_optimizations/remove_cxx_destructor_calls.py +32 -0
  191. angr/analyses/decompiler/peephole_optimizations/remove_empty_if_body.py +46 -0
  192. angr/analyses/decompiler/peephole_optimizations/remove_noop_conversions.py +47 -0
  193. angr/analyses/decompiler/peephole_optimizations/remove_redundant_bitmasks.py +125 -0
  194. angr/analyses/decompiler/peephole_optimizations/remove_redundant_conversions.py +273 -0
  195. angr/analyses/decompiler/peephole_optimizations/remove_redundant_derefs.py +21 -0
  196. angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_branch.py +30 -0
  197. angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_comparisons.py +54 -0
  198. angr/analyses/decompiler/peephole_optimizations/remove_redundant_nots.py +36 -0
  199. angr/analyses/decompiler/peephole_optimizations/remove_redundant_reinterprets.py +44 -0
  200. angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts.py +95 -0
  201. angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts_around_comparators.py +115 -0
  202. angr/analyses/decompiler/peephole_optimizations/rewrite_bit_extractions.py +85 -0
  203. angr/analyses/decompiler/peephole_optimizations/rewrite_conv_mul.py +40 -0
  204. angr/analyses/decompiler/peephole_optimizations/rewrite_cxx_operator_calls.py +90 -0
  205. angr/analyses/decompiler/peephole_optimizations/rewrite_mips_gp_loads.py +49 -0
  206. angr/analyses/decompiler/peephole_optimizations/rol_ror.py +130 -0
  207. angr/analyses/decompiler/peephole_optimizations/sar_to_signed_div.py +143 -0
  208. angr/analyses/decompiler/peephole_optimizations/shl_to_mul.py +25 -0
  209. angr/analyses/decompiler/peephole_optimizations/simplify_pc_relative_loads.py +51 -0
  210. angr/analyses/decompiler/peephole_optimizations/single_bit_cond_to_boolexpr.py +28 -0
  211. angr/analyses/decompiler/peephole_optimizations/single_bit_xor.py +29 -0
  212. angr/analyses/decompiler/peephole_optimizations/tidy_stack_addr.py +131 -0
  213. angr/analyses/decompiler/peephole_optimizations/utils.py +18 -0
  214. angr/analyses/decompiler/presets/__init__.py +22 -0
  215. angr/analyses/decompiler/presets/basic.py +36 -0
  216. angr/analyses/decompiler/presets/fast.py +66 -0
  217. angr/analyses/decompiler/presets/full.py +76 -0
  218. angr/analyses/decompiler/presets/malware.py +70 -0
  219. angr/analyses/decompiler/presets/preset.py +37 -0
  220. angr/analyses/decompiler/redundant_label_remover.py +141 -0
  221. angr/analyses/decompiler/region_identifier.py +1319 -0
  222. angr/analyses/decompiler/region_simplifiers/__init__.py +5 -0
  223. angr/analyses/decompiler/region_simplifiers/cascading_cond_transformer.py +95 -0
  224. angr/analyses/decompiler/region_simplifiers/cascading_ifs.py +82 -0
  225. angr/analyses/decompiler/region_simplifiers/expr_folding.py +838 -0
  226. angr/analyses/decompiler/region_simplifiers/goto.py +178 -0
  227. angr/analyses/decompiler/region_simplifiers/if_.py +135 -0
  228. angr/analyses/decompiler/region_simplifiers/ifelse.py +91 -0
  229. angr/analyses/decompiler/region_simplifiers/loop.py +143 -0
  230. angr/analyses/decompiler/region_simplifiers/node_address_finder.py +24 -0
  231. angr/analyses/decompiler/region_simplifiers/region_simplifier.py +270 -0
  232. angr/analyses/decompiler/region_simplifiers/switch_cluster_simplifier.py +654 -0
  233. angr/analyses/decompiler/region_simplifiers/switch_expr_simplifier.py +87 -0
  234. angr/analyses/decompiler/region_walker.py +24 -0
  235. angr/analyses/decompiler/return_maker.py +72 -0
  236. angr/analyses/decompiler/semantic_naming/__init__.py +37 -0
  237. angr/analyses/decompiler/semantic_naming/array_index_naming.py +196 -0
  238. angr/analyses/decompiler/semantic_naming/boolean_naming.py +264 -0
  239. angr/analyses/decompiler/semantic_naming/call_result_naming.py +220 -0
  240. angr/analyses/decompiler/semantic_naming/naming_base.py +166 -0
  241. angr/analyses/decompiler/semantic_naming/orchestrator.py +107 -0
  242. angr/analyses/decompiler/semantic_naming/pointer_naming.py +334 -0
  243. angr/analyses/decompiler/semantic_naming/region_loop_counter_naming.py +246 -0
  244. angr/analyses/decompiler/semantic_naming/size_naming.py +137 -0
  245. angr/analyses/decompiler/seq_to_blocks.py +20 -0
  246. angr/analyses/decompiler/sequence_walker.py +261 -0
  247. angr/analyses/decompiler/ssailification/__init__.py +4 -0
  248. angr/analyses/decompiler/ssailification/rewriting.py +451 -0
  249. angr/analyses/decompiler/ssailification/rewriting_engine.py +1091 -0
  250. angr/analyses/decompiler/ssailification/rewriting_state.py +61 -0
  251. angr/analyses/decompiler/ssailification/ssailification.py +283 -0
  252. angr/analyses/decompiler/ssailification/traversal.py +127 -0
  253. angr/analyses/decompiler/ssailification/traversal_engine.py +323 -0
  254. angr/analyses/decompiler/ssailification/traversal_state.py +48 -0
  255. angr/analyses/decompiler/stack_item.py +36 -0
  256. angr/analyses/decompiler/structured_codegen/__init__.py +25 -0
  257. angr/analyses/decompiler/structured_codegen/base.py +193 -0
  258. angr/analyses/decompiler/structured_codegen/c.py +4257 -0
  259. angr/analyses/decompiler/structured_codegen/dummy.py +15 -0
  260. angr/analyses/decompiler/structured_codegen/dwarf_import.py +190 -0
  261. angr/analyses/decompiler/structuring/__init__.py +30 -0
  262. angr/analyses/decompiler/structuring/dream.py +1217 -0
  263. angr/analyses/decompiler/structuring/phoenix.py +3636 -0
  264. angr/analyses/decompiler/structuring/recursive_structurer.py +187 -0
  265. angr/analyses/decompiler/structuring/sailr.py +120 -0
  266. angr/analyses/decompiler/structuring/structurer_base.py +1140 -0
  267. angr/analyses/decompiler/structuring/structurer_nodes.py +442 -0
  268. angr/analyses/decompiler/utils.py +1224 -0
  269. angr/analyses/deobfuscator/__init__.py +23 -0
  270. angr/analyses/deobfuscator/api_obf_finder.py +333 -0
  271. angr/analyses/deobfuscator/api_obf_peephole_optimizer.py +80 -0
  272. angr/analyses/deobfuscator/api_obf_type2_finder.py +166 -0
  273. angr/analyses/deobfuscator/data_transformation_embedder.py +633 -0
  274. angr/analyses/deobfuscator/hash_lookup_api_deobfuscator.py +156 -0
  275. angr/analyses/deobfuscator/irsb_reg_collector.py +54 -0
  276. angr/analyses/deobfuscator/scope_ops_analyzer.py +68 -0
  277. angr/analyses/deobfuscator/string_obf_finder.py +983 -0
  278. angr/analyses/deobfuscator/string_obf_opt_passes.py +136 -0
  279. angr/analyses/deobfuscator/string_obf_peephole_optimizer.py +47 -0
  280. angr/analyses/disassembly.py +1351 -0
  281. angr/analyses/disassembly_utils.py +101 -0
  282. angr/analyses/dominance_frontier.py +57 -0
  283. angr/analyses/fcp/__init__.py +4 -0
  284. angr/analyses/fcp/fcp.py +427 -0
  285. angr/analyses/find_objects_static.py +205 -0
  286. angr/analyses/flirt/__init__.py +47 -0
  287. angr/analyses/flirt/consts.py +160 -0
  288. angr/analyses/flirt/flirt.py +249 -0
  289. angr/analyses/flirt/flirt_function.py +20 -0
  290. angr/analyses/flirt/flirt_matcher.py +352 -0
  291. angr/analyses/flirt/flirt_module.py +32 -0
  292. angr/analyses/flirt/flirt_node.py +23 -0
  293. angr/analyses/flirt/flirt_sig.py +359 -0
  294. angr/analyses/flirt/flirt_utils.py +31 -0
  295. angr/analyses/forward_analysis/__init__.py +12 -0
  296. angr/analyses/forward_analysis/forward_analysis.py +619 -0
  297. angr/analyses/forward_analysis/job_info.py +64 -0
  298. angr/analyses/forward_analysis/visitors/__init__.py +14 -0
  299. angr/analyses/forward_analysis/visitors/call_graph.py +29 -0
  300. angr/analyses/forward_analysis/visitors/function_graph.py +86 -0
  301. angr/analyses/forward_analysis/visitors/graph.py +242 -0
  302. angr/analyses/forward_analysis/visitors/loop.py +29 -0
  303. angr/analyses/forward_analysis/visitors/single_node_graph.py +38 -0
  304. angr/analyses/identifier/__init__.py +5 -0
  305. angr/analyses/identifier/custom_callable.py +137 -0
  306. angr/analyses/identifier/errors.py +10 -0
  307. angr/analyses/identifier/func.py +60 -0
  308. angr/analyses/identifier/functions/__init__.py +37 -0
  309. angr/analyses/identifier/functions/atoi.py +73 -0
  310. angr/analyses/identifier/functions/based_atoi.py +125 -0
  311. angr/analyses/identifier/functions/fdprintf.py +123 -0
  312. angr/analyses/identifier/functions/free.py +64 -0
  313. angr/analyses/identifier/functions/int2str.py +287 -0
  314. angr/analyses/identifier/functions/malloc.py +111 -0
  315. angr/analyses/identifier/functions/memcmp.py +67 -0
  316. angr/analyses/identifier/functions/memcpy.py +89 -0
  317. angr/analyses/identifier/functions/memset.py +43 -0
  318. angr/analyses/identifier/functions/printf.py +123 -0
  319. angr/analyses/identifier/functions/recv_until.py +312 -0
  320. angr/analyses/identifier/functions/skip_calloc.py +73 -0
  321. angr/analyses/identifier/functions/skip_realloc.py +97 -0
  322. angr/analyses/identifier/functions/skip_recv_n.py +105 -0
  323. angr/analyses/identifier/functions/snprintf.py +112 -0
  324. angr/analyses/identifier/functions/sprintf.py +116 -0
  325. angr/analyses/identifier/functions/strcasecmp.py +33 -0
  326. angr/analyses/identifier/functions/strcmp.py +113 -0
  327. angr/analyses/identifier/functions/strcpy.py +43 -0
  328. angr/analyses/identifier/functions/strlen.py +27 -0
  329. angr/analyses/identifier/functions/strncmp.py +104 -0
  330. angr/analyses/identifier/functions/strncpy.py +65 -0
  331. angr/analyses/identifier/functions/strtol.py +89 -0
  332. angr/analyses/identifier/identify.py +825 -0
  333. angr/analyses/identifier/runner.py +360 -0
  334. angr/analyses/init_finder.py +289 -0
  335. angr/analyses/loop_analysis/__init__.py +4 -0
  336. angr/analyses/loop_analysis/loop_analysis.py +464 -0
  337. angr/analyses/loop_analysis.py +349 -0
  338. angr/analyses/loop_unroller/__init__.py +4 -0
  339. angr/analyses/loop_unroller/loop_unroller.py +222 -0
  340. angr/analyses/loopfinder.py +171 -0
  341. angr/analyses/outliner/__init__.py +7 -0
  342. angr/analyses/outliner/outliner.py +402 -0
  343. angr/analyses/patchfinder.py +137 -0
  344. angr/analyses/pathfinder.py +282 -0
  345. angr/analyses/propagator/__init__.py +5 -0
  346. angr/analyses/propagator/engine_base.py +62 -0
  347. angr/analyses/propagator/engine_vex.py +297 -0
  348. angr/analyses/propagator/propagator.py +361 -0
  349. angr/analyses/propagator/top_checker_mixin.py +218 -0
  350. angr/analyses/propagator/values.py +117 -0
  351. angr/analyses/propagator/vex_vars.py +68 -0
  352. angr/analyses/proximity_graph.py +444 -0
  353. angr/analyses/purity/__init__.py +15 -0
  354. angr/analyses/purity/analysis.py +78 -0
  355. angr/analyses/purity/engine.py +593 -0
  356. angr/analyses/reaching_definitions/__init__.py +67 -0
  357. angr/analyses/reaching_definitions/call_trace.py +73 -0
  358. angr/analyses/reaching_definitions/dep_graph.py +433 -0
  359. angr/analyses/reaching_definitions/engine_ail.py +1128 -0
  360. angr/analyses/reaching_definitions/engine_vex.py +1128 -0
  361. angr/analyses/reaching_definitions/external_codeloc.py +0 -0
  362. angr/analyses/reaching_definitions/function_handler.py +639 -0
  363. angr/analyses/reaching_definitions/function_handler_library/__init__.py +12 -0
  364. angr/analyses/reaching_definitions/function_handler_library/stdio.py +269 -0
  365. angr/analyses/reaching_definitions/function_handler_library/stdlib.py +195 -0
  366. angr/analyses/reaching_definitions/function_handler_library/string.py +158 -0
  367. angr/analyses/reaching_definitions/function_handler_library/unistd.py +51 -0
  368. angr/analyses/reaching_definitions/heap_allocator.py +70 -0
  369. angr/analyses/reaching_definitions/rd_initializer.py +237 -0
  370. angr/analyses/reaching_definitions/rd_state.py +579 -0
  371. angr/analyses/reaching_definitions/reaching_definitions.py +581 -0
  372. angr/analyses/reaching_definitions/subject.py +65 -0
  373. angr/analyses/reassembler.py +2900 -0
  374. angr/analyses/s_liveness.py +254 -0
  375. angr/analyses/s_propagator.py +575 -0
  376. angr/analyses/s_reaching_definitions/__init__.py +12 -0
  377. angr/analyses/s_reaching_definitions/s_rda_model.py +145 -0
  378. angr/analyses/s_reaching_definitions/s_rda_view.py +344 -0
  379. angr/analyses/s_reaching_definitions/s_reaching_definitions.py +230 -0
  380. angr/analyses/smc.py +160 -0
  381. angr/analyses/soot_class_hierarchy.py +273 -0
  382. angr/analyses/stack_pointer_tracker.py +954 -0
  383. angr/analyses/static_hooker.py +53 -0
  384. angr/analyses/typehoon/__init__.py +5 -0
  385. angr/analyses/typehoon/dfa.py +118 -0
  386. angr/analyses/typehoon/lifter.py +133 -0
  387. angr/analyses/typehoon/simple_solver.py +2009 -0
  388. angr/analyses/typehoon/translator.py +283 -0
  389. angr/analyses/typehoon/typeconsts.py +439 -0
  390. angr/analyses/typehoon/typehoon.py +338 -0
  391. angr/analyses/typehoon/typevars.py +633 -0
  392. angr/analyses/typehoon/variance.py +11 -0
  393. angr/analyses/unpacker/__init__.py +6 -0
  394. angr/analyses/unpacker/obfuscation_detector.py +103 -0
  395. angr/analyses/unpacker/packing_detector.py +138 -0
  396. angr/analyses/variable_recovery/__init__.py +9 -0
  397. angr/analyses/variable_recovery/annotations.py +58 -0
  398. angr/analyses/variable_recovery/engine_ail.py +978 -0
  399. angr/analyses/variable_recovery/engine_base.py +1256 -0
  400. angr/analyses/variable_recovery/engine_vex.py +594 -0
  401. angr/analyses/variable_recovery/irsb_scanner.py +143 -0
  402. angr/analyses/variable_recovery/variable_recovery.py +574 -0
  403. angr/analyses/variable_recovery/variable_recovery_base.py +489 -0
  404. angr/analyses/variable_recovery/variable_recovery_fast.py +669 -0
  405. angr/analyses/veritesting.py +626 -0
  406. angr/analyses/vfg.py +1898 -0
  407. angr/analyses/vsa_ddg.py +420 -0
  408. angr/analyses/vtable.py +92 -0
  409. angr/analyses/xrefs.py +286 -0
  410. angr/angrdb/__init__.py +14 -0
  411. angr/angrdb/db.py +215 -0
  412. angr/angrdb/models.py +184 -0
  413. angr/angrdb/serializers/__init__.py +10 -0
  414. angr/angrdb/serializers/cfg_model.py +41 -0
  415. angr/angrdb/serializers/comments.py +60 -0
  416. angr/angrdb/serializers/funcs.py +61 -0
  417. angr/angrdb/serializers/kb.py +111 -0
  418. angr/angrdb/serializers/labels.py +59 -0
  419. angr/angrdb/serializers/loader.py +165 -0
  420. angr/angrdb/serializers/structured_code.py +167 -0
  421. angr/angrdb/serializers/variables.py +58 -0
  422. angr/angrdb/serializers/xrefs.py +48 -0
  423. angr/annocfg.py +317 -0
  424. angr/blade.py +431 -0
  425. angr/block.py +509 -0
  426. angr/callable.py +176 -0
  427. angr/calling_conventions.py +2613 -0
  428. angr/code_location.py +249 -0
  429. angr/codenode.py +145 -0
  430. angr/concretization_strategies/__init__.py +32 -0
  431. angr/concretization_strategies/any.py +17 -0
  432. angr/concretization_strategies/any_named.py +35 -0
  433. angr/concretization_strategies/base.py +81 -0
  434. angr/concretization_strategies/controlled_data.py +58 -0
  435. angr/concretization_strategies/eval.py +19 -0
  436. angr/concretization_strategies/logging.py +35 -0
  437. angr/concretization_strategies/max.py +25 -0
  438. angr/concretization_strategies/nonzero.py +16 -0
  439. angr/concretization_strategies/nonzero_range.py +22 -0
  440. angr/concretization_strategies/norepeats.py +37 -0
  441. angr/concretization_strategies/norepeats_range.py +37 -0
  442. angr/concretization_strategies/range.py +19 -0
  443. angr/concretization_strategies/signed_add.py +31 -0
  444. angr/concretization_strategies/single.py +15 -0
  445. angr/concretization_strategies/solutions.py +20 -0
  446. angr/concretization_strategies/unlimited_range.py +17 -0
  447. angr/distributed/__init__.py +9 -0
  448. angr/distributed/server.py +197 -0
  449. angr/distributed/worker.py +185 -0
  450. angr/emulator.py +144 -0
  451. angr/engines/__init__.py +69 -0
  452. angr/engines/ail/__init__.py +16 -0
  453. angr/engines/ail/callstack.py +58 -0
  454. angr/engines/ail/engine_light.py +903 -0
  455. angr/engines/ail/engine_successors.py +24 -0
  456. angr/engines/ail/setup.py +57 -0
  457. angr/engines/concrete.py +66 -0
  458. angr/engines/engine.py +29 -0
  459. angr/engines/failure.py +27 -0
  460. angr/engines/hook.py +93 -0
  461. angr/engines/icicle.py +294 -0
  462. angr/engines/light/__init__.py +23 -0
  463. angr/engines/light/data.py +681 -0
  464. angr/engines/light/engine.py +1297 -0
  465. angr/engines/pcode/__init__.py +9 -0
  466. angr/engines/pcode/behavior.py +998 -0
  467. angr/engines/pcode/cc.py +148 -0
  468. angr/engines/pcode/emulate.py +440 -0
  469. angr/engines/pcode/engine.py +242 -0
  470. angr/engines/pcode/lifter.py +1428 -0
  471. angr/engines/procedure.py +70 -0
  472. angr/engines/soot/__init__.py +5 -0
  473. angr/engines/soot/engine.py +410 -0
  474. angr/engines/soot/exceptions.py +17 -0
  475. angr/engines/soot/expressions/__init__.py +87 -0
  476. angr/engines/soot/expressions/arrayref.py +22 -0
  477. angr/engines/soot/expressions/base.py +21 -0
  478. angr/engines/soot/expressions/binop.py +28 -0
  479. angr/engines/soot/expressions/cast.py +22 -0
  480. angr/engines/soot/expressions/condition.py +35 -0
  481. angr/engines/soot/expressions/constants.py +47 -0
  482. angr/engines/soot/expressions/instanceOf.py +15 -0
  483. angr/engines/soot/expressions/instancefieldref.py +8 -0
  484. angr/engines/soot/expressions/invoke.py +114 -0
  485. angr/engines/soot/expressions/length.py +8 -0
  486. angr/engines/soot/expressions/local.py +8 -0
  487. angr/engines/soot/expressions/new.py +16 -0
  488. angr/engines/soot/expressions/newArray.py +54 -0
  489. angr/engines/soot/expressions/newMultiArray.py +86 -0
  490. angr/engines/soot/expressions/paramref.py +8 -0
  491. angr/engines/soot/expressions/phi.py +30 -0
  492. angr/engines/soot/expressions/staticfieldref.py +8 -0
  493. angr/engines/soot/expressions/thisref.py +7 -0
  494. angr/engines/soot/expressions/unsupported.py +7 -0
  495. angr/engines/soot/field_dispatcher.py +46 -0
  496. angr/engines/soot/method_dispatcher.py +46 -0
  497. angr/engines/soot/statements/__init__.py +44 -0
  498. angr/engines/soot/statements/assign.py +30 -0
  499. angr/engines/soot/statements/base.py +79 -0
  500. angr/engines/soot/statements/goto.py +14 -0
  501. angr/engines/soot/statements/identity.py +15 -0
  502. angr/engines/soot/statements/if_.py +19 -0
  503. angr/engines/soot/statements/invoke.py +12 -0
  504. angr/engines/soot/statements/return_.py +20 -0
  505. angr/engines/soot/statements/switch.py +41 -0
  506. angr/engines/soot/statements/throw.py +15 -0
  507. angr/engines/soot/values/__init__.py +38 -0
  508. angr/engines/soot/values/arrayref.py +122 -0
  509. angr/engines/soot/values/base.py +7 -0
  510. angr/engines/soot/values/constants.py +18 -0
  511. angr/engines/soot/values/instancefieldref.py +44 -0
  512. angr/engines/soot/values/local.py +18 -0
  513. angr/engines/soot/values/paramref.py +18 -0
  514. angr/engines/soot/values/staticfieldref.py +38 -0
  515. angr/engines/soot/values/strref.py +38 -0
  516. angr/engines/soot/values/thisref.py +149 -0
  517. angr/engines/successors.py +608 -0
  518. angr/engines/syscall.py +51 -0
  519. angr/engines/unicorn.py +490 -0
  520. angr/engines/vex/__init__.py +20 -0
  521. angr/engines/vex/claripy/__init__.py +5 -0
  522. angr/engines/vex/claripy/ccall.py +2097 -0
  523. angr/engines/vex/claripy/datalayer.py +141 -0
  524. angr/engines/vex/claripy/irop.py +1276 -0
  525. angr/engines/vex/heavy/__init__.py +16 -0
  526. angr/engines/vex/heavy/actions.py +231 -0
  527. angr/engines/vex/heavy/concretizers.py +403 -0
  528. angr/engines/vex/heavy/dirty.py +466 -0
  529. angr/engines/vex/heavy/heavy.py +370 -0
  530. angr/engines/vex/heavy/inspect.py +52 -0
  531. angr/engines/vex/heavy/resilience.py +85 -0
  532. angr/engines/vex/heavy/super_fastpath.py +34 -0
  533. angr/engines/vex/lifter.py +420 -0
  534. angr/engines/vex/light/__init__.py +11 -0
  535. angr/engines/vex/light/light.py +551 -0
  536. angr/engines/vex/light/resilience.py +74 -0
  537. angr/engines/vex/light/slicing.py +52 -0
  538. angr/errors.py +611 -0
  539. angr/exploration_techniques/__init__.py +53 -0
  540. angr/exploration_techniques/base.py +126 -0
  541. angr/exploration_techniques/bucketizer.py +94 -0
  542. angr/exploration_techniques/common.py +56 -0
  543. angr/exploration_techniques/dfs.py +37 -0
  544. angr/exploration_techniques/director.py +520 -0
  545. angr/exploration_techniques/driller_core.py +100 -0
  546. angr/exploration_techniques/explorer.py +152 -0
  547. angr/exploration_techniques/lengthlimiter.py +22 -0
  548. angr/exploration_techniques/local_loop_seer.py +65 -0
  549. angr/exploration_techniques/loop_seer.py +236 -0
  550. angr/exploration_techniques/manual_mergepoint.py +82 -0
  551. angr/exploration_techniques/memory_watcher.py +43 -0
  552. angr/exploration_techniques/oppologist.py +92 -0
  553. angr/exploration_techniques/slicecutor.py +118 -0
  554. angr/exploration_techniques/spiller.py +280 -0
  555. angr/exploration_techniques/spiller_db.py +27 -0
  556. angr/exploration_techniques/stochastic.py +56 -0
  557. angr/exploration_techniques/stub_stasher.py +19 -0
  558. angr/exploration_techniques/suggestions.py +159 -0
  559. angr/exploration_techniques/tech_builder.py +49 -0
  560. angr/exploration_techniques/threading.py +69 -0
  561. angr/exploration_techniques/timeout.py +34 -0
  562. angr/exploration_techniques/tracer.py +1098 -0
  563. angr/exploration_techniques/unique.py +106 -0
  564. angr/exploration_techniques/veritesting.py +37 -0
  565. angr/factory.py +413 -0
  566. angr/flirt/__init__.py +124 -0
  567. angr/flirt/build_sig.py +305 -0
  568. angr/graph_utils.py +0 -0
  569. angr/keyed_region.py +525 -0
  570. angr/knowledge_base.py +146 -0
  571. angr/knowledge_plugins/__init__.py +43 -0
  572. angr/knowledge_plugins/callsite_prototypes.py +95 -0
  573. angr/knowledge_plugins/cfg/__init__.py +18 -0
  574. angr/knowledge_plugins/cfg/cfg_manager.py +95 -0
  575. angr/knowledge_plugins/cfg/cfg_model.py +1043 -0
  576. angr/knowledge_plugins/cfg/cfg_node.py +536 -0
  577. angr/knowledge_plugins/cfg/indirect_jump.py +131 -0
  578. angr/knowledge_plugins/cfg/memory_data.py +156 -0
  579. angr/knowledge_plugins/comments.py +16 -0
  580. angr/knowledge_plugins/custom_strings.py +38 -0
  581. angr/knowledge_plugins/data.py +22 -0
  582. angr/knowledge_plugins/debug_variables.py +216 -0
  583. angr/knowledge_plugins/functions/__init__.py +9 -0
  584. angr/knowledge_plugins/functions/function.py +1830 -0
  585. angr/knowledge_plugins/functions/function_manager.py +621 -0
  586. angr/knowledge_plugins/functions/function_parser.py +360 -0
  587. angr/knowledge_plugins/functions/soot_function.py +128 -0
  588. angr/knowledge_plugins/indirect_jumps.py +35 -0
  589. angr/knowledge_plugins/key_definitions/__init__.py +17 -0
  590. angr/knowledge_plugins/key_definitions/atoms.py +374 -0
  591. angr/knowledge_plugins/key_definitions/constants.py +29 -0
  592. angr/knowledge_plugins/key_definitions/definition.py +216 -0
  593. angr/knowledge_plugins/key_definitions/environment.py +96 -0
  594. angr/knowledge_plugins/key_definitions/heap_address.py +33 -0
  595. angr/knowledge_plugins/key_definitions/key_definition_manager.py +82 -0
  596. angr/knowledge_plugins/key_definitions/live_definitions.py +1020 -0
  597. angr/knowledge_plugins/key_definitions/liveness.py +165 -0
  598. angr/knowledge_plugins/key_definitions/rd_model.py +171 -0
  599. angr/knowledge_plugins/key_definitions/tag.py +78 -0
  600. angr/knowledge_plugins/key_definitions/undefined.py +70 -0
  601. angr/knowledge_plugins/key_definitions/unknown_size.py +86 -0
  602. angr/knowledge_plugins/key_definitions/uses.py +178 -0
  603. angr/knowledge_plugins/labels.py +110 -0
  604. angr/knowledge_plugins/obfuscations.py +40 -0
  605. angr/knowledge_plugins/patches.py +126 -0
  606. angr/knowledge_plugins/plugin.py +24 -0
  607. angr/knowledge_plugins/propagations/__init__.py +10 -0
  608. angr/knowledge_plugins/propagations/prop_value.py +191 -0
  609. angr/knowledge_plugins/propagations/propagation_manager.py +60 -0
  610. angr/knowledge_plugins/propagations/propagation_model.py +80 -0
  611. angr/knowledge_plugins/propagations/states.py +552 -0
  612. angr/knowledge_plugins/structured_code.py +63 -0
  613. angr/knowledge_plugins/types.py +95 -0
  614. angr/knowledge_plugins/variables/__init__.py +8 -0
  615. angr/knowledge_plugins/variables/variable_access.py +113 -0
  616. angr/knowledge_plugins/variables/variable_manager.py +1375 -0
  617. angr/knowledge_plugins/xrefs/__init__.py +12 -0
  618. angr/knowledge_plugins/xrefs/xref.py +150 -0
  619. angr/knowledge_plugins/xrefs/xref_manager.py +127 -0
  620. angr/knowledge_plugins/xrefs/xref_types.py +16 -0
  621. angr/misc/__init__.py +19 -0
  622. angr/misc/ansi.py +47 -0
  623. angr/misc/autoimport.py +90 -0
  624. angr/misc/bug_report.py +126 -0
  625. angr/misc/hookset.py +106 -0
  626. angr/misc/loggers.py +130 -0
  627. angr/misc/picklable_lock.py +46 -0
  628. angr/misc/plugins.py +289 -0
  629. angr/misc/telemetry.py +54 -0
  630. angr/misc/testing.py +24 -0
  631. angr/misc/ux.py +31 -0
  632. angr/procedures/__init__.py +12 -0
  633. angr/procedures/advapi32/__init__.py +0 -0
  634. angr/procedures/cgc/__init__.py +3 -0
  635. angr/procedures/cgc/_terminate.py +11 -0
  636. angr/procedures/cgc/allocate.py +75 -0
  637. angr/procedures/cgc/deallocate.py +67 -0
  638. angr/procedures/cgc/fdwait.py +65 -0
  639. angr/procedures/cgc/random.py +67 -0
  640. angr/procedures/cgc/receive.py +93 -0
  641. angr/procedures/cgc/transmit.py +65 -0
  642. angr/procedures/definitions/__init__.py +1043 -0
  643. angr/procedures/definitions/cgc.py +23 -0
  644. angr/procedures/definitions/common/glibc.json +3516 -0
  645. angr/procedures/definitions/gnulib.py +41 -0
  646. angr/procedures/definitions/libstdcpp.py +25 -0
  647. angr/procedures/definitions/linux_kernel.py +8382 -0
  648. angr/procedures/definitions/linux_loader.py +7 -0
  649. angr/procedures/definitions/macho_libsystem.py +18 -0
  650. angr/procedures/definitions/msvcr.py +25 -0
  651. angr/procedures/definitions/parse_glibc.py +77 -0
  652. angr/procedures/definitions/parse_syscalls_from_local_system.py +54 -0
  653. angr/procedures/definitions/parse_win32json.py +2540 -0
  654. angr/procedures/definitions/types_stl.py +22 -0
  655. angr/procedures/definitions/wdk/api-ms-win-dx-d3dkmt-l1-1-4.json +24 -0
  656. angr/procedures/definitions/wdk/api-ms-win-dx-d3dkmt-l1-1-6.json +18 -0
  657. angr/procedures/definitions/wdk/clfs.json +189 -0
  658. angr/procedures/definitions/wdk/fltmgr.json +813 -0
  659. angr/procedures/definitions/wdk/fwpkclnt.json +24 -0
  660. angr/procedures/definitions/wdk/fwpuclnt.json +453 -0
  661. angr/procedures/definitions/wdk/gdi32.json +528 -0
  662. angr/procedures/definitions/wdk/hal.json +96 -0
  663. angr/procedures/definitions/wdk/ksecdd.json +72 -0
  664. angr/procedures/definitions/wdk/ndis.json +336 -0
  665. angr/procedures/definitions/wdk/ntoskrnl.json +5158 -0
  666. angr/procedures/definitions/wdk/offreg.json +87 -0
  667. angr/procedures/definitions/wdk/pshed.json +33 -0
  668. angr/procedures/definitions/wdk/secur32.json +39 -0
  669. angr/procedures/definitions/wdk/vhfum.json +30 -0
  670. angr/procedures/definitions/win32/_types_win32.json +34480 -0
  671. angr/procedures/definitions/win32/aclui.json +24 -0
  672. angr/procedures/definitions/win32/activeds.json +81 -0
  673. angr/procedures/definitions/win32/advapi32.json +2505 -0
  674. angr/procedures/definitions/win32/advpack.json +165 -0
  675. angr/procedures/definitions/win32/amsi.json +36 -0
  676. angr/procedures/definitions/win32/api-ms-win-appmodel-runtime-l1-1-1.json +45 -0
  677. angr/procedures/definitions/win32/api-ms-win-appmodel-runtime-l1-1-3.json +30 -0
  678. angr/procedures/definitions/win32/api-ms-win-appmodel-runtime-l1-1-6.json +18 -0
  679. angr/procedures/definitions/win32/api-ms-win-core-apiquery-l2-1-0.json +18 -0
  680. angr/procedures/definitions/win32/api-ms-win-core-backgroundtask-l1-1-0.json +18 -0
  681. angr/procedures/definitions/win32/api-ms-win-core-comm-l1-1-1.json +18 -0
  682. angr/procedures/definitions/win32/api-ms-win-core-comm-l1-1-2.json +18 -0
  683. angr/procedures/definitions/win32/api-ms-win-core-enclave-l1-1-1.json +24 -0
  684. angr/procedures/definitions/win32/api-ms-win-core-errorhandling-l1-1-3.json +18 -0
  685. angr/procedures/definitions/win32/api-ms-win-core-featurestaging-l1-1-0.json +30 -0
  686. angr/procedures/definitions/win32/api-ms-win-core-featurestaging-l1-1-1.json +18 -0
  687. angr/procedures/definitions/win32/api-ms-win-core-file-fromapp-l1-1-0.json +48 -0
  688. angr/procedures/definitions/win32/api-ms-win-core-handle-l1-1-0.json +18 -0
  689. angr/procedures/definitions/win32/api-ms-win-core-ioring-l1-1-0.json +51 -0
  690. angr/procedures/definitions/win32/api-ms-win-core-marshal-l1-1-0.json +27 -0
  691. angr/procedures/definitions/win32/api-ms-win-core-memory-l1-1-3.json +27 -0
  692. angr/procedures/definitions/win32/api-ms-win-core-memory-l1-1-4.json +18 -0
  693. angr/procedures/definitions/win32/api-ms-win-core-memory-l1-1-5.json +24 -0
  694. angr/procedures/definitions/win32/api-ms-win-core-memory-l1-1-6.json +27 -0
  695. angr/procedures/definitions/win32/api-ms-win-core-memory-l1-1-7.json +21 -0
  696. angr/procedures/definitions/win32/api-ms-win-core-memory-l1-1-8.json +24 -0
  697. angr/procedures/definitions/win32/api-ms-win-core-path-l1-1-0.json +81 -0
  698. angr/procedures/definitions/win32/api-ms-win-core-psm-appnotify-l1-1-0.json +21 -0
  699. angr/procedures/definitions/win32/api-ms-win-core-psm-appnotify-l1-1-1.json +21 -0
  700. angr/procedures/definitions/win32/api-ms-win-core-realtime-l1-1-1.json +24 -0
  701. angr/procedures/definitions/win32/api-ms-win-core-realtime-l1-1-2.json +24 -0
  702. angr/procedures/definitions/win32/api-ms-win-core-slapi-l1-1-0.json +18 -0
  703. angr/procedures/definitions/win32/api-ms-win-core-state-helpers-l1-1-0.json +18 -0
  704. angr/procedures/definitions/win32/api-ms-win-core-synch-l1-2-0.json +24 -0
  705. angr/procedures/definitions/win32/api-ms-win-core-sysinfo-l1-2-0.json +18 -0
  706. angr/procedures/definitions/win32/api-ms-win-core-sysinfo-l1-2-3.json +21 -0
  707. angr/procedures/definitions/win32/api-ms-win-core-sysinfo-l1-2-4.json +21 -0
  708. angr/procedures/definitions/win32/api-ms-win-core-sysinfo-l1-2-6.json +18 -0
  709. angr/procedures/definitions/win32/api-ms-win-core-util-l1-1-1.json +21 -0
  710. angr/procedures/definitions/win32/api-ms-win-core-wow64-l1-1-1.json +24 -0
  711. angr/procedures/definitions/win32/api-ms-win-devices-query-l1-1-0.json +42 -0
  712. angr/procedures/definitions/win32/api-ms-win-devices-query-l1-1-1.json +30 -0
  713. angr/procedures/definitions/win32/api-ms-win-dx-d3dkmt-l1-1-0.json +18 -0
  714. angr/procedures/definitions/win32/api-ms-win-gaming-deviceinformation-l1-1-0.json +18 -0
  715. angr/procedures/definitions/win32/api-ms-win-gaming-expandedresources-l1-1-0.json +24 -0
  716. angr/procedures/definitions/win32/api-ms-win-gaming-tcui-l1-1-0.json +36 -0
  717. angr/procedures/definitions/win32/api-ms-win-gaming-tcui-l1-1-1.json +21 -0
  718. angr/procedures/definitions/win32/api-ms-win-gaming-tcui-l1-1-2.json +36 -0
  719. angr/procedures/definitions/win32/api-ms-win-gaming-tcui-l1-1-3.json +21 -0
  720. angr/procedures/definitions/win32/api-ms-win-gaming-tcui-l1-1-4.json +39 -0
  721. angr/procedures/definitions/win32/api-ms-win-mm-misc-l1-1-1.json +18 -0
  722. angr/procedures/definitions/win32/api-ms-win-net-isolation-l1-1-0.json +39 -0
  723. angr/procedures/definitions/win32/api-ms-win-security-base-l1-2-2.json +18 -0
  724. angr/procedures/definitions/win32/api-ms-win-security-isolatedcontainer-l1-1-0.json +18 -0
  725. angr/procedures/definitions/win32/api-ms-win-security-isolatedcontainer-l1-1-1.json +18 -0
  726. angr/procedures/definitions/win32/api-ms-win-service-core-l1-1-3.json +18 -0
  727. angr/procedures/definitions/win32/api-ms-win-service-core-l1-1-4.json +18 -0
  728. angr/procedures/definitions/win32/api-ms-win-service-core-l1-1-5.json +21 -0
  729. angr/procedures/definitions/win32/api-ms-win-shcore-scaling-l1-1-0.json +24 -0
  730. angr/procedures/definitions/win32/api-ms-win-shcore-scaling-l1-1-1.json +33 -0
  731. angr/procedures/definitions/win32/api-ms-win-shcore-scaling-l1-1-2.json +18 -0
  732. angr/procedures/definitions/win32/api-ms-win-wsl-api-l1-1-0.json +36 -0
  733. angr/procedures/definitions/win32/apphelp.json +18 -0
  734. angr/procedures/definitions/win32/authz.json +114 -0
  735. angr/procedures/definitions/win32/avicap32.json +27 -0
  736. angr/procedures/definitions/win32/avifil32.json +195 -0
  737. angr/procedures/definitions/win32/avrt.json +57 -0
  738. angr/procedures/definitions/win32/bcp47mrm.json +21 -0
  739. angr/procedures/definitions/win32/bcrypt.json +174 -0
  740. angr/procedures/definitions/win32/bcryptprimitives.json +21 -0
  741. angr/procedures/definitions/win32/bluetoothapis.json +138 -0
  742. angr/procedures/definitions/win32/bthprops_cpl.json +33 -0
  743. angr/procedures/definitions/win32/cabinet.json +81 -0
  744. angr/procedures/definitions/win32/certadm.json +69 -0
  745. angr/procedures/definitions/win32/certpoleng.json +39 -0
  746. angr/procedures/definitions/win32/cfgmgr32.json +732 -0
  747. angr/procedures/definitions/win32/chakra.json +270 -0
  748. angr/procedures/definitions/win32/cldapi.json +123 -0
  749. angr/procedures/definitions/win32/clfsw32.json +192 -0
  750. angr/procedures/definitions/win32/clusapi.json +855 -0
  751. angr/procedures/definitions/win32/comctl32.json +360 -0
  752. angr/procedures/definitions/win32/comdlg32.json +78 -0
  753. angr/procedures/definitions/win32/compstui.json +27 -0
  754. angr/procedures/definitions/win32/computecore.json +177 -0
  755. angr/procedures/definitions/win32/computenetwork.json +144 -0
  756. angr/procedures/definitions/win32/computestorage.json +51 -0
  757. angr/procedures/definitions/win32/comsvcs.json +36 -0
  758. angr/procedures/definitions/win32/credui.json +72 -0
  759. angr/procedures/definitions/win32/crypt32.json +702 -0
  760. angr/procedures/definitions/win32/cryptnet.json +30 -0
  761. angr/procedures/definitions/win32/cryptui.json +45 -0
  762. angr/procedures/definitions/win32/cryptxml.json +72 -0
  763. angr/procedures/definitions/win32/cscapi.json +27 -0
  764. angr/procedures/definitions/win32/d2d1.json +54 -0
  765. angr/procedures/definitions/win32/d3d10.json +96 -0
  766. angr/procedures/definitions/win32/d3d10_1.json +21 -0
  767. angr/procedures/definitions/win32/d3d11.json +24 -0
  768. angr/procedures/definitions/win32/d3d12.json +39 -0
  769. angr/procedures/definitions/win32/d3d9.json +48 -0
  770. angr/procedures/definitions/win32/d3dcompiler_47.json +93 -0
  771. angr/procedures/definitions/win32/d3dcsx.json +42 -0
  772. angr/procedures/definitions/win32/davclnt.json +69 -0
  773. angr/procedures/definitions/win32/dbgeng.json +27 -0
  774. angr/procedures/definitions/win32/dbghelp.json +663 -0
  775. angr/procedures/definitions/win32/dbgmodel.json +18 -0
  776. angr/procedures/definitions/win32/dciman32.json +75 -0
  777. angr/procedures/definitions/win32/dcomp.json +51 -0
  778. angr/procedures/definitions/win32/ddraw.json +36 -0
  779. angr/procedures/definitions/win32/deviceaccess.json +18 -0
  780. angr/procedures/definitions/win32/dflayout.json +18 -0
  781. angr/procedures/definitions/win32/dhcpcsvc.json +60 -0
  782. angr/procedures/definitions/win32/dhcpcsvc6.json +33 -0
  783. angr/procedures/definitions/win32/dhcpsapi.json +603 -0
  784. angr/procedures/definitions/win32/diagnosticdataquery.json +120 -0
  785. angr/procedures/definitions/win32/dinput8.json +18 -0
  786. angr/procedures/definitions/win32/directml.json +21 -0
  787. angr/procedures/definitions/win32/dmprocessxmlfiltered.json +18 -0
  788. angr/procedures/definitions/win32/dnsapi.json +207 -0
  789. angr/procedures/definitions/win32/drt.json +63 -0
  790. angr/procedures/definitions/win32/drtprov.json +42 -0
  791. angr/procedures/definitions/win32/drttransport.json +21 -0
  792. angr/procedures/definitions/win32/dsound.json +45 -0
  793. angr/procedures/definitions/win32/dsparse.json +72 -0
  794. angr/procedures/definitions/win32/dsprop.json +36 -0
  795. angr/procedures/definitions/win32/dssec.json +27 -0
  796. angr/procedures/definitions/win32/dsuiext.json +27 -0
  797. angr/procedures/definitions/win32/dwmapi.json +108 -0
  798. angr/procedures/definitions/win32/dwrite.json +18 -0
  799. angr/procedures/definitions/win32/dxcompiler.json +21 -0
  800. angr/procedures/definitions/win32/dxcore.json +18 -0
  801. angr/procedures/definitions/win32/dxgi.json +33 -0
  802. angr/procedures/definitions/win32/dxva2.json +129 -0
  803. angr/procedures/definitions/win32/eappcfg.json +57 -0
  804. angr/procedures/definitions/win32/eappprxy.json +69 -0
  805. angr/procedures/definitions/win32/efswrt.json +21 -0
  806. angr/procedures/definitions/win32/elscore.json +30 -0
  807. angr/procedures/definitions/win32/esent.json +702 -0
  808. angr/procedures/definitions/win32/evr.json +36 -0
  809. angr/procedures/definitions/win32/faultrep.json +27 -0
  810. angr/procedures/definitions/win32/fhsvcctl.json +36 -0
  811. angr/procedures/definitions/win32/firewallapi.json +24 -0
  812. angr/procedures/definitions/win32/fltlib.json +99 -0
  813. angr/procedures/definitions/win32/fontsub.json +21 -0
  814. angr/procedures/definitions/win32/forceinline.json +24 -0
  815. angr/procedures/definitions/win32/fwpuclnt.json +591 -0
  816. angr/procedures/definitions/win32/fxsutility.json +21 -0
  817. angr/procedures/definitions/win32/gdi32.json +1308 -0
  818. angr/procedures/definitions/win32/gdiplus.json +1902 -0
  819. angr/procedures/definitions/win32/glu32.json +171 -0
  820. angr/procedures/definitions/win32/gpedit.json +33 -0
  821. angr/procedures/definitions/win32/hhctrl_ocx.json +21 -0
  822. angr/procedures/definitions/win32/hid.json +150 -0
  823. angr/procedures/definitions/win32/hlink.json +99 -0
  824. angr/procedures/definitions/win32/hrtfapo.json +18 -0
  825. angr/procedures/definitions/win32/httpapi.json +144 -0
  826. angr/procedures/definitions/win32/icm32.json +78 -0
  827. angr/procedures/definitions/win32/icmui.json +21 -0
  828. angr/procedures/definitions/win32/icu.json +3090 -0
  829. angr/procedures/definitions/win32/ieframe.json +102 -0
  830. angr/procedures/definitions/win32/imagehlp.json +84 -0
  831. angr/procedures/definitions/win32/imgutil.json +42 -0
  832. angr/procedures/definitions/win32/imm32.json +261 -0
  833. angr/procedures/definitions/win32/infocardapi.json +66 -0
  834. angr/procedures/definitions/win32/inkobjcore.json +96 -0
  835. angr/procedures/definitions/win32/iphlpapi.json +618 -0
  836. angr/procedures/definitions/win32/iscsidsc.json +252 -0
  837. angr/procedures/definitions/win32/isolatedwindowsenvironmentutils.json +21 -0
  838. angr/procedures/definitions/win32/kernel32.json +4566 -0
  839. angr/procedures/definitions/win32/kernelbase.json +33 -0
  840. angr/procedures/definitions/win32/keycredmgr.json +27 -0
  841. angr/procedures/definitions/win32/ksproxy_ax.json +33 -0
  842. angr/procedures/definitions/win32/ksuser.json +39 -0
  843. angr/procedures/definitions/win32/ktmw32.json +132 -0
  844. angr/procedures/definitions/win32/licenseprotection.json +21 -0
  845. angr/procedures/definitions/win32/loadperf.json +51 -0
  846. angr/procedures/definitions/win32/magnification.json +72 -0
  847. angr/procedures/definitions/win32/mapi32.json +213 -0
  848. angr/procedures/definitions/win32/mdmlocalmanagement.json +24 -0
  849. angr/procedures/definitions/win32/mdmregistration.json +60 -0
  850. angr/procedures/definitions/win32/mf.json +201 -0
  851. angr/procedures/definitions/win32/mfcore.json +21 -0
  852. angr/procedures/definitions/win32/mfplat.json +450 -0
  853. angr/procedures/definitions/win32/mfplay.json +18 -0
  854. angr/procedures/definitions/win32/mfreadwrite.json +30 -0
  855. angr/procedures/definitions/win32/mfsensorgroup.json +45 -0
  856. angr/procedures/definitions/win32/mfsrcsnk.json +21 -0
  857. angr/procedures/definitions/win32/mgmtapi.json +42 -0
  858. angr/procedures/definitions/win32/mi.json +18 -0
  859. angr/procedures/definitions/win32/mmdevapi.json +18 -0
  860. angr/procedures/definitions/win32/mpr.json +156 -0
  861. angr/procedures/definitions/win32/mprapi.json +351 -0
  862. angr/procedures/definitions/win32/mqrt.json +117 -0
  863. angr/procedures/definitions/win32/mrmsupport.json +96 -0
  864. angr/procedures/definitions/win32/msacm32.json +141 -0
  865. angr/procedures/definitions/win32/msajapi.json +1656 -0
  866. angr/procedures/definitions/win32/mscms.json +252 -0
  867. angr/procedures/definitions/win32/mscoree.json +96 -0
  868. angr/procedures/definitions/win32/msctfmonitor.json +24 -0
  869. angr/procedures/definitions/win32/msdelta.json +63 -0
  870. angr/procedures/definitions/win32/msdmo.json +48 -0
  871. angr/procedures/definitions/win32/msdrm.json +267 -0
  872. angr/procedures/definitions/win32/msi.json +807 -0
  873. angr/procedures/definitions/win32/msimg32.json +24 -0
  874. angr/procedures/definitions/win32/mspatcha.json +63 -0
  875. angr/procedures/definitions/win32/mspatchc.json +42 -0
  876. angr/procedures/definitions/win32/msports.json +36 -0
  877. angr/procedures/definitions/win32/msrating.json +72 -0
  878. angr/procedures/definitions/win32/mssign32.json +45 -0
  879. angr/procedures/definitions/win32/mstask.json +21 -0
  880. angr/procedures/definitions/win32/msvfw32.json +144 -0
  881. angr/procedures/definitions/win32/mswsock.json +63 -0
  882. angr/procedures/definitions/win32/mtxdm.json +18 -0
  883. angr/procedures/definitions/win32/ncrypt.json +132 -0
  884. angr/procedures/definitions/win32/ndfapi.json +63 -0
  885. angr/procedures/definitions/win32/netapi32.json +633 -0
  886. angr/procedures/definitions/win32/netsh.json +39 -0
  887. angr/procedures/definitions/win32/netshell.json +21 -0
  888. angr/procedures/definitions/win32/newdev.json +48 -0
  889. angr/procedures/definitions/win32/ninput.json +105 -0
  890. angr/procedures/definitions/win32/normaliz.json +21 -0
  891. angr/procedures/definitions/win32/ntdll.json +234 -0
  892. angr/procedures/definitions/win32/ntdllk.json +18 -0
  893. angr/procedures/definitions/win32/ntdsapi.json +258 -0
  894. angr/procedures/definitions/win32/ntlanman.json +45 -0
  895. angr/procedures/definitions/win32/odbc32.json +477 -0
  896. angr/procedures/definitions/win32/odbcbcp.json +96 -0
  897. angr/procedures/definitions/win32/ole32.json +966 -0
  898. angr/procedures/definitions/win32/oleacc.json +66 -0
  899. angr/procedures/definitions/win32/oleaut32.json +1230 -0
  900. angr/procedures/definitions/win32/oledlg.json +84 -0
  901. angr/procedures/definitions/win32/ondemandconnroutehelper.json +30 -0
  902. angr/procedures/definitions/win32/opengl32.json +1080 -0
  903. angr/procedures/definitions/win32/opmxbox.json +24 -0
  904. angr/procedures/definitions/win32/p2p.json +339 -0
  905. angr/procedures/definitions/win32/p2pgraph.json +126 -0
  906. angr/procedures/definitions/win32/pdh.json +309 -0
  907. angr/procedures/definitions/win32/peerdist.json +99 -0
  908. angr/procedures/definitions/win32/powrprof.json +267 -0
  909. angr/procedures/definitions/win32/prntvpt.json +48 -0
  910. angr/procedures/definitions/win32/projectedfslib.json +72 -0
  911. angr/procedures/definitions/win32/propsys.json +669 -0
  912. angr/procedures/definitions/win32/psapi.json +96 -0
  913. angr/procedures/definitions/win32/quartz.json +21 -0
  914. angr/procedures/definitions/win32/query.json +27 -0
  915. angr/procedures/definitions/win32/qwave.json +48 -0
  916. angr/procedures/definitions/win32/rasapi32.json +267 -0
  917. angr/procedures/definitions/win32/rasdlg.json +33 -0
  918. angr/procedures/definitions/win32/resutils.json +375 -0
  919. angr/procedures/definitions/win32/rpcns4.json +198 -0
  920. angr/procedures/definitions/win32/rpcproxy.json +27 -0
  921. angr/procedures/definitions/win32/rpcrt4.json +1356 -0
  922. angr/procedures/definitions/win32/rstrtmgr.json +48 -0
  923. angr/procedures/definitions/win32/rtm.json +243 -0
  924. angr/procedures/definitions/win32/rtutils.json +138 -0
  925. angr/procedures/definitions/win32/rtworkq.json +114 -0
  926. angr/procedures/definitions/win32/sas.json +18 -0
  927. angr/procedures/definitions/win32/scarddlg.json +30 -0
  928. angr/procedures/definitions/win32/schannel.json +42 -0
  929. angr/procedures/definitions/win32/sechost.json +21 -0
  930. angr/procedures/definitions/win32/secur32.json +282 -0
  931. angr/procedures/definitions/win32/sensapi.json +24 -0
  932. angr/procedures/definitions/win32/sensorsutilsv2.json +135 -0
  933. angr/procedures/definitions/win32/setupapi.json +1017 -0
  934. angr/procedures/definitions/win32/sfc.json +33 -0
  935. angr/procedures/definitions/win32/shdocvw.json +24 -0
  936. angr/procedures/definitions/win32/shell32.json +747 -0
  937. angr/procedures/definitions/win32/shlwapi.json +1095 -0
  938. angr/procedures/definitions/win32/slc.json +111 -0
  939. angr/procedures/definitions/win32/slcext.json +27 -0
  940. angr/procedures/definitions/win32/slwga.json +18 -0
  941. angr/procedures/definitions/win32/snmpapi.json +93 -0
  942. angr/procedures/definitions/win32/spoolss.json +93 -0
  943. angr/procedures/definitions/win32/srclient.json +18 -0
  944. angr/procedures/definitions/win32/srpapi.json +48 -0
  945. angr/procedures/definitions/win32/sspicli.json +36 -0
  946. angr/procedures/definitions/win32/sti.json +18 -0
  947. angr/procedures/definitions/win32/t2embed.json +57 -0
  948. angr/procedures/definitions/win32/tapi32.json +762 -0
  949. angr/procedures/definitions/win32/tbs.json +57 -0
  950. angr/procedures/definitions/win32/tdh.json +96 -0
  951. angr/procedures/definitions/win32/tokenbinding.json +45 -0
  952. angr/procedures/definitions/win32/traffic.json +75 -0
  953. angr/procedures/definitions/win32/txfw32.json +42 -0
  954. angr/procedures/definitions/win32/ualapi.json +27 -0
  955. angr/procedures/definitions/win32/uiautomationcore.json +309 -0
  956. angr/procedures/definitions/win32/urlmon.json +246 -0
  957. angr/procedures/definitions/win32/user32.json +2298 -0
  958. angr/procedures/definitions/win32/userenv.json +147 -0
  959. angr/procedures/definitions/win32/usp10.json +135 -0
  960. angr/procedures/definitions/win32/uxtheme.json +246 -0
  961. angr/procedures/definitions/win32/verifier.json +18 -0
  962. angr/procedures/definitions/win32/version.json +57 -0
  963. angr/procedures/definitions/win32/vertdll.json +36 -0
  964. angr/procedures/definitions/win32/virtdisk.json +102 -0
  965. angr/procedures/definitions/win32/vmdevicehost.json +54 -0
  966. angr/procedures/definitions/win32/vmsavedstatedumpprovider.json +144 -0
  967. angr/procedures/definitions/win32/vssapi.json +18 -0
  968. angr/procedures/definitions/win32/wcmapi.json +30 -0
  969. angr/procedures/definitions/win32/wdsbp.json +36 -0
  970. angr/procedures/definitions/win32/wdsclientapi.json +126 -0
  971. angr/procedures/definitions/win32/wdsmc.json +33 -0
  972. angr/procedures/definitions/win32/wdspxe.json +108 -0
  973. angr/procedures/definitions/win32/wdstptc.json +54 -0
  974. angr/procedures/definitions/win32/webauthn.json +54 -0
  975. angr/procedures/definitions/win32/webservices.json +594 -0
  976. angr/procedures/definitions/win32/websocket.json +54 -0
  977. angr/procedures/definitions/win32/wecapi.json +60 -0
  978. angr/procedures/definitions/win32/wer.json +78 -0
  979. angr/procedures/definitions/win32/wevtapi.json +120 -0
  980. angr/procedures/definitions/win32/winbio.json +177 -0
  981. angr/procedures/definitions/win32/windows_ai_machinelearning.json +18 -0
  982. angr/procedures/definitions/win32/windows_media_mediacontrol.json +39 -0
  983. angr/procedures/definitions/win32/windows_networking.json +18 -0
  984. angr/procedures/definitions/win32/windows_ui_xaml.json +21 -0
  985. angr/procedures/definitions/win32/windowscodecs.json +42 -0
  986. angr/procedures/definitions/win32/winfax.json +183 -0
  987. angr/procedures/definitions/win32/winhttp.json +183 -0
  988. angr/procedures/definitions/win32/winhvemulation.json +27 -0
  989. angr/procedures/definitions/win32/winhvplatform.json +213 -0
  990. angr/procedures/definitions/win32/wininet.json +903 -0
  991. angr/procedures/definitions/win32/winml.json +18 -0
  992. angr/procedures/definitions/win32/winmm.json +543 -0
  993. angr/procedures/definitions/win32/winscard.json +225 -0
  994. angr/procedures/definitions/win32/winspool_drv.json +531 -0
  995. angr/procedures/definitions/win32/wintrust.json +195 -0
  996. angr/procedures/definitions/win32/winusb.json +117 -0
  997. angr/procedures/definitions/win32/wlanapi.json +195 -0
  998. angr/procedures/definitions/win32/wlanui.json +18 -0
  999. angr/procedures/definitions/win32/wldap32.json +744 -0
  1000. angr/procedures/definitions/win32/wldp.json +42 -0
  1001. angr/procedures/definitions/win32/wmvcore.json +48 -0
  1002. angr/procedures/definitions/win32/wnvapi.json +21 -0
  1003. angr/procedures/definitions/win32/wofutil.json +48 -0
  1004. angr/procedures/definitions/win32/ws2_32.json +495 -0
  1005. angr/procedures/definitions/win32/wscapi.json +33 -0
  1006. angr/procedures/definitions/win32/wsclient.json +24 -0
  1007. angr/procedures/definitions/win32/wsdapi.json +111 -0
  1008. angr/procedures/definitions/win32/wsmsvc.json +114 -0
  1009. angr/procedures/definitions/win32/wsnmp32.json +162 -0
  1010. angr/procedures/definitions/win32/wtsapi32.json +204 -0
  1011. angr/procedures/definitions/win32/xaudio2_8.json +27 -0
  1012. angr/procedures/definitions/win32/xinput1_4.json +36 -0
  1013. angr/procedures/definitions/win32/xmllite.json +33 -0
  1014. angr/procedures/definitions/win32/xolehlp.json +27 -0
  1015. angr/procedures/definitions/win32/xpsprint.json +21 -0
  1016. angr/procedures/glibc/__ctype_b_loc.py +21 -0
  1017. angr/procedures/glibc/__ctype_tolower_loc.py +21 -0
  1018. angr/procedures/glibc/__ctype_toupper_loc.py +21 -0
  1019. angr/procedures/glibc/__errno_location.py +7 -0
  1020. angr/procedures/glibc/__init__.py +3 -0
  1021. angr/procedures/glibc/__libc_init.py +37 -0
  1022. angr/procedures/glibc/__libc_start_main.py +301 -0
  1023. angr/procedures/glibc/dynamic_loading.py +20 -0
  1024. angr/procedures/glibc/scanf.py +19 -0
  1025. angr/procedures/glibc/sscanf.py +10 -0
  1026. angr/procedures/gnulib/__init__.py +3 -0
  1027. angr/procedures/gnulib/xalloc_die.py +14 -0
  1028. angr/procedures/gnulib/xstrtol_fatal.py +14 -0
  1029. angr/procedures/java/__init__.py +42 -0
  1030. angr/procedures/java/unconstrained.py +65 -0
  1031. angr/procedures/java_io/__init__.py +0 -0
  1032. angr/procedures/java_io/read.py +12 -0
  1033. angr/procedures/java_io/write.py +17 -0
  1034. angr/procedures/java_jni/__init__.py +482 -0
  1035. angr/procedures/java_jni/array_operations.py +312 -0
  1036. angr/procedures/java_jni/class_and_interface_operations.py +31 -0
  1037. angr/procedures/java_jni/field_access.py +173 -0
  1038. angr/procedures/java_jni/global_and_local_refs.py +57 -0
  1039. angr/procedures/java_jni/method_calls.py +365 -0
  1040. angr/procedures/java_jni/not_implemented.py +26 -0
  1041. angr/procedures/java_jni/object_operations.py +94 -0
  1042. angr/procedures/java_jni/string_operations.py +87 -0
  1043. angr/procedures/java_jni/version_information.py +12 -0
  1044. angr/procedures/java_lang/__init__.py +0 -0
  1045. angr/procedures/java_lang/character.py +30 -0
  1046. angr/procedures/java_lang/double.py +24 -0
  1047. angr/procedures/java_lang/exit.py +13 -0
  1048. angr/procedures/java_lang/getsimplename.py +18 -0
  1049. angr/procedures/java_lang/integer.py +43 -0
  1050. angr/procedures/java_lang/load_library.py +9 -0
  1051. angr/procedures/java_lang/math.py +15 -0
  1052. angr/procedures/java_lang/string.py +78 -0
  1053. angr/procedures/java_lang/stringbuilder.py +44 -0
  1054. angr/procedures/java_lang/system.py +18 -0
  1055. angr/procedures/java_util/__init__.py +0 -0
  1056. angr/procedures/java_util/collection.py +35 -0
  1057. angr/procedures/java_util/iterator.py +46 -0
  1058. angr/procedures/java_util/list.py +99 -0
  1059. angr/procedures/java_util/map.py +131 -0
  1060. angr/procedures/java_util/random.py +14 -0
  1061. angr/procedures/java_util/scanner_nextline.py +23 -0
  1062. angr/procedures/libc/__init__.py +3 -0
  1063. angr/procedures/libc/abort.py +9 -0
  1064. angr/procedures/libc/access.py +13 -0
  1065. angr/procedures/libc/atoi.py +14 -0
  1066. angr/procedures/libc/atol.py +13 -0
  1067. angr/procedures/libc/calloc.py +8 -0
  1068. angr/procedures/libc/closelog.py +10 -0
  1069. angr/procedures/libc/err.py +14 -0
  1070. angr/procedures/libc/error.py +54 -0
  1071. angr/procedures/libc/exit.py +11 -0
  1072. angr/procedures/libc/fclose.py +19 -0
  1073. angr/procedures/libc/feof.py +21 -0
  1074. angr/procedures/libc/fflush.py +16 -0
  1075. angr/procedures/libc/fgetc.py +27 -0
  1076. angr/procedures/libc/fgets.py +69 -0
  1077. angr/procedures/libc/fopen.py +63 -0
  1078. angr/procedures/libc/fprintf.py +25 -0
  1079. angr/procedures/libc/fputc.py +23 -0
  1080. angr/procedures/libc/fputs.py +24 -0
  1081. angr/procedures/libc/fread.py +24 -0
  1082. angr/procedures/libc/free.py +9 -0
  1083. angr/procedures/libc/fscanf.py +20 -0
  1084. angr/procedures/libc/fseek.py +34 -0
  1085. angr/procedures/libc/ftell.py +22 -0
  1086. angr/procedures/libc/fwrite.py +19 -0
  1087. angr/procedures/libc/getchar.py +13 -0
  1088. angr/procedures/libc/getdelim.py +99 -0
  1089. angr/procedures/libc/getegid.py +8 -0
  1090. angr/procedures/libc/geteuid.py +8 -0
  1091. angr/procedures/libc/getgid.py +8 -0
  1092. angr/procedures/libc/gets.py +68 -0
  1093. angr/procedures/libc/getuid.py +8 -0
  1094. angr/procedures/libc/malloc.py +12 -0
  1095. angr/procedures/libc/memcmp.py +69 -0
  1096. angr/procedures/libc/memcpy.py +45 -0
  1097. angr/procedures/libc/memset.py +72 -0
  1098. angr/procedures/libc/openlog.py +10 -0
  1099. angr/procedures/libc/perror.py +13 -0
  1100. angr/procedures/libc/printf.py +34 -0
  1101. angr/procedures/libc/putchar.py +13 -0
  1102. angr/procedures/libc/puts.py +19 -0
  1103. angr/procedures/libc/rand.py +8 -0
  1104. angr/procedures/libc/realloc.py +8 -0
  1105. angr/procedures/libc/rewind.py +12 -0
  1106. angr/procedures/libc/scanf.py +20 -0
  1107. angr/procedures/libc/setbuf.py +9 -0
  1108. angr/procedures/libc/setvbuf.py +7 -0
  1109. angr/procedures/libc/snprintf.py +36 -0
  1110. angr/procedures/libc/sprintf.py +25 -0
  1111. angr/procedures/libc/srand.py +7 -0
  1112. angr/procedures/libc/sscanf.py +13 -0
  1113. angr/procedures/libc/stpcpy.py +18 -0
  1114. angr/procedures/libc/strcat.py +14 -0
  1115. angr/procedures/libc/strchr.py +48 -0
  1116. angr/procedures/libc/strcmp.py +31 -0
  1117. angr/procedures/libc/strcpy.py +13 -0
  1118. angr/procedures/libc/strlen.py +114 -0
  1119. angr/procedures/libc/strncat.py +19 -0
  1120. angr/procedures/libc/strncmp.py +183 -0
  1121. angr/procedures/libc/strncpy.py +22 -0
  1122. angr/procedures/libc/strnlen.py +13 -0
  1123. angr/procedures/libc/strstr.py +101 -0
  1124. angr/procedures/libc/strtol.py +261 -0
  1125. angr/procedures/libc/strtoul.py +9 -0
  1126. angr/procedures/libc/system.py +13 -0
  1127. angr/procedures/libc/time.py +9 -0
  1128. angr/procedures/libc/tmpnam.py +20 -0
  1129. angr/procedures/libc/tolower.py +10 -0
  1130. angr/procedures/libc/toupper.py +10 -0
  1131. angr/procedures/libc/ungetc.py +20 -0
  1132. angr/procedures/libc/vsnprintf.py +17 -0
  1133. angr/procedures/libc/wchar.py +16 -0
  1134. angr/procedures/libstdcpp/__init__.py +0 -0
  1135. angr/procedures/libstdcpp/_unwind_resume.py +11 -0
  1136. angr/procedures/libstdcpp/std____throw_bad_alloc.py +13 -0
  1137. angr/procedures/libstdcpp/std____throw_bad_cast.py +13 -0
  1138. angr/procedures/libstdcpp/std____throw_length_error.py +13 -0
  1139. angr/procedures/libstdcpp/std____throw_logic_error.py +13 -0
  1140. angr/procedures/libstdcpp/std__terminate.py +13 -0
  1141. angr/procedures/linux_kernel/__init__.py +3 -0
  1142. angr/procedures/linux_kernel/access.py +18 -0
  1143. angr/procedures/linux_kernel/arch_prctl.py +34 -0
  1144. angr/procedures/linux_kernel/arm_user_helpers.py +59 -0
  1145. angr/procedures/linux_kernel/brk.py +18 -0
  1146. angr/procedures/linux_kernel/cwd.py +28 -0
  1147. angr/procedures/linux_kernel/fstat.py +138 -0
  1148. angr/procedures/linux_kernel/fstat64.py +170 -0
  1149. angr/procedures/linux_kernel/futex.py +17 -0
  1150. angr/procedures/linux_kernel/getegid.py +17 -0
  1151. angr/procedures/linux_kernel/geteuid.py +17 -0
  1152. angr/procedures/linux_kernel/getgid.py +17 -0
  1153. angr/procedures/linux_kernel/getpid.py +14 -0
  1154. angr/procedures/linux_kernel/getrlimit.py +24 -0
  1155. angr/procedures/linux_kernel/gettid.py +9 -0
  1156. angr/procedures/linux_kernel/getuid.py +17 -0
  1157. angr/procedures/linux_kernel/iovec.py +47 -0
  1158. angr/procedures/linux_kernel/lseek.py +42 -0
  1159. angr/procedures/linux_kernel/mmap.py +16 -0
  1160. angr/procedures/linux_kernel/mprotect.py +42 -0
  1161. angr/procedures/linux_kernel/munmap.py +8 -0
  1162. angr/procedures/linux_kernel/openat.py +26 -0
  1163. angr/procedures/linux_kernel/set_tid_address.py +8 -0
  1164. angr/procedures/linux_kernel/sigaction.py +19 -0
  1165. angr/procedures/linux_kernel/sigprocmask.py +23 -0
  1166. angr/procedures/linux_kernel/stat.py +23 -0
  1167. angr/procedures/linux_kernel/sysinfo.py +59 -0
  1168. angr/procedures/linux_kernel/tgkill.py +10 -0
  1169. angr/procedures/linux_kernel/time.py +34 -0
  1170. angr/procedures/linux_kernel/uid.py +30 -0
  1171. angr/procedures/linux_kernel/uname.py +29 -0
  1172. angr/procedures/linux_kernel/unlink.py +22 -0
  1173. angr/procedures/linux_kernel/vsyscall.py +16 -0
  1174. angr/procedures/linux_loader/__init__.py +3 -0
  1175. angr/procedures/linux_loader/_dl_initial_error_catch_tsd.py +7 -0
  1176. angr/procedures/linux_loader/_dl_rtld_lock.py +15 -0
  1177. angr/procedures/linux_loader/sim_loader.py +54 -0
  1178. angr/procedures/linux_loader/tls.py +40 -0
  1179. angr/procedures/msvcr/__getmainargs.py +16 -0
  1180. angr/procedures/msvcr/__init__.py +4 -0
  1181. angr/procedures/msvcr/_initterm.py +38 -0
  1182. angr/procedures/msvcr/fmode.py +31 -0
  1183. angr/procedures/ntdll/__init__.py +0 -0
  1184. angr/procedures/ntdll/exceptions.py +60 -0
  1185. angr/procedures/posix/__init__.py +3 -0
  1186. angr/procedures/posix/accept.py +29 -0
  1187. angr/procedures/posix/bind.py +13 -0
  1188. angr/procedures/posix/bzero.py +9 -0
  1189. angr/procedures/posix/chroot.py +27 -0
  1190. angr/procedures/posix/close.py +9 -0
  1191. angr/procedures/posix/closedir.py +7 -0
  1192. angr/procedures/posix/dup.py +56 -0
  1193. angr/procedures/posix/fcntl.py +10 -0
  1194. angr/procedures/posix/fdopen.py +76 -0
  1195. angr/procedures/posix/fileno.py +18 -0
  1196. angr/procedures/posix/fork.py +13 -0
  1197. angr/procedures/posix/getenv.py +35 -0
  1198. angr/procedures/posix/gethostbyname.py +43 -0
  1199. angr/procedures/posix/getpass.py +19 -0
  1200. angr/procedures/posix/getsockopt.py +11 -0
  1201. angr/procedures/posix/htonl.py +11 -0
  1202. angr/procedures/posix/htons.py +11 -0
  1203. angr/procedures/posix/inet_ntoa.py +59 -0
  1204. angr/procedures/posix/listen.py +13 -0
  1205. angr/procedures/posix/mmap.py +144 -0
  1206. angr/procedures/posix/open.py +18 -0
  1207. angr/procedures/posix/opendir.py +10 -0
  1208. angr/procedures/posix/poll.py +55 -0
  1209. angr/procedures/posix/pread64.py +46 -0
  1210. angr/procedures/posix/pthread.py +87 -0
  1211. angr/procedures/posix/pwrite64.py +46 -0
  1212. angr/procedures/posix/read.py +13 -0
  1213. angr/procedures/posix/readdir.py +62 -0
  1214. angr/procedures/posix/recv.py +13 -0
  1215. angr/procedures/posix/recvfrom.py +13 -0
  1216. angr/procedures/posix/select.py +48 -0
  1217. angr/procedures/posix/send.py +23 -0
  1218. angr/procedures/posix/setsockopt.py +9 -0
  1219. angr/procedures/posix/sigaction.py +23 -0
  1220. angr/procedures/posix/sim_time.py +48 -0
  1221. angr/procedures/posix/sleep.py +8 -0
  1222. angr/procedures/posix/socket.py +18 -0
  1223. angr/procedures/posix/strcasecmp.py +26 -0
  1224. angr/procedures/posix/strdup.py +18 -0
  1225. angr/procedures/posix/strtok_r.py +64 -0
  1226. angr/procedures/posix/syslog.py +15 -0
  1227. angr/procedures/posix/tz.py +9 -0
  1228. angr/procedures/posix/unlink.py +11 -0
  1229. angr/procedures/posix/usleep.py +8 -0
  1230. angr/procedures/posix/write.py +13 -0
  1231. angr/procedures/procedure_dict.py +50 -0
  1232. angr/procedures/stubs/CallReturn.py +13 -0
  1233. angr/procedures/stubs/NoReturnUnconstrained.py +13 -0
  1234. angr/procedures/stubs/Nop.py +7 -0
  1235. angr/procedures/stubs/PathTerminator.py +9 -0
  1236. angr/procedures/stubs/Redirect.py +18 -0
  1237. angr/procedures/stubs/ReturnChar.py +11 -0
  1238. angr/procedures/stubs/ReturnUnconstrained.py +24 -0
  1239. angr/procedures/stubs/UnresolvableCallTarget.py +9 -0
  1240. angr/procedures/stubs/UnresolvableJumpTarget.py +9 -0
  1241. angr/procedures/stubs/UserHook.py +18 -0
  1242. angr/procedures/stubs/__init__.py +3 -0
  1243. angr/procedures/stubs/b64_decode.py +15 -0
  1244. angr/procedures/stubs/caller.py +14 -0
  1245. angr/procedures/stubs/crazy_scanf.py +20 -0
  1246. angr/procedures/stubs/format_parser.py +669 -0
  1247. angr/procedures/stubs/syscall_stub.py +24 -0
  1248. angr/procedures/testing/__init__.py +3 -0
  1249. angr/procedures/testing/manyargs.py +9 -0
  1250. angr/procedures/testing/retreg.py +8 -0
  1251. angr/procedures/tracer/__init__.py +4 -0
  1252. angr/procedures/tracer/random.py +9 -0
  1253. angr/procedures/tracer/receive.py +23 -0
  1254. angr/procedures/tracer/transmit.py +26 -0
  1255. angr/procedures/uclibc/__init__.py +3 -0
  1256. angr/procedures/uclibc/__uClibc_main.py +10 -0
  1257. angr/procedures/win32/EncodePointer.py +7 -0
  1258. angr/procedures/win32/ExitProcess.py +9 -0
  1259. angr/procedures/win32/GetCommandLine.py +12 -0
  1260. angr/procedures/win32/GetCurrentProcessId.py +7 -0
  1261. angr/procedures/win32/GetCurrentThreadId.py +7 -0
  1262. angr/procedures/win32/GetLastInputInfo.py +40 -0
  1263. angr/procedures/win32/GetModuleHandle.py +29 -0
  1264. angr/procedures/win32/GetProcessAffinityMask.py +37 -0
  1265. angr/procedures/win32/InterlockedExchange.py +15 -0
  1266. angr/procedures/win32/IsProcessorFeaturePresent.py +7 -0
  1267. angr/procedures/win32/VirtualAlloc.py +114 -0
  1268. angr/procedures/win32/VirtualProtect.py +60 -0
  1269. angr/procedures/win32/__init__.py +3 -0
  1270. angr/procedures/win32/critical_section.py +12 -0
  1271. angr/procedures/win32/dynamic_loading.py +104 -0
  1272. angr/procedures/win32/file_handles.py +47 -0
  1273. angr/procedures/win32/gethostbyname.py +12 -0
  1274. angr/procedures/win32/heap.py +45 -0
  1275. angr/procedures/win32/is_bad_ptr.py +26 -0
  1276. angr/procedures/win32/local_storage.py +88 -0
  1277. angr/procedures/win32/mutex.py +11 -0
  1278. angr/procedures/win32/sim_time.py +135 -0
  1279. angr/procedures/win32/system_paths.py +35 -0
  1280. angr/procedures/win32_kernel/ExAllocatePool.py +13 -0
  1281. angr/procedures/win32_kernel/ExFreePoolWithTag.py +8 -0
  1282. angr/procedures/win32_kernel/__fastfail.py +15 -0
  1283. angr/procedures/win32_kernel/__init__.py +3 -0
  1284. angr/procedures/win_user32/__init__.py +0 -0
  1285. angr/procedures/win_user32/chars.py +15 -0
  1286. angr/procedures/win_user32/keyboard.py +14 -0
  1287. angr/procedures/win_user32/messagebox.py +49 -0
  1288. angr/project.py +860 -0
  1289. angr/protos/__init__.py +19 -0
  1290. angr/protos/cfg_pb2.py +42 -0
  1291. angr/protos/function_pb2.py +38 -0
  1292. angr/protos/primitives_pb2.py +59 -0
  1293. angr/protos/variables_pb2.py +55 -0
  1294. angr/protos/xrefs_pb2.py +36 -0
  1295. angr/py.typed +1 -0
  1296. angr/rustylib.cpython-311-darwin.so +0 -0
  1297. angr/serializable.py +66 -0
  1298. angr/sim_manager.py +971 -0
  1299. angr/sim_options.py +436 -0
  1300. angr/sim_procedure.py +626 -0
  1301. angr/sim_state.py +926 -0
  1302. angr/sim_state_options.py +403 -0
  1303. angr/sim_type.py +4026 -0
  1304. angr/sim_variable.py +470 -0
  1305. angr/simos/__init__.py +47 -0
  1306. angr/simos/cgc.py +153 -0
  1307. angr/simos/javavm.py +458 -0
  1308. angr/simos/linux.py +509 -0
  1309. angr/simos/simos.py +444 -0
  1310. angr/simos/snimmuc_nxp.py +149 -0
  1311. angr/simos/userland.py +163 -0
  1312. angr/simos/windows.py +615 -0
  1313. angr/simos/xbox.py +32 -0
  1314. angr/slicer.py +352 -0
  1315. angr/state_hierarchy.py +262 -0
  1316. angr/state_plugins/__init__.py +84 -0
  1317. angr/state_plugins/callstack.py +478 -0
  1318. angr/state_plugins/cgc.py +155 -0
  1319. angr/state_plugins/debug_variables.py +192 -0
  1320. angr/state_plugins/filesystem.py +463 -0
  1321. angr/state_plugins/gdb.py +148 -0
  1322. angr/state_plugins/globals.py +65 -0
  1323. angr/state_plugins/heap/__init__.py +15 -0
  1324. angr/state_plugins/heap/heap_base.py +128 -0
  1325. angr/state_plugins/heap/heap_brk.py +136 -0
  1326. angr/state_plugins/heap/heap_freelist.py +213 -0
  1327. angr/state_plugins/heap/heap_libc.py +46 -0
  1328. angr/state_plugins/heap/heap_ptmalloc.py +620 -0
  1329. angr/state_plugins/heap/utils.py +22 -0
  1330. angr/state_plugins/history.py +564 -0
  1331. angr/state_plugins/inspect.py +375 -0
  1332. angr/state_plugins/javavm_classloader.py +134 -0
  1333. angr/state_plugins/jni_references.py +95 -0
  1334. angr/state_plugins/libc.py +1263 -0
  1335. angr/state_plugins/light_registers.py +168 -0
  1336. angr/state_plugins/log.py +84 -0
  1337. angr/state_plugins/loop_data.py +92 -0
  1338. angr/state_plugins/plugin.py +176 -0
  1339. angr/state_plugins/posix.py +703 -0
  1340. angr/state_plugins/preconstrainer.py +196 -0
  1341. angr/state_plugins/scratch.py +173 -0
  1342. angr/state_plugins/sim_action.py +326 -0
  1343. angr/state_plugins/sim_action_object.py +271 -0
  1344. angr/state_plugins/sim_event.py +59 -0
  1345. angr/state_plugins/solver.py +1128 -0
  1346. angr/state_plugins/symbolizer.py +291 -0
  1347. angr/state_plugins/trace_additions.py +738 -0
  1348. angr/state_plugins/uc_manager.py +94 -0
  1349. angr/state_plugins/unicorn_engine.py +1920 -0
  1350. angr/state_plugins/view.py +340 -0
  1351. angr/storage/__init__.py +15 -0
  1352. angr/storage/file.py +1210 -0
  1353. angr/storage/memory_mixins/__init__.py +317 -0
  1354. angr/storage/memory_mixins/actions_mixin.py +72 -0
  1355. angr/storage/memory_mixins/address_concretization_mixin.py +384 -0
  1356. angr/storage/memory_mixins/bvv_conversion_mixin.py +73 -0
  1357. angr/storage/memory_mixins/clouseau_mixin.py +137 -0
  1358. angr/storage/memory_mixins/conditional_store_mixin.py +25 -0
  1359. angr/storage/memory_mixins/convenient_mappings_mixin.py +256 -0
  1360. angr/storage/memory_mixins/default_filler_mixin.py +144 -0
  1361. angr/storage/memory_mixins/dirty_addrs_mixin.py +11 -0
  1362. angr/storage/memory_mixins/hex_dumper_mixin.py +82 -0
  1363. angr/storage/memory_mixins/javavm_memory_mixin.py +392 -0
  1364. angr/storage/memory_mixins/keyvalue_memory_mixin.py +43 -0
  1365. angr/storage/memory_mixins/label_merger_mixin.py +31 -0
  1366. angr/storage/memory_mixins/memory_mixin.py +175 -0
  1367. angr/storage/memory_mixins/multi_value_merger_mixin.py +79 -0
  1368. angr/storage/memory_mixins/name_resolution_mixin.py +67 -0
  1369. angr/storage/memory_mixins/paged_memory/__init__.py +0 -0
  1370. angr/storage/memory_mixins/paged_memory/page_backer_mixins.py +266 -0
  1371. angr/storage/memory_mixins/paged_memory/paged_memory_mixin.py +743 -0
  1372. angr/storage/memory_mixins/paged_memory/paged_memory_multivalue_mixin.py +65 -0
  1373. angr/storage/memory_mixins/paged_memory/pages/__init__.py +26 -0
  1374. angr/storage/memory_mixins/paged_memory/pages/base.py +31 -0
  1375. angr/storage/memory_mixins/paged_memory/pages/cooperation.py +341 -0
  1376. angr/storage/memory_mixins/paged_memory/pages/history_tracking_mixin.py +92 -0
  1377. angr/storage/memory_mixins/paged_memory/pages/ispo_mixin.py +55 -0
  1378. angr/storage/memory_mixins/paged_memory/pages/list_page.py +338 -0
  1379. angr/storage/memory_mixins/paged_memory/pages/multi_values.py +324 -0
  1380. angr/storage/memory_mixins/paged_memory/pages/mv_list_page.py +419 -0
  1381. angr/storage/memory_mixins/paged_memory/pages/permissions_mixin.py +36 -0
  1382. angr/storage/memory_mixins/paged_memory/pages/refcount_mixin.py +52 -0
  1383. angr/storage/memory_mixins/paged_memory/pages/ultra_page.py +529 -0
  1384. angr/storage/memory_mixins/paged_memory/privileged_mixin.py +36 -0
  1385. angr/storage/memory_mixins/paged_memory/stack_allocation_mixin.py +74 -0
  1386. angr/storage/memory_mixins/regioned_memory/__init__.py +17 -0
  1387. angr/storage/memory_mixins/regioned_memory/abstract_address_descriptor.py +36 -0
  1388. angr/storage/memory_mixins/regioned_memory/abstract_merger_mixin.py +31 -0
  1389. angr/storage/memory_mixins/regioned_memory/region_category_mixin.py +9 -0
  1390. angr/storage/memory_mixins/regioned_memory/region_data.py +246 -0
  1391. angr/storage/memory_mixins/regioned_memory/region_meta_mixin.py +241 -0
  1392. angr/storage/memory_mixins/regioned_memory/regioned_address_concretization_mixin.py +119 -0
  1393. angr/storage/memory_mixins/regioned_memory/regioned_memory_mixin.py +442 -0
  1394. angr/storage/memory_mixins/regioned_memory/static_find_mixin.py +69 -0
  1395. angr/storage/memory_mixins/simple_interface_mixin.py +71 -0
  1396. angr/storage/memory_mixins/simplification_mixin.py +15 -0
  1397. angr/storage/memory_mixins/size_resolution_mixin.py +143 -0
  1398. angr/storage/memory_mixins/slotted_memory.py +140 -0
  1399. angr/storage/memory_mixins/smart_find_mixin.py +161 -0
  1400. angr/storage/memory_mixins/symbolic_merger_mixin.py +16 -0
  1401. angr/storage/memory_mixins/top_merger_mixin.py +25 -0
  1402. angr/storage/memory_mixins/underconstrained_mixin.py +67 -0
  1403. angr/storage/memory_mixins/unwrapper_mixin.py +26 -0
  1404. angr/storage/memory_object.py +195 -0
  1405. angr/tablespecs.py +91 -0
  1406. angr/unicornlib.dylib +0 -0
  1407. angr/utils/__init__.py +46 -0
  1408. angr/utils/ail.py +176 -0
  1409. angr/utils/algo.py +34 -0
  1410. angr/utils/balancer.py +776 -0
  1411. angr/utils/bits.py +46 -0
  1412. angr/utils/constants.py +9 -0
  1413. angr/utils/cowdict.py +63 -0
  1414. angr/utils/cpp.py +17 -0
  1415. angr/utils/doms.py +150 -0
  1416. angr/utils/dynamic_dictlist.py +89 -0
  1417. angr/utils/endness.py +18 -0
  1418. angr/utils/enums_conv.py +97 -0
  1419. angr/utils/env.py +12 -0
  1420. angr/utils/formatting.py +128 -0
  1421. angr/utils/funcid.py +244 -0
  1422. angr/utils/graph.py +981 -0
  1423. angr/utils/lazy_import.py +13 -0
  1424. angr/utils/library.py +236 -0
  1425. angr/utils/loader.py +55 -0
  1426. angr/utils/mp.py +66 -0
  1427. angr/utils/orderedset.py +74 -0
  1428. angr/utils/ssa/__init__.py +455 -0
  1429. angr/utils/ssa/tmp_uses_collector.py +23 -0
  1430. angr/utils/ssa/vvar_uses_collector.py +36 -0
  1431. angr/utils/strings.py +20 -0
  1432. angr/utils/tagged_interval_map.py +112 -0
  1433. angr/utils/timing.py +74 -0
  1434. angr/utils/types.py +193 -0
  1435. angr/utils/vex.py +11 -0
  1436. angr/vaults.py +367 -0
  1437. angr-9.2.192.dist-info/METADATA +112 -0
  1438. angr-9.2.192.dist-info/RECORD +1442 -0
  1439. angr-9.2.192.dist-info/WHEEL +6 -0
  1440. angr-9.2.192.dist-info/entry_points.txt +2 -0
  1441. angr-9.2.192.dist-info/licenses/LICENSE +27 -0
  1442. angr-9.2.192.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1224 @@
1
+ # pylint:disable=wrong-import-position,broad-exception-caught,ungrouped-imports,import-outside-toplevel
2
+ from __future__ import annotations
3
+ import pathlib
4
+ import copy
5
+ from types import FunctionType
6
+ from typing import Any, TYPE_CHECKING
7
+ from collections.abc import Iterable
8
+ import logging
9
+
10
+ import networkx
11
+
12
+ import angr
13
+ from angr import ailment
14
+ from angr.ailment.block import Block
15
+ from angr.analyses.decompiler.counters.call_counter import AILBlockCallCounter
16
+ from angr.analyses.decompiler.peephole_optimizations.base import (
17
+ PeepholeOptimizationExprBase,
18
+ PeepholeOptimizationMultiStmtBase,
19
+ )
20
+ from angr.utils.ail import is_phi_assignment
21
+ from .seq_to_blocks import SequenceToBlocks
22
+
23
+ if TYPE_CHECKING:
24
+ from angr.ailment import Address
25
+
26
+ _l = logging.getLogger(__name__)
27
+
28
+
29
+ def remove_last_statement(node):
30
+ stmt = None
31
+
32
+ if type(node) is CodeNode:
33
+ stmt = remove_last_statement(node.node)
34
+ elif type(node) is ailment.Block:
35
+ stmt = node.statements[-1]
36
+ node.statements = node.statements[:-1]
37
+ elif type(node) is MultiNode or type(node) is SequenceNode:
38
+ if node.nodes:
39
+ stmt = remove_last_statement(node.nodes[-1])
40
+ if BaseNode.test_empty_node(node.nodes[-1]):
41
+ node.nodes = node.nodes[:-1]
42
+ elif type(node) is ConditionNode:
43
+ if node.true_node is None and node.false_node is not None:
44
+ stmt = remove_last_statement(node.false_node)
45
+ elif node.true_node is not None and node.false_node is None:
46
+ stmt = remove_last_statement(node.true_node)
47
+ else:
48
+ raise NotImplementedError("More than one last statement exist")
49
+ elif type(node) is LoopNode:
50
+ stmt = remove_last_statement(node.sequence_node)
51
+ else:
52
+ raise NotImplementedError(type(node))
53
+
54
+ return stmt
55
+
56
+
57
+ def remove_last_statements(node) -> bool:
58
+ if type(node) is CodeNode:
59
+ return remove_last_statements(node.node)
60
+ if type(node) is ailment.Block:
61
+ if not node.statements:
62
+ return False
63
+ node.statements = node.statements[:-1]
64
+ return True
65
+ if type(node) is MultiNode or type(node) is SequenceNode:
66
+ if node.nodes:
67
+ remove_last_statements(node.nodes[-1])
68
+ if BaseNode.test_empty_node(node.nodes[-1]):
69
+ node.nodes = node.nodes[:-1]
70
+ return True
71
+ return False
72
+ if type(node) is ConditionNode:
73
+ r = False
74
+ if node.true_node is None and node.false_node is not None:
75
+ r |= remove_last_statements(node.false_node)
76
+ if node.true_node is not None and node.false_node is None:
77
+ r |= remove_last_statements(node.true_node)
78
+ return r
79
+ if type(node) is LoopNode:
80
+ return remove_last_statements(node.sequence_node)
81
+ raise NotImplementedError(type(node))
82
+
83
+
84
+ def append_statement(node, stmt):
85
+ if type(node) is CodeNode:
86
+ append_statement(node.node, stmt)
87
+ return
88
+ if type(node) is ailment.Block:
89
+ node.statements.append(stmt)
90
+ return
91
+ if type(node) is MultiNode:
92
+ if node.nodes:
93
+ append_statement(node.nodes[-1], stmt)
94
+ else:
95
+ raise NotImplementedError("MultiNode without nodes")
96
+ return
97
+ if type(node) is SequenceNode:
98
+ if node.nodes:
99
+ append_statement(node.nodes[-1], stmt)
100
+ else:
101
+ raise NotImplementedError("SequenceNode without nodes")
102
+ return
103
+
104
+ raise NotImplementedError(type(node))
105
+
106
+
107
+ def replace_last_statement(node, old_stmt, new_stmt):
108
+ if type(node) is CodeNode:
109
+ replace_last_statement(node.node, old_stmt, new_stmt)
110
+ return
111
+ if type(node) is ailment.Block:
112
+ if node.statements[-1] is old_stmt:
113
+ node.statements[-1] = new_stmt
114
+ return
115
+ if type(node) is MultiNode:
116
+ if node.nodes:
117
+ replace_last_statement(node.nodes[-1], old_stmt, new_stmt)
118
+ return
119
+ if type(node) is SequenceNode:
120
+ if node.nodes:
121
+ replace_last_statement(node.nodes[-1], old_stmt, new_stmt)
122
+ return
123
+ if type(node) is ConditionNode:
124
+ if node.true_node is not None:
125
+ replace_last_statement(node.true_node, old_stmt, new_stmt)
126
+ if node.false_node is not None:
127
+ replace_last_statement(node.false_node, old_stmt, new_stmt)
128
+ return
129
+
130
+ raise NotImplementedError(type(node))
131
+
132
+
133
+ def extract_jump_targets(stmt):
134
+ """
135
+ Extract concrete goto targets from a Jump or a ConditionalJump statement.
136
+
137
+ :param stmt: The statement to analyze.
138
+ :return: A list of known concrete jump targets.
139
+ :rtype: list
140
+ """
141
+
142
+ targets = []
143
+
144
+ if isinstance(stmt, ailment.Stmt.Jump):
145
+ if isinstance(stmt.target, ailment.Expr.Const):
146
+ targets.append(stmt.target.value)
147
+ elif isinstance(stmt, ailment.Stmt.ConditionalJump):
148
+ if isinstance(stmt.true_target, ailment.Expr.Const):
149
+ targets.append(stmt.true_target.value)
150
+ if isinstance(stmt.false_target, ailment.Expr.Const):
151
+ targets.append(stmt.false_target.value)
152
+
153
+ return targets
154
+
155
+
156
+ def switch_extract_cmp_bounds(
157
+ last_stmt: ailment.Stmt.ConditionalJump | ailment.Stmt.Statement,
158
+ ) -> tuple[Any, int, int] | None:
159
+ """
160
+ Check the last statement of the switch-case header node, and extract lower+upper bounds for the comparison.
161
+
162
+ :param last_stmt: The last statement of the switch-case header node.
163
+ :return: A tuple of (comparison expression, lower bound, upper bound), or None
164
+ """
165
+
166
+ if not isinstance(last_stmt, ailment.Stmt.ConditionalJump):
167
+ return None
168
+ return switch_extract_cmp_bounds_from_condition(last_stmt.condition)
169
+
170
+
171
+ def switch_extract_cmp_bounds_from_condition(cond: ailment.Expr.Expression) -> tuple[Any, int, int] | None:
172
+ # TODO: Add more operations
173
+ if isinstance(cond, ailment.Expr.BinaryOp):
174
+ op = cond.op
175
+ op0, op1 = cond.operands
176
+ if not isinstance(op1, ailment.Expr.Const):
177
+ # swap them
178
+ match op:
179
+ case "CmpLE":
180
+ op = "CmpGE"
181
+ case "CmpLT":
182
+ op = "CmpGT"
183
+ case "CmpGE":
184
+ op = "CmpLE"
185
+ case "CmpGT":
186
+ op = "CmpLT"
187
+ case _:
188
+ # unsupported
189
+ return None
190
+ op0, op1 = op1, op0
191
+
192
+ if op in {"CmpLE", "CmpLT"}:
193
+ if not (isinstance(op1, ailment.Expr.Const) and isinstance(op1.value, int)):
194
+ return None
195
+ cmp_ub = op1.value if op == "CmpLE" else op1.value - 1
196
+ cmp_lb = 0
197
+ cmp = op0
198
+ if (
199
+ isinstance(cmp, ailment.Expr.BinaryOp)
200
+ and cmp.op == "Sub"
201
+ and isinstance(cmp.operands[1], ailment.Expr.Const)
202
+ and isinstance(cmp.operands[1].value, int)
203
+ ):
204
+ cmp_ub += cmp.operands[1].value
205
+ cmp_lb += cmp.operands[1].value
206
+ cmp = cmp.operands[0]
207
+ return cmp, cmp_lb, cmp_ub
208
+
209
+ if op in {"CmpGE", "CmpGT"}:
210
+ # We got the negated condition here
211
+ # CmpGE -> CmpLT
212
+ # CmpGT -> CmpLE
213
+ if not (isinstance(op1, ailment.Expr.Const) and isinstance(op1.value, int)):
214
+ return None
215
+ cmp_ub = op1.value if op == "CmpGT" else op1.value - 1
216
+ cmp_lb = 0
217
+ cmp = op0
218
+ if (
219
+ isinstance(cmp, ailment.Expr.BinaryOp)
220
+ and cmp.op == "Sub"
221
+ and isinstance(cmp.operands[1], ailment.Expr.Const)
222
+ and isinstance(cmp.operands[1].value, int)
223
+ ):
224
+ cmp_ub += cmp.operands[1].value
225
+ cmp_lb += cmp.operands[1].value
226
+ cmp = cmp.operands[0]
227
+ return cmp, cmp_lb, cmp_ub
228
+
229
+ return None
230
+
231
+
232
+ def switch_extract_switch_expr_from_jump_target(target: ailment.Expr.Expression) -> ailment.Expr.Expression | None:
233
+ """
234
+ Extract the switch expression from the indirect jump target expression.
235
+
236
+ :param target: The target of the indirect jump statement.
237
+ :return: The extracted expression if successful, or None otherwise.
238
+ """
239
+
240
+ # e.g.: Jump (Conv(32->64, (Load(addr=((0x140000000<64> + (vvar_229{reg 80} * 0x4<64>)) + 0x2290<64>),
241
+ # size=4,
242
+ # endness=Iend_LE
243
+ # ) + 0x140000000<32>)))
244
+
245
+ found_load = False
246
+ while True:
247
+ if isinstance(target, ailment.Expr.Convert):
248
+ if target.from_bits < target.to_bits:
249
+ target = target.operand
250
+ else:
251
+ return None
252
+ elif isinstance(target, ailment.Expr.BinaryOp):
253
+ if target.op == "Add":
254
+ # it must be adding the target expr with a constant
255
+ if isinstance(target.operands[0], ailment.Expr.Const):
256
+ target = target.operands[1]
257
+ elif isinstance(target.operands[1], ailment.Expr.Const):
258
+ target = target.operands[0]
259
+ else:
260
+ return None
261
+ elif target.op == "Mul":
262
+ # it must be multiplying the target expr with a constant
263
+ if isinstance(target.operands[0], ailment.Expr.Const):
264
+ target = target.operands[1]
265
+ elif isinstance(target.operands[1], ailment.Expr.Const):
266
+ target = target.operands[0]
267
+ else:
268
+ return None
269
+ elif target.op == "And":
270
+ # it must be and-ing the target expr with a constant
271
+ if (
272
+ isinstance(target.operands[1], ailment.Expr.VirtualVariable)
273
+ and isinstance(target.operands[0], ailment.Expr.Const)
274
+ ) or (
275
+ isinstance(target.operands[0], ailment.Expr.VirtualVariable)
276
+ and isinstance(target.operands[1], ailment.Expr.Const)
277
+ ):
278
+ break
279
+ return None
280
+ else:
281
+ return None
282
+ elif isinstance(target, ailment.Expr.Load):
283
+ # we want the address!
284
+ found_load = True
285
+ target = target.addr
286
+ elif isinstance(target, ailment.Expr.VirtualVariable):
287
+ break
288
+ else:
289
+ return None
290
+ return target if found_load else None
291
+
292
+
293
+ def switch_extract_bitwiseand_jumptable_info(last_stmt: ailment.Stmt.Jump) -> tuple[Any, int, int] | None:
294
+ """
295
+ Check the last statement of the switch-case header node (whose address is loaded from a jump table and computed
296
+ using an index) and extract necessary information for rebuilding the switch-case construct.
297
+
298
+ An example of the statement:
299
+
300
+ Goto(Conv(32->s64, (
301
+ Load(addr=(0x4530e4<64> + (Conv(32->64, (Conv(64->32, vvar_287{reg 32}) & 0x3<32>)) * 0x4<64>)),
302
+ size=4, endness=Iend_LE) + 0x4530e4<32>))
303
+ )
304
+
305
+ Another example:
306
+
307
+ Load(addr=(((vvar_9{reg 36} & 0x3<32>) * 0x4<32>) + 0x42cd28<32>), size=4, endness=Iend_LE)
308
+
309
+ :param last_stmt: The last statement of the switch-case header node.
310
+ :return: A tuple of (index expression, lower bound, upper bound), or None
311
+ """
312
+
313
+ if not isinstance(last_stmt, ailment.Stmt.Jump):
314
+ return None
315
+
316
+ # unpack the target expression
317
+ target = last_stmt.target
318
+ jump_addr_offset = None
319
+ jumptable_load_addr = None
320
+ while True:
321
+ if isinstance(target, ailment.Expr.Convert) and (
322
+ (target.from_bits == 32 and target.to_bits == 64) or (target.from_bits == 16 and target.to_bits == 32)
323
+ ):
324
+ target = target.operand
325
+ continue
326
+ if isinstance(target, ailment.Expr.BinaryOp) and target.op == "Add":
327
+ if isinstance(target.operands[0], ailment.Expr.Const) and isinstance(target.operands[1], ailment.Expr.Load):
328
+ jump_addr_offset = target.operands[0].value
329
+ jumptable_load_addr = target.operands[1].addr
330
+ break
331
+ if isinstance(target.operands[1], ailment.Expr.Const) and isinstance(target.operands[0], ailment.Expr.Load):
332
+ jump_addr_offset = target.operands[1].value
333
+ jumptable_load_addr = target.operands[0].addr
334
+ break
335
+ return None
336
+ if isinstance(target, ailment.Expr.Const):
337
+ return None
338
+ if isinstance(target, ailment.Expr.Load):
339
+ jumptable_load_addr = target.addr
340
+ jump_addr_offset = 0
341
+ break
342
+ break
343
+
344
+ if jump_addr_offset is None or jumptable_load_addr is None:
345
+ return None
346
+
347
+ # parse jumptable_load_addr
348
+ jumptable_offset = None
349
+ jumptable_base_addr = None
350
+ if isinstance(jumptable_load_addr, ailment.Expr.BinaryOp) and jumptable_load_addr.op == "Add":
351
+ if isinstance(jumptable_load_addr.operands[0], ailment.Expr.Const):
352
+ jumptable_base_addr = jumptable_load_addr.operands[0]
353
+ jumptable_offset = jumptable_load_addr.operands[1]
354
+ elif isinstance(jumptable_load_addr.operands[1], ailment.Expr.Const):
355
+ jumptable_offset = jumptable_load_addr.operands[0]
356
+ jumptable_base_addr = jumptable_load_addr.operands[1]
357
+
358
+ if jumptable_offset is None or jumptable_base_addr is None:
359
+ return None
360
+
361
+ # parse jumptable_offset
362
+ expr = jumptable_offset
363
+ coeff = None
364
+ index_expr = None
365
+ lb = None
366
+ ub: int | None = None
367
+ while expr is not None:
368
+ if isinstance(expr, ailment.Expr.BinaryOp):
369
+ if expr.op == "Mul":
370
+ if isinstance(expr.operands[1], ailment.Expr.Const):
371
+ coeff = expr.operands[1].value
372
+ expr = expr.operands[0]
373
+ elif isinstance(expr.operands[0], ailment.Expr.Const):
374
+ coeff = expr.operands[0].value
375
+ expr = expr.operands[1]
376
+ else:
377
+ return None
378
+ elif expr.op == "And":
379
+ masks = {0x1, 0x3, 0x7, 0xF, 0x1F, 0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF}
380
+ if isinstance(expr.operands[1], ailment.Expr.Const) and expr.operands[1].value in masks:
381
+ lb = 0
382
+ ub = expr.operands[1].value # type:ignore
383
+ index_expr = expr
384
+ break
385
+ if isinstance(expr.operands[0], ailment.Expr.Const) and expr.operands[1].value in masks:
386
+ lb = 0
387
+ ub = expr.operands[0].value # type:ignore
388
+ index_expr = expr
389
+ break
390
+ return None
391
+ else:
392
+ return None
393
+ elif isinstance(expr, ailment.Expr.Convert):
394
+ if expr.is_signed is False:
395
+ expr = expr.operand
396
+ else:
397
+ return None
398
+ else:
399
+ break
400
+
401
+ if coeff is not None and index_expr is not None and lb is not None and ub is not None:
402
+ return index_expr, lb, ub
403
+ return None
404
+
405
+
406
+ def get_ast_subexprs(claripy_ast):
407
+ queue = [claripy_ast]
408
+ while queue:
409
+ ast = queue.pop(0)
410
+ if ast.op == "And":
411
+ queue += ast.args[1:]
412
+ yield ast.args[0]
413
+ else:
414
+ yield ast
415
+
416
+
417
+ def insert_node(parent, insert_location: str, node, node_idx: int, label=None):
418
+ if insert_location not in {"before", "after"}:
419
+ raise ValueError('"insert_location" must be either "before" or "after"')
420
+
421
+ if isinstance(parent, SequenceNode):
422
+ if insert_location == "before":
423
+ parent.nodes.insert(node_idx, node)
424
+ else: # if insert_location == "after":
425
+ parent.nodes.insert(node_idx + 1, node)
426
+ elif isinstance(parent, CodeNode):
427
+ # Make a new sequence node
428
+ if insert_location == "before":
429
+ seq = SequenceNode(parent.addr, nodes=[node, parent.node])
430
+ else: # if insert_location == "after":
431
+ seq = SequenceNode(parent.addr, nodes=[parent.node, node])
432
+ parent.node = seq
433
+ elif isinstance(parent, MultiNode):
434
+ if insert_location == "before":
435
+ parent.nodes.insert(node_idx, node)
436
+ else:
437
+ parent.nodes.insert(node_idx + 1, node)
438
+ elif isinstance(parent, ConditionNode):
439
+ if node_idx == 0:
440
+ # true node
441
+ if not isinstance(parent.true_node, SequenceNode):
442
+ if parent.true_node is None:
443
+ parent.true_node = SequenceNode(parent.addr, nodes=[])
444
+ else:
445
+ parent.true_node = SequenceNode(parent.true_node.addr, nodes=[parent.true_node])
446
+ insert_node(parent.true_node, insert_location, node, 0)
447
+ else:
448
+ # false node
449
+ if not isinstance(parent.false_node, SequenceNode):
450
+ if parent.false_node is None:
451
+ parent.false_node = SequenceNode(parent.addr, nodes=[])
452
+ else:
453
+ parent.false_node = SequenceNode(parent.false_node.addr, nodes=[parent.false_node])
454
+ insert_node(parent.false_node, insert_location, node, 0)
455
+ elif isinstance(parent, CascadingConditionNode):
456
+ cond, child_node = parent.condition_and_nodes[node_idx]
457
+ if not isinstance(child_node, SequenceNode):
458
+ child_node = SequenceNode(child_node.addr, nodes=[child_node])
459
+ parent.condition_and_nodes[node_idx] = (cond, child_node)
460
+ insert_node(child_node, insert_location, node, 0)
461
+ elif isinstance(parent, SwitchCaseNode):
462
+ # note that this case will be hit only when the parent node is not a container, such as SequenceNode or
463
+ # MultiNode. we always need to create a new SequenceNode and replace the original node in place.
464
+
465
+ if label == "switch_expr":
466
+ raise TypeError("You cannot insert a node after an expression.")
467
+ if label == "case":
468
+ # node_idx is the case number.
469
+ if insert_location == "after":
470
+ new_nodes = [parent.cases[node_idx], node]
471
+ elif insert_location == "before":
472
+ new_nodes = [node, parent.cases[node_idx]]
473
+ else:
474
+ raise TypeError(f'Unsupported insert_location value "{insert_location}".')
475
+ seq = SequenceNode(new_nodes[0].addr, nodes=new_nodes)
476
+ parent.cases[node_idx] = seq
477
+ elif label == "default":
478
+ if insert_location == "after":
479
+ new_nodes = [parent.default_node, node]
480
+ elif insert_location == "before":
481
+ new_nodes = [node, parent.default_node]
482
+ else:
483
+ raise TypeError(f"Unsupported 'insert_location' value {insert_location!r}.")
484
+ seq = SequenceNode(new_nodes[0].addr, nodes=new_nodes)
485
+ parent.default_node = seq
486
+ else:
487
+ raise TypeError(
488
+ f'Unsupported label value "{label}". Must be one of the following: switch_expr, case, ' f"default."
489
+ )
490
+ elif isinstance(parent, LoopNode):
491
+ if label == "condition":
492
+ raise ValueError("Cannot insert nodes into a condition expression.")
493
+ if label == "body":
494
+ if not isinstance(parent.sequence_node, SequenceNode):
495
+ parent.sequence_node = SequenceNode(parent.sequence_node.addr, nodes=[parent.sequence_node])
496
+ insert_node(parent.sequence_node, insert_location, node, node_idx)
497
+ else:
498
+ raise NotImplementedError(label)
499
+ else:
500
+ raise NotImplementedError(type(parent))
501
+
502
+
503
+ def _merge_ail_nodes(graph, node_a: ailment.Block, node_b: ailment.Block) -> ailment.Block:
504
+ in_edges = list(graph.in_edges(node_a, data=True))
505
+ out_edges = list(graph.out_edges(node_b, data=True))
506
+
507
+ a_ogs = graph.nodes[node_a].get("original_nodes", [])
508
+ b_ogs = graph.nodes[node_b].get("original_nodes", [])
509
+ new_node = node_a.copy() if node_a.addr <= node_b.addr else node_b.copy()
510
+ old_node = node_b if new_node == node_a else node_a
511
+ # remove jumps in the middle of nodes when merging
512
+ if new_node.statements and isinstance(new_node.statements[-1], ailment.Stmt.Jump):
513
+ new_node.statements = new_node.statements[:-1]
514
+ new_node.statements += old_node.statements
515
+ new_node.original_size += old_node.original_size
516
+
517
+ graph.remove_node(node_a)
518
+ graph.remove_node(node_b)
519
+
520
+ if new_node is not None:
521
+ graph.add_node(new_node, original_nodes=a_ogs + b_ogs)
522
+ for src, _, data in in_edges:
523
+ if src is node_b:
524
+ src = new_node
525
+ graph.add_edge(src, new_node, **data)
526
+
527
+ for _, dst, data in out_edges:
528
+ if dst is node_a:
529
+ dst = new_node
530
+ graph.add_edge(new_node, dst, **data)
531
+
532
+ return new_node
533
+
534
+
535
+ def to_ail_supergraph(transition_graph: networkx.DiGraph, allow_fake=False) -> networkx.DiGraph:
536
+ """
537
+ Takes an AIL graph and converts it into a AIL graph that treats calls and redundant jumps
538
+ as parts of a bigger block instead of transitions. Calls to returning functions do not terminate basic blocks.
539
+
540
+ Based on region_identifier super_graph
541
+
542
+ :return: A converted super transition graph
543
+ """
544
+ # make a copy of the graph
545
+ transition_graph = networkx.DiGraph(transition_graph)
546
+ networkx.set_node_attributes(transition_graph, {node: [node] for node in transition_graph.nodes}, "original_nodes")
547
+
548
+ while True:
549
+ for src, dst, data in transition_graph.edges(data=True):
550
+ type_ = data.get("type", None)
551
+
552
+ if len(list(transition_graph.successors(src))) == 1 and len(list(transition_graph.predecessors(dst))) == 1:
553
+ # calls in the middle of blocks OR boring jumps
554
+ if (type_ == "fake_return") or (src.addr + src.original_size == dst.addr) or allow_fake:
555
+ _merge_ail_nodes(transition_graph, src, dst)
556
+ break
557
+
558
+ # calls to functions with no return
559
+ elif type_ == "call":
560
+ transition_graph.remove_node(dst)
561
+ break
562
+ else:
563
+ break
564
+
565
+ return transition_graph
566
+
567
+
568
+ def is_empty_node(node) -> bool:
569
+ if isinstance(node, ailment.Block):
570
+ return not node.statements
571
+ if isinstance(node, MultiNode):
572
+ return all(is_empty_node(n) for n in node.nodes)
573
+ if isinstance(node, SequenceNode):
574
+ return all(is_empty_node(n) for n in node.nodes)
575
+ return False
576
+
577
+
578
+ def is_empty_or_label_only_node(node) -> bool:
579
+ if isinstance(node, ailment.Block):
580
+ return not has_nonlabel_statements(node)
581
+ if isinstance(node, MultiNode):
582
+ return all(is_empty_or_label_only_node(n) for n in node.nodes)
583
+ if isinstance(node, SequenceNode):
584
+ return all(is_empty_or_label_only_node(n) for n in node.nodes)
585
+ return False
586
+
587
+
588
+ def has_nonlabel_statements(block: ailment.Block) -> bool:
589
+ return bool(block.statements and any(not isinstance(stmt, ailment.Stmt.Label) for stmt in block.statements))
590
+
591
+
592
+ def has_nonlabel_nonphi_statements(block: ailment.Block) -> bool:
593
+ return bool(
594
+ block.statements
595
+ and any(not (isinstance(stmt, ailment.Stmt.Label) or is_phi_assignment(stmt)) for stmt in block.statements)
596
+ )
597
+
598
+
599
+ def first_nonlabel_statement(block: ailment.Block | MultiNode) -> ailment.Stmt.Statement | None:
600
+ if isinstance(block, MultiNode):
601
+ for n in block.nodes:
602
+ stmt = first_nonlabel_statement(n)
603
+ if stmt is not None:
604
+ return stmt
605
+ return None
606
+
607
+ for stmt in block.statements:
608
+ if not isinstance(stmt, ailment.Stmt.Label):
609
+ return stmt
610
+ return None
611
+
612
+
613
+ def first_nonlabel_statement_id(block: ailment.Block) -> int | None:
614
+ for idx, stmt in enumerate(block.statements):
615
+ if not isinstance(stmt, ailment.Stmt.Label):
616
+ return idx
617
+ return len(block.statements)
618
+
619
+
620
+ def first_nonlabel_nonphi_statement(block: ailment.Block | MultiNode) -> ailment.Stmt.Statement | None:
621
+ if isinstance(block, MultiNode):
622
+ for n in block.nodes:
623
+ stmt = first_nonlabel_nonphi_statement(n)
624
+ if stmt is not None:
625
+ return stmt
626
+ return None
627
+
628
+ for stmt in block.statements:
629
+ if not (isinstance(stmt, ailment.Stmt.Label) or is_phi_assignment(stmt)):
630
+ return stmt
631
+ return None
632
+
633
+
634
+ def last_nonlabel_statement(block: ailment.Block) -> ailment.Stmt.Statement | None:
635
+ for stmt in reversed(block.statements):
636
+ if not isinstance(stmt, ailment.Stmt.Label):
637
+ return stmt
638
+ return None
639
+
640
+
641
+ def last_node(node: BaseNode) -> BaseNode | ailment.Block | None:
642
+ """
643
+ Get the last node in a sequence or code node.
644
+ """
645
+ if isinstance(node, CodeNode):
646
+ return last_node(node.node)
647
+ if isinstance(node, SequenceNode):
648
+ if not node.nodes:
649
+ return None
650
+ return last_node(node.nodes[-1])
651
+ return node
652
+
653
+
654
+ def first_nonlabel_node(seq: SequenceNode) -> BaseNode | ailment.Block | None:
655
+ for node in seq.nodes:
656
+ inner_node = node.node if isinstance(node, CodeNode) else node
657
+ if isinstance(inner_node, ailment.Block) and not has_nonlabel_statements(inner_node):
658
+ continue
659
+ return node
660
+ return None
661
+
662
+
663
+ def first_nonlabel_nonphi_node(seq: SequenceNode) -> BaseNode | ailment.Block | None:
664
+ for node in seq.nodes:
665
+ inner_node = node.node if isinstance(node, CodeNode) else node
666
+ if isinstance(inner_node, ailment.Block) and not has_nonlabel_nonphi_statements(inner_node):
667
+ continue
668
+ return node
669
+ return None
670
+
671
+
672
+ def remove_labels(graph: networkx.DiGraph):
673
+ new_graph = networkx.DiGraph()
674
+ nodes_map = {}
675
+ for node in graph:
676
+ node_copy = node.copy()
677
+ node_copy.statements = [stmt for stmt in node_copy.statements if not isinstance(stmt, ailment.Stmt.Label)]
678
+ nodes_map[node] = node_copy
679
+
680
+ for old_node in graph.nodes:
681
+ new_graph.add_node(nodes_map[old_node])
682
+
683
+ for src, dst, data in graph.edges(data=True):
684
+ new_graph.add_edge(nodes_map[src], nodes_map[dst], **data)
685
+
686
+ return new_graph
687
+
688
+
689
+ def add_labels(graph: networkx.DiGraph):
690
+ new_graph = networkx.DiGraph()
691
+ nodes_map = {}
692
+ for node in graph:
693
+ lbl = ailment.Stmt.Label(None, f"LABEL_{node.addr:x}", ins_addr=node.addr, block_idx=node.idx)
694
+ node_copy = node.copy()
695
+ node_copy.statements = [lbl, *node_copy.statements]
696
+ nodes_map[node] = node_copy
697
+
698
+ for old_node in graph.nodes:
699
+ new_graph.add_node(nodes_map[old_node])
700
+
701
+ for src, dst in graph.edges:
702
+ new_graph.add_edge(nodes_map[src], nodes_map[dst])
703
+
704
+ return new_graph
705
+
706
+
707
+ def update_labels(graph: networkx.DiGraph):
708
+ """
709
+ A utility function to recreate the labels for every node in an AIL graph. This useful when you are working with
710
+ a graph where only _some_ of the nodes have labels.
711
+ """
712
+ return add_labels(remove_labels(graph))
713
+
714
+
715
+ def _flatten_structured_node(packed_node: SequenceNode | MultiNode) -> list[ailment.Block]:
716
+ if not packed_node or not packed_node.nodes:
717
+ return []
718
+
719
+ blocks = []
720
+ if packed_node.nodes is not None:
721
+ for _node in packed_node.nodes:
722
+ if isinstance(_node, (SequenceNode, MultiNode)):
723
+ blocks += _flatten_structured_node(_node)
724
+ else:
725
+ blocks.append(_node)
726
+
727
+ return blocks
728
+
729
+
730
+ def _find_node_in_graph(node: ailment.Block, graph: networkx.DiGraph) -> ailment.Block | None:
731
+ for bb in graph:
732
+ if isinstance(bb, ailment.Block) and bb.addr == node.addr and bb.idx == node.idx:
733
+ return bb
734
+ return None
735
+
736
+
737
+ def structured_node_has_multi_predecessors(
738
+ node: SequenceNode | MultiNode | ailment.Block, graph: networkx.DiGraph
739
+ ) -> bool:
740
+ if graph is None:
741
+ return False
742
+
743
+ first_block = None
744
+ if isinstance(node, (SequenceNode, MultiNode)) and node.nodes:
745
+ flat_blocks = _flatten_structured_node(node)
746
+ node = flat_blocks[0]
747
+
748
+ if isinstance(node, ailment.Block):
749
+ first_block = node
750
+
751
+ if first_block is not None:
752
+ graph_node = _find_node_in_graph(first_block, graph)
753
+ if graph_node is not None:
754
+ return len(list(graph.predecessors(graph_node))) > 1
755
+
756
+ return False
757
+
758
+
759
+ def structured_node_is_simple_return(
760
+ node: SequenceNode | MultiNode, graph: networkx.DiGraph, use_packed_successors=False
761
+ ) -> bool:
762
+ """
763
+ Will check if a "simple return" is contained within the node a simple returns looks like this:
764
+ if (cond) {
765
+ // simple return
766
+ ...
767
+ return 0;
768
+ }
769
+ ...
770
+
771
+ Returns true on any block ending in linear statements and a return.
772
+ """
773
+ # sanity check: we need a graph to understand returning blocks
774
+ if graph is None:
775
+ return False
776
+
777
+ last_block = None
778
+ if isinstance(node, (SequenceNode, MultiNode)) and node.nodes:
779
+ flat_blocks = _flatten_structured_node(node)
780
+ if all(isinstance(block, ailment.Block) for block in flat_blocks):
781
+ last_block = flat_blocks[-1]
782
+ elif isinstance(node, ailment.Block):
783
+ last_block = node
784
+
785
+ valid_last_stmt = last_block is not None
786
+ if last_block is not None and last_block.statements:
787
+ valid_last_stmt = not isinstance(last_block.statements[-1], (ailment.Stmt.ConditionalJump, ailment.Stmt.Jump))
788
+
789
+ if use_packed_successors:
790
+ last_block = node
791
+
792
+ if valid_last_stmt:
793
+ # note that the block may not be the same block in the AIL graph post dephication. we must find the block again
794
+ # in the graph.
795
+ assert isinstance(last_block, ailment.Block)
796
+ last_graph_block = _find_node_in_graph(last_block, graph)
797
+ if last_graph_block is not None:
798
+ succs = list(graph.successors(last_graph_block))
799
+ return not succs or succs == [last_graph_block]
800
+ return False
801
+
802
+
803
+ def structured_node_is_simple_return_strict(node: BaseNode | SequenceNode | MultiNode | ailment.Block) -> bool:
804
+ """
805
+ Returns True iff the node exclusively contains a return statement.
806
+ """
807
+ if isinstance(node, (SequenceNode, MultiNode)) and node.nodes:
808
+ flat_blocks = _flatten_structured_node(node)
809
+ if len(flat_blocks) != 1:
810
+ return False
811
+ node = flat_blocks[-1]
812
+
813
+ return (
814
+ isinstance(node, ailment.Block)
815
+ and len(node.statements) == 1
816
+ and isinstance(node.statements[0], ailment.Stmt.Return)
817
+ )
818
+
819
+
820
+ def is_statement_terminating(stmt: ailment.statement.Statement, functions) -> bool:
821
+ if isinstance(stmt, ailment.Stmt.Return):
822
+ return True
823
+ if isinstance(stmt, ailment.Stmt.Call) and isinstance(stmt.target, ailment.Expr.Const):
824
+ # is it calling a non-returning function?
825
+ target_func_addr = stmt.target.value
826
+ try:
827
+ func = functions.get_by_addr(target_func_addr)
828
+ return func.returning is False
829
+ except KeyError:
830
+ pass
831
+ return False
832
+
833
+
834
+ class _PeepholeExprsWalker(ailment.AILBlockRewriter):
835
+ """
836
+ Walker to apply peephole optimizers (1)
837
+ """
838
+
839
+ def __init__(self, *args, expr_opts: list[PeepholeOptimizationExprBase], **kwargs):
840
+ self.expr_opts = expr_opts
841
+ self.any_update = False
842
+
843
+ super().__init__(*args, **kwargs)
844
+
845
+ def _handle_expr(
846
+ self, expr_idx: int, expr: ailment.Expr.Expression, stmt_idx: int, stmt: ailment.Stmt.Statement | None, block
847
+ ) -> ailment.Expression:
848
+ # process the expr
849
+ expr = super()._handle_expr(expr_idx, expr, stmt_idx, stmt, block)
850
+ old_expr = expr
851
+
852
+ redo = True
853
+ while redo:
854
+ redo = False
855
+ for expr_opt in self.expr_opts:
856
+ if isinstance(expr, expr_opt.expr_classes):
857
+ r = expr_opt.optimize(expr, stmt_idx=stmt_idx, block=block)
858
+ if r is not None and r is not expr:
859
+ expr = r
860
+ redo = True
861
+ break
862
+
863
+ if expr is not old_expr:
864
+ self.any_update = True
865
+
866
+ return expr
867
+
868
+
869
+ def peephole_optimize_exprs(block, expr_opts):
870
+ # run expression optimizers
871
+ walker = _PeepholeExprsWalker(expr_opts=expr_opts)
872
+ walker.walk(block)
873
+ return walker.any_update
874
+
875
+
876
+ class _PeepholeExprWalker(ailment.AILBlockRewriter):
877
+ """
878
+ Walker to apply peephole optimizers (2)
879
+ """
880
+
881
+ def __init__(self, *args, expr_opts: list[PeepholeOptimizationExprBase], **kwargs):
882
+ self.expr_opts = expr_opts
883
+
884
+ super().__init__(*args, **kwargs)
885
+
886
+ def _handle_expr(
887
+ self, expr_idx: int, expr: ailment.Expr.Expression, stmt_idx: int, stmt: ailment.Stmt.Statement | None, block
888
+ ) -> ailment.Expression:
889
+ redo = True
890
+ while redo:
891
+ redo = False
892
+ for expr_opt in self.expr_opts:
893
+ if isinstance(expr, expr_opt.expr_classes):
894
+ r = expr_opt.optimize(expr)
895
+ if r is not None and r is not expr:
896
+ expr = r
897
+ redo = True
898
+ break
899
+
900
+ # continue to process the expr
901
+ return super()._handle_expr(expr_idx, expr, stmt_idx, stmt, block)
902
+
903
+
904
+ def peephole_optimize_expr(expr: ailment.Expression, expr_opts: list[PeepholeOptimizationExprBase]):
905
+ # run expression optimizers
906
+ walker = _PeepholeExprWalker(expr_opts=expr_opts)
907
+ return walker.walk_expression(expr, 0, None, None)
908
+
909
+
910
+ def copy_graph(graph: networkx.DiGraph[Block]) -> networkx.DiGraph[Block]:
911
+ """
912
+ Copy AIL Graph.
913
+
914
+ :return: A copy of the AIl graph.
915
+ """
916
+ graph_copy = networkx.DiGraph()
917
+ block_mapping = {}
918
+ # copy all blocks
919
+ for block in graph.nodes():
920
+ new_block = copy.copy(block)
921
+ new_stmts = copy.copy(block.statements)
922
+ new_block.statements = new_stmts
923
+ block_mapping[block] = new_block
924
+ graph_copy.add_node(new_block)
925
+
926
+ # copy all edges
927
+ for src, dst, data in graph.edges(data=True):
928
+ new_src = block_mapping[src]
929
+ new_dst = block_mapping[dst]
930
+ graph_copy.add_edge(new_src, new_dst, **data)
931
+ return graph_copy
932
+
933
+
934
+ def peephole_optimize_stmts(block, stmt_opts):
935
+ any_update = False
936
+ statements = []
937
+
938
+ # run statement optimizers
939
+ # note that an optimizer may optionally edit or remove statements whose statement IDs are greater than stmt_idx
940
+ stmt_idx = 0
941
+ while stmt_idx < len(block.statements):
942
+ stmt = block.statements[stmt_idx]
943
+ old_stmt = stmt
944
+ redo = True
945
+ while redo:
946
+ redo = False
947
+ for opt in stmt_opts:
948
+ if isinstance(stmt, opt.stmt_classes):
949
+ r = opt.optimize(stmt, stmt_idx=stmt_idx, block=block)
950
+ if r is not None and r is not stmt:
951
+ stmt = r
952
+ if r == ():
953
+ # the statement is gone; no more redo
954
+ redo = False
955
+ break
956
+ redo = True
957
+ break
958
+
959
+ if stmt is not None and stmt is not old_stmt:
960
+ if stmt != ():
961
+ statements.append(stmt)
962
+ any_update = True
963
+ else:
964
+ statements.append(old_stmt)
965
+ stmt_idx += 1
966
+
967
+ return statements, any_update
968
+
969
+
970
+ def match_stmt_classes(all_stmts: list, idx: int, stmt_class_seq: Iterable[type]) -> bool:
971
+ for i, cls in enumerate(stmt_class_seq):
972
+ if idx + i >= len(all_stmts):
973
+ return False
974
+ if not isinstance(all_stmts[idx + i], cls):
975
+ return False
976
+ return True
977
+
978
+
979
+ def peephole_optimize_multistmts(block, stmt_opts: list[PeepholeOptimizationMultiStmtBase]):
980
+ any_update = False
981
+ statements = block.statements[::]
982
+
983
+ # run multi-statement optimizers
984
+ stmt_idx = 0
985
+ while stmt_idx < len(statements):
986
+ redo = True
987
+ while redo and stmt_idx < len(statements):
988
+ redo = False
989
+ for opt in stmt_opts:
990
+ matched = False
991
+ stmt_seq_len = None
992
+ for stmt_class_seq_or_method in opt.stmt_classes:
993
+ if isinstance(stmt_class_seq_or_method, FunctionType):
994
+ r = stmt_class_seq_or_method(statements, stmt_idx)
995
+ if r > 0:
996
+ stmt_seq_len = r
997
+ matched = True
998
+ break
999
+ elif match_stmt_classes(statements, stmt_idx, stmt_class_seq_or_method):
1000
+ stmt_seq_len = len(stmt_class_seq_or_method)
1001
+ matched = True
1002
+ break
1003
+
1004
+ if matched:
1005
+ assert stmt_seq_len is not None
1006
+ matched_stmts = statements[stmt_idx : stmt_idx + stmt_seq_len]
1007
+ r = opt.optimize(matched_stmts, stmt_idx=stmt_idx, block=block)
1008
+ if r is not None:
1009
+ # update statements
1010
+ statements = statements[:stmt_idx] + r + statements[stmt_idx + stmt_seq_len :]
1011
+ any_update = True
1012
+ redo = True
1013
+ break
1014
+
1015
+ # move on to the next statement
1016
+ stmt_idx += 1
1017
+
1018
+ return statements, any_update
1019
+
1020
+
1021
+ def decompile_functions(
1022
+ path,
1023
+ functions: list[int | str] | None = None,
1024
+ structurer: str | None = None,
1025
+ catch_errors: bool = False,
1026
+ show_casts: bool = True,
1027
+ base_address: int | None = None,
1028
+ preset: str | None = None,
1029
+ ) -> str:
1030
+ """
1031
+ Decompile a binary into a set of functions.
1032
+
1033
+ :param path: The path to the binary to decompile.
1034
+ :param functions: The functions to decompile. If None, all functions will be decompiled.
1035
+ :param structurer: The structuring algorithms to use.
1036
+ :param catch_errors: The structuring algorithms to use.
1037
+ :param show_casts: Whether to show casts in the decompiled output.
1038
+ :param base_address: The base address of the binary.
1039
+ :param preset: The configuration preset to use during decompilation.
1040
+ :return: The decompilation of all functions appended in order.
1041
+ """
1042
+ # delayed imports to avoid circular imports
1043
+ from angr.analyses.decompiler.decompilation_options import PARAM_TO_OPTION
1044
+ from angr.analyses.decompiler.structuring import DEFAULT_STRUCTURER
1045
+
1046
+ structurer = structurer or DEFAULT_STRUCTURER.NAME
1047
+
1048
+ path = pathlib.Path(path).resolve().absolute()
1049
+ # resolve loader args
1050
+ loader_main_opts_kwargs = {}
1051
+ if base_address is not None:
1052
+ loader_main_opts_kwargs["base_addr"] = base_address
1053
+ proj = angr.Project(path, auto_load_libs=False, main_opts=loader_main_opts_kwargs)
1054
+ cfg = proj.analyses.CFG(normalize=True, data_references=True)
1055
+ proj.analyses.CompleteCallingConventions(recover_variables=True, analyze_callsites=True)
1056
+
1057
+ # collect all functions when None are provided
1058
+ if functions is None:
1059
+ functions = sorted(cfg.kb.functions)
1060
+
1061
+ # normalize the functions that could be ints as names
1062
+ normalized_functions: list[int | str] = []
1063
+ for func in functions:
1064
+ try:
1065
+ normalized_name = int(func, 0) if isinstance(func, str) else func
1066
+ except ValueError:
1067
+ normalized_name = func
1068
+ normalized_functions.append(normalized_name)
1069
+ functions = normalized_functions
1070
+
1071
+ # verify that all functions exist
1072
+ for func in list(functions):
1073
+ if func not in cfg.functions:
1074
+ if catch_errors:
1075
+ _l.warning("Function %s does not exist in the CFG.", str(func))
1076
+ functions.remove(func)
1077
+ else:
1078
+ raise ValueError(f"Function {func} does not exist in the CFG.")
1079
+
1080
+ # decompile all functions
1081
+ decompilation = ""
1082
+ dec_options = [
1083
+ (PARAM_TO_OPTION["structurer_cls"], structurer),
1084
+ (PARAM_TO_OPTION["show_casts"], show_casts),
1085
+ ]
1086
+ for func in functions:
1087
+ f = cfg.functions[func]
1088
+ if f is None or f.is_plt or f.is_syscall or f.is_alignment or f.is_simprocedure:
1089
+ continue
1090
+
1091
+ exception_string = ""
1092
+ if not catch_errors:
1093
+ dec = proj.analyses.Decompiler(f, cfg=cfg, options=dec_options, preset=preset)
1094
+ else:
1095
+ try:
1096
+ # TODO: add a timeout
1097
+ dec = proj.analyses.Decompiler(f, cfg=cfg, options=dec_options, preset=preset)
1098
+ except Exception as e:
1099
+ exception_string = str(e).replace("\n", " ")
1100
+ dec = None
1101
+
1102
+ # do sanity checks on decompilation, skip checks if we already errored
1103
+ if not exception_string:
1104
+ if dec is None or not dec.codegen or not dec.codegen.text:
1105
+ exception_string = "Decompilation had no code output (failed in decompilation)"
1106
+ elif "{\n}" in dec.codegen.text:
1107
+ exception_string = "Decompilation outputted an empty function (failed in structuring)"
1108
+ elif structurer in ["dream", "combing"] and "goto" in dec.codegen.text:
1109
+ exception_string = "Decompilation outputted a goto for a Gotoless algorithm (failed in structuring)"
1110
+
1111
+ if exception_string:
1112
+ _l.critical("Failed to decompile %s because %s", repr(f), exception_string)
1113
+ decompilation += f"// [error: {func} | {exception_string}]\n"
1114
+ else:
1115
+ if dec is not None and dec.codegen is not None and dec.codegen.text is not None:
1116
+ decompilation += dec.codegen.text
1117
+ else:
1118
+ decompilation += "Invalid decompilation output"
1119
+ decompilation += "\n"
1120
+
1121
+ return decompilation
1122
+
1123
+
1124
+ def calls_in_graph(graph: networkx.DiGraph, consider_conditions: bool = False) -> int:
1125
+ """
1126
+ Counts the number of calls in a graph full of AIL Blocks
1127
+ """
1128
+ counter = AILBlockCallCounter(consider_conditions=consider_conditions)
1129
+ for node in graph.nodes:
1130
+ counter.walk(node)
1131
+
1132
+ return counter.calls
1133
+
1134
+
1135
+ def call_stmts_in_graph(
1136
+ graph: networkx.DiGraph, consider_conditions: bool = False
1137
+ ) -> tuple[list[tuple[tuple[Address, int], ailment.Stmt.Call]], list[tuple[tuple[Address, int], ailment.Stmt.Call]]]:
1138
+ """
1139
+ Return lists of call statements and call expressions in a given AIL graph.
1140
+ """
1141
+ counter = AILBlockCallCounter(consider_conditions=consider_conditions)
1142
+ for node in graph.nodes:
1143
+ counter.walk(node)
1144
+ # the above has an interface which includes nullable addresses because block can be none
1145
+ # but we always specify block here so we can ignore the Nones
1146
+ return counter.call_stmts, counter.call_exprs # type: ignore
1147
+
1148
+
1149
+ def has_addr_dups(graph: networkx.DiGraph[Block]) -> bool:
1150
+ return len({block.addr for block in graph}) != len(graph)
1151
+
1152
+
1153
+ def find_block_by_addr(graph: networkx.DiGraph, addr, insn_addr=False) -> ailment.Block:
1154
+ for block in graph.nodes():
1155
+ if insn_addr:
1156
+ for stmt in block.statements:
1157
+ if "ins_addr" in stmt.tags and stmt.tags["ins_addr"] == addr:
1158
+ return block
1159
+ else:
1160
+ if block.addr == addr:
1161
+ return block
1162
+
1163
+ raise ValueError("The block is not in the graph!")
1164
+
1165
+
1166
+ def find_block_by_addr_and_idx(graph: networkx.DiGraph, addr: int, idx: int | None) -> ailment.Block:
1167
+ for block in graph.nodes():
1168
+ if block.addr == addr and block.idx == idx:
1169
+ return block
1170
+
1171
+ raise ValueError("The block is not in the graph!")
1172
+
1173
+
1174
+ def sequence_to_blocks(seq: BaseNode) -> list[ailment.Block]:
1175
+ """
1176
+ Converts a sequence node (BaseNode) to a list of ailment blocks contained in it and all its children.
1177
+ """
1178
+ walker = SequenceToBlocks()
1179
+ walker.walk(seq)
1180
+ return walker.blocks
1181
+
1182
+
1183
+ def sequence_to_statements(
1184
+ seq: BaseNode, exclude=(ailment.statement.Jump, ailment.statement.Jump)
1185
+ ) -> list[ailment.statement.Statement]:
1186
+ """
1187
+ Converts a sequence node (BaseNode) to a list of ailment Statements contained in it and all its children.
1188
+ May exclude certain types of statements.
1189
+ """
1190
+ statements = []
1191
+ blocks = sequence_to_blocks(seq)
1192
+ block: ailment.Block
1193
+ for block in blocks:
1194
+ if not block.statements:
1195
+ continue
1196
+
1197
+ for stmt in block.statements:
1198
+ if isinstance(stmt, exclude):
1199
+ continue
1200
+ statements.append(stmt)
1201
+
1202
+ return statements
1203
+
1204
+
1205
+ def remove_edges_in_ailgraph(
1206
+ ail_graph: networkx.DiGraph, edges_to_remove: list[tuple[tuple[int, int | None], tuple[int, int | None]]]
1207
+ ) -> None:
1208
+ d = {(bb.addr, bb.idx): bb for bb in ail_graph}
1209
+ for src_addr, dst_addr in edges_to_remove:
1210
+ if src_addr in d and dst_addr in d and ail_graph.has_edge(d[src_addr], d[dst_addr]):
1211
+ ail_graph.remove_edge(d[src_addr], d[dst_addr])
1212
+
1213
+
1214
+ # delayed import
1215
+ from .structuring.structurer_nodes import (
1216
+ MultiNode,
1217
+ BaseNode,
1218
+ CodeNode,
1219
+ SequenceNode,
1220
+ ConditionNode,
1221
+ SwitchCaseNode,
1222
+ CascadingConditionNode,
1223
+ LoopNode,
1224
+ )