angr 9.2.158__cp310-abi3-manylinux2014_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.

Potentially problematic release.


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

Files changed (1393) hide show
  1. angr/__init__.py +363 -0
  2. angr/__main__.py +152 -0
  3. angr/analyses/__init__.py +113 -0
  4. angr/analyses/analysis.py +407 -0
  5. angr/analyses/backward_slice.py +686 -0
  6. angr/analyses/binary_optimizer.py +670 -0
  7. angr/analyses/bindiff.py +1512 -0
  8. angr/analyses/boyscout.py +76 -0
  9. angr/analyses/callee_cleanup_finder.py +74 -0
  10. angr/analyses/calling_convention/__init__.py +6 -0
  11. angr/analyses/calling_convention/calling_convention.py +1092 -0
  12. angr/analyses/calling_convention/fact_collector.py +636 -0
  13. angr/analyses/calling_convention/utils.py +60 -0
  14. angr/analyses/cdg.py +189 -0
  15. angr/analyses/cfg/__init__.py +23 -0
  16. angr/analyses/cfg/cfb.py +428 -0
  17. angr/analyses/cfg/cfg.py +74 -0
  18. angr/analyses/cfg/cfg_arch_options.py +95 -0
  19. angr/analyses/cfg/cfg_base.py +2902 -0
  20. angr/analyses/cfg/cfg_emulated.py +3447 -0
  21. angr/analyses/cfg/cfg_fast.py +5278 -0
  22. angr/analyses/cfg/cfg_fast_soot.py +662 -0
  23. angr/analyses/cfg/cfg_job_base.py +203 -0
  24. angr/analyses/cfg/indirect_jump_resolvers/__init__.py +28 -0
  25. angr/analyses/cfg/indirect_jump_resolvers/amd64_elf_got.py +62 -0
  26. angr/analyses/cfg/indirect_jump_resolvers/amd64_pe_iat.py +51 -0
  27. angr/analyses/cfg/indirect_jump_resolvers/arm_elf_fast.py +149 -0
  28. angr/analyses/cfg/indirect_jump_resolvers/const_resolver.py +186 -0
  29. angr/analyses/cfg/indirect_jump_resolvers/constant_value_manager.py +107 -0
  30. angr/analyses/cfg/indirect_jump_resolvers/default_resolvers.py +76 -0
  31. angr/analyses/cfg/indirect_jump_resolvers/jumptable.py +2367 -0
  32. angr/analyses/cfg/indirect_jump_resolvers/memload_resolver.py +81 -0
  33. angr/analyses/cfg/indirect_jump_resolvers/mips_elf_fast.py +286 -0
  34. angr/analyses/cfg/indirect_jump_resolvers/mips_elf_got.py +148 -0
  35. angr/analyses/cfg/indirect_jump_resolvers/propagator_utils.py +46 -0
  36. angr/analyses/cfg/indirect_jump_resolvers/resolver.py +74 -0
  37. angr/analyses/cfg/indirect_jump_resolvers/syscall_resolver.py +92 -0
  38. angr/analyses/cfg/indirect_jump_resolvers/x86_elf_pic_plt.py +88 -0
  39. angr/analyses/cfg/indirect_jump_resolvers/x86_pe_iat.py +47 -0
  40. angr/analyses/cfg_slice_to_sink/__init__.py +11 -0
  41. angr/analyses/cfg_slice_to_sink/cfg_slice_to_sink.py +117 -0
  42. angr/analyses/cfg_slice_to_sink/graph.py +87 -0
  43. angr/analyses/cfg_slice_to_sink/transitions.py +27 -0
  44. angr/analyses/class_identifier.py +63 -0
  45. angr/analyses/code_tagging.py +123 -0
  46. angr/analyses/codecave.py +77 -0
  47. angr/analyses/complete_calling_conventions.py +461 -0
  48. angr/analyses/congruency_check.py +377 -0
  49. angr/analyses/data_dep/__init__.py +16 -0
  50. angr/analyses/data_dep/data_dependency_analysis.py +595 -0
  51. angr/analyses/data_dep/dep_nodes.py +171 -0
  52. angr/analyses/data_dep/sim_act_location.py +49 -0
  53. angr/analyses/datagraph_meta.py +105 -0
  54. angr/analyses/ddg.py +1670 -0
  55. angr/analyses/decompiler/__init__.py +41 -0
  56. angr/analyses/decompiler/ail_simplifier.py +1972 -0
  57. angr/analyses/decompiler/ailgraph_walker.py +49 -0
  58. angr/analyses/decompiler/block_io_finder.py +302 -0
  59. angr/analyses/decompiler/block_similarity.py +196 -0
  60. angr/analyses/decompiler/block_simplifier.py +371 -0
  61. angr/analyses/decompiler/callsite_maker.py +555 -0
  62. angr/analyses/decompiler/ccall_rewriters/__init__.py +9 -0
  63. angr/analyses/decompiler/ccall_rewriters/amd64_ccalls.py +580 -0
  64. angr/analyses/decompiler/ccall_rewriters/rewriter_base.py +20 -0
  65. angr/analyses/decompiler/ccall_rewriters/x86_ccalls.py +313 -0
  66. angr/analyses/decompiler/clinic.py +3304 -0
  67. angr/analyses/decompiler/condition_processor.py +1256 -0
  68. angr/analyses/decompiler/counters/__init__.py +16 -0
  69. angr/analyses/decompiler/counters/boolean_counter.py +27 -0
  70. angr/analyses/decompiler/counters/call_counter.py +47 -0
  71. angr/analyses/decompiler/counters/expression_counters.py +77 -0
  72. angr/analyses/decompiler/counters/seq_cf_structure_counter.py +63 -0
  73. angr/analyses/decompiler/decompilation_cache.py +46 -0
  74. angr/analyses/decompiler/decompilation_options.py +275 -0
  75. angr/analyses/decompiler/decompiler.py +703 -0
  76. angr/analyses/decompiler/dephication/__init__.py +6 -0
  77. angr/analyses/decompiler/dephication/dephication_base.py +89 -0
  78. angr/analyses/decompiler/dephication/graph_dephication.py +63 -0
  79. angr/analyses/decompiler/dephication/graph_rewriting.py +116 -0
  80. angr/analyses/decompiler/dephication/graph_vvar_mapping.py +326 -0
  81. angr/analyses/decompiler/dephication/rewriting_engine.py +504 -0
  82. angr/analyses/decompiler/dephication/seqnode_dephication.py +134 -0
  83. angr/analyses/decompiler/empty_node_remover.py +212 -0
  84. angr/analyses/decompiler/expression_narrower.py +287 -0
  85. angr/analyses/decompiler/goto_manager.py +112 -0
  86. angr/analyses/decompiler/graph_region.py +398 -0
  87. angr/analyses/decompiler/jump_target_collector.py +37 -0
  88. angr/analyses/decompiler/jumptable_entry_condition_rewriter.py +67 -0
  89. angr/analyses/decompiler/label_collector.py +32 -0
  90. angr/analyses/decompiler/optimization_passes/__init__.py +151 -0
  91. angr/analyses/decompiler/optimization_passes/base_ptr_save_simplifier.py +157 -0
  92. angr/analyses/decompiler/optimization_passes/call_stmt_rewriter.py +46 -0
  93. angr/analyses/decompiler/optimization_passes/code_motion.py +362 -0
  94. angr/analyses/decompiler/optimization_passes/condition_constprop.py +219 -0
  95. angr/analyses/decompiler/optimization_passes/const_derefs.py +266 -0
  96. angr/analyses/decompiler/optimization_passes/const_prop_reverter.py +365 -0
  97. angr/analyses/decompiler/optimization_passes/cross_jump_reverter.py +106 -0
  98. angr/analyses/decompiler/optimization_passes/deadblock_remover.py +82 -0
  99. angr/analyses/decompiler/optimization_passes/determine_load_sizes.py +64 -0
  100. angr/analyses/decompiler/optimization_passes/div_simplifier.py +425 -0
  101. angr/analyses/decompiler/optimization_passes/duplication_reverter/__init__.py +5 -0
  102. angr/analyses/decompiler/optimization_passes/duplication_reverter/ail_merge_graph.py +503 -0
  103. angr/analyses/decompiler/optimization_passes/duplication_reverter/duplication_reverter.py +1218 -0
  104. angr/analyses/decompiler/optimization_passes/duplication_reverter/errors.py +16 -0
  105. angr/analyses/decompiler/optimization_passes/duplication_reverter/similarity.py +126 -0
  106. angr/analyses/decompiler/optimization_passes/duplication_reverter/utils.py +167 -0
  107. angr/analyses/decompiler/optimization_passes/eager_std_string_concatenation.py +165 -0
  108. angr/analyses/decompiler/optimization_passes/engine_base.py +500 -0
  109. angr/analyses/decompiler/optimization_passes/expr_op_swapper.py +135 -0
  110. angr/analyses/decompiler/optimization_passes/flip_boolean_cmp.py +113 -0
  111. angr/analyses/decompiler/optimization_passes/inlined_string_transformation_simplifier.py +615 -0
  112. angr/analyses/decompiler/optimization_passes/ite_expr_converter.py +224 -0
  113. angr/analyses/decompiler/optimization_passes/ite_region_converter.py +335 -0
  114. angr/analyses/decompiler/optimization_passes/lowered_switch_simplifier.py +922 -0
  115. angr/analyses/decompiler/optimization_passes/mod_simplifier.py +99 -0
  116. angr/analyses/decompiler/optimization_passes/optimization_pass.py +659 -0
  117. angr/analyses/decompiler/optimization_passes/register_save_area_simplifier.py +221 -0
  118. angr/analyses/decompiler/optimization_passes/ret_addr_save_simplifier.py +171 -0
  119. angr/analyses/decompiler/optimization_passes/ret_deduplicator.py +222 -0
  120. angr/analyses/decompiler/optimization_passes/return_duplicator_base.py +640 -0
  121. angr/analyses/decompiler/optimization_passes/return_duplicator_high.py +61 -0
  122. angr/analyses/decompiler/optimization_passes/return_duplicator_low.py +235 -0
  123. angr/analyses/decompiler/optimization_passes/stack_canary_simplifier.py +333 -0
  124. angr/analyses/decompiler/optimization_passes/switch_default_case_duplicator.py +149 -0
  125. angr/analyses/decompiler/optimization_passes/switch_reused_entry_rewriter.py +102 -0
  126. angr/analyses/decompiler/optimization_passes/tag_slicer.py +41 -0
  127. angr/analyses/decompiler/optimization_passes/win_stack_canary_simplifier.py +421 -0
  128. angr/analyses/decompiler/optimization_passes/x86_gcc_getpc_simplifier.py +88 -0
  129. angr/analyses/decompiler/peephole_optimizations/__init__.py +127 -0
  130. angr/analyses/decompiler/peephole_optimizations/a_div_const_add_a_mul_n_div_const.py +42 -0
  131. angr/analyses/decompiler/peephole_optimizations/a_mul_const_div_shr_const.py +38 -0
  132. angr/analyses/decompiler/peephole_optimizations/a_mul_const_sub_a.py +34 -0
  133. angr/analyses/decompiler/peephole_optimizations/a_shl_const_sub_a.py +34 -0
  134. angr/analyses/decompiler/peephole_optimizations/a_sub_a_div.py +25 -0
  135. angr/analyses/decompiler/peephole_optimizations/a_sub_a_div_const_mul_const.py +57 -0
  136. angr/analyses/decompiler/peephole_optimizations/a_sub_a_shr_const_shr_const.py +37 -0
  137. angr/analyses/decompiler/peephole_optimizations/a_sub_a_sub_n.py +23 -0
  138. angr/analyses/decompiler/peephole_optimizations/arm_cmpf.py +236 -0
  139. angr/analyses/decompiler/peephole_optimizations/base.py +157 -0
  140. angr/analyses/decompiler/peephole_optimizations/basepointeroffset_add_n.py +34 -0
  141. angr/analyses/decompiler/peephole_optimizations/basepointeroffset_and_mask.py +36 -0
  142. angr/analyses/decompiler/peephole_optimizations/bitwise_or_to_logical_or.py +34 -0
  143. angr/analyses/decompiler/peephole_optimizations/bool_expr_xor_1.py +27 -0
  144. angr/analyses/decompiler/peephole_optimizations/bswap.py +142 -0
  145. angr/analyses/decompiler/peephole_optimizations/cas_intrinsics.py +115 -0
  146. angr/analyses/decompiler/peephole_optimizations/cmpord_rewriter.py +71 -0
  147. angr/analyses/decompiler/peephole_optimizations/coalesce_adjacent_shrs.py +39 -0
  148. angr/analyses/decompiler/peephole_optimizations/coalesce_same_cascading_ifs.py +28 -0
  149. angr/analyses/decompiler/peephole_optimizations/const_mull_a_shift.py +242 -0
  150. angr/analyses/decompiler/peephole_optimizations/constant_derefs.py +44 -0
  151. angr/analyses/decompiler/peephole_optimizations/conv_a_sub0_shr_and.py +69 -0
  152. angr/analyses/decompiler/peephole_optimizations/conv_shl_shr.py +52 -0
  153. angr/analyses/decompiler/peephole_optimizations/eager_eval.py +394 -0
  154. angr/analyses/decompiler/peephole_optimizations/extended_byte_and_mask.py +56 -0
  155. angr/analyses/decompiler/peephole_optimizations/inlined_strcpy.py +160 -0
  156. angr/analyses/decompiler/peephole_optimizations/inlined_strcpy_consolidation.py +109 -0
  157. angr/analyses/decompiler/peephole_optimizations/inlined_wstrcpy.py +170 -0
  158. angr/analyses/decompiler/peephole_optimizations/invert_negated_logical_conjuction_disjunction.py +50 -0
  159. angr/analyses/decompiler/peephole_optimizations/one_sub_bool.py +33 -0
  160. angr/analyses/decompiler/peephole_optimizations/remove_cascading_conversions.py +45 -0
  161. angr/analyses/decompiler/peephole_optimizations/remove_cxx_destructor_calls.py +32 -0
  162. angr/analyses/decompiler/peephole_optimizations/remove_empty_if_body.py +46 -0
  163. angr/analyses/decompiler/peephole_optimizations/remove_noop_conversions.py +47 -0
  164. angr/analyses/decompiler/peephole_optimizations/remove_redundant_bitmasks.py +116 -0
  165. angr/analyses/decompiler/peephole_optimizations/remove_redundant_conversions.py +273 -0
  166. angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_branch.py +30 -0
  167. angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_comparisons.py +54 -0
  168. angr/analyses/decompiler/peephole_optimizations/remove_redundant_nots.py +36 -0
  169. angr/analyses/decompiler/peephole_optimizations/remove_redundant_reinterprets.py +44 -0
  170. angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts.py +95 -0
  171. angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts_around_comparators.py +44 -0
  172. angr/analyses/decompiler/peephole_optimizations/rewrite_bit_extractions.py +85 -0
  173. angr/analyses/decompiler/peephole_optimizations/rewrite_conv_mul.py +40 -0
  174. angr/analyses/decompiler/peephole_optimizations/rewrite_cxx_operator_calls.py +90 -0
  175. angr/analyses/decompiler/peephole_optimizations/rewrite_mips_gp_loads.py +49 -0
  176. angr/analyses/decompiler/peephole_optimizations/rol_ror.py +130 -0
  177. angr/analyses/decompiler/peephole_optimizations/sar_to_signed_div.py +143 -0
  178. angr/analyses/decompiler/peephole_optimizations/shl_to_mul.py +25 -0
  179. angr/analyses/decompiler/peephole_optimizations/simplify_pc_relative_loads.py +51 -0
  180. angr/analyses/decompiler/peephole_optimizations/single_bit_cond_to_boolexpr.py +82 -0
  181. angr/analyses/decompiler/peephole_optimizations/single_bit_xor.py +29 -0
  182. angr/analyses/decompiler/peephole_optimizations/tidy_stack_addr.py +131 -0
  183. angr/analyses/decompiler/peephole_optimizations/utils.py +18 -0
  184. angr/analyses/decompiler/presets/__init__.py +20 -0
  185. angr/analyses/decompiler/presets/basic.py +32 -0
  186. angr/analyses/decompiler/presets/fast.py +58 -0
  187. angr/analyses/decompiler/presets/full.py +68 -0
  188. angr/analyses/decompiler/presets/preset.py +37 -0
  189. angr/analyses/decompiler/redundant_label_remover.py +134 -0
  190. angr/analyses/decompiler/region_identifier.py +1218 -0
  191. angr/analyses/decompiler/region_simplifiers/__init__.py +5 -0
  192. angr/analyses/decompiler/region_simplifiers/cascading_cond_transformer.py +95 -0
  193. angr/analyses/decompiler/region_simplifiers/cascading_ifs.py +82 -0
  194. angr/analyses/decompiler/region_simplifiers/expr_folding.py +789 -0
  195. angr/analyses/decompiler/region_simplifiers/goto.py +178 -0
  196. angr/analyses/decompiler/region_simplifiers/if_.py +135 -0
  197. angr/analyses/decompiler/region_simplifiers/ifelse.py +91 -0
  198. angr/analyses/decompiler/region_simplifiers/loop.py +143 -0
  199. angr/analyses/decompiler/region_simplifiers/node_address_finder.py +24 -0
  200. angr/analyses/decompiler/region_simplifiers/region_simplifier.py +234 -0
  201. angr/analyses/decompiler/region_simplifiers/switch_cluster_simplifier.py +654 -0
  202. angr/analyses/decompiler/region_simplifiers/switch_expr_simplifier.py +87 -0
  203. angr/analyses/decompiler/region_walker.py +24 -0
  204. angr/analyses/decompiler/return_maker.py +72 -0
  205. angr/analyses/decompiler/seq_to_blocks.py +20 -0
  206. angr/analyses/decompiler/sequence_walker.py +257 -0
  207. angr/analyses/decompiler/ssailification/__init__.py +4 -0
  208. angr/analyses/decompiler/ssailification/rewriting.py +379 -0
  209. angr/analyses/decompiler/ssailification/rewriting_engine.py +1053 -0
  210. angr/analyses/decompiler/ssailification/rewriting_state.py +61 -0
  211. angr/analyses/decompiler/ssailification/ssailification.py +276 -0
  212. angr/analyses/decompiler/ssailification/traversal.py +124 -0
  213. angr/analyses/decompiler/ssailification/traversal_engine.py +297 -0
  214. angr/analyses/decompiler/ssailification/traversal_state.py +48 -0
  215. angr/analyses/decompiler/stack_item.py +36 -0
  216. angr/analyses/decompiler/structured_codegen/__init__.py +25 -0
  217. angr/analyses/decompiler/structured_codegen/base.py +132 -0
  218. angr/analyses/decompiler/structured_codegen/c.py +4082 -0
  219. angr/analyses/decompiler/structured_codegen/dummy.py +15 -0
  220. angr/analyses/decompiler/structured_codegen/dwarf_import.py +190 -0
  221. angr/analyses/decompiler/structuring/__init__.py +30 -0
  222. angr/analyses/decompiler/structuring/dream.py +1217 -0
  223. angr/analyses/decompiler/structuring/phoenix.py +2999 -0
  224. angr/analyses/decompiler/structuring/recursive_structurer.py +187 -0
  225. angr/analyses/decompiler/structuring/sailr.py +112 -0
  226. angr/analyses/decompiler/structuring/structurer_base.py +1067 -0
  227. angr/analyses/decompiler/structuring/structurer_nodes.py +438 -0
  228. angr/analyses/decompiler/utils.py +1106 -0
  229. angr/analyses/deobfuscator/__init__.py +18 -0
  230. angr/analyses/deobfuscator/api_obf_finder.py +325 -0
  231. angr/analyses/deobfuscator/api_obf_peephole_optimizer.py +51 -0
  232. angr/analyses/deobfuscator/api_obf_type2_finder.py +166 -0
  233. angr/analyses/deobfuscator/irsb_reg_collector.py +54 -0
  234. angr/analyses/deobfuscator/string_obf_finder.py +861 -0
  235. angr/analyses/deobfuscator/string_obf_opt_passes.py +133 -0
  236. angr/analyses/deobfuscator/string_obf_peephole_optimizer.py +47 -0
  237. angr/analyses/disassembly.py +1295 -0
  238. angr/analyses/disassembly_utils.py +101 -0
  239. angr/analyses/dominance_frontier.py +57 -0
  240. angr/analyses/fcp/__init__.py +4 -0
  241. angr/analyses/fcp/fcp.py +426 -0
  242. angr/analyses/find_objects_static.py +205 -0
  243. angr/analyses/flirt/__init__.py +47 -0
  244. angr/analyses/flirt/consts.py +160 -0
  245. angr/analyses/flirt/flirt.py +244 -0
  246. angr/analyses/flirt/flirt_function.py +20 -0
  247. angr/analyses/flirt/flirt_matcher.py +351 -0
  248. angr/analyses/flirt/flirt_module.py +32 -0
  249. angr/analyses/flirt/flirt_node.py +23 -0
  250. angr/analyses/flirt/flirt_sig.py +356 -0
  251. angr/analyses/flirt/flirt_utils.py +31 -0
  252. angr/analyses/forward_analysis/__init__.py +12 -0
  253. angr/analyses/forward_analysis/forward_analysis.py +530 -0
  254. angr/analyses/forward_analysis/job_info.py +64 -0
  255. angr/analyses/forward_analysis/visitors/__init__.py +14 -0
  256. angr/analyses/forward_analysis/visitors/call_graph.py +29 -0
  257. angr/analyses/forward_analysis/visitors/function_graph.py +86 -0
  258. angr/analyses/forward_analysis/visitors/graph.py +242 -0
  259. angr/analyses/forward_analysis/visitors/loop.py +29 -0
  260. angr/analyses/forward_analysis/visitors/single_node_graph.py +38 -0
  261. angr/analyses/identifier/__init__.py +5 -0
  262. angr/analyses/identifier/custom_callable.py +137 -0
  263. angr/analyses/identifier/errors.py +10 -0
  264. angr/analyses/identifier/func.py +60 -0
  265. angr/analyses/identifier/functions/__init__.py +37 -0
  266. angr/analyses/identifier/functions/atoi.py +73 -0
  267. angr/analyses/identifier/functions/based_atoi.py +125 -0
  268. angr/analyses/identifier/functions/fdprintf.py +123 -0
  269. angr/analyses/identifier/functions/free.py +64 -0
  270. angr/analyses/identifier/functions/int2str.py +287 -0
  271. angr/analyses/identifier/functions/malloc.py +111 -0
  272. angr/analyses/identifier/functions/memcmp.py +67 -0
  273. angr/analyses/identifier/functions/memcpy.py +89 -0
  274. angr/analyses/identifier/functions/memset.py +43 -0
  275. angr/analyses/identifier/functions/printf.py +123 -0
  276. angr/analyses/identifier/functions/recv_until.py +312 -0
  277. angr/analyses/identifier/functions/skip_calloc.py +73 -0
  278. angr/analyses/identifier/functions/skip_realloc.py +97 -0
  279. angr/analyses/identifier/functions/skip_recv_n.py +105 -0
  280. angr/analyses/identifier/functions/snprintf.py +112 -0
  281. angr/analyses/identifier/functions/sprintf.py +116 -0
  282. angr/analyses/identifier/functions/strcasecmp.py +33 -0
  283. angr/analyses/identifier/functions/strcmp.py +113 -0
  284. angr/analyses/identifier/functions/strcpy.py +43 -0
  285. angr/analyses/identifier/functions/strlen.py +27 -0
  286. angr/analyses/identifier/functions/strncmp.py +104 -0
  287. angr/analyses/identifier/functions/strncpy.py +65 -0
  288. angr/analyses/identifier/functions/strtol.py +89 -0
  289. angr/analyses/identifier/identify.py +825 -0
  290. angr/analyses/identifier/runner.py +360 -0
  291. angr/analyses/init_finder.py +289 -0
  292. angr/analyses/loop_analysis.py +349 -0
  293. angr/analyses/loopfinder.py +171 -0
  294. angr/analyses/patchfinder.py +137 -0
  295. angr/analyses/pathfinder.py +282 -0
  296. angr/analyses/propagator/__init__.py +5 -0
  297. angr/analyses/propagator/engine_base.py +62 -0
  298. angr/analyses/propagator/engine_vex.py +297 -0
  299. angr/analyses/propagator/propagator.py +361 -0
  300. angr/analyses/propagator/top_checker_mixin.py +218 -0
  301. angr/analyses/propagator/values.py +117 -0
  302. angr/analyses/propagator/vex_vars.py +68 -0
  303. angr/analyses/proximity_graph.py +444 -0
  304. angr/analyses/reaching_definitions/__init__.py +67 -0
  305. angr/analyses/reaching_definitions/call_trace.py +73 -0
  306. angr/analyses/reaching_definitions/dep_graph.py +433 -0
  307. angr/analyses/reaching_definitions/engine_ail.py +1130 -0
  308. angr/analyses/reaching_definitions/engine_vex.py +1127 -0
  309. angr/analyses/reaching_definitions/external_codeloc.py +0 -0
  310. angr/analyses/reaching_definitions/function_handler.py +637 -0
  311. angr/analyses/reaching_definitions/function_handler_library/__init__.py +12 -0
  312. angr/analyses/reaching_definitions/function_handler_library/stdio.py +268 -0
  313. angr/analyses/reaching_definitions/function_handler_library/stdlib.py +189 -0
  314. angr/analyses/reaching_definitions/function_handler_library/string.py +147 -0
  315. angr/analyses/reaching_definitions/function_handler_library/unistd.py +44 -0
  316. angr/analyses/reaching_definitions/heap_allocator.py +70 -0
  317. angr/analyses/reaching_definitions/rd_initializer.py +237 -0
  318. angr/analyses/reaching_definitions/rd_state.py +579 -0
  319. angr/analyses/reaching_definitions/reaching_definitions.py +581 -0
  320. angr/analyses/reaching_definitions/subject.py +65 -0
  321. angr/analyses/reassembler.py +2900 -0
  322. angr/analyses/s_liveness.py +203 -0
  323. angr/analyses/s_propagator.py +542 -0
  324. angr/analyses/s_reaching_definitions/__init__.py +12 -0
  325. angr/analyses/s_reaching_definitions/s_rda_model.py +135 -0
  326. angr/analyses/s_reaching_definitions/s_rda_view.py +315 -0
  327. angr/analyses/s_reaching_definitions/s_reaching_definitions.py +174 -0
  328. angr/analyses/smc.py +161 -0
  329. angr/analyses/soot_class_hierarchy.py +273 -0
  330. angr/analyses/stack_pointer_tracker.py +953 -0
  331. angr/analyses/static_hooker.py +53 -0
  332. angr/analyses/typehoon/__init__.py +5 -0
  333. angr/analyses/typehoon/dfa.py +118 -0
  334. angr/analyses/typehoon/lifter.py +122 -0
  335. angr/analyses/typehoon/simple_solver.py +1464 -0
  336. angr/analyses/typehoon/translator.py +279 -0
  337. angr/analyses/typehoon/typeconsts.py +336 -0
  338. angr/analyses/typehoon/typehoon.py +311 -0
  339. angr/analyses/typehoon/typevars.py +622 -0
  340. angr/analyses/typehoon/variance.py +11 -0
  341. angr/analyses/unpacker/__init__.py +6 -0
  342. angr/analyses/unpacker/obfuscation_detector.py +103 -0
  343. angr/analyses/unpacker/packing_detector.py +138 -0
  344. angr/analyses/variable_recovery/__init__.py +9 -0
  345. angr/analyses/variable_recovery/annotations.py +58 -0
  346. angr/analyses/variable_recovery/engine_ail.py +897 -0
  347. angr/analyses/variable_recovery/engine_base.py +1185 -0
  348. angr/analyses/variable_recovery/engine_vex.py +593 -0
  349. angr/analyses/variable_recovery/irsb_scanner.py +143 -0
  350. angr/analyses/variable_recovery/variable_recovery.py +574 -0
  351. angr/analyses/variable_recovery/variable_recovery_base.py +461 -0
  352. angr/analyses/variable_recovery/variable_recovery_fast.py +652 -0
  353. angr/analyses/veritesting.py +626 -0
  354. angr/analyses/vfg.py +1898 -0
  355. angr/analyses/vsa_ddg.py +420 -0
  356. angr/analyses/vtable.py +92 -0
  357. angr/analyses/xrefs.py +286 -0
  358. angr/angrdb/__init__.py +14 -0
  359. angr/angrdb/db.py +206 -0
  360. angr/angrdb/models.py +184 -0
  361. angr/angrdb/serializers/__init__.py +10 -0
  362. angr/angrdb/serializers/cfg_model.py +41 -0
  363. angr/angrdb/serializers/comments.py +60 -0
  364. angr/angrdb/serializers/funcs.py +61 -0
  365. angr/angrdb/serializers/kb.py +111 -0
  366. angr/angrdb/serializers/labels.py +59 -0
  367. angr/angrdb/serializers/loader.py +165 -0
  368. angr/angrdb/serializers/structured_code.py +125 -0
  369. angr/angrdb/serializers/variables.py +58 -0
  370. angr/angrdb/serializers/xrefs.py +48 -0
  371. angr/annocfg.py +317 -0
  372. angr/blade.py +426 -0
  373. angr/block.py +509 -0
  374. angr/callable.py +168 -0
  375. angr/calling_conventions.py +2580 -0
  376. angr/code_location.py +163 -0
  377. angr/codenode.py +145 -0
  378. angr/concretization_strategies/__init__.py +32 -0
  379. angr/concretization_strategies/any.py +17 -0
  380. angr/concretization_strategies/any_named.py +35 -0
  381. angr/concretization_strategies/base.py +81 -0
  382. angr/concretization_strategies/controlled_data.py +58 -0
  383. angr/concretization_strategies/eval.py +19 -0
  384. angr/concretization_strategies/logging.py +35 -0
  385. angr/concretization_strategies/max.py +25 -0
  386. angr/concretization_strategies/nonzero.py +16 -0
  387. angr/concretization_strategies/nonzero_range.py +22 -0
  388. angr/concretization_strategies/norepeats.py +37 -0
  389. angr/concretization_strategies/norepeats_range.py +37 -0
  390. angr/concretization_strategies/range.py +19 -0
  391. angr/concretization_strategies/signed_add.py +31 -0
  392. angr/concretization_strategies/single.py +15 -0
  393. angr/concretization_strategies/solutions.py +20 -0
  394. angr/concretization_strategies/unlimited_range.py +17 -0
  395. angr/distributed/__init__.py +9 -0
  396. angr/distributed/server.py +197 -0
  397. angr/distributed/worker.py +185 -0
  398. angr/engines/__init__.py +67 -0
  399. angr/engines/engine.py +29 -0
  400. angr/engines/failure.py +27 -0
  401. angr/engines/hook.py +68 -0
  402. angr/engines/icicle.py +229 -0
  403. angr/engines/light/__init__.py +23 -0
  404. angr/engines/light/data.py +681 -0
  405. angr/engines/light/engine.py +1285 -0
  406. angr/engines/pcode/__init__.py +9 -0
  407. angr/engines/pcode/behavior.py +994 -0
  408. angr/engines/pcode/cc.py +128 -0
  409. angr/engines/pcode/emulate.py +440 -0
  410. angr/engines/pcode/engine.py +242 -0
  411. angr/engines/pcode/lifter.py +1420 -0
  412. angr/engines/procedure.py +70 -0
  413. angr/engines/soot/__init__.py +5 -0
  414. angr/engines/soot/engine.py +410 -0
  415. angr/engines/soot/exceptions.py +17 -0
  416. angr/engines/soot/expressions/__init__.py +87 -0
  417. angr/engines/soot/expressions/arrayref.py +22 -0
  418. angr/engines/soot/expressions/base.py +21 -0
  419. angr/engines/soot/expressions/binop.py +28 -0
  420. angr/engines/soot/expressions/cast.py +22 -0
  421. angr/engines/soot/expressions/condition.py +35 -0
  422. angr/engines/soot/expressions/constants.py +47 -0
  423. angr/engines/soot/expressions/instanceOf.py +15 -0
  424. angr/engines/soot/expressions/instancefieldref.py +8 -0
  425. angr/engines/soot/expressions/invoke.py +114 -0
  426. angr/engines/soot/expressions/length.py +8 -0
  427. angr/engines/soot/expressions/local.py +8 -0
  428. angr/engines/soot/expressions/new.py +16 -0
  429. angr/engines/soot/expressions/newArray.py +54 -0
  430. angr/engines/soot/expressions/newMultiArray.py +86 -0
  431. angr/engines/soot/expressions/paramref.py +8 -0
  432. angr/engines/soot/expressions/phi.py +30 -0
  433. angr/engines/soot/expressions/staticfieldref.py +8 -0
  434. angr/engines/soot/expressions/thisref.py +7 -0
  435. angr/engines/soot/expressions/unsupported.py +7 -0
  436. angr/engines/soot/field_dispatcher.py +46 -0
  437. angr/engines/soot/method_dispatcher.py +46 -0
  438. angr/engines/soot/statements/__init__.py +44 -0
  439. angr/engines/soot/statements/assign.py +30 -0
  440. angr/engines/soot/statements/base.py +79 -0
  441. angr/engines/soot/statements/goto.py +14 -0
  442. angr/engines/soot/statements/identity.py +15 -0
  443. angr/engines/soot/statements/if_.py +19 -0
  444. angr/engines/soot/statements/invoke.py +12 -0
  445. angr/engines/soot/statements/return_.py +20 -0
  446. angr/engines/soot/statements/switch.py +41 -0
  447. angr/engines/soot/statements/throw.py +15 -0
  448. angr/engines/soot/values/__init__.py +38 -0
  449. angr/engines/soot/values/arrayref.py +122 -0
  450. angr/engines/soot/values/base.py +7 -0
  451. angr/engines/soot/values/constants.py +18 -0
  452. angr/engines/soot/values/instancefieldref.py +44 -0
  453. angr/engines/soot/values/local.py +18 -0
  454. angr/engines/soot/values/paramref.py +18 -0
  455. angr/engines/soot/values/staticfieldref.py +38 -0
  456. angr/engines/soot/values/strref.py +38 -0
  457. angr/engines/soot/values/thisref.py +149 -0
  458. angr/engines/successors.py +654 -0
  459. angr/engines/syscall.py +51 -0
  460. angr/engines/unicorn.py +490 -0
  461. angr/engines/vex/__init__.py +20 -0
  462. angr/engines/vex/claripy/__init__.py +5 -0
  463. angr/engines/vex/claripy/ccall.py +2097 -0
  464. angr/engines/vex/claripy/datalayer.py +141 -0
  465. angr/engines/vex/claripy/irop.py +1276 -0
  466. angr/engines/vex/heavy/__init__.py +16 -0
  467. angr/engines/vex/heavy/actions.py +231 -0
  468. angr/engines/vex/heavy/concretizers.py +403 -0
  469. angr/engines/vex/heavy/dirty.py +466 -0
  470. angr/engines/vex/heavy/heavy.py +370 -0
  471. angr/engines/vex/heavy/inspect.py +52 -0
  472. angr/engines/vex/heavy/resilience.py +85 -0
  473. angr/engines/vex/heavy/super_fastpath.py +34 -0
  474. angr/engines/vex/lifter.py +420 -0
  475. angr/engines/vex/light/__init__.py +11 -0
  476. angr/engines/vex/light/light.py +551 -0
  477. angr/engines/vex/light/resilience.py +74 -0
  478. angr/engines/vex/light/slicing.py +52 -0
  479. angr/errors.py +609 -0
  480. angr/exploration_techniques/__init__.py +53 -0
  481. angr/exploration_techniques/base.py +126 -0
  482. angr/exploration_techniques/bucketizer.py +94 -0
  483. angr/exploration_techniques/common.py +56 -0
  484. angr/exploration_techniques/dfs.py +37 -0
  485. angr/exploration_techniques/director.py +520 -0
  486. angr/exploration_techniques/driller_core.py +100 -0
  487. angr/exploration_techniques/explorer.py +152 -0
  488. angr/exploration_techniques/lengthlimiter.py +22 -0
  489. angr/exploration_techniques/local_loop_seer.py +65 -0
  490. angr/exploration_techniques/loop_seer.py +236 -0
  491. angr/exploration_techniques/manual_mergepoint.py +82 -0
  492. angr/exploration_techniques/memory_watcher.py +43 -0
  493. angr/exploration_techniques/oppologist.py +92 -0
  494. angr/exploration_techniques/slicecutor.py +118 -0
  495. angr/exploration_techniques/spiller.py +280 -0
  496. angr/exploration_techniques/spiller_db.py +27 -0
  497. angr/exploration_techniques/stochastic.py +56 -0
  498. angr/exploration_techniques/stub_stasher.py +19 -0
  499. angr/exploration_techniques/suggestions.py +159 -0
  500. angr/exploration_techniques/tech_builder.py +49 -0
  501. angr/exploration_techniques/threading.py +69 -0
  502. angr/exploration_techniques/timeout.py +34 -0
  503. angr/exploration_techniques/tracer.py +1098 -0
  504. angr/exploration_techniques/unique.py +106 -0
  505. angr/exploration_techniques/veritesting.py +37 -0
  506. angr/factory.py +404 -0
  507. angr/flirt/__init__.py +97 -0
  508. angr/flirt/build_sig.py +305 -0
  509. angr/graph_utils.py +0 -0
  510. angr/keyed_region.py +525 -0
  511. angr/knowledge_base.py +143 -0
  512. angr/knowledge_plugins/__init__.py +43 -0
  513. angr/knowledge_plugins/callsite_prototypes.py +53 -0
  514. angr/knowledge_plugins/cfg/__init__.py +18 -0
  515. angr/knowledge_plugins/cfg/cfg_manager.py +95 -0
  516. angr/knowledge_plugins/cfg/cfg_model.py +1045 -0
  517. angr/knowledge_plugins/cfg/cfg_node.py +536 -0
  518. angr/knowledge_plugins/cfg/indirect_jump.py +65 -0
  519. angr/knowledge_plugins/cfg/memory_data.py +156 -0
  520. angr/knowledge_plugins/comments.py +16 -0
  521. angr/knowledge_plugins/custom_strings.py +38 -0
  522. angr/knowledge_plugins/data.py +22 -0
  523. angr/knowledge_plugins/debug_variables.py +216 -0
  524. angr/knowledge_plugins/functions/__init__.py +9 -0
  525. angr/knowledge_plugins/functions/function.py +1780 -0
  526. angr/knowledge_plugins/functions/function_manager.py +589 -0
  527. angr/knowledge_plugins/functions/function_parser.py +299 -0
  528. angr/knowledge_plugins/functions/soot_function.py +128 -0
  529. angr/knowledge_plugins/indirect_jumps.py +35 -0
  530. angr/knowledge_plugins/key_definitions/__init__.py +17 -0
  531. angr/knowledge_plugins/key_definitions/atoms.py +374 -0
  532. angr/knowledge_plugins/key_definitions/constants.py +29 -0
  533. angr/knowledge_plugins/key_definitions/definition.py +214 -0
  534. angr/knowledge_plugins/key_definitions/environment.py +96 -0
  535. angr/knowledge_plugins/key_definitions/heap_address.py +33 -0
  536. angr/knowledge_plugins/key_definitions/key_definition_manager.py +82 -0
  537. angr/knowledge_plugins/key_definitions/live_definitions.py +1010 -0
  538. angr/knowledge_plugins/key_definitions/liveness.py +165 -0
  539. angr/knowledge_plugins/key_definitions/rd_model.py +171 -0
  540. angr/knowledge_plugins/key_definitions/tag.py +78 -0
  541. angr/knowledge_plugins/key_definitions/undefined.py +70 -0
  542. angr/knowledge_plugins/key_definitions/unknown_size.py +86 -0
  543. angr/knowledge_plugins/key_definitions/uses.py +178 -0
  544. angr/knowledge_plugins/labels.py +110 -0
  545. angr/knowledge_plugins/obfuscations.py +37 -0
  546. angr/knowledge_plugins/patches.py +126 -0
  547. angr/knowledge_plugins/plugin.py +24 -0
  548. angr/knowledge_plugins/propagations/__init__.py +10 -0
  549. angr/knowledge_plugins/propagations/prop_value.py +191 -0
  550. angr/knowledge_plugins/propagations/propagation_manager.py +60 -0
  551. angr/knowledge_plugins/propagations/propagation_model.py +73 -0
  552. angr/knowledge_plugins/propagations/states.py +552 -0
  553. angr/knowledge_plugins/structured_code.py +63 -0
  554. angr/knowledge_plugins/types.py +88 -0
  555. angr/knowledge_plugins/variables/__init__.py +8 -0
  556. angr/knowledge_plugins/variables/variable_access.py +113 -0
  557. angr/knowledge_plugins/variables/variable_manager.py +1380 -0
  558. angr/knowledge_plugins/xrefs/__init__.py +12 -0
  559. angr/knowledge_plugins/xrefs/xref.py +150 -0
  560. angr/knowledge_plugins/xrefs/xref_manager.py +127 -0
  561. angr/knowledge_plugins/xrefs/xref_types.py +16 -0
  562. angr/lib/angr_native.so +0 -0
  563. angr/misc/__init__.py +19 -0
  564. angr/misc/ansi.py +47 -0
  565. angr/misc/autoimport.py +90 -0
  566. angr/misc/bug_report.py +117 -0
  567. angr/misc/hookset.py +106 -0
  568. angr/misc/loggers.py +130 -0
  569. angr/misc/picklable_lock.py +46 -0
  570. angr/misc/plugins.py +289 -0
  571. angr/misc/telemetry.py +54 -0
  572. angr/misc/testing.py +24 -0
  573. angr/misc/ux.py +31 -0
  574. angr/procedures/__init__.py +12 -0
  575. angr/procedures/advapi32/__init__.py +0 -0
  576. angr/procedures/cgc/__init__.py +3 -0
  577. angr/procedures/cgc/_terminate.py +11 -0
  578. angr/procedures/cgc/allocate.py +75 -0
  579. angr/procedures/cgc/deallocate.py +67 -0
  580. angr/procedures/cgc/fdwait.py +65 -0
  581. angr/procedures/cgc/random.py +67 -0
  582. angr/procedures/cgc/receive.py +93 -0
  583. angr/procedures/cgc/transmit.py +65 -0
  584. angr/procedures/definitions/__init__.py +779 -0
  585. angr/procedures/definitions/cgc.py +20 -0
  586. angr/procedures/definitions/glibc.py +8372 -0
  587. angr/procedures/definitions/gnulib.py +32 -0
  588. angr/procedures/definitions/libstdcpp.py +21 -0
  589. angr/procedures/definitions/linux_kernel.py +6171 -0
  590. angr/procedures/definitions/linux_loader.py +7 -0
  591. angr/procedures/definitions/msvcr.py +16 -0
  592. angr/procedures/definitions/parse_syscalls_from_local_system.py +50 -0
  593. angr/procedures/definitions/parse_win32json.py +2553 -0
  594. angr/procedures/definitions/types_stl.py +22 -0
  595. angr/procedures/definitions/types_win32.py +34482 -0
  596. angr/procedures/definitions/wdk_api-ms-win-dx-d3dkmt-l1-1-4.py +30 -0
  597. angr/procedures/definitions/wdk_api-ms-win-dx-d3dkmt-l1-1-6.py +26 -0
  598. angr/procedures/definitions/wdk_clfs.py +140 -0
  599. angr/procedures/definitions/wdk_fltmgr.py +556 -0
  600. angr/procedures/definitions/wdk_fwpkclnt.py +30 -0
  601. angr/procedures/definitions/wdk_fwpuclnt.py +316 -0
  602. angr/procedures/definitions/wdk_gdi32.py +366 -0
  603. angr/procedures/definitions/wdk_hal.py +78 -0
  604. angr/procedures/definitions/wdk_ksecdd.py +62 -0
  605. angr/procedures/definitions/wdk_ndis.py +238 -0
  606. angr/procedures/definitions/wdk_ntoskrnl.py +3451 -0
  607. angr/procedures/definitions/wdk_offreg.py +72 -0
  608. angr/procedures/definitions/wdk_pshed.py +36 -0
  609. angr/procedures/definitions/wdk_secur32.py +40 -0
  610. angr/procedures/definitions/wdk_vhfum.py +34 -0
  611. angr/procedures/definitions/win32_aclui.py +30 -0
  612. angr/procedures/definitions/win32_activeds.py +68 -0
  613. angr/procedures/definitions/win32_advapi32.py +1684 -0
  614. angr/procedures/definitions/win32_advpack.py +124 -0
  615. angr/procedures/definitions/win32_amsi.py +38 -0
  616. angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-1.py +44 -0
  617. angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-3.py +34 -0
  618. angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-6.py +26 -0
  619. angr/procedures/definitions/win32_api-ms-win-core-apiquery-l2-1-0.py +26 -0
  620. angr/procedures/definitions/win32_api-ms-win-core-backgroundtask-l1-1-0.py +26 -0
  621. angr/procedures/definitions/win32_api-ms-win-core-comm-l1-1-1.py +26 -0
  622. angr/procedures/definitions/win32_api-ms-win-core-comm-l1-1-2.py +26 -0
  623. angr/procedures/definitions/win32_api-ms-win-core-enclave-l1-1-1.py +30 -0
  624. angr/procedures/definitions/win32_api-ms-win-core-errorhandling-l1-1-3.py +26 -0
  625. angr/procedures/definitions/win32_api-ms-win-core-featurestaging-l1-1-0.py +34 -0
  626. angr/procedures/definitions/win32_api-ms-win-core-featurestaging-l1-1-1.py +26 -0
  627. angr/procedures/definitions/win32_api-ms-win-core-file-fromapp-l1-1-0.py +46 -0
  628. angr/procedures/definitions/win32_api-ms-win-core-handle-l1-1-0.py +26 -0
  629. angr/procedures/definitions/win32_api-ms-win-core-ioring-l1-1-0.py +48 -0
  630. angr/procedures/definitions/win32_api-ms-win-core-marshal-l1-1-0.py +32 -0
  631. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-3.py +32 -0
  632. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-4.py +26 -0
  633. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-5.py +30 -0
  634. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-6.py +32 -0
  635. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-7.py +28 -0
  636. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-8.py +30 -0
  637. angr/procedures/definitions/win32_api-ms-win-core-path-l1-1-0.py +68 -0
  638. angr/procedures/definitions/win32_api-ms-win-core-psm-appnotify-l1-1-0.py +28 -0
  639. angr/procedures/definitions/win32_api-ms-win-core-psm-appnotify-l1-1-1.py +28 -0
  640. angr/procedures/definitions/win32_api-ms-win-core-realtime-l1-1-1.py +30 -0
  641. angr/procedures/definitions/win32_api-ms-win-core-realtime-l1-1-2.py +30 -0
  642. angr/procedures/definitions/win32_api-ms-win-core-slapi-l1-1-0.py +26 -0
  643. angr/procedures/definitions/win32_api-ms-win-core-state-helpers-l1-1-0.py +26 -0
  644. angr/procedures/definitions/win32_api-ms-win-core-synch-l1-2-0.py +30 -0
  645. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-0.py +26 -0
  646. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-3.py +28 -0
  647. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-4.py +28 -0
  648. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-6.py +26 -0
  649. angr/procedures/definitions/win32_api-ms-win-core-util-l1-1-1.py +28 -0
  650. angr/procedures/definitions/win32_api-ms-win-core-winrt-error-l1-1-0.py +44 -0
  651. angr/procedures/definitions/win32_api-ms-win-core-winrt-error-l1-1-1.py +38 -0
  652. angr/procedures/definitions/win32_api-ms-win-core-winrt-l1-1-0.py +40 -0
  653. angr/procedures/definitions/win32_api-ms-win-core-winrt-registration-l1-1-0.py +24 -0
  654. angr/procedures/definitions/win32_api-ms-win-core-winrt-robuffer-l1-1-0.py +24 -0
  655. angr/procedures/definitions/win32_api-ms-win-core-winrt-roparameterizediid-l1-1-0.py +28 -0
  656. angr/procedures/definitions/win32_api-ms-win-core-winrt-string-l1-1-0.py +76 -0
  657. angr/procedures/definitions/win32_api-ms-win-core-winrt-string-l1-1-1.py +24 -0
  658. angr/procedures/definitions/win32_api-ms-win-core-wow64-l1-1-1.py +30 -0
  659. angr/procedures/definitions/win32_api-ms-win-devices-query-l1-1-0.py +42 -0
  660. angr/procedures/definitions/win32_api-ms-win-devices-query-l1-1-1.py +34 -0
  661. angr/procedures/definitions/win32_api-ms-win-dx-d3dkmt-l1-1-0.py +26 -0
  662. angr/procedures/definitions/win32_api-ms-win-gaming-deviceinformation-l1-1-0.py +26 -0
  663. angr/procedures/definitions/win32_api-ms-win-gaming-expandedresources-l1-1-0.py +30 -0
  664. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-0.py +38 -0
  665. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-1.py +28 -0
  666. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-2.py +38 -0
  667. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-3.py +28 -0
  668. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-4.py +40 -0
  669. angr/procedures/definitions/win32_api-ms-win-mm-misc-l1-1-1.py +26 -0
  670. angr/procedures/definitions/win32_api-ms-win-net-isolation-l1-1-0.py +40 -0
  671. angr/procedures/definitions/win32_api-ms-win-security-base-l1-2-2.py +26 -0
  672. angr/procedures/definitions/win32_api-ms-win-security-isolatedcontainer-l1-1-0.py +26 -0
  673. angr/procedures/definitions/win32_api-ms-win-security-isolatedcontainer-l1-1-1.py +26 -0
  674. angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-3.py +26 -0
  675. angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-4.py +26 -0
  676. angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-5.py +28 -0
  677. angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-0.py +30 -0
  678. angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-1.py +36 -0
  679. angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-2.py +26 -0
  680. angr/procedures/definitions/win32_api-ms-win-shcore-stream-winrt-l1-1-0.py +28 -0
  681. angr/procedures/definitions/win32_api-ms-win-wsl-api-l1-1-0.py +38 -0
  682. angr/procedures/definitions/win32_apphelp.py +26 -0
  683. angr/procedures/definitions/win32_authz.py +90 -0
  684. angr/procedures/definitions/win32_avicap32.py +32 -0
  685. angr/procedures/definitions/win32_avifil32.py +144 -0
  686. angr/procedures/definitions/win32_avrt.py +52 -0
  687. angr/procedures/definitions/win32_bcp47mrm.py +28 -0
  688. angr/procedures/definitions/win32_bcrypt.py +130 -0
  689. angr/procedures/definitions/win32_bcryptprimitives.py +28 -0
  690. angr/procedures/definitions/win32_bluetoothapis.py +106 -0
  691. angr/procedures/definitions/win32_bthprops.py +34 -0
  692. angr/procedures/definitions/win32_bthprops_cpl.py +36 -0
  693. angr/procedures/definitions/win32_cabinet.py +68 -0
  694. angr/procedures/definitions/win32_certadm.py +60 -0
  695. angr/procedures/definitions/win32_certpoleng.py +40 -0
  696. angr/procedures/definitions/win32_cfgmgr32.py +502 -0
  697. angr/procedures/definitions/win32_chakra.py +198 -0
  698. angr/procedures/definitions/win32_cldapi.py +96 -0
  699. angr/procedures/definitions/win32_clfsw32.py +142 -0
  700. angr/procedures/definitions/win32_clusapi.py +584 -0
  701. angr/procedures/definitions/win32_comctl32.py +254 -0
  702. angr/procedures/definitions/win32_comdlg32.py +66 -0
  703. angr/procedures/definitions/win32_compstui.py +32 -0
  704. angr/procedures/definitions/win32_computecore.py +132 -0
  705. angr/procedures/definitions/win32_computenetwork.py +110 -0
  706. angr/procedures/definitions/win32_computestorage.py +48 -0
  707. angr/procedures/definitions/win32_comsvcs.py +38 -0
  708. angr/procedures/definitions/win32_coremessaging.py +24 -0
  709. angr/procedures/definitions/win32_credui.py +62 -0
  710. angr/procedures/definitions/win32_crypt32.py +482 -0
  711. angr/procedures/definitions/win32_cryptnet.py +34 -0
  712. angr/procedures/definitions/win32_cryptui.py +44 -0
  713. angr/procedures/definitions/win32_cryptxml.py +62 -0
  714. angr/procedures/definitions/win32_cscapi.py +32 -0
  715. angr/procedures/definitions/win32_d2d1.py +50 -0
  716. angr/procedures/definitions/win32_d3d10.py +78 -0
  717. angr/procedures/definitions/win32_d3d10_1.py +28 -0
  718. angr/procedures/definitions/win32_d3d11.py +30 -0
  719. angr/procedures/definitions/win32_d3d12.py +40 -0
  720. angr/procedures/definitions/win32_d3d9.py +46 -0
  721. angr/procedures/definitions/win32_d3dcompiler_47.py +76 -0
  722. angr/procedures/definitions/win32_d3dcsx.py +42 -0
  723. angr/procedures/definitions/win32_davclnt.py +60 -0
  724. angr/procedures/definitions/win32_dbgeng.py +32 -0
  725. angr/procedures/definitions/win32_dbghelp.py +462 -0
  726. angr/procedures/definitions/win32_dbgmodel.py +26 -0
  727. angr/procedures/definitions/win32_dciman32.py +64 -0
  728. angr/procedures/definitions/win32_dcomp.py +48 -0
  729. angr/procedures/definitions/win32_ddraw.py +38 -0
  730. angr/procedures/definitions/win32_deviceaccess.py +26 -0
  731. angr/procedures/definitions/win32_dflayout.py +26 -0
  732. angr/procedures/definitions/win32_dhcpcsvc.py +54 -0
  733. angr/procedures/definitions/win32_dhcpcsvc6.py +36 -0
  734. angr/procedures/definitions/win32_dhcpsapi.py +416 -0
  735. angr/procedures/definitions/win32_diagnosticdataquery.py +94 -0
  736. angr/procedures/definitions/win32_dinput8.py +26 -0
  737. angr/procedures/definitions/win32_directml.py +28 -0
  738. angr/procedures/definitions/win32_dmprocessxmlfiltered.py +26 -0
  739. angr/procedures/definitions/win32_dnsapi.py +152 -0
  740. angr/procedures/definitions/win32_drt.py +56 -0
  741. angr/procedures/definitions/win32_drtprov.py +42 -0
  742. angr/procedures/definitions/win32_drttransport.py +28 -0
  743. angr/procedures/definitions/win32_dsound.py +44 -0
  744. angr/procedures/definitions/win32_dsparse.py +62 -0
  745. angr/procedures/definitions/win32_dsprop.py +38 -0
  746. angr/procedures/definitions/win32_dssec.py +32 -0
  747. angr/procedures/definitions/win32_dsuiext.py +32 -0
  748. angr/procedures/definitions/win32_dwmapi.py +86 -0
  749. angr/procedures/definitions/win32_dwrite.py +26 -0
  750. angr/procedures/definitions/win32_dxcompiler.py +28 -0
  751. angr/procedures/definitions/win32_dxcore.py +26 -0
  752. angr/procedures/definitions/win32_dxgi.py +36 -0
  753. angr/procedures/definitions/win32_dxva2.py +100 -0
  754. angr/procedures/definitions/win32_eappcfg.py +52 -0
  755. angr/procedures/definitions/win32_eappprxy.py +60 -0
  756. angr/procedures/definitions/win32_efswrt.py +28 -0
  757. angr/procedures/definitions/win32_elscore.py +34 -0
  758. angr/procedures/definitions/win32_esent.py +482 -0
  759. angr/procedures/definitions/win32_evr.py +38 -0
  760. angr/procedures/definitions/win32_faultrep.py +32 -0
  761. angr/procedures/definitions/win32_fhsvcctl.py +38 -0
  762. angr/procedures/definitions/win32_firewallapi.py +30 -0
  763. angr/procedures/definitions/win32_fltlib.py +80 -0
  764. angr/procedures/definitions/win32_fontsub.py +28 -0
  765. angr/procedures/definitions/win32_forceinline.py +30 -0
  766. angr/procedures/definitions/win32_fwpuclnt.py +408 -0
  767. angr/procedures/definitions/win32_fxsutility.py +28 -0
  768. angr/procedures/definitions/win32_gdi32.py +886 -0
  769. angr/procedures/definitions/win32_gdiplus.py +1282 -0
  770. angr/procedures/definitions/win32_glu32.py +128 -0
  771. angr/procedures/definitions/win32_gpedit.py +36 -0
  772. angr/procedures/definitions/win32_hhctrl_ocx.py +28 -0
  773. angr/procedures/definitions/win32_hid.py +114 -0
  774. angr/procedures/definitions/win32_hlink.py +80 -0
  775. angr/procedures/definitions/win32_hrtfapo.py +26 -0
  776. angr/procedures/definitions/win32_httpapi.py +110 -0
  777. angr/procedures/definitions/win32_icm32.py +66 -0
  778. angr/procedures/definitions/win32_icmui.py +28 -0
  779. angr/procedures/definitions/win32_icu.py +2074 -0
  780. angr/procedures/definitions/win32_ieframe.py +82 -0
  781. angr/procedures/definitions/win32_imagehlp.py +76 -0
  782. angr/procedures/definitions/win32_imgutil.py +42 -0
  783. angr/procedures/definitions/win32_imm32.py +188 -0
  784. angr/procedures/definitions/win32_infocardapi.py +58 -0
  785. angr/procedures/definitions/win32_inkobjcore.py +78 -0
  786. angr/procedures/definitions/win32_iphlpapi.py +426 -0
  787. angr/procedures/definitions/win32_iscsidsc.py +182 -0
  788. angr/procedures/definitions/win32_isolatedwindowsenvironmentutils.py +28 -0
  789. angr/procedures/definitions/win32_kernel32.py +3185 -0
  790. angr/procedures/definitions/win32_kernelbase.py +36 -0
  791. angr/procedures/definitions/win32_keycredmgr.py +32 -0
  792. angr/procedures/definitions/win32_ksproxy_ax.py +36 -0
  793. angr/procedures/definitions/win32_ksuser.py +40 -0
  794. angr/procedures/definitions/win32_ktmw32.py +102 -0
  795. angr/procedures/definitions/win32_licenseprotection.py +28 -0
  796. angr/procedures/definitions/win32_loadperf.py +48 -0
  797. angr/procedures/definitions/win32_magnification.py +62 -0
  798. angr/procedures/definitions/win32_mapi32.py +156 -0
  799. angr/procedures/definitions/win32_mdmlocalmanagement.py +30 -0
  800. angr/procedures/definitions/win32_mdmregistration.py +54 -0
  801. angr/procedures/definitions/win32_mf.py +148 -0
  802. angr/procedures/definitions/win32_mfcore.py +28 -0
  803. angr/procedures/definitions/win32_mfplat.py +314 -0
  804. angr/procedures/definitions/win32_mfplay.py +26 -0
  805. angr/procedures/definitions/win32_mfreadwrite.py +34 -0
  806. angr/procedures/definitions/win32_mfsensorgroup.py +44 -0
  807. angr/procedures/definitions/win32_mfsrcsnk.py +28 -0
  808. angr/procedures/definitions/win32_mgmtapi.py +42 -0
  809. angr/procedures/definitions/win32_mi.py +26 -0
  810. angr/procedures/definitions/win32_mmdevapi.py +26 -0
  811. angr/procedures/definitions/win32_mpr.py +118 -0
  812. angr/procedures/definitions/win32_mprapi.py +248 -0
  813. angr/procedures/definitions/win32_mqrt.py +92 -0
  814. angr/procedures/definitions/win32_mrmsupport.py +78 -0
  815. angr/procedures/definitions/win32_msacm32.py +108 -0
  816. angr/procedures/definitions/win32_msajapi.py +1118 -0
  817. angr/procedures/definitions/win32_mscms.py +182 -0
  818. angr/procedures/definitions/win32_mscoree.py +78 -0
  819. angr/procedures/definitions/win32_msctfmonitor.py +30 -0
  820. angr/procedures/definitions/win32_msdelta.py +56 -0
  821. angr/procedures/definitions/win32_msdmo.py +46 -0
  822. angr/procedures/definitions/win32_msdrm.py +192 -0
  823. angr/procedures/definitions/win32_msi.py +552 -0
  824. angr/procedures/definitions/win32_msimg32.py +30 -0
  825. angr/procedures/definitions/win32_mspatcha.py +56 -0
  826. angr/procedures/definitions/win32_mspatchc.py +42 -0
  827. angr/procedures/definitions/win32_msports.py +38 -0
  828. angr/procedures/definitions/win32_msrating.py +62 -0
  829. angr/procedures/definitions/win32_mssign32.py +44 -0
  830. angr/procedures/definitions/win32_mstask.py +28 -0
  831. angr/procedures/definitions/win32_msvfw32.py +110 -0
  832. angr/procedures/definitions/win32_mswsock.py +56 -0
  833. angr/procedures/definitions/win32_mtxdm.py +26 -0
  834. angr/procedures/definitions/win32_ncrypt.py +102 -0
  835. angr/procedures/definitions/win32_ndfapi.py +56 -0
  836. angr/procedures/definitions/win32_netapi32.py +436 -0
  837. angr/procedures/definitions/win32_netsh.py +40 -0
  838. angr/procedures/definitions/win32_netshell.py +28 -0
  839. angr/procedures/definitions/win32_newdev.py +46 -0
  840. angr/procedures/definitions/win32_ninput.py +84 -0
  841. angr/procedures/definitions/win32_normaliz.py +28 -0
  842. angr/procedures/definitions/win32_ntdll.py +171 -0
  843. angr/procedures/definitions/win32_ntdllk.py +26 -0
  844. angr/procedures/definitions/win32_ntdsapi.py +186 -0
  845. angr/procedures/definitions/win32_ntlanman.py +44 -0
  846. angr/procedures/definitions/win32_odbc32.py +392 -0
  847. angr/procedures/definitions/win32_odbcbcp.py +78 -0
  848. angr/procedures/definitions/win32_ole32.py +658 -0
  849. angr/procedures/definitions/win32_oleacc.py +58 -0
  850. angr/procedures/definitions/win32_oleaut32.py +834 -0
  851. angr/procedures/definitions/win32_oledlg.py +70 -0
  852. angr/procedures/definitions/win32_ondemandconnroutehelper.py +34 -0
  853. angr/procedures/definitions/win32_opengl32.py +734 -0
  854. angr/procedures/definitions/win32_opmxbox.py +30 -0
  855. angr/procedures/definitions/win32_p2p.py +240 -0
  856. angr/procedures/definitions/win32_p2pgraph.py +98 -0
  857. angr/procedures/definitions/win32_pdh.py +220 -0
  858. angr/procedures/definitions/win32_peerdist.py +80 -0
  859. angr/procedures/definitions/win32_powrprof.py +192 -0
  860. angr/procedures/definitions/win32_prntvpt.py +46 -0
  861. angr/procedures/definitions/win32_projectedfslib.py +62 -0
  862. angr/procedures/definitions/win32_propsys.py +460 -0
  863. angr/procedures/definitions/win32_psapi.py +78 -0
  864. angr/procedures/definitions/win32_quartz.py +28 -0
  865. angr/procedures/definitions/win32_query.py +32 -0
  866. angr/procedures/definitions/win32_qwave.py +46 -0
  867. angr/procedures/definitions/win32_rasapi32.py +192 -0
  868. angr/procedures/definitions/win32_rasdlg.py +36 -0
  869. angr/procedures/definitions/win32_resutils.py +264 -0
  870. angr/procedures/definitions/win32_rometadata.py +24 -0
  871. angr/procedures/definitions/win32_rpcns4.py +146 -0
  872. angr/procedures/definitions/win32_rpcproxy.py +32 -0
  873. angr/procedures/definitions/win32_rpcrt4.py +918 -0
  874. angr/procedures/definitions/win32_rstrtmgr.py +46 -0
  875. angr/procedures/definitions/win32_rtm.py +176 -0
  876. angr/procedures/definitions/win32_rtutils.py +106 -0
  877. angr/procedures/definitions/win32_rtworkq.py +90 -0
  878. angr/procedures/definitions/win32_sas.py +26 -0
  879. angr/procedures/definitions/win32_scarddlg.py +34 -0
  880. angr/procedures/definitions/win32_schannel.py +42 -0
  881. angr/procedures/definitions/win32_sechost.py +28 -0
  882. angr/procedures/definitions/win32_secur32.py +202 -0
  883. angr/procedures/definitions/win32_sensapi.py +30 -0
  884. angr/procedures/definitions/win32_sensorsutilsv2.py +104 -0
  885. angr/procedures/definitions/win32_setupapi.py +692 -0
  886. angr/procedures/definitions/win32_sfc.py +36 -0
  887. angr/procedures/definitions/win32_shdocvw.py +30 -0
  888. angr/procedures/definitions/win32_shell32.py +512 -0
  889. angr/procedures/definitions/win32_shlwapi.py +744 -0
  890. angr/procedures/definitions/win32_slc.py +88 -0
  891. angr/procedures/definitions/win32_slcext.py +32 -0
  892. angr/procedures/definitions/win32_slwga.py +26 -0
  893. angr/procedures/definitions/win32_snmpapi.py +76 -0
  894. angr/procedures/definitions/win32_spoolss.py +76 -0
  895. angr/procedures/definitions/win32_srclient.py +26 -0
  896. angr/procedures/definitions/win32_srpapi.py +46 -0
  897. angr/procedures/definitions/win32_sspicli.py +38 -0
  898. angr/procedures/definitions/win32_sti.py +26 -0
  899. angr/procedures/definitions/win32_t2embed.py +52 -0
  900. angr/procedures/definitions/win32_tapi32.py +522 -0
  901. angr/procedures/definitions/win32_tbs.py +52 -0
  902. angr/procedures/definitions/win32_tdh.py +78 -0
  903. angr/procedures/definitions/win32_tokenbinding.py +44 -0
  904. angr/procedures/definitions/win32_traffic.py +64 -0
  905. angr/procedures/definitions/win32_txfw32.py +42 -0
  906. angr/procedures/definitions/win32_ualapi.py +32 -0
  907. angr/procedures/definitions/win32_uiautomationcore.py +220 -0
  908. angr/procedures/definitions/win32_urlmon.py +178 -0
  909. angr/procedures/definitions/win32_user32.py +1551 -0
  910. angr/procedures/definitions/win32_userenv.py +112 -0
  911. angr/procedures/definitions/win32_usp10.py +104 -0
  912. angr/procedures/definitions/win32_uxtheme.py +178 -0
  913. angr/procedures/definitions/win32_verifier.py +26 -0
  914. angr/procedures/definitions/win32_version.py +52 -0
  915. angr/procedures/definitions/win32_vertdll.py +38 -0
  916. angr/procedures/definitions/win32_virtdisk.py +82 -0
  917. angr/procedures/definitions/win32_vmdevicehost.py +50 -0
  918. angr/procedures/definitions/win32_vmsavedstatedumpprovider.py +110 -0
  919. angr/procedures/definitions/win32_vssapi.py +26 -0
  920. angr/procedures/definitions/win32_wcmapi.py +34 -0
  921. angr/procedures/definitions/win32_wdsbp.py +38 -0
  922. angr/procedures/definitions/win32_wdsclientapi.py +98 -0
  923. angr/procedures/definitions/win32_wdsmc.py +36 -0
  924. angr/procedures/definitions/win32_wdspxe.py +86 -0
  925. angr/procedures/definitions/win32_wdstptc.py +50 -0
  926. angr/procedures/definitions/win32_webauthn.py +50 -0
  927. angr/procedures/definitions/win32_webservices.py +410 -0
  928. angr/procedures/definitions/win32_websocket.py +50 -0
  929. angr/procedures/definitions/win32_wecapi.py +54 -0
  930. angr/procedures/definitions/win32_wer.py +66 -0
  931. angr/procedures/definitions/win32_wevtapi.py +94 -0
  932. angr/procedures/definitions/win32_winbio.py +132 -0
  933. angr/procedures/definitions/win32_windows_ai_machinelearning.py +26 -0
  934. angr/procedures/definitions/win32_windows_data_pdf.py +24 -0
  935. angr/procedures/definitions/win32_windows_media_mediacontrol.py +40 -0
  936. angr/procedures/definitions/win32_windows_networking.py +26 -0
  937. angr/procedures/definitions/win32_windows_ui_xaml.py +28 -0
  938. angr/procedures/definitions/win32_windowscodecs.py +42 -0
  939. angr/procedures/definitions/win32_winfax.py +136 -0
  940. angr/procedures/definitions/win32_winhttp.py +136 -0
  941. angr/procedures/definitions/win32_winhvemulation.py +32 -0
  942. angr/procedures/definitions/win32_winhvplatform.py +156 -0
  943. angr/procedures/definitions/win32_wininet.py +616 -0
  944. angr/procedures/definitions/win32_winml.py +26 -0
  945. angr/procedures/definitions/win32_winmm.py +376 -0
  946. angr/procedures/definitions/win32_winscard.py +164 -0
  947. angr/procedures/definitions/win32_winspool.py +364 -0
  948. angr/procedures/definitions/win32_winspool_drv.py +368 -0
  949. angr/procedures/definitions/win32_wintrust.py +144 -0
  950. angr/procedures/definitions/win32_winusb.py +92 -0
  951. angr/procedures/definitions/win32_wlanapi.py +144 -0
  952. angr/procedures/definitions/win32_wlanui.py +26 -0
  953. angr/procedures/definitions/win32_wldap32.py +510 -0
  954. angr/procedures/definitions/win32_wldp.py +42 -0
  955. angr/procedures/definitions/win32_wmvcore.py +46 -0
  956. angr/procedures/definitions/win32_wnvapi.py +28 -0
  957. angr/procedures/definitions/win32_wofutil.py +46 -0
  958. angr/procedures/definitions/win32_ws2_32.py +344 -0
  959. angr/procedures/definitions/win32_wscapi.py +36 -0
  960. angr/procedures/definitions/win32_wsclient.py +30 -0
  961. angr/procedures/definitions/win32_wsdapi.py +88 -0
  962. angr/procedures/definitions/win32_wsmsvc.py +90 -0
  963. angr/procedures/definitions/win32_wsnmp32.py +122 -0
  964. angr/procedures/definitions/win32_wtsapi32.py +150 -0
  965. angr/procedures/definitions/win32_xaudio2_8.py +32 -0
  966. angr/procedures/definitions/win32_xinput1_4.py +38 -0
  967. angr/procedures/definitions/win32_xinputuap.py +36 -0
  968. angr/procedures/definitions/win32_xmllite.py +36 -0
  969. angr/procedures/definitions/win32_xolehlp.py +32 -0
  970. angr/procedures/definitions/win32_xpsprint.py +28 -0
  971. angr/procedures/glibc/__ctype_b_loc.py +21 -0
  972. angr/procedures/glibc/__ctype_tolower_loc.py +21 -0
  973. angr/procedures/glibc/__ctype_toupper_loc.py +21 -0
  974. angr/procedures/glibc/__errno_location.py +7 -0
  975. angr/procedures/glibc/__init__.py +3 -0
  976. angr/procedures/glibc/__libc_init.py +37 -0
  977. angr/procedures/glibc/__libc_start_main.py +301 -0
  978. angr/procedures/glibc/dynamic_loading.py +20 -0
  979. angr/procedures/glibc/scanf.py +11 -0
  980. angr/procedures/glibc/sscanf.py +6 -0
  981. angr/procedures/gnulib/__init__.py +3 -0
  982. angr/procedures/gnulib/xalloc_die.py +14 -0
  983. angr/procedures/gnulib/xstrtol_fatal.py +14 -0
  984. angr/procedures/java/__init__.py +42 -0
  985. angr/procedures/java/unconstrained.py +65 -0
  986. angr/procedures/java_io/__init__.py +0 -0
  987. angr/procedures/java_io/read.py +12 -0
  988. angr/procedures/java_io/write.py +17 -0
  989. angr/procedures/java_jni/__init__.py +482 -0
  990. angr/procedures/java_jni/array_operations.py +312 -0
  991. angr/procedures/java_jni/class_and_interface_operations.py +31 -0
  992. angr/procedures/java_jni/field_access.py +173 -0
  993. angr/procedures/java_jni/global_and_local_refs.py +57 -0
  994. angr/procedures/java_jni/method_calls.py +365 -0
  995. angr/procedures/java_jni/not_implemented.py +26 -0
  996. angr/procedures/java_jni/object_operations.py +94 -0
  997. angr/procedures/java_jni/string_operations.py +87 -0
  998. angr/procedures/java_jni/version_information.py +12 -0
  999. angr/procedures/java_lang/__init__.py +0 -0
  1000. angr/procedures/java_lang/character.py +30 -0
  1001. angr/procedures/java_lang/double.py +24 -0
  1002. angr/procedures/java_lang/exit.py +13 -0
  1003. angr/procedures/java_lang/getsimplename.py +18 -0
  1004. angr/procedures/java_lang/integer.py +43 -0
  1005. angr/procedures/java_lang/load_library.py +9 -0
  1006. angr/procedures/java_lang/math.py +15 -0
  1007. angr/procedures/java_lang/string.py +78 -0
  1008. angr/procedures/java_lang/stringbuilder.py +44 -0
  1009. angr/procedures/java_lang/system.py +18 -0
  1010. angr/procedures/java_util/__init__.py +0 -0
  1011. angr/procedures/java_util/collection.py +35 -0
  1012. angr/procedures/java_util/iterator.py +46 -0
  1013. angr/procedures/java_util/list.py +99 -0
  1014. angr/procedures/java_util/map.py +131 -0
  1015. angr/procedures/java_util/random.py +14 -0
  1016. angr/procedures/java_util/scanner_nextline.py +23 -0
  1017. angr/procedures/libc/__init__.py +3 -0
  1018. angr/procedures/libc/abort.py +9 -0
  1019. angr/procedures/libc/access.py +13 -0
  1020. angr/procedures/libc/atoi.py +14 -0
  1021. angr/procedures/libc/atol.py +13 -0
  1022. angr/procedures/libc/calloc.py +8 -0
  1023. angr/procedures/libc/closelog.py +10 -0
  1024. angr/procedures/libc/err.py +14 -0
  1025. angr/procedures/libc/error.py +54 -0
  1026. angr/procedures/libc/exit.py +11 -0
  1027. angr/procedures/libc/fclose.py +19 -0
  1028. angr/procedures/libc/feof.py +21 -0
  1029. angr/procedures/libc/fflush.py +16 -0
  1030. angr/procedures/libc/fgetc.py +27 -0
  1031. angr/procedures/libc/fgets.py +68 -0
  1032. angr/procedures/libc/fopen.py +63 -0
  1033. angr/procedures/libc/fprintf.py +25 -0
  1034. angr/procedures/libc/fputc.py +23 -0
  1035. angr/procedures/libc/fputs.py +24 -0
  1036. angr/procedures/libc/fread.py +24 -0
  1037. angr/procedures/libc/free.py +9 -0
  1038. angr/procedures/libc/fscanf.py +20 -0
  1039. angr/procedures/libc/fseek.py +34 -0
  1040. angr/procedures/libc/ftell.py +22 -0
  1041. angr/procedures/libc/fwrite.py +19 -0
  1042. angr/procedures/libc/getchar.py +13 -0
  1043. angr/procedures/libc/getdelim.py +99 -0
  1044. angr/procedures/libc/getegid.py +8 -0
  1045. angr/procedures/libc/geteuid.py +8 -0
  1046. angr/procedures/libc/getgid.py +8 -0
  1047. angr/procedures/libc/gets.py +68 -0
  1048. angr/procedures/libc/getuid.py +8 -0
  1049. angr/procedures/libc/malloc.py +12 -0
  1050. angr/procedures/libc/memcmp.py +69 -0
  1051. angr/procedures/libc/memcpy.py +38 -0
  1052. angr/procedures/libc/memset.py +72 -0
  1053. angr/procedures/libc/openlog.py +10 -0
  1054. angr/procedures/libc/perror.py +13 -0
  1055. angr/procedures/libc/printf.py +34 -0
  1056. angr/procedures/libc/putchar.py +13 -0
  1057. angr/procedures/libc/puts.py +19 -0
  1058. angr/procedures/libc/rand.py +8 -0
  1059. angr/procedures/libc/realloc.py +8 -0
  1060. angr/procedures/libc/rewind.py +12 -0
  1061. angr/procedures/libc/scanf.py +20 -0
  1062. angr/procedures/libc/setbuf.py +9 -0
  1063. angr/procedures/libc/setvbuf.py +7 -0
  1064. angr/procedures/libc/snprintf.py +36 -0
  1065. angr/procedures/libc/sprintf.py +25 -0
  1066. angr/procedures/libc/srand.py +7 -0
  1067. angr/procedures/libc/sscanf.py +13 -0
  1068. angr/procedures/libc/stpcpy.py +18 -0
  1069. angr/procedures/libc/strcat.py +14 -0
  1070. angr/procedures/libc/strchr.py +48 -0
  1071. angr/procedures/libc/strcmp.py +31 -0
  1072. angr/procedures/libc/strcpy.py +13 -0
  1073. angr/procedures/libc/strlen.py +114 -0
  1074. angr/procedures/libc/strncat.py +19 -0
  1075. angr/procedures/libc/strncmp.py +183 -0
  1076. angr/procedures/libc/strncpy.py +22 -0
  1077. angr/procedures/libc/strnlen.py +13 -0
  1078. angr/procedures/libc/strstr.py +101 -0
  1079. angr/procedures/libc/strtol.py +261 -0
  1080. angr/procedures/libc/strtoul.py +9 -0
  1081. angr/procedures/libc/system.py +13 -0
  1082. angr/procedures/libc/time.py +9 -0
  1083. angr/procedures/libc/tmpnam.py +20 -0
  1084. angr/procedures/libc/tolower.py +10 -0
  1085. angr/procedures/libc/toupper.py +10 -0
  1086. angr/procedures/libc/ungetc.py +20 -0
  1087. angr/procedures/libc/vsnprintf.py +17 -0
  1088. angr/procedures/libc/wchar.py +16 -0
  1089. angr/procedures/libstdcpp/__init__.py +0 -0
  1090. angr/procedures/libstdcpp/_unwind_resume.py +11 -0
  1091. angr/procedures/libstdcpp/std____throw_bad_alloc.py +13 -0
  1092. angr/procedures/libstdcpp/std____throw_bad_cast.py +13 -0
  1093. angr/procedures/libstdcpp/std____throw_length_error.py +13 -0
  1094. angr/procedures/libstdcpp/std____throw_logic_error.py +13 -0
  1095. angr/procedures/libstdcpp/std__terminate.py +13 -0
  1096. angr/procedures/linux_kernel/__init__.py +3 -0
  1097. angr/procedures/linux_kernel/access.py +18 -0
  1098. angr/procedures/linux_kernel/arch_prctl.py +34 -0
  1099. angr/procedures/linux_kernel/arm_user_helpers.py +59 -0
  1100. angr/procedures/linux_kernel/brk.py +18 -0
  1101. angr/procedures/linux_kernel/cwd.py +28 -0
  1102. angr/procedures/linux_kernel/fstat.py +138 -0
  1103. angr/procedures/linux_kernel/fstat64.py +170 -0
  1104. angr/procedures/linux_kernel/futex.py +17 -0
  1105. angr/procedures/linux_kernel/getegid.py +17 -0
  1106. angr/procedures/linux_kernel/geteuid.py +17 -0
  1107. angr/procedures/linux_kernel/getgid.py +17 -0
  1108. angr/procedures/linux_kernel/getpid.py +14 -0
  1109. angr/procedures/linux_kernel/getrlimit.py +24 -0
  1110. angr/procedures/linux_kernel/gettid.py +9 -0
  1111. angr/procedures/linux_kernel/getuid.py +17 -0
  1112. angr/procedures/linux_kernel/iovec.py +47 -0
  1113. angr/procedures/linux_kernel/lseek.py +42 -0
  1114. angr/procedures/linux_kernel/mmap.py +16 -0
  1115. angr/procedures/linux_kernel/mprotect.py +42 -0
  1116. angr/procedures/linux_kernel/munmap.py +8 -0
  1117. angr/procedures/linux_kernel/openat.py +26 -0
  1118. angr/procedures/linux_kernel/set_tid_address.py +8 -0
  1119. angr/procedures/linux_kernel/sigaction.py +19 -0
  1120. angr/procedures/linux_kernel/sigprocmask.py +23 -0
  1121. angr/procedures/linux_kernel/stat.py +23 -0
  1122. angr/procedures/linux_kernel/sysinfo.py +59 -0
  1123. angr/procedures/linux_kernel/tgkill.py +10 -0
  1124. angr/procedures/linux_kernel/time.py +34 -0
  1125. angr/procedures/linux_kernel/uid.py +30 -0
  1126. angr/procedures/linux_kernel/uname.py +29 -0
  1127. angr/procedures/linux_kernel/unlink.py +22 -0
  1128. angr/procedures/linux_kernel/vsyscall.py +16 -0
  1129. angr/procedures/linux_loader/__init__.py +3 -0
  1130. angr/procedures/linux_loader/_dl_initial_error_catch_tsd.py +7 -0
  1131. angr/procedures/linux_loader/_dl_rtld_lock.py +15 -0
  1132. angr/procedures/linux_loader/sim_loader.py +54 -0
  1133. angr/procedures/linux_loader/tls.py +40 -0
  1134. angr/procedures/msvcr/__getmainargs.py +16 -0
  1135. angr/procedures/msvcr/__init__.py +4 -0
  1136. angr/procedures/msvcr/_initterm.py +38 -0
  1137. angr/procedures/msvcr/fmode.py +31 -0
  1138. angr/procedures/ntdll/__init__.py +0 -0
  1139. angr/procedures/ntdll/exceptions.py +60 -0
  1140. angr/procedures/posix/__init__.py +3 -0
  1141. angr/procedures/posix/accept.py +29 -0
  1142. angr/procedures/posix/bind.py +13 -0
  1143. angr/procedures/posix/bzero.py +9 -0
  1144. angr/procedures/posix/chroot.py +27 -0
  1145. angr/procedures/posix/close.py +9 -0
  1146. angr/procedures/posix/closedir.py +7 -0
  1147. angr/procedures/posix/dup.py +56 -0
  1148. angr/procedures/posix/fcntl.py +10 -0
  1149. angr/procedures/posix/fdopen.py +76 -0
  1150. angr/procedures/posix/fileno.py +18 -0
  1151. angr/procedures/posix/fork.py +13 -0
  1152. angr/procedures/posix/getenv.py +35 -0
  1153. angr/procedures/posix/gethostbyname.py +43 -0
  1154. angr/procedures/posix/getpass.py +19 -0
  1155. angr/procedures/posix/getsockopt.py +11 -0
  1156. angr/procedures/posix/htonl.py +11 -0
  1157. angr/procedures/posix/htons.py +11 -0
  1158. angr/procedures/posix/inet_ntoa.py +59 -0
  1159. angr/procedures/posix/listen.py +13 -0
  1160. angr/procedures/posix/mmap.py +144 -0
  1161. angr/procedures/posix/open.py +18 -0
  1162. angr/procedures/posix/opendir.py +10 -0
  1163. angr/procedures/posix/poll.py +55 -0
  1164. angr/procedures/posix/pread64.py +46 -0
  1165. angr/procedures/posix/pthread.py +87 -0
  1166. angr/procedures/posix/pwrite64.py +46 -0
  1167. angr/procedures/posix/read.py +13 -0
  1168. angr/procedures/posix/readdir.py +62 -0
  1169. angr/procedures/posix/recv.py +13 -0
  1170. angr/procedures/posix/recvfrom.py +13 -0
  1171. angr/procedures/posix/select.py +48 -0
  1172. angr/procedures/posix/send.py +23 -0
  1173. angr/procedures/posix/setsockopt.py +9 -0
  1174. angr/procedures/posix/sigaction.py +23 -0
  1175. angr/procedures/posix/sim_time.py +48 -0
  1176. angr/procedures/posix/sleep.py +8 -0
  1177. angr/procedures/posix/socket.py +18 -0
  1178. angr/procedures/posix/strcasecmp.py +26 -0
  1179. angr/procedures/posix/strdup.py +18 -0
  1180. angr/procedures/posix/strtok_r.py +64 -0
  1181. angr/procedures/posix/syslog.py +15 -0
  1182. angr/procedures/posix/tz.py +9 -0
  1183. angr/procedures/posix/unlink.py +11 -0
  1184. angr/procedures/posix/usleep.py +8 -0
  1185. angr/procedures/posix/write.py +13 -0
  1186. angr/procedures/procedure_dict.py +50 -0
  1187. angr/procedures/stubs/CallReturn.py +13 -0
  1188. angr/procedures/stubs/NoReturnUnconstrained.py +13 -0
  1189. angr/procedures/stubs/Nop.py +7 -0
  1190. angr/procedures/stubs/PathTerminator.py +9 -0
  1191. angr/procedures/stubs/Redirect.py +18 -0
  1192. angr/procedures/stubs/ReturnChar.py +11 -0
  1193. angr/procedures/stubs/ReturnUnconstrained.py +24 -0
  1194. angr/procedures/stubs/UnresolvableCallTarget.py +9 -0
  1195. angr/procedures/stubs/UnresolvableJumpTarget.py +9 -0
  1196. angr/procedures/stubs/UserHook.py +18 -0
  1197. angr/procedures/stubs/__init__.py +3 -0
  1198. angr/procedures/stubs/b64_decode.py +15 -0
  1199. angr/procedures/stubs/caller.py +14 -0
  1200. angr/procedures/stubs/crazy_scanf.py +20 -0
  1201. angr/procedures/stubs/format_parser.py +669 -0
  1202. angr/procedures/stubs/syscall_stub.py +24 -0
  1203. angr/procedures/testing/__init__.py +3 -0
  1204. angr/procedures/testing/manyargs.py +9 -0
  1205. angr/procedures/testing/retreg.py +8 -0
  1206. angr/procedures/tracer/__init__.py +4 -0
  1207. angr/procedures/tracer/random.py +9 -0
  1208. angr/procedures/tracer/receive.py +23 -0
  1209. angr/procedures/tracer/transmit.py +26 -0
  1210. angr/procedures/uclibc/__init__.py +3 -0
  1211. angr/procedures/uclibc/__uClibc_main.py +10 -0
  1212. angr/procedures/win32/EncodePointer.py +7 -0
  1213. angr/procedures/win32/ExitProcess.py +9 -0
  1214. angr/procedures/win32/GetCommandLine.py +12 -0
  1215. angr/procedures/win32/GetCurrentProcessId.py +7 -0
  1216. angr/procedures/win32/GetCurrentThreadId.py +7 -0
  1217. angr/procedures/win32/GetLastInputInfo.py +40 -0
  1218. angr/procedures/win32/GetModuleHandle.py +29 -0
  1219. angr/procedures/win32/GetProcessAffinityMask.py +37 -0
  1220. angr/procedures/win32/InterlockedExchange.py +15 -0
  1221. angr/procedures/win32/IsProcessorFeaturePresent.py +7 -0
  1222. angr/procedures/win32/VirtualAlloc.py +114 -0
  1223. angr/procedures/win32/VirtualProtect.py +60 -0
  1224. angr/procedures/win32/__init__.py +3 -0
  1225. angr/procedures/win32/critical_section.py +12 -0
  1226. angr/procedures/win32/dynamic_loading.py +104 -0
  1227. angr/procedures/win32/file_handles.py +47 -0
  1228. angr/procedures/win32/gethostbyname.py +12 -0
  1229. angr/procedures/win32/heap.py +45 -0
  1230. angr/procedures/win32/is_bad_ptr.py +26 -0
  1231. angr/procedures/win32/local_storage.py +88 -0
  1232. angr/procedures/win32/mutex.py +11 -0
  1233. angr/procedures/win32/sim_time.py +135 -0
  1234. angr/procedures/win32/system_paths.py +35 -0
  1235. angr/procedures/win32_kernel/ExAllocatePool.py +13 -0
  1236. angr/procedures/win32_kernel/ExFreePoolWithTag.py +8 -0
  1237. angr/procedures/win32_kernel/__fastfail.py +15 -0
  1238. angr/procedures/win32_kernel/__init__.py +3 -0
  1239. angr/procedures/win_user32/__init__.py +0 -0
  1240. angr/procedures/win_user32/chars.py +15 -0
  1241. angr/procedures/win_user32/keyboard.py +14 -0
  1242. angr/procedures/win_user32/messagebox.py +49 -0
  1243. angr/project.py +837 -0
  1244. angr/protos/__init__.py +19 -0
  1245. angr/protos/cfg_pb2.py +31 -0
  1246. angr/protos/function_pb2.py +27 -0
  1247. angr/protos/primitives_pb2.py +52 -0
  1248. angr/protos/variables_pb2.py +44 -0
  1249. angr/protos/xrefs_pb2.py +25 -0
  1250. angr/py.typed +1 -0
  1251. angr/rustylib.abi3.so +0 -0
  1252. angr/serializable.py +66 -0
  1253. angr/sim_manager.py +971 -0
  1254. angr/sim_options.py +438 -0
  1255. angr/sim_procedure.py +606 -0
  1256. angr/sim_state.py +901 -0
  1257. angr/sim_state_options.py +403 -0
  1258. angr/sim_type.py +3679 -0
  1259. angr/sim_variable.py +465 -0
  1260. angr/simos/__init__.py +47 -0
  1261. angr/simos/cgc.py +153 -0
  1262. angr/simos/javavm.py +458 -0
  1263. angr/simos/linux.py +509 -0
  1264. angr/simos/simos.py +444 -0
  1265. angr/simos/snimmuc_nxp.py +149 -0
  1266. angr/simos/userland.py +163 -0
  1267. angr/simos/windows.py +601 -0
  1268. angr/simos/xbox.py +32 -0
  1269. angr/slicer.py +352 -0
  1270. angr/state_hierarchy.py +262 -0
  1271. angr/state_plugins/__init__.py +84 -0
  1272. angr/state_plugins/callstack.py +398 -0
  1273. angr/state_plugins/cgc.py +155 -0
  1274. angr/state_plugins/debug_variables.py +192 -0
  1275. angr/state_plugins/filesystem.py +463 -0
  1276. angr/state_plugins/gdb.py +148 -0
  1277. angr/state_plugins/globals.py +65 -0
  1278. angr/state_plugins/heap/__init__.py +15 -0
  1279. angr/state_plugins/heap/heap_base.py +128 -0
  1280. angr/state_plugins/heap/heap_brk.py +136 -0
  1281. angr/state_plugins/heap/heap_freelist.py +213 -0
  1282. angr/state_plugins/heap/heap_libc.py +46 -0
  1283. angr/state_plugins/heap/heap_ptmalloc.py +620 -0
  1284. angr/state_plugins/heap/utils.py +22 -0
  1285. angr/state_plugins/history.py +548 -0
  1286. angr/state_plugins/inspect.py +375 -0
  1287. angr/state_plugins/javavm_classloader.py +134 -0
  1288. angr/state_plugins/jni_references.py +95 -0
  1289. angr/state_plugins/libc.py +1263 -0
  1290. angr/state_plugins/light_registers.py +168 -0
  1291. angr/state_plugins/log.py +84 -0
  1292. angr/state_plugins/loop_data.py +92 -0
  1293. angr/state_plugins/plugin.py +170 -0
  1294. angr/state_plugins/posix.py +703 -0
  1295. angr/state_plugins/preconstrainer.py +196 -0
  1296. angr/state_plugins/scratch.py +173 -0
  1297. angr/state_plugins/sim_action.py +326 -0
  1298. angr/state_plugins/sim_action_object.py +271 -0
  1299. angr/state_plugins/sim_event.py +59 -0
  1300. angr/state_plugins/solver.py +1127 -0
  1301. angr/state_plugins/symbolizer.py +291 -0
  1302. angr/state_plugins/trace_additions.py +738 -0
  1303. angr/state_plugins/uc_manager.py +94 -0
  1304. angr/state_plugins/unicorn_engine.py +1886 -0
  1305. angr/state_plugins/view.py +340 -0
  1306. angr/storage/__init__.py +15 -0
  1307. angr/storage/file.py +1210 -0
  1308. angr/storage/memory_mixins/__init__.py +317 -0
  1309. angr/storage/memory_mixins/actions_mixin.py +72 -0
  1310. angr/storage/memory_mixins/address_concretization_mixin.py +384 -0
  1311. angr/storage/memory_mixins/bvv_conversion_mixin.py +73 -0
  1312. angr/storage/memory_mixins/clouseau_mixin.py +137 -0
  1313. angr/storage/memory_mixins/conditional_store_mixin.py +25 -0
  1314. angr/storage/memory_mixins/convenient_mappings_mixin.py +256 -0
  1315. angr/storage/memory_mixins/default_filler_mixin.py +144 -0
  1316. angr/storage/memory_mixins/dirty_addrs_mixin.py +11 -0
  1317. angr/storage/memory_mixins/hex_dumper_mixin.py +82 -0
  1318. angr/storage/memory_mixins/javavm_memory_mixin.py +392 -0
  1319. angr/storage/memory_mixins/keyvalue_memory_mixin.py +42 -0
  1320. angr/storage/memory_mixins/label_merger_mixin.py +31 -0
  1321. angr/storage/memory_mixins/memory_mixin.py +174 -0
  1322. angr/storage/memory_mixins/multi_value_merger_mixin.py +79 -0
  1323. angr/storage/memory_mixins/name_resolution_mixin.py +67 -0
  1324. angr/storage/memory_mixins/paged_memory/__init__.py +0 -0
  1325. angr/storage/memory_mixins/paged_memory/page_backer_mixins.py +266 -0
  1326. angr/storage/memory_mixins/paged_memory/paged_memory_mixin.py +743 -0
  1327. angr/storage/memory_mixins/paged_memory/paged_memory_multivalue_mixin.py +65 -0
  1328. angr/storage/memory_mixins/paged_memory/pages/__init__.py +26 -0
  1329. angr/storage/memory_mixins/paged_memory/pages/base.py +31 -0
  1330. angr/storage/memory_mixins/paged_memory/pages/cooperation.py +341 -0
  1331. angr/storage/memory_mixins/paged_memory/pages/history_tracking_mixin.py +92 -0
  1332. angr/storage/memory_mixins/paged_memory/pages/ispo_mixin.py +55 -0
  1333. angr/storage/memory_mixins/paged_memory/pages/list_page.py +338 -0
  1334. angr/storage/memory_mixins/paged_memory/pages/multi_values.py +324 -0
  1335. angr/storage/memory_mixins/paged_memory/pages/mv_list_page.py +419 -0
  1336. angr/storage/memory_mixins/paged_memory/pages/permissions_mixin.py +36 -0
  1337. angr/storage/memory_mixins/paged_memory/pages/refcount_mixin.py +52 -0
  1338. angr/storage/memory_mixins/paged_memory/pages/ultra_page.py +503 -0
  1339. angr/storage/memory_mixins/paged_memory/privileged_mixin.py +36 -0
  1340. angr/storage/memory_mixins/paged_memory/stack_allocation_mixin.py +74 -0
  1341. angr/storage/memory_mixins/regioned_memory/__init__.py +17 -0
  1342. angr/storage/memory_mixins/regioned_memory/abstract_address_descriptor.py +36 -0
  1343. angr/storage/memory_mixins/regioned_memory/abstract_merger_mixin.py +31 -0
  1344. angr/storage/memory_mixins/regioned_memory/region_category_mixin.py +9 -0
  1345. angr/storage/memory_mixins/regioned_memory/region_data.py +246 -0
  1346. angr/storage/memory_mixins/regioned_memory/region_meta_mixin.py +241 -0
  1347. angr/storage/memory_mixins/regioned_memory/regioned_address_concretization_mixin.py +119 -0
  1348. angr/storage/memory_mixins/regioned_memory/regioned_memory_mixin.py +441 -0
  1349. angr/storage/memory_mixins/regioned_memory/static_find_mixin.py +69 -0
  1350. angr/storage/memory_mixins/simple_interface_mixin.py +71 -0
  1351. angr/storage/memory_mixins/simplification_mixin.py +15 -0
  1352. angr/storage/memory_mixins/size_resolution_mixin.py +143 -0
  1353. angr/storage/memory_mixins/slotted_memory.py +140 -0
  1354. angr/storage/memory_mixins/smart_find_mixin.py +161 -0
  1355. angr/storage/memory_mixins/symbolic_merger_mixin.py +16 -0
  1356. angr/storage/memory_mixins/top_merger_mixin.py +25 -0
  1357. angr/storage/memory_mixins/underconstrained_mixin.py +67 -0
  1358. angr/storage/memory_mixins/unwrapper_mixin.py +26 -0
  1359. angr/storage/memory_object.py +195 -0
  1360. angr/tablespecs.py +91 -0
  1361. angr/utils/__init__.py +46 -0
  1362. angr/utils/ail.py +70 -0
  1363. angr/utils/algo.py +34 -0
  1364. angr/utils/bits.py +46 -0
  1365. angr/utils/constants.py +9 -0
  1366. angr/utils/cowdict.py +63 -0
  1367. angr/utils/cpp.py +17 -0
  1368. angr/utils/doms.py +149 -0
  1369. angr/utils/dynamic_dictlist.py +89 -0
  1370. angr/utils/endness.py +18 -0
  1371. angr/utils/enums_conv.py +97 -0
  1372. angr/utils/env.py +12 -0
  1373. angr/utils/formatting.py +128 -0
  1374. angr/utils/funcid.py +159 -0
  1375. angr/utils/graph.py +898 -0
  1376. angr/utils/lazy_import.py +13 -0
  1377. angr/utils/library.py +211 -0
  1378. angr/utils/loader.py +55 -0
  1379. angr/utils/mp.py +66 -0
  1380. angr/utils/orderedset.py +74 -0
  1381. angr/utils/ssa/__init__.py +395 -0
  1382. angr/utils/ssa/tmp_uses_collector.py +23 -0
  1383. angr/utils/ssa/vvar_uses_collector.py +37 -0
  1384. angr/utils/tagged_interval_map.py +112 -0
  1385. angr/utils/timing.py +74 -0
  1386. angr/utils/types.py +151 -0
  1387. angr/vaults.py +367 -0
  1388. angr-9.2.158.dist-info/METADATA +111 -0
  1389. angr-9.2.158.dist-info/RECORD +1393 -0
  1390. angr-9.2.158.dist-info/WHEEL +5 -0
  1391. angr-9.2.158.dist-info/entry_points.txt +2 -0
  1392. angr-9.2.158.dist-info/licenses/LICENSE +27 -0
  1393. angr-9.2.158.dist-info/top_level.txt +1 -0
@@ -0,0 +1,659 @@
1
+ # pylint:disable=unused-argument
2
+ from __future__ import annotations
3
+ import logging
4
+ from collections import namedtuple
5
+ from collections.abc import Generator
6
+ from typing import Any, TYPE_CHECKING
7
+ from enum import Enum
8
+
9
+ import networkx
10
+
11
+ import ailment
12
+
13
+ from angr.analyses.decompiler import RegionIdentifier
14
+ from angr.analyses.decompiler.ailgraph_walker import AILGraphWalker
15
+ from angr.analyses.decompiler.condition_processor import ConditionProcessor
16
+ from angr.analyses.decompiler.goto_manager import Goto, GotoManager
17
+ from angr.analyses.decompiler.structuring import RecursiveStructurer, SAILRStructurer
18
+ from angr.analyses.decompiler.utils import add_labels, remove_edges_in_ailgraph
19
+ from angr.analyses.decompiler.counters import ControlFlowStructureCounter
20
+ from angr.project import Project
21
+
22
+ if TYPE_CHECKING:
23
+ from angr.knowledge_plugins.functions import Function
24
+ from angr.analyses.decompiler.stack_item import StackItem
25
+
26
+
27
+ _l = logging.getLogger(__name__)
28
+
29
+
30
+ BlockCache = namedtuple("BlockCache", ("rd", "prop"))
31
+
32
+
33
+ class MultipleBlocksException(Exception):
34
+ """
35
+ An exception that is raised in _get_block() where multiple blocks satisfy the criteria but only one block was
36
+ requested.
37
+ """
38
+
39
+
40
+ class OptimizationPassStage(Enum):
41
+ """
42
+ Enums about optimization pass stages.
43
+
44
+ Note that the region identification pass (RegionIdentifier) may modify existing AIL blocks *without updating the
45
+ topology of the original AIL graph*. For example, loop successor refinement may modify create a new AIL block with
46
+ an artificial address, and alter existing jump targets of jump statements and conditional jump statements to point
47
+ to this new block. However, loop successor refinement does not update the topology of the original AIL graph, which
48
+ means this new AIL block does not exist in the original AIL graph. As a result, until this behavior of
49
+ RegionIdentifier changes in the future, DURING_REGION_IDENTIFICATION optimization passes should not modify existing
50
+ jump targets.
51
+ """
52
+
53
+ AFTER_AIL_GRAPH_CREATION = 0
54
+ BEFORE_SSA_LEVEL0_TRANSFORMATION = 1
55
+ AFTER_SINGLE_BLOCK_SIMPLIFICATION = 2
56
+ BEFORE_SSA_LEVEL1_TRANSFORMATION = 3
57
+ AFTER_MAKING_CALLSITES = 4
58
+ AFTER_GLOBAL_SIMPLIFICATION = 5
59
+ BEFORE_VARIABLE_RECOVERY = 6
60
+ AFTER_VARIABLE_RECOVERY = 7
61
+ BEFORE_REGION_IDENTIFICATION = 8
62
+ DURING_REGION_IDENTIFICATION = 9
63
+ AFTER_STRUCTURING = 10
64
+
65
+
66
+ class BaseOptimizationPass:
67
+ """
68
+ The base class for any optimization pass.
69
+ """
70
+
71
+ ARCHES = [] # strings of supported architectures
72
+ PLATFORMS = [] # strings of supported platforms. Can be one of the following: "win32", "linux"
73
+ STAGE: OptimizationPassStage # Specifies when this optimization pass should be executed
74
+ STRUCTURING: list[str] | None = (
75
+ None # specifies if this optimization pass is specific to a certain structuring algorithm
76
+ )
77
+ NAME = "N/A"
78
+ DESCRIPTION = "N/A"
79
+
80
+ def __init__(self, func):
81
+ self._func: Function = func
82
+
83
+ @property
84
+ def project(self) -> Project:
85
+ assert self._func.project is not None
86
+ return self._func.project
87
+
88
+ @property
89
+ def kb(self):
90
+ return self.project.kb
91
+
92
+ def analyze(self):
93
+ ret, cache = self._check()
94
+ if ret:
95
+ self._analyze(cache=cache)
96
+
97
+ def _check(self):
98
+ """
99
+ Check if this optimization applies to this function.
100
+
101
+ :returns: a tuple of (does_apply, cache) where cache is a way to pass
102
+ information to _analyze so it does not have to be recalculated
103
+ """
104
+ raise NotImplementedError
105
+
106
+ def _analyze(self, cache=None):
107
+ """
108
+ Run the analysis.
109
+
110
+ :param cache: information passed from _check so it does not have to be
111
+ recalculated
112
+ :returns: None
113
+ """
114
+ raise NotImplementedError
115
+
116
+
117
+ class OptimizationPass(BaseOptimizationPass):
118
+ """
119
+ The base class for any function-level graph optimization pass.
120
+ """
121
+
122
+ _graph: networkx.DiGraph
123
+
124
+ def __init__(
125
+ self,
126
+ func,
127
+ *,
128
+ graph,
129
+ blocks_by_addr=None,
130
+ blocks_by_addr_and_idx=None,
131
+ variable_kb=None,
132
+ region_identifier=None,
133
+ reaching_definitions=None,
134
+ vvar_id_start: int = 0,
135
+ entry_node_addr=None,
136
+ scratch: dict[str, Any] | None = None,
137
+ force_loop_single_exit: bool = True,
138
+ complete_successors: bool = False,
139
+ avoid_vvar_ids: set[int] | None = None,
140
+ arg_vvars: set[int] | None = None,
141
+ peephole_optimizations=None,
142
+ stack_pointer_tracker=None,
143
+ **kwargs,
144
+ ):
145
+ super().__init__(func)
146
+ # self._blocks is just a cache
147
+ self._blocks_by_addr: dict[int, set[ailment.Block]] = blocks_by_addr or {}
148
+ self._blocks_by_addr_and_idx: dict[tuple[int, int | None], ailment.Block] = blocks_by_addr_and_idx or {}
149
+ self._graph = graph
150
+ self._variable_kb = variable_kb
151
+ self._ri = region_identifier
152
+ self._rd = reaching_definitions
153
+ self._scratch = scratch if scratch is not None else {}
154
+ self._new_block_addrs = set()
155
+ self._arg_vvars = arg_vvars
156
+ self.vvar_id_start = vvar_id_start
157
+ self.entry_node_addr: tuple[int, int | None] = (
158
+ entry_node_addr if entry_node_addr is not None else (func.addr, None)
159
+ )
160
+ self._force_loop_single_exit = force_loop_single_exit
161
+ self._complete_successors = complete_successors
162
+ self._avoid_vvar_ids = avoid_vvar_ids or set()
163
+ self._peephole_optimizations = peephole_optimizations
164
+ self._stack_pointer_tracker = stack_pointer_tracker
165
+
166
+ # output
167
+ self.out_graph: networkx.DiGraph | None = None
168
+ self.stack_items: dict[int, StackItem] = {}
169
+
170
+ @property
171
+ def blocks_by_addr(self) -> dict[int, set[ailment.Block]]:
172
+ return self._blocks_by_addr
173
+
174
+ @property
175
+ def blocks_by_addr_and_idx(self) -> dict[tuple[int, int | None], ailment.Block]:
176
+ return self._blocks_by_addr_and_idx
177
+
178
+ #
179
+ # Util methods
180
+ #
181
+
182
+ def new_block_addr(self) -> int:
183
+ """
184
+ Return a block address that does not conflict with any existing blocks.
185
+
186
+ :return: The block address.
187
+ """
188
+ new_addr = max(self._new_block_addrs) + 1 if self._new_block_addrs else max(self.blocks_by_addr) + 2048
189
+ self._new_block_addrs.add(new_addr)
190
+ return new_addr
191
+
192
+ def _get_block(self, addr, **kwargs) -> ailment.Block | None:
193
+ """
194
+ Get exactly one block by its address and optionally, also considering its block ID. An exception,
195
+ MultipleBlocksException, will be raised if there are more than one block satisfying the specified criteria.
196
+
197
+ :param addr: The address of the block.
198
+ :param kwargs: Optionally, you can specify "idx" to consider the block ID. If "idx" is not specified, this
199
+ method will return the only block at the specified address, None if there is no block at
200
+ that address, or raise an exception if there are more than one block at that address.
201
+ :return: The requested block or None if no block matching the specified criteria exists.
202
+ """
203
+
204
+ if not self._blocks_by_addr:
205
+ return None
206
+ idx_specified = "idx" in kwargs
207
+ idx = kwargs.get("idx")
208
+ if not idx_specified:
209
+ blocks = self._blocks_by_addr.get(addr, None)
210
+ else:
211
+ blocks = [self._blocks_by_addr_and_idx.get((addr, idx), None)]
212
+ if not blocks:
213
+ return None
214
+ if len(blocks) == 1:
215
+ return next(iter(blocks))
216
+ if idx_specified:
217
+ raise MultipleBlocksException(
218
+ f"There are {len(blocks)} blocks at address {addr:#x}.{idx} but only one is requested."
219
+ )
220
+ raise MultipleBlocksException(
221
+ f"There are {len(blocks)} blocks at address {addr:#x} (block ID ignored) but only one is requested."
222
+ )
223
+
224
+ def _get_blocks(self, addr, idx=None) -> Generator[ailment.Block]:
225
+ if not self._blocks_by_addr:
226
+ return
227
+ else:
228
+ if idx is None:
229
+ blocks = self._blocks_by_addr.get(addr, None)
230
+ if blocks is not None:
231
+ yield from blocks
232
+ else:
233
+ block = self._blocks_by_addr_and_idx.get((addr, idx), None)
234
+ if block is not None:
235
+ yield block
236
+
237
+ def _update_block(self, old_block, new_block):
238
+ if self.out_graph is None:
239
+ self.out_graph = self._graph # we do not make copy here for performance reasons. we can change it if needed
240
+ assert self.out_graph is not None
241
+
242
+ if old_block not in self.out_graph:
243
+ return
244
+
245
+ in_edges = list(self.out_graph.in_edges(old_block, data=True))
246
+ out_edges = list(self.out_graph.out_edges(old_block, data=True))
247
+
248
+ self._remove_block(old_block)
249
+ self.out_graph.add_node(new_block)
250
+ self._blocks_by_addr[new_block.addr].add(new_block)
251
+ self._blocks_by_addr_and_idx[(new_block.addr, new_block.idx)] = new_block
252
+
253
+ for src, _, data in in_edges:
254
+ if src is old_block:
255
+ src = new_block
256
+ self.out_graph.add_edge(src, new_block, **data)
257
+
258
+ for _, dst, data in out_edges:
259
+ if dst is old_block:
260
+ dst = new_block
261
+ self.out_graph.add_edge(new_block, dst, **data)
262
+
263
+ def _remove_block(self, block):
264
+ if self.out_graph is None:
265
+ self.out_graph = self._graph
266
+ assert self.out_graph is not None
267
+
268
+ if block in self.out_graph:
269
+ self.out_graph.remove_node(block)
270
+
271
+ if block.addr in self._blocks_by_addr and block in self._blocks_by_addr[block.addr]:
272
+ self._blocks_by_addr[block.addr].remove(block)
273
+ del self._blocks_by_addr_and_idx[(block.addr, block.idx)]
274
+
275
+ @staticmethod
276
+ def _is_add(expr):
277
+ return isinstance(expr, ailment.Expr.BinaryOp) and expr.op == "Add"
278
+
279
+ @staticmethod
280
+ def _is_sub(expr):
281
+ return isinstance(expr, ailment.Expr.BinaryOp) and expr.op == "Sub"
282
+
283
+ def _simplify_blocks(
284
+ self,
285
+ ail_graph: networkx.DiGraph,
286
+ cache: dict | None = None,
287
+ ):
288
+ """
289
+ Simplify all blocks in self._blocks.
290
+
291
+ :param ail_graph: The AIL function graph.
292
+ :param cache: A block-level cache that stores reaching definition analysis results and
293
+ propagation results.
294
+ :return: None
295
+ """
296
+
297
+ blocks_by_addr_and_idx: dict[tuple[int, int | None], ailment.Block] = {}
298
+
299
+ for ail_block in ail_graph.nodes():
300
+ simplified = self._simplify_block(
301
+ ail_block,
302
+ cache=cache,
303
+ )
304
+ key = ail_block.addr, ail_block.idx
305
+ blocks_by_addr_and_idx[key] = simplified
306
+
307
+ # update blocks_map to allow node_addr to node lookup
308
+ def _replace_node_handler(node):
309
+ key = node.addr, node.idx
310
+ if key in blocks_by_addr_and_idx:
311
+ return blocks_by_addr_and_idx[key]
312
+ return None
313
+
314
+ AILGraphWalker(ail_graph, _replace_node_handler, replace_nodes=True).walk()
315
+
316
+ return ail_graph
317
+
318
+ def _simplify_block(self, ail_block, cache=None):
319
+ """
320
+ Simplify a single AIL block.
321
+
322
+ :param ailment.Block ail_block: The AIL block to simplify.
323
+ :return: A simplified AIL block.
324
+ """
325
+
326
+ cached_rd, cached_prop = None, None
327
+ cache_item = None
328
+ cache_key = ail_block.addr, ail_block.idx
329
+ if cache:
330
+ cache_item = cache.get(cache_key, None)
331
+ if cache_item:
332
+ # cache hit
333
+ cached_rd = cache_item.rd
334
+ cached_prop = cache_item.prop
335
+
336
+ simp = self.project.analyses.AILBlockSimplifier(
337
+ ail_block,
338
+ self._func.addr,
339
+ peephole_optimizations=self._peephole_optimizations,
340
+ cached_reaching_definitions=cached_rd,
341
+ cached_propagator=cached_prop,
342
+ )
343
+ # update the cache
344
+ if cache is not None:
345
+ if cache_item:
346
+ del cache[cache_key]
347
+ cache[cache_key] = BlockCache(simp._reaching_definitions, simp._propagator)
348
+ return simp.result_block
349
+
350
+ def _simplify_graph(self, graph):
351
+ MAX_SIMP_ITERATION = 8
352
+ for _ in range(MAX_SIMP_ITERATION):
353
+ self._simplify_blocks(graph)
354
+ simp = self.project.analyses.AILSimplifier(
355
+ self._func,
356
+ func_graph=graph,
357
+ use_callee_saved_regs_at_return=False,
358
+ gp=self._func.info.get("gp", None) if self.project.arch.name in {"MIPS32", "MIPS64"} else None,
359
+ avoid_vvar_ids=self._avoid_vvar_ids,
360
+ )
361
+ if simp.simplified:
362
+ graph = simp.func_graph
363
+ else:
364
+ break
365
+ else:
366
+ _l.warning("Failed to reach fixed point after %s simplification iterations.", MAX_SIMP_ITERATION)
367
+ return graph
368
+
369
+ def _recover_regions(self, graph: networkx.DiGraph, condition_processor=None, update_graph: bool = False):
370
+ return self.project.analyses[RegionIdentifier].prep(kb=self.kb)(
371
+ self._func,
372
+ graph=graph,
373
+ cond_proc=condition_processor or ConditionProcessor(self.project.arch),
374
+ update_graph=update_graph,
375
+ force_loop_single_exit=self._force_loop_single_exit,
376
+ complete_successors=self._complete_successors,
377
+ entry_node_addr=self.entry_node_addr,
378
+ )
379
+
380
+
381
+ class SequenceOptimizationPass(BaseOptimizationPass):
382
+ """
383
+ The base class for any sequence node optimization pass.
384
+ """
385
+
386
+ def __init__(self, func, seq=None, **kwargs):
387
+ super().__init__(func)
388
+ self.seq = seq
389
+ self.out_seq = None
390
+
391
+
392
+ class StructuringOptimizationPass(OptimizationPass):
393
+ """
394
+ The base class for any optimization pass that requires structuring. Optimization passes that inherit from this class
395
+ should directly depend on structuring artifacts, such as regions and gotos. Otherwise, they should use
396
+ OptimizationPass. This is the heaviest (computation time) optimization pass class.
397
+
398
+ By default this type of optimization should work:
399
+ - on any architecture
400
+ - on any platform
401
+ - during region identification (to have iterative structuring)
402
+ - only with the SAILR structuring algorithm
403
+ """
404
+
405
+ ARCHES = None
406
+ PLATFORMS = None
407
+ STRUCTURING = [SAILRStructurer.NAME]
408
+ STAGE = OptimizationPassStage.DURING_REGION_IDENTIFICATION
409
+
410
+ _initial_gotos: set[Goto]
411
+ _goto_manager: GotoManager
412
+ _prev_graph: networkx.DiGraph
413
+
414
+ def __init__(
415
+ self,
416
+ func,
417
+ prevent_new_gotos: bool = True,
418
+ strictly_less_gotos: bool = False,
419
+ recover_structure_fails: bool = True,
420
+ must_improve_rel_quality: bool = True,
421
+ max_opt_iters: int = 1,
422
+ simplify_ail: bool = True,
423
+ require_gotos: bool = True,
424
+ readd_labels: bool = False,
425
+ edges_to_remove: list[tuple[tuple[int, int | None], tuple[int, int | None]]] | None = None,
426
+ **kwargs,
427
+ ):
428
+ super().__init__(func, **kwargs)
429
+ self._prevent_new_gotos = prevent_new_gotos
430
+ self._strictly_less_gotos = strictly_less_gotos
431
+ self._recover_structure_fails = recover_structure_fails
432
+ self._max_opt_iters = max_opt_iters
433
+ self._simplify_ail = simplify_ail
434
+ self._require_gotos = require_gotos
435
+ self._must_improve_rel_quality = must_improve_rel_quality
436
+ self._readd_labels = readd_labels
437
+ self._edges_to_remove = edges_to_remove or []
438
+
439
+ # relative quality metrics (excludes gotos)
440
+ self._initial_structure_counter = None
441
+ self._current_structure_counter = None
442
+
443
+ def _analyze(self, cache=None) -> bool:
444
+ raise NotImplementedError
445
+
446
+ def analyze(self):
447
+ """
448
+ Wrapper for _analyze() that verifies the graph is structurable before and after the optimization.
449
+ """
450
+ # replace the normal check in OptimizationPass.analyze()
451
+ ret, cache = self._check()
452
+ if not ret:
453
+ return
454
+
455
+ if not self._graph_is_structurable(self._graph, initial=True):
456
+ return
457
+
458
+ self._initial_gotos = self._goto_manager.gotos.copy()
459
+ if self._require_gotos and not self._initial_gotos:
460
+ return
461
+
462
+ # setup for the very first analysis
463
+ self.out_graph = networkx.DiGraph(self._graph)
464
+ if self._max_opt_iters > 1:
465
+ self._fixed_point_analyze(cache=cache)
466
+ else:
467
+ updates = self._analyze(cache=cache)
468
+ if not updates:
469
+ self.out_graph = None
470
+
471
+ # analysis is complete, no out_graph means it failed somewhere along the way
472
+ if self.out_graph is None:
473
+ return
474
+
475
+ # since all checks have completed, add labels back out here
476
+ if self._readd_labels:
477
+ self.out_graph = add_labels(self.out_graph)
478
+
479
+ if not self._graph_is_structurable(self.out_graph, readd_labels=False):
480
+ self.out_graph = None
481
+ return
482
+
483
+ # simplify the AIL graph
484
+ if self._simplify_ail:
485
+ # this should not (TM) change the structure of the graph but is needed for later optimizations
486
+ self.out_graph = self._simplify_graph(self.out_graph)
487
+
488
+ if self._prevent_new_gotos:
489
+ prev_gotos = len(self._initial_gotos)
490
+ new_gotos = len(self._get_new_gotos())
491
+ if (self._strictly_less_gotos and (new_gotos >= prev_gotos)) or (
492
+ not self._strictly_less_gotos and (new_gotos > prev_gotos)
493
+ ):
494
+ self.out_graph = None
495
+ return
496
+
497
+ if self._must_improve_rel_quality and not self._improves_relative_quality():
498
+ self.out_graph = None
499
+ return
500
+
501
+ def _get_new_gotos(self):
502
+ return self._goto_manager.gotos
503
+
504
+ def _fixed_point_analyze(self, cache=None):
505
+ had_any_changes = False
506
+ for _ in range(self._max_opt_iters):
507
+ if self._require_gotos and not self._goto_manager.gotos:
508
+ break
509
+
510
+ # backup the graph before the optimization
511
+ if self._recover_structure_fails and self.out_graph is not None:
512
+ self._prev_graph = networkx.DiGraph(self.out_graph)
513
+
514
+ # run the optimization, output applied to self.out_graph
515
+ changes = self._analyze(cache=cache)
516
+ if not changes:
517
+ break
518
+
519
+ had_any_changes = True
520
+ # check if the graph is structurable
521
+ if not self._graph_is_structurable(self.out_graph, readd_labels=self._readd_labels):
522
+ if self._recover_structure_fails:
523
+ self.out_graph = self._prev_graph
524
+ else:
525
+ self.out_graph = None
526
+ break
527
+
528
+ if not had_any_changes:
529
+ self.out_graph = None
530
+
531
+ def _graph_is_structurable(self, graph, readd_labels=False, initial=False) -> bool:
532
+ """
533
+ Checks weather the input graph is structurable under the Phoenix schema-matching structuring algorithm.
534
+ As a side effect, this will also update the region identifier and goto manager of this optimization pass.
535
+ Consequently, a true return guarantees up-to-date goto information in the goto manager.
536
+ """
537
+ if readd_labels:
538
+ graph = add_labels(graph)
539
+
540
+ remove_edges_in_ailgraph(graph, self._edges_to_remove)
541
+
542
+ self._ri = self.project.analyses[RegionIdentifier].prep(kb=self.kb)(
543
+ self._func,
544
+ graph=graph,
545
+ # never update the graph in-place, we need to keep the original graph for later use
546
+ update_graph=False,
547
+ cond_proc=self._ri.cond_proc,
548
+ force_loop_single_exit=False,
549
+ complete_successors=True,
550
+ entry_node_addr=self.entry_node_addr,
551
+ )
552
+ if self._ri is None:
553
+ return False
554
+
555
+ # we should try-catch structuring here because we can often pass completely invalid graphs
556
+ # that break the assumptions of the structuring algorithm
557
+ try:
558
+ rs = self.project.analyses[RecursiveStructurer].prep(kb=self.kb)(
559
+ self._ri.region,
560
+ cond_proc=self._ri.cond_proc,
561
+ func=self._func,
562
+ structurer_cls=SAILRStructurer,
563
+ )
564
+ # pylint:disable=broad-except
565
+ except Exception:
566
+ _l.warning("Internal structuring failed for OptimizationPass on %s", self._func.name)
567
+ rs = None
568
+
569
+ if not rs or not rs.result or not rs.result.nodes or rs.result_incomplete:
570
+ return False
571
+
572
+ rs = self.project.analyses.RegionSimplifier(self._func, rs.result, arg_vvars=self._arg_vvars, kb=self.kb)
573
+ if not rs or rs.goto_manager is None or rs.result is None:
574
+ return False
575
+
576
+ self._analyze_simplified_region(rs.result, initial=initial)
577
+ self._goto_manager = rs.goto_manager
578
+ return True
579
+
580
+ # pylint:disable=no-self-use
581
+ def _analyze_simplified_region(self, region, initial=False):
582
+ """
583
+ Analyze the simplified regions after a successful structuring pass.
584
+ This should be overridden by the subclass if it needs to do anything with the simplified regions for making
585
+ optimizations decisions.
586
+ """
587
+ if region is None:
588
+ return
589
+
590
+ # record quality metrics
591
+ if self._must_improve_rel_quality:
592
+ if initial:
593
+ self._initial_structure_counter = ControlFlowStructureCounter(region)
594
+ else:
595
+ self._current_structure_counter = ControlFlowStructureCounter(region)
596
+
597
+ def _improves_relative_quality(self) -> bool:
598
+ """
599
+ Welcome to the unprincipled land of mahaloz. This function is a heuristic that tries to determine if the
600
+ optimization pass improved the relative quality of the control flow structures in the function. These heuristics
601
+ are based on mahaloz's observations of what bad code looks like.
602
+ """
603
+ if self._initial_structure_counter is None or self._current_structure_counter is None:
604
+ _l.warning("Relative quality check failed due to missing structure counters")
605
+ return True
606
+
607
+ prev_wloops = self._initial_structure_counter.while_loops
608
+ curr_wloops = self._current_structure_counter.while_loops
609
+ prev_dloops = self._initial_structure_counter.do_while_loops
610
+ curr_dloops = self._current_structure_counter.do_while_loops
611
+ prev_floops = self._initial_structure_counter.for_loops
612
+ curr_floops = self._current_structure_counter.for_loops
613
+ total_prev_loops = prev_wloops + prev_dloops + prev_floops
614
+ total_curr_loops = curr_wloops + curr_dloops + curr_floops
615
+
616
+ # Sometimes, if we mess up structuring you can easily tell because we traded "good" loops for "bad" loops.
617
+ # Generally, loops are ordered good -> bad as follows: for, while, do-while.
618
+ # Note: this check is only for _trading_, meaning the total number of loops must be the same.
619
+ #
620
+ # 1. We traded to remove a for-loop
621
+ if curr_floops < prev_floops and total_curr_loops == total_prev_loops:
622
+ return False
623
+
624
+ # Gotos play an important part in readability and control flow structure. We already count gotos in other parts
625
+ # of the analysis, so we don't need to count them here. However, some gotos are worse than others. Much
626
+ # like loops, trading gotos (keeping the same total, but getting worse types), is bad for decompilation.
627
+ if len(self._initial_gotos) == len(self._goto_manager.gotos) != 0:
628
+ prev_labels = self._initial_structure_counter.goto_targets
629
+ curr_labels = self._current_structure_counter.goto_targets
630
+
631
+ # 1. We traded gotos, but we increased the number of labels, which is generally worse
632
+ if len(curr_labels) > len(prev_labels):
633
+ return False
634
+
635
+ ordered_curr_labels = self._current_structure_counter.ordered_labels
636
+
637
+ # 2. We trade for a goto that occurs higher in the program (much like a back edge goto), these are bad
638
+ for addr, curr_cnt in curr_labels.items():
639
+ prev_cnt = prev_labels.get(addr, 0)
640
+ # some label increased in gotos, check everything to the right in ordered labels, if it went down,
641
+ # then we fail
642
+ if curr_cnt > prev_cnt:
643
+ right_labels = ordered_curr_labels[ordered_curr_labels.index(addr) + 1 :]
644
+ for right_label in right_labels:
645
+ right_curr_label_cnt = curr_labels[right_label]
646
+ right_prev_label_cnt = prev_labels.get(right_label, 0)
647
+ if right_curr_label_cnt < right_prev_label_cnt:
648
+ return False
649
+
650
+ # some label decreased in gotos, check everything to the left, if something went up, then we fail
651
+ elif curr_cnt < prev_cnt:
652
+ left_labels = ordered_curr_labels[: ordered_curr_labels.index(addr)]
653
+ for left_label in left_labels:
654
+ left_curr_label_cnt = curr_labels[left_label]
655
+ left_prev_label_cnt = prev_labels.get(left_label, 0)
656
+ if left_curr_label_cnt > left_prev_label_cnt:
657
+ return False
658
+
659
+ return True