angr 9.2.165__cp310-abi3-manylinux_2_17_x86_64.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 (1409) hide show
  1. angr/__init__.py +366 -0
  2. angr/__main__.py +152 -0
  3. angr/ailment/__init__.py +81 -0
  4. angr/ailment/block.py +81 -0
  5. angr/ailment/block_walker.py +845 -0
  6. angr/ailment/constant.py +3 -0
  7. angr/ailment/converter_common.py +11 -0
  8. angr/ailment/converter_pcode.py +623 -0
  9. angr/ailment/converter_vex.py +798 -0
  10. angr/ailment/expression.py +1655 -0
  11. angr/ailment/manager.py +33 -0
  12. angr/ailment/statement.py +978 -0
  13. angr/ailment/tagged_object.py +61 -0
  14. angr/ailment/utils.py +114 -0
  15. angr/analyses/__init__.py +113 -0
  16. angr/analyses/analysis.py +429 -0
  17. angr/analyses/backward_slice.py +686 -0
  18. angr/analyses/binary_optimizer.py +670 -0
  19. angr/analyses/bindiff.py +1512 -0
  20. angr/analyses/boyscout.py +76 -0
  21. angr/analyses/callee_cleanup_finder.py +74 -0
  22. angr/analyses/calling_convention/__init__.py +6 -0
  23. angr/analyses/calling_convention/calling_convention.py +1096 -0
  24. angr/analyses/calling_convention/fact_collector.py +636 -0
  25. angr/analyses/calling_convention/utils.py +60 -0
  26. angr/analyses/cdg.py +189 -0
  27. angr/analyses/cfg/__init__.py +23 -0
  28. angr/analyses/cfg/cfb.py +428 -0
  29. angr/analyses/cfg/cfg.py +74 -0
  30. angr/analyses/cfg/cfg_arch_options.py +95 -0
  31. angr/analyses/cfg/cfg_base.py +2909 -0
  32. angr/analyses/cfg/cfg_emulated.py +3451 -0
  33. angr/analyses/cfg/cfg_fast.py +5316 -0
  34. angr/analyses/cfg/cfg_fast_soot.py +662 -0
  35. angr/analyses/cfg/cfg_job_base.py +203 -0
  36. angr/analyses/cfg/indirect_jump_resolvers/__init__.py +28 -0
  37. angr/analyses/cfg/indirect_jump_resolvers/amd64_elf_got.py +62 -0
  38. angr/analyses/cfg/indirect_jump_resolvers/amd64_pe_iat.py +51 -0
  39. angr/analyses/cfg/indirect_jump_resolvers/arm_elf_fast.py +159 -0
  40. angr/analyses/cfg/indirect_jump_resolvers/const_resolver.py +339 -0
  41. angr/analyses/cfg/indirect_jump_resolvers/constant_value_manager.py +107 -0
  42. angr/analyses/cfg/indirect_jump_resolvers/default_resolvers.py +76 -0
  43. angr/analyses/cfg/indirect_jump_resolvers/jumptable.py +2367 -0
  44. angr/analyses/cfg/indirect_jump_resolvers/memload_resolver.py +81 -0
  45. angr/analyses/cfg/indirect_jump_resolvers/mips_elf_fast.py +286 -0
  46. angr/analyses/cfg/indirect_jump_resolvers/mips_elf_got.py +148 -0
  47. angr/analyses/cfg/indirect_jump_resolvers/propagator_utils.py +46 -0
  48. angr/analyses/cfg/indirect_jump_resolvers/resolver.py +74 -0
  49. angr/analyses/cfg/indirect_jump_resolvers/syscall_resolver.py +92 -0
  50. angr/analyses/cfg/indirect_jump_resolvers/x86_elf_pic_plt.py +88 -0
  51. angr/analyses/cfg/indirect_jump_resolvers/x86_pe_iat.py +47 -0
  52. angr/analyses/cfg_slice_to_sink/__init__.py +11 -0
  53. angr/analyses/cfg_slice_to_sink/cfg_slice_to_sink.py +117 -0
  54. angr/analyses/cfg_slice_to_sink/graph.py +87 -0
  55. angr/analyses/cfg_slice_to_sink/transitions.py +27 -0
  56. angr/analyses/class_identifier.py +63 -0
  57. angr/analyses/code_tagging.py +123 -0
  58. angr/analyses/codecave.py +77 -0
  59. angr/analyses/complete_calling_conventions.py +461 -0
  60. angr/analyses/congruency_check.py +377 -0
  61. angr/analyses/data_dep/__init__.py +16 -0
  62. angr/analyses/data_dep/data_dependency_analysis.py +595 -0
  63. angr/analyses/data_dep/dep_nodes.py +171 -0
  64. angr/analyses/data_dep/sim_act_location.py +49 -0
  65. angr/analyses/datagraph_meta.py +105 -0
  66. angr/analyses/ddg.py +1670 -0
  67. angr/analyses/decompiler/__init__.py +41 -0
  68. angr/analyses/decompiler/ail_simplifier.py +2085 -0
  69. angr/analyses/decompiler/ailgraph_walker.py +49 -0
  70. angr/analyses/decompiler/block_io_finder.py +302 -0
  71. angr/analyses/decompiler/block_similarity.py +196 -0
  72. angr/analyses/decompiler/block_simplifier.py +376 -0
  73. angr/analyses/decompiler/callsite_maker.py +571 -0
  74. angr/analyses/decompiler/ccall_rewriters/__init__.py +9 -0
  75. angr/analyses/decompiler/ccall_rewriters/amd64_ccalls.py +580 -0
  76. angr/analyses/decompiler/ccall_rewriters/rewriter_base.py +20 -0
  77. angr/analyses/decompiler/ccall_rewriters/x86_ccalls.py +313 -0
  78. angr/analyses/decompiler/clinic.py +3308 -0
  79. angr/analyses/decompiler/condition_processor.py +1281 -0
  80. angr/analyses/decompiler/counters/__init__.py +16 -0
  81. angr/analyses/decompiler/counters/boolean_counter.py +27 -0
  82. angr/analyses/decompiler/counters/call_counter.py +57 -0
  83. angr/analyses/decompiler/counters/expression_counters.py +77 -0
  84. angr/analyses/decompiler/counters/seq_cf_structure_counter.py +63 -0
  85. angr/analyses/decompiler/decompilation_cache.py +46 -0
  86. angr/analyses/decompiler/decompilation_options.py +275 -0
  87. angr/analyses/decompiler/decompiler.py +710 -0
  88. angr/analyses/decompiler/dephication/__init__.py +6 -0
  89. angr/analyses/decompiler/dephication/dephication_base.py +100 -0
  90. angr/analyses/decompiler/dephication/graph_dephication.py +70 -0
  91. angr/analyses/decompiler/dephication/graph_rewriting.py +112 -0
  92. angr/analyses/decompiler/dephication/graph_vvar_mapping.py +363 -0
  93. angr/analyses/decompiler/dephication/rewriting_engine.py +527 -0
  94. angr/analyses/decompiler/dephication/seqnode_dephication.py +156 -0
  95. angr/analyses/decompiler/empty_node_remover.py +212 -0
  96. angr/analyses/decompiler/expression_narrower.py +287 -0
  97. angr/analyses/decompiler/goto_manager.py +112 -0
  98. angr/analyses/decompiler/graph_region.py +426 -0
  99. angr/analyses/decompiler/jump_target_collector.py +37 -0
  100. angr/analyses/decompiler/jumptable_entry_condition_rewriter.py +67 -0
  101. angr/analyses/decompiler/label_collector.py +32 -0
  102. angr/analyses/decompiler/optimization_passes/__init__.py +151 -0
  103. angr/analyses/decompiler/optimization_passes/base_ptr_save_simplifier.py +157 -0
  104. angr/analyses/decompiler/optimization_passes/call_stmt_rewriter.py +46 -0
  105. angr/analyses/decompiler/optimization_passes/code_motion.py +362 -0
  106. angr/analyses/decompiler/optimization_passes/condition_constprop.py +219 -0
  107. angr/analyses/decompiler/optimization_passes/const_derefs.py +266 -0
  108. angr/analyses/decompiler/optimization_passes/const_prop_reverter.py +365 -0
  109. angr/analyses/decompiler/optimization_passes/cross_jump_reverter.py +106 -0
  110. angr/analyses/decompiler/optimization_passes/deadblock_remover.py +82 -0
  111. angr/analyses/decompiler/optimization_passes/determine_load_sizes.py +64 -0
  112. angr/analyses/decompiler/optimization_passes/div_simplifier.py +425 -0
  113. angr/analyses/decompiler/optimization_passes/duplication_reverter/__init__.py +5 -0
  114. angr/analyses/decompiler/optimization_passes/duplication_reverter/ail_merge_graph.py +503 -0
  115. angr/analyses/decompiler/optimization_passes/duplication_reverter/duplication_reverter.py +1218 -0
  116. angr/analyses/decompiler/optimization_passes/duplication_reverter/errors.py +16 -0
  117. angr/analyses/decompiler/optimization_passes/duplication_reverter/similarity.py +126 -0
  118. angr/analyses/decompiler/optimization_passes/duplication_reverter/utils.py +167 -0
  119. angr/analyses/decompiler/optimization_passes/eager_std_string_concatenation.py +165 -0
  120. angr/analyses/decompiler/optimization_passes/engine_base.py +500 -0
  121. angr/analyses/decompiler/optimization_passes/expr_op_swapper.py +135 -0
  122. angr/analyses/decompiler/optimization_passes/flip_boolean_cmp.py +113 -0
  123. angr/analyses/decompiler/optimization_passes/inlined_string_transformation_simplifier.py +615 -0
  124. angr/analyses/decompiler/optimization_passes/ite_expr_converter.py +224 -0
  125. angr/analyses/decompiler/optimization_passes/ite_region_converter.py +335 -0
  126. angr/analyses/decompiler/optimization_passes/lowered_switch_simplifier.py +923 -0
  127. angr/analyses/decompiler/optimization_passes/mod_simplifier.py +99 -0
  128. angr/analyses/decompiler/optimization_passes/optimization_pass.py +703 -0
  129. angr/analyses/decompiler/optimization_passes/register_save_area_simplifier.py +221 -0
  130. angr/analyses/decompiler/optimization_passes/ret_addr_save_simplifier.py +171 -0
  131. angr/analyses/decompiler/optimization_passes/ret_deduplicator.py +222 -0
  132. angr/analyses/decompiler/optimization_passes/return_duplicator_base.py +640 -0
  133. angr/analyses/decompiler/optimization_passes/return_duplicator_high.py +61 -0
  134. angr/analyses/decompiler/optimization_passes/return_duplicator_low.py +237 -0
  135. angr/analyses/decompiler/optimization_passes/stack_canary_simplifier.py +333 -0
  136. angr/analyses/decompiler/optimization_passes/switch_default_case_duplicator.py +149 -0
  137. angr/analyses/decompiler/optimization_passes/switch_reused_entry_rewriter.py +102 -0
  138. angr/analyses/decompiler/optimization_passes/tag_slicer.py +41 -0
  139. angr/analyses/decompiler/optimization_passes/win_stack_canary_simplifier.py +421 -0
  140. angr/analyses/decompiler/optimization_passes/x86_gcc_getpc_simplifier.py +88 -0
  141. angr/analyses/decompiler/peephole_optimizations/__init__.py +129 -0
  142. angr/analyses/decompiler/peephole_optimizations/a_div_const_add_a_mul_n_div_const.py +42 -0
  143. angr/analyses/decompiler/peephole_optimizations/a_mul_const_div_shr_const.py +38 -0
  144. angr/analyses/decompiler/peephole_optimizations/a_mul_const_sub_a.py +34 -0
  145. angr/analyses/decompiler/peephole_optimizations/a_shl_const_sub_a.py +34 -0
  146. angr/analyses/decompiler/peephole_optimizations/a_sub_a_div.py +25 -0
  147. angr/analyses/decompiler/peephole_optimizations/a_sub_a_shr_const_shr_const.py +37 -0
  148. angr/analyses/decompiler/peephole_optimizations/a_sub_a_sub_n.py +23 -0
  149. angr/analyses/decompiler/peephole_optimizations/arm_cmpf.py +236 -0
  150. angr/analyses/decompiler/peephole_optimizations/base.py +157 -0
  151. angr/analyses/decompiler/peephole_optimizations/basepointeroffset_add_n.py +34 -0
  152. angr/analyses/decompiler/peephole_optimizations/basepointeroffset_and_mask.py +36 -0
  153. angr/analyses/decompiler/peephole_optimizations/bitwise_or_to_logical_or.py +34 -0
  154. angr/analyses/decompiler/peephole_optimizations/bool_expr_xor_1.py +27 -0
  155. angr/analyses/decompiler/peephole_optimizations/bswap.py +142 -0
  156. angr/analyses/decompiler/peephole_optimizations/cas_intrinsics.py +115 -0
  157. angr/analyses/decompiler/peephole_optimizations/cmpord_rewriter.py +71 -0
  158. angr/analyses/decompiler/peephole_optimizations/coalesce_adjacent_shrs.py +39 -0
  159. angr/analyses/decompiler/peephole_optimizations/coalesce_same_cascading_ifs.py +28 -0
  160. angr/analyses/decompiler/peephole_optimizations/constant_derefs.py +44 -0
  161. angr/analyses/decompiler/peephole_optimizations/conv_a_sub0_shr_and.py +69 -0
  162. angr/analyses/decompiler/peephole_optimizations/conv_shl_shr.py +52 -0
  163. angr/analyses/decompiler/peephole_optimizations/eager_eval.py +447 -0
  164. angr/analyses/decompiler/peephole_optimizations/extended_byte_and_mask.py +56 -0
  165. angr/analyses/decompiler/peephole_optimizations/inlined_memcpy.py +78 -0
  166. angr/analyses/decompiler/peephole_optimizations/inlined_strcpy.py +217 -0
  167. angr/analyses/decompiler/peephole_optimizations/inlined_strcpy_consolidation.py +106 -0
  168. angr/analyses/decompiler/peephole_optimizations/inlined_wstrcpy.py +170 -0
  169. angr/analyses/decompiler/peephole_optimizations/invert_negated_logical_conjuction_disjunction.py +50 -0
  170. angr/analyses/decompiler/peephole_optimizations/modulo_simplifier.py +89 -0
  171. angr/analyses/decompiler/peephole_optimizations/one_sub_bool.py +33 -0
  172. angr/analyses/decompiler/peephole_optimizations/optimized_div_simplifier.py +356 -0
  173. angr/analyses/decompiler/peephole_optimizations/remove_cascading_conversions.py +45 -0
  174. angr/analyses/decompiler/peephole_optimizations/remove_cxx_destructor_calls.py +32 -0
  175. angr/analyses/decompiler/peephole_optimizations/remove_empty_if_body.py +46 -0
  176. angr/analyses/decompiler/peephole_optimizations/remove_noop_conversions.py +47 -0
  177. angr/analyses/decompiler/peephole_optimizations/remove_redundant_bitmasks.py +125 -0
  178. angr/analyses/decompiler/peephole_optimizations/remove_redundant_conversions.py +273 -0
  179. angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_branch.py +30 -0
  180. angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_comparisons.py +54 -0
  181. angr/analyses/decompiler/peephole_optimizations/remove_redundant_nots.py +36 -0
  182. angr/analyses/decompiler/peephole_optimizations/remove_redundant_reinterprets.py +44 -0
  183. angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts.py +95 -0
  184. angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts_around_comparators.py +44 -0
  185. angr/analyses/decompiler/peephole_optimizations/rewrite_bit_extractions.py +85 -0
  186. angr/analyses/decompiler/peephole_optimizations/rewrite_conv_mul.py +40 -0
  187. angr/analyses/decompiler/peephole_optimizations/rewrite_cxx_operator_calls.py +90 -0
  188. angr/analyses/decompiler/peephole_optimizations/rewrite_mips_gp_loads.py +49 -0
  189. angr/analyses/decompiler/peephole_optimizations/rol_ror.py +130 -0
  190. angr/analyses/decompiler/peephole_optimizations/sar_to_signed_div.py +143 -0
  191. angr/analyses/decompiler/peephole_optimizations/shl_to_mul.py +25 -0
  192. angr/analyses/decompiler/peephole_optimizations/simplify_pc_relative_loads.py +51 -0
  193. angr/analyses/decompiler/peephole_optimizations/single_bit_cond_to_boolexpr.py +82 -0
  194. angr/analyses/decompiler/peephole_optimizations/single_bit_xor.py +29 -0
  195. angr/analyses/decompiler/peephole_optimizations/tidy_stack_addr.py +131 -0
  196. angr/analyses/decompiler/peephole_optimizations/utils.py +18 -0
  197. angr/analyses/decompiler/presets/__init__.py +20 -0
  198. angr/analyses/decompiler/presets/basic.py +32 -0
  199. angr/analyses/decompiler/presets/fast.py +58 -0
  200. angr/analyses/decompiler/presets/full.py +68 -0
  201. angr/analyses/decompiler/presets/preset.py +37 -0
  202. angr/analyses/decompiler/redundant_label_remover.py +134 -0
  203. angr/analyses/decompiler/region_identifier.py +1239 -0
  204. angr/analyses/decompiler/region_simplifiers/__init__.py +5 -0
  205. angr/analyses/decompiler/region_simplifiers/cascading_cond_transformer.py +95 -0
  206. angr/analyses/decompiler/region_simplifiers/cascading_ifs.py +82 -0
  207. angr/analyses/decompiler/region_simplifiers/expr_folding.py +818 -0
  208. angr/analyses/decompiler/region_simplifiers/goto.py +178 -0
  209. angr/analyses/decompiler/region_simplifiers/if_.py +135 -0
  210. angr/analyses/decompiler/region_simplifiers/ifelse.py +91 -0
  211. angr/analyses/decompiler/region_simplifiers/loop.py +143 -0
  212. angr/analyses/decompiler/region_simplifiers/node_address_finder.py +24 -0
  213. angr/analyses/decompiler/region_simplifiers/region_simplifier.py +246 -0
  214. angr/analyses/decompiler/region_simplifiers/switch_cluster_simplifier.py +654 -0
  215. angr/analyses/decompiler/region_simplifiers/switch_expr_simplifier.py +87 -0
  216. angr/analyses/decompiler/region_walker.py +24 -0
  217. angr/analyses/decompiler/return_maker.py +72 -0
  218. angr/analyses/decompiler/seq_to_blocks.py +20 -0
  219. angr/analyses/decompiler/sequence_walker.py +257 -0
  220. angr/analyses/decompiler/ssailification/__init__.py +4 -0
  221. angr/analyses/decompiler/ssailification/rewriting.py +379 -0
  222. angr/analyses/decompiler/ssailification/rewriting_engine.py +1053 -0
  223. angr/analyses/decompiler/ssailification/rewriting_state.py +61 -0
  224. angr/analyses/decompiler/ssailification/ssailification.py +276 -0
  225. angr/analyses/decompiler/ssailification/traversal.py +124 -0
  226. angr/analyses/decompiler/ssailification/traversal_engine.py +306 -0
  227. angr/analyses/decompiler/ssailification/traversal_state.py +48 -0
  228. angr/analyses/decompiler/stack_item.py +36 -0
  229. angr/analyses/decompiler/structured_codegen/__init__.py +25 -0
  230. angr/analyses/decompiler/structured_codegen/base.py +132 -0
  231. angr/analyses/decompiler/structured_codegen/c.py +4082 -0
  232. angr/analyses/decompiler/structured_codegen/dummy.py +15 -0
  233. angr/analyses/decompiler/structured_codegen/dwarf_import.py +190 -0
  234. angr/analyses/decompiler/structuring/__init__.py +30 -0
  235. angr/analyses/decompiler/structuring/dream.py +1217 -0
  236. angr/analyses/decompiler/structuring/phoenix.py +3090 -0
  237. angr/analyses/decompiler/structuring/recursive_structurer.py +187 -0
  238. angr/analyses/decompiler/structuring/sailr.py +120 -0
  239. angr/analyses/decompiler/structuring/structurer_base.py +1066 -0
  240. angr/analyses/decompiler/structuring/structurer_nodes.py +440 -0
  241. angr/analyses/decompiler/utils.py +1118 -0
  242. angr/analyses/deobfuscator/__init__.py +18 -0
  243. angr/analyses/deobfuscator/api_obf_finder.py +325 -0
  244. angr/analyses/deobfuscator/api_obf_peephole_optimizer.py +51 -0
  245. angr/analyses/deobfuscator/api_obf_type2_finder.py +166 -0
  246. angr/analyses/deobfuscator/irsb_reg_collector.py +54 -0
  247. angr/analyses/deobfuscator/string_obf_finder.py +959 -0
  248. angr/analyses/deobfuscator/string_obf_opt_passes.py +133 -0
  249. angr/analyses/deobfuscator/string_obf_peephole_optimizer.py +47 -0
  250. angr/analyses/disassembly.py +1295 -0
  251. angr/analyses/disassembly_utils.py +101 -0
  252. angr/analyses/dominance_frontier.py +57 -0
  253. angr/analyses/fcp/__init__.py +4 -0
  254. angr/analyses/fcp/fcp.py +427 -0
  255. angr/analyses/find_objects_static.py +205 -0
  256. angr/analyses/flirt/__init__.py +47 -0
  257. angr/analyses/flirt/consts.py +160 -0
  258. angr/analyses/flirt/flirt.py +244 -0
  259. angr/analyses/flirt/flirt_function.py +20 -0
  260. angr/analyses/flirt/flirt_matcher.py +351 -0
  261. angr/analyses/flirt/flirt_module.py +32 -0
  262. angr/analyses/flirt/flirt_node.py +23 -0
  263. angr/analyses/flirt/flirt_sig.py +359 -0
  264. angr/analyses/flirt/flirt_utils.py +31 -0
  265. angr/analyses/forward_analysis/__init__.py +12 -0
  266. angr/analyses/forward_analysis/forward_analysis.py +530 -0
  267. angr/analyses/forward_analysis/job_info.py +64 -0
  268. angr/analyses/forward_analysis/visitors/__init__.py +14 -0
  269. angr/analyses/forward_analysis/visitors/call_graph.py +29 -0
  270. angr/analyses/forward_analysis/visitors/function_graph.py +86 -0
  271. angr/analyses/forward_analysis/visitors/graph.py +242 -0
  272. angr/analyses/forward_analysis/visitors/loop.py +29 -0
  273. angr/analyses/forward_analysis/visitors/single_node_graph.py +38 -0
  274. angr/analyses/identifier/__init__.py +5 -0
  275. angr/analyses/identifier/custom_callable.py +137 -0
  276. angr/analyses/identifier/errors.py +10 -0
  277. angr/analyses/identifier/func.py +60 -0
  278. angr/analyses/identifier/functions/__init__.py +37 -0
  279. angr/analyses/identifier/functions/atoi.py +73 -0
  280. angr/analyses/identifier/functions/based_atoi.py +125 -0
  281. angr/analyses/identifier/functions/fdprintf.py +123 -0
  282. angr/analyses/identifier/functions/free.py +64 -0
  283. angr/analyses/identifier/functions/int2str.py +287 -0
  284. angr/analyses/identifier/functions/malloc.py +111 -0
  285. angr/analyses/identifier/functions/memcmp.py +67 -0
  286. angr/analyses/identifier/functions/memcpy.py +89 -0
  287. angr/analyses/identifier/functions/memset.py +43 -0
  288. angr/analyses/identifier/functions/printf.py +123 -0
  289. angr/analyses/identifier/functions/recv_until.py +312 -0
  290. angr/analyses/identifier/functions/skip_calloc.py +73 -0
  291. angr/analyses/identifier/functions/skip_realloc.py +97 -0
  292. angr/analyses/identifier/functions/skip_recv_n.py +105 -0
  293. angr/analyses/identifier/functions/snprintf.py +112 -0
  294. angr/analyses/identifier/functions/sprintf.py +116 -0
  295. angr/analyses/identifier/functions/strcasecmp.py +33 -0
  296. angr/analyses/identifier/functions/strcmp.py +113 -0
  297. angr/analyses/identifier/functions/strcpy.py +43 -0
  298. angr/analyses/identifier/functions/strlen.py +27 -0
  299. angr/analyses/identifier/functions/strncmp.py +104 -0
  300. angr/analyses/identifier/functions/strncpy.py +65 -0
  301. angr/analyses/identifier/functions/strtol.py +89 -0
  302. angr/analyses/identifier/identify.py +825 -0
  303. angr/analyses/identifier/runner.py +360 -0
  304. angr/analyses/init_finder.py +289 -0
  305. angr/analyses/loop_analysis.py +349 -0
  306. angr/analyses/loopfinder.py +171 -0
  307. angr/analyses/patchfinder.py +137 -0
  308. angr/analyses/pathfinder.py +282 -0
  309. angr/analyses/propagator/__init__.py +5 -0
  310. angr/analyses/propagator/engine_base.py +62 -0
  311. angr/analyses/propagator/engine_vex.py +297 -0
  312. angr/analyses/propagator/propagator.py +361 -0
  313. angr/analyses/propagator/top_checker_mixin.py +218 -0
  314. angr/analyses/propagator/values.py +117 -0
  315. angr/analyses/propagator/vex_vars.py +68 -0
  316. angr/analyses/proximity_graph.py +444 -0
  317. angr/analyses/reaching_definitions/__init__.py +67 -0
  318. angr/analyses/reaching_definitions/call_trace.py +73 -0
  319. angr/analyses/reaching_definitions/dep_graph.py +433 -0
  320. angr/analyses/reaching_definitions/engine_ail.py +1130 -0
  321. angr/analyses/reaching_definitions/engine_vex.py +1127 -0
  322. angr/analyses/reaching_definitions/external_codeloc.py +0 -0
  323. angr/analyses/reaching_definitions/function_handler.py +638 -0
  324. angr/analyses/reaching_definitions/function_handler_library/__init__.py +12 -0
  325. angr/analyses/reaching_definitions/function_handler_library/stdio.py +269 -0
  326. angr/analyses/reaching_definitions/function_handler_library/stdlib.py +195 -0
  327. angr/analyses/reaching_definitions/function_handler_library/string.py +158 -0
  328. angr/analyses/reaching_definitions/function_handler_library/unistd.py +51 -0
  329. angr/analyses/reaching_definitions/heap_allocator.py +70 -0
  330. angr/analyses/reaching_definitions/rd_initializer.py +237 -0
  331. angr/analyses/reaching_definitions/rd_state.py +579 -0
  332. angr/analyses/reaching_definitions/reaching_definitions.py +581 -0
  333. angr/analyses/reaching_definitions/subject.py +65 -0
  334. angr/analyses/reassembler.py +2900 -0
  335. angr/analyses/s_liveness.py +203 -0
  336. angr/analyses/s_propagator.py +542 -0
  337. angr/analyses/s_reaching_definitions/__init__.py +12 -0
  338. angr/analyses/s_reaching_definitions/s_rda_model.py +136 -0
  339. angr/analyses/s_reaching_definitions/s_rda_view.py +316 -0
  340. angr/analyses/s_reaching_definitions/s_reaching_definitions.py +177 -0
  341. angr/analyses/smc.py +161 -0
  342. angr/analyses/soot_class_hierarchy.py +273 -0
  343. angr/analyses/stack_pointer_tracker.py +953 -0
  344. angr/analyses/static_hooker.py +53 -0
  345. angr/analyses/typehoon/__init__.py +5 -0
  346. angr/analyses/typehoon/dfa.py +118 -0
  347. angr/analyses/typehoon/lifter.py +122 -0
  348. angr/analyses/typehoon/simple_solver.py +1666 -0
  349. angr/analyses/typehoon/translator.py +279 -0
  350. angr/analyses/typehoon/typeconsts.py +338 -0
  351. angr/analyses/typehoon/typehoon.py +319 -0
  352. angr/analyses/typehoon/typevars.py +622 -0
  353. angr/analyses/typehoon/variance.py +11 -0
  354. angr/analyses/unpacker/__init__.py +6 -0
  355. angr/analyses/unpacker/obfuscation_detector.py +103 -0
  356. angr/analyses/unpacker/packing_detector.py +138 -0
  357. angr/analyses/variable_recovery/__init__.py +9 -0
  358. angr/analyses/variable_recovery/annotations.py +58 -0
  359. angr/analyses/variable_recovery/engine_ail.py +885 -0
  360. angr/analyses/variable_recovery/engine_base.py +1197 -0
  361. angr/analyses/variable_recovery/engine_vex.py +593 -0
  362. angr/analyses/variable_recovery/irsb_scanner.py +143 -0
  363. angr/analyses/variable_recovery/variable_recovery.py +574 -0
  364. angr/analyses/variable_recovery/variable_recovery_base.py +489 -0
  365. angr/analyses/variable_recovery/variable_recovery_fast.py +661 -0
  366. angr/analyses/veritesting.py +626 -0
  367. angr/analyses/vfg.py +1898 -0
  368. angr/analyses/vsa_ddg.py +420 -0
  369. angr/analyses/vtable.py +92 -0
  370. angr/analyses/xrefs.py +286 -0
  371. angr/angrdb/__init__.py +14 -0
  372. angr/angrdb/db.py +206 -0
  373. angr/angrdb/models.py +184 -0
  374. angr/angrdb/serializers/__init__.py +10 -0
  375. angr/angrdb/serializers/cfg_model.py +41 -0
  376. angr/angrdb/serializers/comments.py +60 -0
  377. angr/angrdb/serializers/funcs.py +61 -0
  378. angr/angrdb/serializers/kb.py +111 -0
  379. angr/angrdb/serializers/labels.py +59 -0
  380. angr/angrdb/serializers/loader.py +165 -0
  381. angr/angrdb/serializers/structured_code.py +125 -0
  382. angr/angrdb/serializers/variables.py +58 -0
  383. angr/angrdb/serializers/xrefs.py +48 -0
  384. angr/annocfg.py +317 -0
  385. angr/blade.py +431 -0
  386. angr/block.py +509 -0
  387. angr/callable.py +168 -0
  388. angr/calling_conventions.py +2580 -0
  389. angr/code_location.py +163 -0
  390. angr/codenode.py +145 -0
  391. angr/concretization_strategies/__init__.py +32 -0
  392. angr/concretization_strategies/any.py +17 -0
  393. angr/concretization_strategies/any_named.py +35 -0
  394. angr/concretization_strategies/base.py +81 -0
  395. angr/concretization_strategies/controlled_data.py +58 -0
  396. angr/concretization_strategies/eval.py +19 -0
  397. angr/concretization_strategies/logging.py +35 -0
  398. angr/concretization_strategies/max.py +25 -0
  399. angr/concretization_strategies/nonzero.py +16 -0
  400. angr/concretization_strategies/nonzero_range.py +22 -0
  401. angr/concretization_strategies/norepeats.py +37 -0
  402. angr/concretization_strategies/norepeats_range.py +37 -0
  403. angr/concretization_strategies/range.py +19 -0
  404. angr/concretization_strategies/signed_add.py +31 -0
  405. angr/concretization_strategies/single.py +15 -0
  406. angr/concretization_strategies/solutions.py +20 -0
  407. angr/concretization_strategies/unlimited_range.py +17 -0
  408. angr/distributed/__init__.py +9 -0
  409. angr/distributed/server.py +197 -0
  410. angr/distributed/worker.py +185 -0
  411. angr/emulator.py +143 -0
  412. angr/engines/__init__.py +67 -0
  413. angr/engines/concrete.py +66 -0
  414. angr/engines/engine.py +29 -0
  415. angr/engines/failure.py +27 -0
  416. angr/engines/hook.py +68 -0
  417. angr/engines/icicle.py +278 -0
  418. angr/engines/light/__init__.py +23 -0
  419. angr/engines/light/data.py +681 -0
  420. angr/engines/light/engine.py +1285 -0
  421. angr/engines/pcode/__init__.py +9 -0
  422. angr/engines/pcode/behavior.py +994 -0
  423. angr/engines/pcode/cc.py +128 -0
  424. angr/engines/pcode/emulate.py +440 -0
  425. angr/engines/pcode/engine.py +242 -0
  426. angr/engines/pcode/lifter.py +1420 -0
  427. angr/engines/procedure.py +70 -0
  428. angr/engines/soot/__init__.py +5 -0
  429. angr/engines/soot/engine.py +410 -0
  430. angr/engines/soot/exceptions.py +17 -0
  431. angr/engines/soot/expressions/__init__.py +87 -0
  432. angr/engines/soot/expressions/arrayref.py +22 -0
  433. angr/engines/soot/expressions/base.py +21 -0
  434. angr/engines/soot/expressions/binop.py +28 -0
  435. angr/engines/soot/expressions/cast.py +22 -0
  436. angr/engines/soot/expressions/condition.py +35 -0
  437. angr/engines/soot/expressions/constants.py +47 -0
  438. angr/engines/soot/expressions/instanceOf.py +15 -0
  439. angr/engines/soot/expressions/instancefieldref.py +8 -0
  440. angr/engines/soot/expressions/invoke.py +114 -0
  441. angr/engines/soot/expressions/length.py +8 -0
  442. angr/engines/soot/expressions/local.py +8 -0
  443. angr/engines/soot/expressions/new.py +16 -0
  444. angr/engines/soot/expressions/newArray.py +54 -0
  445. angr/engines/soot/expressions/newMultiArray.py +86 -0
  446. angr/engines/soot/expressions/paramref.py +8 -0
  447. angr/engines/soot/expressions/phi.py +30 -0
  448. angr/engines/soot/expressions/staticfieldref.py +8 -0
  449. angr/engines/soot/expressions/thisref.py +7 -0
  450. angr/engines/soot/expressions/unsupported.py +7 -0
  451. angr/engines/soot/field_dispatcher.py +46 -0
  452. angr/engines/soot/method_dispatcher.py +46 -0
  453. angr/engines/soot/statements/__init__.py +44 -0
  454. angr/engines/soot/statements/assign.py +30 -0
  455. angr/engines/soot/statements/base.py +79 -0
  456. angr/engines/soot/statements/goto.py +14 -0
  457. angr/engines/soot/statements/identity.py +15 -0
  458. angr/engines/soot/statements/if_.py +19 -0
  459. angr/engines/soot/statements/invoke.py +12 -0
  460. angr/engines/soot/statements/return_.py +20 -0
  461. angr/engines/soot/statements/switch.py +41 -0
  462. angr/engines/soot/statements/throw.py +15 -0
  463. angr/engines/soot/values/__init__.py +38 -0
  464. angr/engines/soot/values/arrayref.py +122 -0
  465. angr/engines/soot/values/base.py +7 -0
  466. angr/engines/soot/values/constants.py +18 -0
  467. angr/engines/soot/values/instancefieldref.py +44 -0
  468. angr/engines/soot/values/local.py +18 -0
  469. angr/engines/soot/values/paramref.py +18 -0
  470. angr/engines/soot/values/staticfieldref.py +38 -0
  471. angr/engines/soot/values/strref.py +38 -0
  472. angr/engines/soot/values/thisref.py +149 -0
  473. angr/engines/successors.py +654 -0
  474. angr/engines/syscall.py +51 -0
  475. angr/engines/unicorn.py +490 -0
  476. angr/engines/vex/__init__.py +20 -0
  477. angr/engines/vex/claripy/__init__.py +5 -0
  478. angr/engines/vex/claripy/ccall.py +2097 -0
  479. angr/engines/vex/claripy/datalayer.py +141 -0
  480. angr/engines/vex/claripy/irop.py +1276 -0
  481. angr/engines/vex/heavy/__init__.py +16 -0
  482. angr/engines/vex/heavy/actions.py +231 -0
  483. angr/engines/vex/heavy/concretizers.py +403 -0
  484. angr/engines/vex/heavy/dirty.py +466 -0
  485. angr/engines/vex/heavy/heavy.py +370 -0
  486. angr/engines/vex/heavy/inspect.py +52 -0
  487. angr/engines/vex/heavy/resilience.py +85 -0
  488. angr/engines/vex/heavy/super_fastpath.py +34 -0
  489. angr/engines/vex/lifter.py +420 -0
  490. angr/engines/vex/light/__init__.py +11 -0
  491. angr/engines/vex/light/light.py +551 -0
  492. angr/engines/vex/light/resilience.py +74 -0
  493. angr/engines/vex/light/slicing.py +52 -0
  494. angr/errors.py +609 -0
  495. angr/exploration_techniques/__init__.py +53 -0
  496. angr/exploration_techniques/base.py +126 -0
  497. angr/exploration_techniques/bucketizer.py +94 -0
  498. angr/exploration_techniques/common.py +56 -0
  499. angr/exploration_techniques/dfs.py +37 -0
  500. angr/exploration_techniques/director.py +520 -0
  501. angr/exploration_techniques/driller_core.py +100 -0
  502. angr/exploration_techniques/explorer.py +152 -0
  503. angr/exploration_techniques/lengthlimiter.py +22 -0
  504. angr/exploration_techniques/local_loop_seer.py +65 -0
  505. angr/exploration_techniques/loop_seer.py +236 -0
  506. angr/exploration_techniques/manual_mergepoint.py +82 -0
  507. angr/exploration_techniques/memory_watcher.py +43 -0
  508. angr/exploration_techniques/oppologist.py +92 -0
  509. angr/exploration_techniques/slicecutor.py +118 -0
  510. angr/exploration_techniques/spiller.py +280 -0
  511. angr/exploration_techniques/spiller_db.py +27 -0
  512. angr/exploration_techniques/stochastic.py +56 -0
  513. angr/exploration_techniques/stub_stasher.py +19 -0
  514. angr/exploration_techniques/suggestions.py +159 -0
  515. angr/exploration_techniques/tech_builder.py +49 -0
  516. angr/exploration_techniques/threading.py +69 -0
  517. angr/exploration_techniques/timeout.py +34 -0
  518. angr/exploration_techniques/tracer.py +1098 -0
  519. angr/exploration_techniques/unique.py +106 -0
  520. angr/exploration_techniques/veritesting.py +37 -0
  521. angr/factory.py +404 -0
  522. angr/flirt/__init__.py +97 -0
  523. angr/flirt/build_sig.py +305 -0
  524. angr/graph_utils.py +0 -0
  525. angr/keyed_region.py +525 -0
  526. angr/knowledge_base.py +143 -0
  527. angr/knowledge_plugins/__init__.py +43 -0
  528. angr/knowledge_plugins/callsite_prototypes.py +53 -0
  529. angr/knowledge_plugins/cfg/__init__.py +18 -0
  530. angr/knowledge_plugins/cfg/cfg_manager.py +95 -0
  531. angr/knowledge_plugins/cfg/cfg_model.py +1045 -0
  532. angr/knowledge_plugins/cfg/cfg_node.py +536 -0
  533. angr/knowledge_plugins/cfg/indirect_jump.py +65 -0
  534. angr/knowledge_plugins/cfg/memory_data.py +156 -0
  535. angr/knowledge_plugins/comments.py +16 -0
  536. angr/knowledge_plugins/custom_strings.py +38 -0
  537. angr/knowledge_plugins/data.py +22 -0
  538. angr/knowledge_plugins/debug_variables.py +216 -0
  539. angr/knowledge_plugins/functions/__init__.py +9 -0
  540. angr/knowledge_plugins/functions/function.py +1780 -0
  541. angr/knowledge_plugins/functions/function_manager.py +588 -0
  542. angr/knowledge_plugins/functions/function_parser.py +299 -0
  543. angr/knowledge_plugins/functions/soot_function.py +128 -0
  544. angr/knowledge_plugins/indirect_jumps.py +35 -0
  545. angr/knowledge_plugins/key_definitions/__init__.py +17 -0
  546. angr/knowledge_plugins/key_definitions/atoms.py +374 -0
  547. angr/knowledge_plugins/key_definitions/constants.py +29 -0
  548. angr/knowledge_plugins/key_definitions/definition.py +214 -0
  549. angr/knowledge_plugins/key_definitions/environment.py +96 -0
  550. angr/knowledge_plugins/key_definitions/heap_address.py +33 -0
  551. angr/knowledge_plugins/key_definitions/key_definition_manager.py +82 -0
  552. angr/knowledge_plugins/key_definitions/live_definitions.py +1010 -0
  553. angr/knowledge_plugins/key_definitions/liveness.py +165 -0
  554. angr/knowledge_plugins/key_definitions/rd_model.py +171 -0
  555. angr/knowledge_plugins/key_definitions/tag.py +78 -0
  556. angr/knowledge_plugins/key_definitions/undefined.py +70 -0
  557. angr/knowledge_plugins/key_definitions/unknown_size.py +86 -0
  558. angr/knowledge_plugins/key_definitions/uses.py +178 -0
  559. angr/knowledge_plugins/labels.py +110 -0
  560. angr/knowledge_plugins/obfuscations.py +37 -0
  561. angr/knowledge_plugins/patches.py +126 -0
  562. angr/knowledge_plugins/plugin.py +24 -0
  563. angr/knowledge_plugins/propagations/__init__.py +10 -0
  564. angr/knowledge_plugins/propagations/prop_value.py +191 -0
  565. angr/knowledge_plugins/propagations/propagation_manager.py +60 -0
  566. angr/knowledge_plugins/propagations/propagation_model.py +80 -0
  567. angr/knowledge_plugins/propagations/states.py +552 -0
  568. angr/knowledge_plugins/structured_code.py +63 -0
  569. angr/knowledge_plugins/types.py +88 -0
  570. angr/knowledge_plugins/variables/__init__.py +8 -0
  571. angr/knowledge_plugins/variables/variable_access.py +113 -0
  572. angr/knowledge_plugins/variables/variable_manager.py +1380 -0
  573. angr/knowledge_plugins/xrefs/__init__.py +12 -0
  574. angr/knowledge_plugins/xrefs/xref.py +150 -0
  575. angr/knowledge_plugins/xrefs/xref_manager.py +127 -0
  576. angr/knowledge_plugins/xrefs/xref_types.py +16 -0
  577. angr/misc/__init__.py +19 -0
  578. angr/misc/ansi.py +47 -0
  579. angr/misc/autoimport.py +90 -0
  580. angr/misc/bug_report.py +117 -0
  581. angr/misc/hookset.py +106 -0
  582. angr/misc/loggers.py +130 -0
  583. angr/misc/picklable_lock.py +46 -0
  584. angr/misc/plugins.py +289 -0
  585. angr/misc/telemetry.py +54 -0
  586. angr/misc/testing.py +24 -0
  587. angr/misc/ux.py +31 -0
  588. angr/procedures/__init__.py +12 -0
  589. angr/procedures/advapi32/__init__.py +0 -0
  590. angr/procedures/cgc/__init__.py +3 -0
  591. angr/procedures/cgc/_terminate.py +11 -0
  592. angr/procedures/cgc/allocate.py +75 -0
  593. angr/procedures/cgc/deallocate.py +67 -0
  594. angr/procedures/cgc/fdwait.py +65 -0
  595. angr/procedures/cgc/random.py +67 -0
  596. angr/procedures/cgc/receive.py +93 -0
  597. angr/procedures/cgc/transmit.py +65 -0
  598. angr/procedures/definitions/__init__.py +779 -0
  599. angr/procedures/definitions/cgc.py +20 -0
  600. angr/procedures/definitions/glibc.py +8372 -0
  601. angr/procedures/definitions/gnulib.py +32 -0
  602. angr/procedures/definitions/libstdcpp.py +21 -0
  603. angr/procedures/definitions/linux_kernel.py +6171 -0
  604. angr/procedures/definitions/linux_loader.py +7 -0
  605. angr/procedures/definitions/msvcr.py +16 -0
  606. angr/procedures/definitions/parse_syscalls_from_local_system.py +50 -0
  607. angr/procedures/definitions/parse_win32json.py +2553 -0
  608. angr/procedures/definitions/types_stl.py +22 -0
  609. angr/procedures/definitions/types_win32.py +34482 -0
  610. angr/procedures/definitions/wdk_api-ms-win-dx-d3dkmt-l1-1-4.py +30 -0
  611. angr/procedures/definitions/wdk_api-ms-win-dx-d3dkmt-l1-1-6.py +26 -0
  612. angr/procedures/definitions/wdk_clfs.py +140 -0
  613. angr/procedures/definitions/wdk_fltmgr.py +556 -0
  614. angr/procedures/definitions/wdk_fwpkclnt.py +30 -0
  615. angr/procedures/definitions/wdk_fwpuclnt.py +316 -0
  616. angr/procedures/definitions/wdk_gdi32.py +366 -0
  617. angr/procedures/definitions/wdk_hal.py +78 -0
  618. angr/procedures/definitions/wdk_ksecdd.py +62 -0
  619. angr/procedures/definitions/wdk_ndis.py +238 -0
  620. angr/procedures/definitions/wdk_ntoskrnl.py +3451 -0
  621. angr/procedures/definitions/wdk_offreg.py +72 -0
  622. angr/procedures/definitions/wdk_pshed.py +36 -0
  623. angr/procedures/definitions/wdk_secur32.py +40 -0
  624. angr/procedures/definitions/wdk_vhfum.py +34 -0
  625. angr/procedures/definitions/win32_aclui.py +30 -0
  626. angr/procedures/definitions/win32_activeds.py +68 -0
  627. angr/procedures/definitions/win32_advapi32.py +1684 -0
  628. angr/procedures/definitions/win32_advpack.py +124 -0
  629. angr/procedures/definitions/win32_amsi.py +38 -0
  630. angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-1.py +44 -0
  631. angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-3.py +34 -0
  632. angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-6.py +26 -0
  633. angr/procedures/definitions/win32_api-ms-win-core-apiquery-l2-1-0.py +26 -0
  634. angr/procedures/definitions/win32_api-ms-win-core-backgroundtask-l1-1-0.py +26 -0
  635. angr/procedures/definitions/win32_api-ms-win-core-comm-l1-1-1.py +26 -0
  636. angr/procedures/definitions/win32_api-ms-win-core-comm-l1-1-2.py +26 -0
  637. angr/procedures/definitions/win32_api-ms-win-core-enclave-l1-1-1.py +30 -0
  638. angr/procedures/definitions/win32_api-ms-win-core-errorhandling-l1-1-3.py +26 -0
  639. angr/procedures/definitions/win32_api-ms-win-core-featurestaging-l1-1-0.py +34 -0
  640. angr/procedures/definitions/win32_api-ms-win-core-featurestaging-l1-1-1.py +26 -0
  641. angr/procedures/definitions/win32_api-ms-win-core-file-fromapp-l1-1-0.py +46 -0
  642. angr/procedures/definitions/win32_api-ms-win-core-handle-l1-1-0.py +26 -0
  643. angr/procedures/definitions/win32_api-ms-win-core-ioring-l1-1-0.py +48 -0
  644. angr/procedures/definitions/win32_api-ms-win-core-marshal-l1-1-0.py +32 -0
  645. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-3.py +32 -0
  646. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-4.py +26 -0
  647. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-5.py +30 -0
  648. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-6.py +32 -0
  649. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-7.py +28 -0
  650. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-8.py +30 -0
  651. angr/procedures/definitions/win32_api-ms-win-core-path-l1-1-0.py +68 -0
  652. angr/procedures/definitions/win32_api-ms-win-core-psm-appnotify-l1-1-0.py +28 -0
  653. angr/procedures/definitions/win32_api-ms-win-core-psm-appnotify-l1-1-1.py +28 -0
  654. angr/procedures/definitions/win32_api-ms-win-core-realtime-l1-1-1.py +30 -0
  655. angr/procedures/definitions/win32_api-ms-win-core-realtime-l1-1-2.py +30 -0
  656. angr/procedures/definitions/win32_api-ms-win-core-slapi-l1-1-0.py +26 -0
  657. angr/procedures/definitions/win32_api-ms-win-core-state-helpers-l1-1-0.py +26 -0
  658. angr/procedures/definitions/win32_api-ms-win-core-synch-l1-2-0.py +30 -0
  659. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-0.py +26 -0
  660. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-3.py +28 -0
  661. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-4.py +28 -0
  662. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-6.py +26 -0
  663. angr/procedures/definitions/win32_api-ms-win-core-util-l1-1-1.py +28 -0
  664. angr/procedures/definitions/win32_api-ms-win-core-winrt-error-l1-1-0.py +44 -0
  665. angr/procedures/definitions/win32_api-ms-win-core-winrt-error-l1-1-1.py +38 -0
  666. angr/procedures/definitions/win32_api-ms-win-core-winrt-l1-1-0.py +40 -0
  667. angr/procedures/definitions/win32_api-ms-win-core-winrt-registration-l1-1-0.py +24 -0
  668. angr/procedures/definitions/win32_api-ms-win-core-winrt-robuffer-l1-1-0.py +24 -0
  669. angr/procedures/definitions/win32_api-ms-win-core-winrt-roparameterizediid-l1-1-0.py +28 -0
  670. angr/procedures/definitions/win32_api-ms-win-core-winrt-string-l1-1-0.py +76 -0
  671. angr/procedures/definitions/win32_api-ms-win-core-winrt-string-l1-1-1.py +24 -0
  672. angr/procedures/definitions/win32_api-ms-win-core-wow64-l1-1-1.py +30 -0
  673. angr/procedures/definitions/win32_api-ms-win-devices-query-l1-1-0.py +42 -0
  674. angr/procedures/definitions/win32_api-ms-win-devices-query-l1-1-1.py +34 -0
  675. angr/procedures/definitions/win32_api-ms-win-dx-d3dkmt-l1-1-0.py +26 -0
  676. angr/procedures/definitions/win32_api-ms-win-gaming-deviceinformation-l1-1-0.py +26 -0
  677. angr/procedures/definitions/win32_api-ms-win-gaming-expandedresources-l1-1-0.py +30 -0
  678. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-0.py +38 -0
  679. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-1.py +28 -0
  680. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-2.py +38 -0
  681. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-3.py +28 -0
  682. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-4.py +40 -0
  683. angr/procedures/definitions/win32_api-ms-win-mm-misc-l1-1-1.py +26 -0
  684. angr/procedures/definitions/win32_api-ms-win-net-isolation-l1-1-0.py +40 -0
  685. angr/procedures/definitions/win32_api-ms-win-security-base-l1-2-2.py +26 -0
  686. angr/procedures/definitions/win32_api-ms-win-security-isolatedcontainer-l1-1-0.py +26 -0
  687. angr/procedures/definitions/win32_api-ms-win-security-isolatedcontainer-l1-1-1.py +26 -0
  688. angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-3.py +26 -0
  689. angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-4.py +26 -0
  690. angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-5.py +28 -0
  691. angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-0.py +30 -0
  692. angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-1.py +36 -0
  693. angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-2.py +26 -0
  694. angr/procedures/definitions/win32_api-ms-win-shcore-stream-winrt-l1-1-0.py +28 -0
  695. angr/procedures/definitions/win32_api-ms-win-wsl-api-l1-1-0.py +38 -0
  696. angr/procedures/definitions/win32_apphelp.py +26 -0
  697. angr/procedures/definitions/win32_authz.py +90 -0
  698. angr/procedures/definitions/win32_avicap32.py +32 -0
  699. angr/procedures/definitions/win32_avifil32.py +144 -0
  700. angr/procedures/definitions/win32_avrt.py +52 -0
  701. angr/procedures/definitions/win32_bcp47mrm.py +28 -0
  702. angr/procedures/definitions/win32_bcrypt.py +130 -0
  703. angr/procedures/definitions/win32_bcryptprimitives.py +28 -0
  704. angr/procedures/definitions/win32_bluetoothapis.py +106 -0
  705. angr/procedures/definitions/win32_bthprops.py +34 -0
  706. angr/procedures/definitions/win32_bthprops_cpl.py +36 -0
  707. angr/procedures/definitions/win32_cabinet.py +68 -0
  708. angr/procedures/definitions/win32_certadm.py +60 -0
  709. angr/procedures/definitions/win32_certpoleng.py +40 -0
  710. angr/procedures/definitions/win32_cfgmgr32.py +502 -0
  711. angr/procedures/definitions/win32_chakra.py +198 -0
  712. angr/procedures/definitions/win32_cldapi.py +96 -0
  713. angr/procedures/definitions/win32_clfsw32.py +142 -0
  714. angr/procedures/definitions/win32_clusapi.py +584 -0
  715. angr/procedures/definitions/win32_comctl32.py +254 -0
  716. angr/procedures/definitions/win32_comdlg32.py +66 -0
  717. angr/procedures/definitions/win32_compstui.py +32 -0
  718. angr/procedures/definitions/win32_computecore.py +132 -0
  719. angr/procedures/definitions/win32_computenetwork.py +110 -0
  720. angr/procedures/definitions/win32_computestorage.py +48 -0
  721. angr/procedures/definitions/win32_comsvcs.py +38 -0
  722. angr/procedures/definitions/win32_coremessaging.py +24 -0
  723. angr/procedures/definitions/win32_credui.py +62 -0
  724. angr/procedures/definitions/win32_crypt32.py +482 -0
  725. angr/procedures/definitions/win32_cryptnet.py +34 -0
  726. angr/procedures/definitions/win32_cryptui.py +44 -0
  727. angr/procedures/definitions/win32_cryptxml.py +62 -0
  728. angr/procedures/definitions/win32_cscapi.py +32 -0
  729. angr/procedures/definitions/win32_d2d1.py +50 -0
  730. angr/procedures/definitions/win32_d3d10.py +78 -0
  731. angr/procedures/definitions/win32_d3d10_1.py +28 -0
  732. angr/procedures/definitions/win32_d3d11.py +30 -0
  733. angr/procedures/definitions/win32_d3d12.py +40 -0
  734. angr/procedures/definitions/win32_d3d9.py +46 -0
  735. angr/procedures/definitions/win32_d3dcompiler_47.py +76 -0
  736. angr/procedures/definitions/win32_d3dcsx.py +42 -0
  737. angr/procedures/definitions/win32_davclnt.py +60 -0
  738. angr/procedures/definitions/win32_dbgeng.py +32 -0
  739. angr/procedures/definitions/win32_dbghelp.py +462 -0
  740. angr/procedures/definitions/win32_dbgmodel.py +26 -0
  741. angr/procedures/definitions/win32_dciman32.py +64 -0
  742. angr/procedures/definitions/win32_dcomp.py +48 -0
  743. angr/procedures/definitions/win32_ddraw.py +38 -0
  744. angr/procedures/definitions/win32_deviceaccess.py +26 -0
  745. angr/procedures/definitions/win32_dflayout.py +26 -0
  746. angr/procedures/definitions/win32_dhcpcsvc.py +54 -0
  747. angr/procedures/definitions/win32_dhcpcsvc6.py +36 -0
  748. angr/procedures/definitions/win32_dhcpsapi.py +416 -0
  749. angr/procedures/definitions/win32_diagnosticdataquery.py +94 -0
  750. angr/procedures/definitions/win32_dinput8.py +26 -0
  751. angr/procedures/definitions/win32_directml.py +28 -0
  752. angr/procedures/definitions/win32_dmprocessxmlfiltered.py +26 -0
  753. angr/procedures/definitions/win32_dnsapi.py +152 -0
  754. angr/procedures/definitions/win32_drt.py +56 -0
  755. angr/procedures/definitions/win32_drtprov.py +42 -0
  756. angr/procedures/definitions/win32_drttransport.py +28 -0
  757. angr/procedures/definitions/win32_dsound.py +44 -0
  758. angr/procedures/definitions/win32_dsparse.py +62 -0
  759. angr/procedures/definitions/win32_dsprop.py +38 -0
  760. angr/procedures/definitions/win32_dssec.py +32 -0
  761. angr/procedures/definitions/win32_dsuiext.py +32 -0
  762. angr/procedures/definitions/win32_dwmapi.py +86 -0
  763. angr/procedures/definitions/win32_dwrite.py +26 -0
  764. angr/procedures/definitions/win32_dxcompiler.py +28 -0
  765. angr/procedures/definitions/win32_dxcore.py +26 -0
  766. angr/procedures/definitions/win32_dxgi.py +36 -0
  767. angr/procedures/definitions/win32_dxva2.py +100 -0
  768. angr/procedures/definitions/win32_eappcfg.py +52 -0
  769. angr/procedures/definitions/win32_eappprxy.py +60 -0
  770. angr/procedures/definitions/win32_efswrt.py +28 -0
  771. angr/procedures/definitions/win32_elscore.py +34 -0
  772. angr/procedures/definitions/win32_esent.py +482 -0
  773. angr/procedures/definitions/win32_evr.py +38 -0
  774. angr/procedures/definitions/win32_faultrep.py +32 -0
  775. angr/procedures/definitions/win32_fhsvcctl.py +38 -0
  776. angr/procedures/definitions/win32_firewallapi.py +30 -0
  777. angr/procedures/definitions/win32_fltlib.py +80 -0
  778. angr/procedures/definitions/win32_fontsub.py +28 -0
  779. angr/procedures/definitions/win32_forceinline.py +30 -0
  780. angr/procedures/definitions/win32_fwpuclnt.py +408 -0
  781. angr/procedures/definitions/win32_fxsutility.py +28 -0
  782. angr/procedures/definitions/win32_gdi32.py +886 -0
  783. angr/procedures/definitions/win32_gdiplus.py +1282 -0
  784. angr/procedures/definitions/win32_glu32.py +128 -0
  785. angr/procedures/definitions/win32_gpedit.py +36 -0
  786. angr/procedures/definitions/win32_hhctrl_ocx.py +28 -0
  787. angr/procedures/definitions/win32_hid.py +114 -0
  788. angr/procedures/definitions/win32_hlink.py +80 -0
  789. angr/procedures/definitions/win32_hrtfapo.py +26 -0
  790. angr/procedures/definitions/win32_httpapi.py +110 -0
  791. angr/procedures/definitions/win32_icm32.py +66 -0
  792. angr/procedures/definitions/win32_icmui.py +28 -0
  793. angr/procedures/definitions/win32_icu.py +2074 -0
  794. angr/procedures/definitions/win32_ieframe.py +82 -0
  795. angr/procedures/definitions/win32_imagehlp.py +76 -0
  796. angr/procedures/definitions/win32_imgutil.py +42 -0
  797. angr/procedures/definitions/win32_imm32.py +188 -0
  798. angr/procedures/definitions/win32_infocardapi.py +58 -0
  799. angr/procedures/definitions/win32_inkobjcore.py +78 -0
  800. angr/procedures/definitions/win32_iphlpapi.py +426 -0
  801. angr/procedures/definitions/win32_iscsidsc.py +182 -0
  802. angr/procedures/definitions/win32_isolatedwindowsenvironmentutils.py +28 -0
  803. angr/procedures/definitions/win32_kernel32.py +3185 -0
  804. angr/procedures/definitions/win32_kernelbase.py +36 -0
  805. angr/procedures/definitions/win32_keycredmgr.py +32 -0
  806. angr/procedures/definitions/win32_ksproxy_ax.py +36 -0
  807. angr/procedures/definitions/win32_ksuser.py +40 -0
  808. angr/procedures/definitions/win32_ktmw32.py +102 -0
  809. angr/procedures/definitions/win32_licenseprotection.py +28 -0
  810. angr/procedures/definitions/win32_loadperf.py +48 -0
  811. angr/procedures/definitions/win32_magnification.py +62 -0
  812. angr/procedures/definitions/win32_mapi32.py +156 -0
  813. angr/procedures/definitions/win32_mdmlocalmanagement.py +30 -0
  814. angr/procedures/definitions/win32_mdmregistration.py +54 -0
  815. angr/procedures/definitions/win32_mf.py +148 -0
  816. angr/procedures/definitions/win32_mfcore.py +28 -0
  817. angr/procedures/definitions/win32_mfplat.py +314 -0
  818. angr/procedures/definitions/win32_mfplay.py +26 -0
  819. angr/procedures/definitions/win32_mfreadwrite.py +34 -0
  820. angr/procedures/definitions/win32_mfsensorgroup.py +44 -0
  821. angr/procedures/definitions/win32_mfsrcsnk.py +28 -0
  822. angr/procedures/definitions/win32_mgmtapi.py +42 -0
  823. angr/procedures/definitions/win32_mi.py +26 -0
  824. angr/procedures/definitions/win32_mmdevapi.py +26 -0
  825. angr/procedures/definitions/win32_mpr.py +118 -0
  826. angr/procedures/definitions/win32_mprapi.py +248 -0
  827. angr/procedures/definitions/win32_mqrt.py +92 -0
  828. angr/procedures/definitions/win32_mrmsupport.py +78 -0
  829. angr/procedures/definitions/win32_msacm32.py +108 -0
  830. angr/procedures/definitions/win32_msajapi.py +1118 -0
  831. angr/procedures/definitions/win32_mscms.py +182 -0
  832. angr/procedures/definitions/win32_mscoree.py +78 -0
  833. angr/procedures/definitions/win32_msctfmonitor.py +30 -0
  834. angr/procedures/definitions/win32_msdelta.py +56 -0
  835. angr/procedures/definitions/win32_msdmo.py +46 -0
  836. angr/procedures/definitions/win32_msdrm.py +192 -0
  837. angr/procedures/definitions/win32_msi.py +552 -0
  838. angr/procedures/definitions/win32_msimg32.py +30 -0
  839. angr/procedures/definitions/win32_mspatcha.py +56 -0
  840. angr/procedures/definitions/win32_mspatchc.py +42 -0
  841. angr/procedures/definitions/win32_msports.py +38 -0
  842. angr/procedures/definitions/win32_msrating.py +62 -0
  843. angr/procedures/definitions/win32_mssign32.py +44 -0
  844. angr/procedures/definitions/win32_mstask.py +28 -0
  845. angr/procedures/definitions/win32_msvfw32.py +110 -0
  846. angr/procedures/definitions/win32_mswsock.py +56 -0
  847. angr/procedures/definitions/win32_mtxdm.py +26 -0
  848. angr/procedures/definitions/win32_ncrypt.py +102 -0
  849. angr/procedures/definitions/win32_ndfapi.py +56 -0
  850. angr/procedures/definitions/win32_netapi32.py +436 -0
  851. angr/procedures/definitions/win32_netsh.py +40 -0
  852. angr/procedures/definitions/win32_netshell.py +28 -0
  853. angr/procedures/definitions/win32_newdev.py +46 -0
  854. angr/procedures/definitions/win32_ninput.py +84 -0
  855. angr/procedures/definitions/win32_normaliz.py +28 -0
  856. angr/procedures/definitions/win32_ntdll.py +171 -0
  857. angr/procedures/definitions/win32_ntdllk.py +26 -0
  858. angr/procedures/definitions/win32_ntdsapi.py +186 -0
  859. angr/procedures/definitions/win32_ntlanman.py +44 -0
  860. angr/procedures/definitions/win32_odbc32.py +392 -0
  861. angr/procedures/definitions/win32_odbcbcp.py +78 -0
  862. angr/procedures/definitions/win32_ole32.py +658 -0
  863. angr/procedures/definitions/win32_oleacc.py +58 -0
  864. angr/procedures/definitions/win32_oleaut32.py +834 -0
  865. angr/procedures/definitions/win32_oledlg.py +70 -0
  866. angr/procedures/definitions/win32_ondemandconnroutehelper.py +34 -0
  867. angr/procedures/definitions/win32_opengl32.py +734 -0
  868. angr/procedures/definitions/win32_opmxbox.py +30 -0
  869. angr/procedures/definitions/win32_p2p.py +240 -0
  870. angr/procedures/definitions/win32_p2pgraph.py +98 -0
  871. angr/procedures/definitions/win32_pdh.py +220 -0
  872. angr/procedures/definitions/win32_peerdist.py +80 -0
  873. angr/procedures/definitions/win32_powrprof.py +192 -0
  874. angr/procedures/definitions/win32_prntvpt.py +46 -0
  875. angr/procedures/definitions/win32_projectedfslib.py +62 -0
  876. angr/procedures/definitions/win32_propsys.py +460 -0
  877. angr/procedures/definitions/win32_psapi.py +78 -0
  878. angr/procedures/definitions/win32_quartz.py +28 -0
  879. angr/procedures/definitions/win32_query.py +32 -0
  880. angr/procedures/definitions/win32_qwave.py +46 -0
  881. angr/procedures/definitions/win32_rasapi32.py +192 -0
  882. angr/procedures/definitions/win32_rasdlg.py +36 -0
  883. angr/procedures/definitions/win32_resutils.py +264 -0
  884. angr/procedures/definitions/win32_rometadata.py +24 -0
  885. angr/procedures/definitions/win32_rpcns4.py +146 -0
  886. angr/procedures/definitions/win32_rpcproxy.py +32 -0
  887. angr/procedures/definitions/win32_rpcrt4.py +918 -0
  888. angr/procedures/definitions/win32_rstrtmgr.py +46 -0
  889. angr/procedures/definitions/win32_rtm.py +176 -0
  890. angr/procedures/definitions/win32_rtutils.py +106 -0
  891. angr/procedures/definitions/win32_rtworkq.py +90 -0
  892. angr/procedures/definitions/win32_sas.py +26 -0
  893. angr/procedures/definitions/win32_scarddlg.py +34 -0
  894. angr/procedures/definitions/win32_schannel.py +42 -0
  895. angr/procedures/definitions/win32_sechost.py +28 -0
  896. angr/procedures/definitions/win32_secur32.py +202 -0
  897. angr/procedures/definitions/win32_sensapi.py +30 -0
  898. angr/procedures/definitions/win32_sensorsutilsv2.py +104 -0
  899. angr/procedures/definitions/win32_setupapi.py +692 -0
  900. angr/procedures/definitions/win32_sfc.py +36 -0
  901. angr/procedures/definitions/win32_shdocvw.py +30 -0
  902. angr/procedures/definitions/win32_shell32.py +512 -0
  903. angr/procedures/definitions/win32_shlwapi.py +744 -0
  904. angr/procedures/definitions/win32_slc.py +88 -0
  905. angr/procedures/definitions/win32_slcext.py +32 -0
  906. angr/procedures/definitions/win32_slwga.py +26 -0
  907. angr/procedures/definitions/win32_snmpapi.py +76 -0
  908. angr/procedures/definitions/win32_spoolss.py +76 -0
  909. angr/procedures/definitions/win32_srclient.py +26 -0
  910. angr/procedures/definitions/win32_srpapi.py +46 -0
  911. angr/procedures/definitions/win32_sspicli.py +38 -0
  912. angr/procedures/definitions/win32_sti.py +26 -0
  913. angr/procedures/definitions/win32_t2embed.py +52 -0
  914. angr/procedures/definitions/win32_tapi32.py +522 -0
  915. angr/procedures/definitions/win32_tbs.py +52 -0
  916. angr/procedures/definitions/win32_tdh.py +78 -0
  917. angr/procedures/definitions/win32_tokenbinding.py +44 -0
  918. angr/procedures/definitions/win32_traffic.py +64 -0
  919. angr/procedures/definitions/win32_txfw32.py +42 -0
  920. angr/procedures/definitions/win32_ualapi.py +32 -0
  921. angr/procedures/definitions/win32_uiautomationcore.py +220 -0
  922. angr/procedures/definitions/win32_urlmon.py +178 -0
  923. angr/procedures/definitions/win32_user32.py +1551 -0
  924. angr/procedures/definitions/win32_userenv.py +112 -0
  925. angr/procedures/definitions/win32_usp10.py +104 -0
  926. angr/procedures/definitions/win32_uxtheme.py +178 -0
  927. angr/procedures/definitions/win32_verifier.py +26 -0
  928. angr/procedures/definitions/win32_version.py +52 -0
  929. angr/procedures/definitions/win32_vertdll.py +38 -0
  930. angr/procedures/definitions/win32_virtdisk.py +82 -0
  931. angr/procedures/definitions/win32_vmdevicehost.py +50 -0
  932. angr/procedures/definitions/win32_vmsavedstatedumpprovider.py +110 -0
  933. angr/procedures/definitions/win32_vssapi.py +26 -0
  934. angr/procedures/definitions/win32_wcmapi.py +34 -0
  935. angr/procedures/definitions/win32_wdsbp.py +38 -0
  936. angr/procedures/definitions/win32_wdsclientapi.py +98 -0
  937. angr/procedures/definitions/win32_wdsmc.py +36 -0
  938. angr/procedures/definitions/win32_wdspxe.py +86 -0
  939. angr/procedures/definitions/win32_wdstptc.py +50 -0
  940. angr/procedures/definitions/win32_webauthn.py +50 -0
  941. angr/procedures/definitions/win32_webservices.py +410 -0
  942. angr/procedures/definitions/win32_websocket.py +50 -0
  943. angr/procedures/definitions/win32_wecapi.py +54 -0
  944. angr/procedures/definitions/win32_wer.py +66 -0
  945. angr/procedures/definitions/win32_wevtapi.py +94 -0
  946. angr/procedures/definitions/win32_winbio.py +132 -0
  947. angr/procedures/definitions/win32_windows_ai_machinelearning.py +26 -0
  948. angr/procedures/definitions/win32_windows_data_pdf.py +24 -0
  949. angr/procedures/definitions/win32_windows_media_mediacontrol.py +40 -0
  950. angr/procedures/definitions/win32_windows_networking.py +26 -0
  951. angr/procedures/definitions/win32_windows_ui_xaml.py +28 -0
  952. angr/procedures/definitions/win32_windowscodecs.py +42 -0
  953. angr/procedures/definitions/win32_winfax.py +136 -0
  954. angr/procedures/definitions/win32_winhttp.py +136 -0
  955. angr/procedures/definitions/win32_winhvemulation.py +32 -0
  956. angr/procedures/definitions/win32_winhvplatform.py +156 -0
  957. angr/procedures/definitions/win32_wininet.py +616 -0
  958. angr/procedures/definitions/win32_winml.py +26 -0
  959. angr/procedures/definitions/win32_winmm.py +376 -0
  960. angr/procedures/definitions/win32_winscard.py +164 -0
  961. angr/procedures/definitions/win32_winspool.py +364 -0
  962. angr/procedures/definitions/win32_winspool_drv.py +368 -0
  963. angr/procedures/definitions/win32_wintrust.py +144 -0
  964. angr/procedures/definitions/win32_winusb.py +92 -0
  965. angr/procedures/definitions/win32_wlanapi.py +144 -0
  966. angr/procedures/definitions/win32_wlanui.py +26 -0
  967. angr/procedures/definitions/win32_wldap32.py +510 -0
  968. angr/procedures/definitions/win32_wldp.py +42 -0
  969. angr/procedures/definitions/win32_wmvcore.py +46 -0
  970. angr/procedures/definitions/win32_wnvapi.py +28 -0
  971. angr/procedures/definitions/win32_wofutil.py +46 -0
  972. angr/procedures/definitions/win32_ws2_32.py +344 -0
  973. angr/procedures/definitions/win32_wscapi.py +36 -0
  974. angr/procedures/definitions/win32_wsclient.py +30 -0
  975. angr/procedures/definitions/win32_wsdapi.py +88 -0
  976. angr/procedures/definitions/win32_wsmsvc.py +90 -0
  977. angr/procedures/definitions/win32_wsnmp32.py +122 -0
  978. angr/procedures/definitions/win32_wtsapi32.py +150 -0
  979. angr/procedures/definitions/win32_xaudio2_8.py +32 -0
  980. angr/procedures/definitions/win32_xinput1_4.py +38 -0
  981. angr/procedures/definitions/win32_xinputuap.py +36 -0
  982. angr/procedures/definitions/win32_xmllite.py +36 -0
  983. angr/procedures/definitions/win32_xolehlp.py +32 -0
  984. angr/procedures/definitions/win32_xpsprint.py +28 -0
  985. angr/procedures/glibc/__ctype_b_loc.py +21 -0
  986. angr/procedures/glibc/__ctype_tolower_loc.py +21 -0
  987. angr/procedures/glibc/__ctype_toupper_loc.py +21 -0
  988. angr/procedures/glibc/__errno_location.py +7 -0
  989. angr/procedures/glibc/__init__.py +3 -0
  990. angr/procedures/glibc/__libc_init.py +37 -0
  991. angr/procedures/glibc/__libc_start_main.py +301 -0
  992. angr/procedures/glibc/dynamic_loading.py +20 -0
  993. angr/procedures/glibc/scanf.py +11 -0
  994. angr/procedures/glibc/sscanf.py +6 -0
  995. angr/procedures/gnulib/__init__.py +3 -0
  996. angr/procedures/gnulib/xalloc_die.py +14 -0
  997. angr/procedures/gnulib/xstrtol_fatal.py +14 -0
  998. angr/procedures/java/__init__.py +42 -0
  999. angr/procedures/java/unconstrained.py +65 -0
  1000. angr/procedures/java_io/__init__.py +0 -0
  1001. angr/procedures/java_io/read.py +12 -0
  1002. angr/procedures/java_io/write.py +17 -0
  1003. angr/procedures/java_jni/__init__.py +482 -0
  1004. angr/procedures/java_jni/array_operations.py +312 -0
  1005. angr/procedures/java_jni/class_and_interface_operations.py +31 -0
  1006. angr/procedures/java_jni/field_access.py +173 -0
  1007. angr/procedures/java_jni/global_and_local_refs.py +57 -0
  1008. angr/procedures/java_jni/method_calls.py +365 -0
  1009. angr/procedures/java_jni/not_implemented.py +26 -0
  1010. angr/procedures/java_jni/object_operations.py +94 -0
  1011. angr/procedures/java_jni/string_operations.py +87 -0
  1012. angr/procedures/java_jni/version_information.py +12 -0
  1013. angr/procedures/java_lang/__init__.py +0 -0
  1014. angr/procedures/java_lang/character.py +30 -0
  1015. angr/procedures/java_lang/double.py +24 -0
  1016. angr/procedures/java_lang/exit.py +13 -0
  1017. angr/procedures/java_lang/getsimplename.py +18 -0
  1018. angr/procedures/java_lang/integer.py +43 -0
  1019. angr/procedures/java_lang/load_library.py +9 -0
  1020. angr/procedures/java_lang/math.py +15 -0
  1021. angr/procedures/java_lang/string.py +78 -0
  1022. angr/procedures/java_lang/stringbuilder.py +44 -0
  1023. angr/procedures/java_lang/system.py +18 -0
  1024. angr/procedures/java_util/__init__.py +0 -0
  1025. angr/procedures/java_util/collection.py +35 -0
  1026. angr/procedures/java_util/iterator.py +46 -0
  1027. angr/procedures/java_util/list.py +99 -0
  1028. angr/procedures/java_util/map.py +131 -0
  1029. angr/procedures/java_util/random.py +14 -0
  1030. angr/procedures/java_util/scanner_nextline.py +23 -0
  1031. angr/procedures/libc/__init__.py +3 -0
  1032. angr/procedures/libc/abort.py +9 -0
  1033. angr/procedures/libc/access.py +13 -0
  1034. angr/procedures/libc/atoi.py +14 -0
  1035. angr/procedures/libc/atol.py +13 -0
  1036. angr/procedures/libc/calloc.py +8 -0
  1037. angr/procedures/libc/closelog.py +10 -0
  1038. angr/procedures/libc/err.py +14 -0
  1039. angr/procedures/libc/error.py +54 -0
  1040. angr/procedures/libc/exit.py +11 -0
  1041. angr/procedures/libc/fclose.py +19 -0
  1042. angr/procedures/libc/feof.py +21 -0
  1043. angr/procedures/libc/fflush.py +16 -0
  1044. angr/procedures/libc/fgetc.py +27 -0
  1045. angr/procedures/libc/fgets.py +68 -0
  1046. angr/procedures/libc/fopen.py +63 -0
  1047. angr/procedures/libc/fprintf.py +25 -0
  1048. angr/procedures/libc/fputc.py +23 -0
  1049. angr/procedures/libc/fputs.py +24 -0
  1050. angr/procedures/libc/fread.py +24 -0
  1051. angr/procedures/libc/free.py +9 -0
  1052. angr/procedures/libc/fscanf.py +20 -0
  1053. angr/procedures/libc/fseek.py +34 -0
  1054. angr/procedures/libc/ftell.py +22 -0
  1055. angr/procedures/libc/fwrite.py +19 -0
  1056. angr/procedures/libc/getchar.py +13 -0
  1057. angr/procedures/libc/getdelim.py +99 -0
  1058. angr/procedures/libc/getegid.py +8 -0
  1059. angr/procedures/libc/geteuid.py +8 -0
  1060. angr/procedures/libc/getgid.py +8 -0
  1061. angr/procedures/libc/gets.py +68 -0
  1062. angr/procedures/libc/getuid.py +8 -0
  1063. angr/procedures/libc/malloc.py +12 -0
  1064. angr/procedures/libc/memcmp.py +69 -0
  1065. angr/procedures/libc/memcpy.py +38 -0
  1066. angr/procedures/libc/memset.py +72 -0
  1067. angr/procedures/libc/openlog.py +10 -0
  1068. angr/procedures/libc/perror.py +13 -0
  1069. angr/procedures/libc/printf.py +34 -0
  1070. angr/procedures/libc/putchar.py +13 -0
  1071. angr/procedures/libc/puts.py +19 -0
  1072. angr/procedures/libc/rand.py +8 -0
  1073. angr/procedures/libc/realloc.py +8 -0
  1074. angr/procedures/libc/rewind.py +12 -0
  1075. angr/procedures/libc/scanf.py +20 -0
  1076. angr/procedures/libc/setbuf.py +9 -0
  1077. angr/procedures/libc/setvbuf.py +7 -0
  1078. angr/procedures/libc/snprintf.py +36 -0
  1079. angr/procedures/libc/sprintf.py +25 -0
  1080. angr/procedures/libc/srand.py +7 -0
  1081. angr/procedures/libc/sscanf.py +13 -0
  1082. angr/procedures/libc/stpcpy.py +18 -0
  1083. angr/procedures/libc/strcat.py +14 -0
  1084. angr/procedures/libc/strchr.py +48 -0
  1085. angr/procedures/libc/strcmp.py +31 -0
  1086. angr/procedures/libc/strcpy.py +13 -0
  1087. angr/procedures/libc/strlen.py +114 -0
  1088. angr/procedures/libc/strncat.py +19 -0
  1089. angr/procedures/libc/strncmp.py +183 -0
  1090. angr/procedures/libc/strncpy.py +22 -0
  1091. angr/procedures/libc/strnlen.py +13 -0
  1092. angr/procedures/libc/strstr.py +101 -0
  1093. angr/procedures/libc/strtol.py +261 -0
  1094. angr/procedures/libc/strtoul.py +9 -0
  1095. angr/procedures/libc/system.py +13 -0
  1096. angr/procedures/libc/time.py +9 -0
  1097. angr/procedures/libc/tmpnam.py +20 -0
  1098. angr/procedures/libc/tolower.py +10 -0
  1099. angr/procedures/libc/toupper.py +10 -0
  1100. angr/procedures/libc/ungetc.py +20 -0
  1101. angr/procedures/libc/vsnprintf.py +17 -0
  1102. angr/procedures/libc/wchar.py +16 -0
  1103. angr/procedures/libstdcpp/__init__.py +0 -0
  1104. angr/procedures/libstdcpp/_unwind_resume.py +11 -0
  1105. angr/procedures/libstdcpp/std____throw_bad_alloc.py +13 -0
  1106. angr/procedures/libstdcpp/std____throw_bad_cast.py +13 -0
  1107. angr/procedures/libstdcpp/std____throw_length_error.py +13 -0
  1108. angr/procedures/libstdcpp/std____throw_logic_error.py +13 -0
  1109. angr/procedures/libstdcpp/std__terminate.py +13 -0
  1110. angr/procedures/linux_kernel/__init__.py +3 -0
  1111. angr/procedures/linux_kernel/access.py +18 -0
  1112. angr/procedures/linux_kernel/arch_prctl.py +34 -0
  1113. angr/procedures/linux_kernel/arm_user_helpers.py +59 -0
  1114. angr/procedures/linux_kernel/brk.py +18 -0
  1115. angr/procedures/linux_kernel/cwd.py +28 -0
  1116. angr/procedures/linux_kernel/fstat.py +138 -0
  1117. angr/procedures/linux_kernel/fstat64.py +170 -0
  1118. angr/procedures/linux_kernel/futex.py +17 -0
  1119. angr/procedures/linux_kernel/getegid.py +17 -0
  1120. angr/procedures/linux_kernel/geteuid.py +17 -0
  1121. angr/procedures/linux_kernel/getgid.py +17 -0
  1122. angr/procedures/linux_kernel/getpid.py +14 -0
  1123. angr/procedures/linux_kernel/getrlimit.py +24 -0
  1124. angr/procedures/linux_kernel/gettid.py +9 -0
  1125. angr/procedures/linux_kernel/getuid.py +17 -0
  1126. angr/procedures/linux_kernel/iovec.py +47 -0
  1127. angr/procedures/linux_kernel/lseek.py +42 -0
  1128. angr/procedures/linux_kernel/mmap.py +16 -0
  1129. angr/procedures/linux_kernel/mprotect.py +42 -0
  1130. angr/procedures/linux_kernel/munmap.py +8 -0
  1131. angr/procedures/linux_kernel/openat.py +26 -0
  1132. angr/procedures/linux_kernel/set_tid_address.py +8 -0
  1133. angr/procedures/linux_kernel/sigaction.py +19 -0
  1134. angr/procedures/linux_kernel/sigprocmask.py +23 -0
  1135. angr/procedures/linux_kernel/stat.py +23 -0
  1136. angr/procedures/linux_kernel/sysinfo.py +59 -0
  1137. angr/procedures/linux_kernel/tgkill.py +10 -0
  1138. angr/procedures/linux_kernel/time.py +34 -0
  1139. angr/procedures/linux_kernel/uid.py +30 -0
  1140. angr/procedures/linux_kernel/uname.py +29 -0
  1141. angr/procedures/linux_kernel/unlink.py +22 -0
  1142. angr/procedures/linux_kernel/vsyscall.py +16 -0
  1143. angr/procedures/linux_loader/__init__.py +3 -0
  1144. angr/procedures/linux_loader/_dl_initial_error_catch_tsd.py +7 -0
  1145. angr/procedures/linux_loader/_dl_rtld_lock.py +15 -0
  1146. angr/procedures/linux_loader/sim_loader.py +54 -0
  1147. angr/procedures/linux_loader/tls.py +40 -0
  1148. angr/procedures/msvcr/__getmainargs.py +16 -0
  1149. angr/procedures/msvcr/__init__.py +4 -0
  1150. angr/procedures/msvcr/_initterm.py +38 -0
  1151. angr/procedures/msvcr/fmode.py +31 -0
  1152. angr/procedures/ntdll/__init__.py +0 -0
  1153. angr/procedures/ntdll/exceptions.py +60 -0
  1154. angr/procedures/posix/__init__.py +3 -0
  1155. angr/procedures/posix/accept.py +29 -0
  1156. angr/procedures/posix/bind.py +13 -0
  1157. angr/procedures/posix/bzero.py +9 -0
  1158. angr/procedures/posix/chroot.py +27 -0
  1159. angr/procedures/posix/close.py +9 -0
  1160. angr/procedures/posix/closedir.py +7 -0
  1161. angr/procedures/posix/dup.py +56 -0
  1162. angr/procedures/posix/fcntl.py +10 -0
  1163. angr/procedures/posix/fdopen.py +76 -0
  1164. angr/procedures/posix/fileno.py +18 -0
  1165. angr/procedures/posix/fork.py +13 -0
  1166. angr/procedures/posix/getenv.py +35 -0
  1167. angr/procedures/posix/gethostbyname.py +43 -0
  1168. angr/procedures/posix/getpass.py +19 -0
  1169. angr/procedures/posix/getsockopt.py +11 -0
  1170. angr/procedures/posix/htonl.py +11 -0
  1171. angr/procedures/posix/htons.py +11 -0
  1172. angr/procedures/posix/inet_ntoa.py +59 -0
  1173. angr/procedures/posix/listen.py +13 -0
  1174. angr/procedures/posix/mmap.py +144 -0
  1175. angr/procedures/posix/open.py +18 -0
  1176. angr/procedures/posix/opendir.py +10 -0
  1177. angr/procedures/posix/poll.py +55 -0
  1178. angr/procedures/posix/pread64.py +46 -0
  1179. angr/procedures/posix/pthread.py +87 -0
  1180. angr/procedures/posix/pwrite64.py +46 -0
  1181. angr/procedures/posix/read.py +13 -0
  1182. angr/procedures/posix/readdir.py +62 -0
  1183. angr/procedures/posix/recv.py +13 -0
  1184. angr/procedures/posix/recvfrom.py +13 -0
  1185. angr/procedures/posix/select.py +48 -0
  1186. angr/procedures/posix/send.py +23 -0
  1187. angr/procedures/posix/setsockopt.py +9 -0
  1188. angr/procedures/posix/sigaction.py +23 -0
  1189. angr/procedures/posix/sim_time.py +48 -0
  1190. angr/procedures/posix/sleep.py +8 -0
  1191. angr/procedures/posix/socket.py +18 -0
  1192. angr/procedures/posix/strcasecmp.py +26 -0
  1193. angr/procedures/posix/strdup.py +18 -0
  1194. angr/procedures/posix/strtok_r.py +64 -0
  1195. angr/procedures/posix/syslog.py +15 -0
  1196. angr/procedures/posix/tz.py +9 -0
  1197. angr/procedures/posix/unlink.py +11 -0
  1198. angr/procedures/posix/usleep.py +8 -0
  1199. angr/procedures/posix/write.py +13 -0
  1200. angr/procedures/procedure_dict.py +50 -0
  1201. angr/procedures/stubs/CallReturn.py +13 -0
  1202. angr/procedures/stubs/NoReturnUnconstrained.py +13 -0
  1203. angr/procedures/stubs/Nop.py +7 -0
  1204. angr/procedures/stubs/PathTerminator.py +9 -0
  1205. angr/procedures/stubs/Redirect.py +18 -0
  1206. angr/procedures/stubs/ReturnChar.py +11 -0
  1207. angr/procedures/stubs/ReturnUnconstrained.py +24 -0
  1208. angr/procedures/stubs/UnresolvableCallTarget.py +9 -0
  1209. angr/procedures/stubs/UnresolvableJumpTarget.py +9 -0
  1210. angr/procedures/stubs/UserHook.py +18 -0
  1211. angr/procedures/stubs/__init__.py +3 -0
  1212. angr/procedures/stubs/b64_decode.py +15 -0
  1213. angr/procedures/stubs/caller.py +14 -0
  1214. angr/procedures/stubs/crazy_scanf.py +20 -0
  1215. angr/procedures/stubs/format_parser.py +669 -0
  1216. angr/procedures/stubs/syscall_stub.py +24 -0
  1217. angr/procedures/testing/__init__.py +3 -0
  1218. angr/procedures/testing/manyargs.py +9 -0
  1219. angr/procedures/testing/retreg.py +8 -0
  1220. angr/procedures/tracer/__init__.py +4 -0
  1221. angr/procedures/tracer/random.py +9 -0
  1222. angr/procedures/tracer/receive.py +23 -0
  1223. angr/procedures/tracer/transmit.py +26 -0
  1224. angr/procedures/uclibc/__init__.py +3 -0
  1225. angr/procedures/uclibc/__uClibc_main.py +10 -0
  1226. angr/procedures/win32/EncodePointer.py +7 -0
  1227. angr/procedures/win32/ExitProcess.py +9 -0
  1228. angr/procedures/win32/GetCommandLine.py +12 -0
  1229. angr/procedures/win32/GetCurrentProcessId.py +7 -0
  1230. angr/procedures/win32/GetCurrentThreadId.py +7 -0
  1231. angr/procedures/win32/GetLastInputInfo.py +40 -0
  1232. angr/procedures/win32/GetModuleHandle.py +29 -0
  1233. angr/procedures/win32/GetProcessAffinityMask.py +37 -0
  1234. angr/procedures/win32/InterlockedExchange.py +15 -0
  1235. angr/procedures/win32/IsProcessorFeaturePresent.py +7 -0
  1236. angr/procedures/win32/VirtualAlloc.py +114 -0
  1237. angr/procedures/win32/VirtualProtect.py +60 -0
  1238. angr/procedures/win32/__init__.py +3 -0
  1239. angr/procedures/win32/critical_section.py +12 -0
  1240. angr/procedures/win32/dynamic_loading.py +104 -0
  1241. angr/procedures/win32/file_handles.py +47 -0
  1242. angr/procedures/win32/gethostbyname.py +12 -0
  1243. angr/procedures/win32/heap.py +45 -0
  1244. angr/procedures/win32/is_bad_ptr.py +26 -0
  1245. angr/procedures/win32/local_storage.py +88 -0
  1246. angr/procedures/win32/mutex.py +11 -0
  1247. angr/procedures/win32/sim_time.py +135 -0
  1248. angr/procedures/win32/system_paths.py +35 -0
  1249. angr/procedures/win32_kernel/ExAllocatePool.py +13 -0
  1250. angr/procedures/win32_kernel/ExFreePoolWithTag.py +8 -0
  1251. angr/procedures/win32_kernel/__fastfail.py +15 -0
  1252. angr/procedures/win32_kernel/__init__.py +3 -0
  1253. angr/procedures/win_user32/__init__.py +0 -0
  1254. angr/procedures/win_user32/chars.py +15 -0
  1255. angr/procedures/win_user32/keyboard.py +14 -0
  1256. angr/procedures/win_user32/messagebox.py +49 -0
  1257. angr/project.py +847 -0
  1258. angr/protos/__init__.py +19 -0
  1259. angr/protos/cfg_pb2.py +31 -0
  1260. angr/protos/function_pb2.py +27 -0
  1261. angr/protos/primitives_pb2.py +52 -0
  1262. angr/protos/variables_pb2.py +44 -0
  1263. angr/protos/xrefs_pb2.py +25 -0
  1264. angr/py.typed +1 -0
  1265. angr/rustylib.abi3.so +0 -0
  1266. angr/serializable.py +66 -0
  1267. angr/sim_manager.py +971 -0
  1268. angr/sim_options.py +438 -0
  1269. angr/sim_procedure.py +606 -0
  1270. angr/sim_state.py +901 -0
  1271. angr/sim_state_options.py +403 -0
  1272. angr/sim_type.py +3702 -0
  1273. angr/sim_variable.py +465 -0
  1274. angr/simos/__init__.py +47 -0
  1275. angr/simos/cgc.py +153 -0
  1276. angr/simos/javavm.py +458 -0
  1277. angr/simos/linux.py +509 -0
  1278. angr/simos/simos.py +444 -0
  1279. angr/simos/snimmuc_nxp.py +149 -0
  1280. angr/simos/userland.py +163 -0
  1281. angr/simos/windows.py +601 -0
  1282. angr/simos/xbox.py +32 -0
  1283. angr/slicer.py +352 -0
  1284. angr/state_hierarchy.py +262 -0
  1285. angr/state_plugins/__init__.py +84 -0
  1286. angr/state_plugins/callstack.py +398 -0
  1287. angr/state_plugins/cgc.py +155 -0
  1288. angr/state_plugins/debug_variables.py +192 -0
  1289. angr/state_plugins/filesystem.py +463 -0
  1290. angr/state_plugins/gdb.py +148 -0
  1291. angr/state_plugins/globals.py +65 -0
  1292. angr/state_plugins/heap/__init__.py +15 -0
  1293. angr/state_plugins/heap/heap_base.py +128 -0
  1294. angr/state_plugins/heap/heap_brk.py +136 -0
  1295. angr/state_plugins/heap/heap_freelist.py +213 -0
  1296. angr/state_plugins/heap/heap_libc.py +46 -0
  1297. angr/state_plugins/heap/heap_ptmalloc.py +620 -0
  1298. angr/state_plugins/heap/utils.py +22 -0
  1299. angr/state_plugins/history.py +564 -0
  1300. angr/state_plugins/inspect.py +375 -0
  1301. angr/state_plugins/javavm_classloader.py +134 -0
  1302. angr/state_plugins/jni_references.py +95 -0
  1303. angr/state_plugins/libc.py +1263 -0
  1304. angr/state_plugins/light_registers.py +168 -0
  1305. angr/state_plugins/log.py +84 -0
  1306. angr/state_plugins/loop_data.py +92 -0
  1307. angr/state_plugins/plugin.py +170 -0
  1308. angr/state_plugins/posix.py +703 -0
  1309. angr/state_plugins/preconstrainer.py +196 -0
  1310. angr/state_plugins/scratch.py +173 -0
  1311. angr/state_plugins/sim_action.py +326 -0
  1312. angr/state_plugins/sim_action_object.py +271 -0
  1313. angr/state_plugins/sim_event.py +59 -0
  1314. angr/state_plugins/solver.py +1127 -0
  1315. angr/state_plugins/symbolizer.py +291 -0
  1316. angr/state_plugins/trace_additions.py +738 -0
  1317. angr/state_plugins/uc_manager.py +94 -0
  1318. angr/state_plugins/unicorn_engine.py +1886 -0
  1319. angr/state_plugins/view.py +340 -0
  1320. angr/storage/__init__.py +15 -0
  1321. angr/storage/file.py +1210 -0
  1322. angr/storage/memory_mixins/__init__.py +317 -0
  1323. angr/storage/memory_mixins/actions_mixin.py +72 -0
  1324. angr/storage/memory_mixins/address_concretization_mixin.py +384 -0
  1325. angr/storage/memory_mixins/bvv_conversion_mixin.py +73 -0
  1326. angr/storage/memory_mixins/clouseau_mixin.py +137 -0
  1327. angr/storage/memory_mixins/conditional_store_mixin.py +25 -0
  1328. angr/storage/memory_mixins/convenient_mappings_mixin.py +256 -0
  1329. angr/storage/memory_mixins/default_filler_mixin.py +144 -0
  1330. angr/storage/memory_mixins/dirty_addrs_mixin.py +11 -0
  1331. angr/storage/memory_mixins/hex_dumper_mixin.py +82 -0
  1332. angr/storage/memory_mixins/javavm_memory_mixin.py +392 -0
  1333. angr/storage/memory_mixins/keyvalue_memory_mixin.py +42 -0
  1334. angr/storage/memory_mixins/label_merger_mixin.py +31 -0
  1335. angr/storage/memory_mixins/memory_mixin.py +174 -0
  1336. angr/storage/memory_mixins/multi_value_merger_mixin.py +79 -0
  1337. angr/storage/memory_mixins/name_resolution_mixin.py +67 -0
  1338. angr/storage/memory_mixins/paged_memory/__init__.py +0 -0
  1339. angr/storage/memory_mixins/paged_memory/page_backer_mixins.py +266 -0
  1340. angr/storage/memory_mixins/paged_memory/paged_memory_mixin.py +743 -0
  1341. angr/storage/memory_mixins/paged_memory/paged_memory_multivalue_mixin.py +65 -0
  1342. angr/storage/memory_mixins/paged_memory/pages/__init__.py +26 -0
  1343. angr/storage/memory_mixins/paged_memory/pages/base.py +31 -0
  1344. angr/storage/memory_mixins/paged_memory/pages/cooperation.py +341 -0
  1345. angr/storage/memory_mixins/paged_memory/pages/history_tracking_mixin.py +92 -0
  1346. angr/storage/memory_mixins/paged_memory/pages/ispo_mixin.py +55 -0
  1347. angr/storage/memory_mixins/paged_memory/pages/list_page.py +338 -0
  1348. angr/storage/memory_mixins/paged_memory/pages/multi_values.py +324 -0
  1349. angr/storage/memory_mixins/paged_memory/pages/mv_list_page.py +419 -0
  1350. angr/storage/memory_mixins/paged_memory/pages/permissions_mixin.py +36 -0
  1351. angr/storage/memory_mixins/paged_memory/pages/refcount_mixin.py +52 -0
  1352. angr/storage/memory_mixins/paged_memory/pages/ultra_page.py +503 -0
  1353. angr/storage/memory_mixins/paged_memory/privileged_mixin.py +36 -0
  1354. angr/storage/memory_mixins/paged_memory/stack_allocation_mixin.py +74 -0
  1355. angr/storage/memory_mixins/regioned_memory/__init__.py +17 -0
  1356. angr/storage/memory_mixins/regioned_memory/abstract_address_descriptor.py +36 -0
  1357. angr/storage/memory_mixins/regioned_memory/abstract_merger_mixin.py +31 -0
  1358. angr/storage/memory_mixins/regioned_memory/region_category_mixin.py +9 -0
  1359. angr/storage/memory_mixins/regioned_memory/region_data.py +246 -0
  1360. angr/storage/memory_mixins/regioned_memory/region_meta_mixin.py +241 -0
  1361. angr/storage/memory_mixins/regioned_memory/regioned_address_concretization_mixin.py +119 -0
  1362. angr/storage/memory_mixins/regioned_memory/regioned_memory_mixin.py +441 -0
  1363. angr/storage/memory_mixins/regioned_memory/static_find_mixin.py +69 -0
  1364. angr/storage/memory_mixins/simple_interface_mixin.py +71 -0
  1365. angr/storage/memory_mixins/simplification_mixin.py +15 -0
  1366. angr/storage/memory_mixins/size_resolution_mixin.py +143 -0
  1367. angr/storage/memory_mixins/slotted_memory.py +140 -0
  1368. angr/storage/memory_mixins/smart_find_mixin.py +161 -0
  1369. angr/storage/memory_mixins/symbolic_merger_mixin.py +16 -0
  1370. angr/storage/memory_mixins/top_merger_mixin.py +25 -0
  1371. angr/storage/memory_mixins/underconstrained_mixin.py +67 -0
  1372. angr/storage/memory_mixins/unwrapper_mixin.py +26 -0
  1373. angr/storage/memory_object.py +195 -0
  1374. angr/tablespecs.py +91 -0
  1375. angr/unicornlib.so +0 -0
  1376. angr/utils/__init__.py +46 -0
  1377. angr/utils/ail.py +70 -0
  1378. angr/utils/algo.py +34 -0
  1379. angr/utils/bits.py +46 -0
  1380. angr/utils/constants.py +9 -0
  1381. angr/utils/cowdict.py +63 -0
  1382. angr/utils/cpp.py +17 -0
  1383. angr/utils/doms.py +149 -0
  1384. angr/utils/dynamic_dictlist.py +89 -0
  1385. angr/utils/endness.py +18 -0
  1386. angr/utils/enums_conv.py +97 -0
  1387. angr/utils/env.py +12 -0
  1388. angr/utils/formatting.py +128 -0
  1389. angr/utils/funcid.py +159 -0
  1390. angr/utils/graph.py +933 -0
  1391. angr/utils/lazy_import.py +13 -0
  1392. angr/utils/library.py +212 -0
  1393. angr/utils/loader.py +55 -0
  1394. angr/utils/mp.py +66 -0
  1395. angr/utils/orderedset.py +74 -0
  1396. angr/utils/ssa/__init__.py +457 -0
  1397. angr/utils/ssa/tmp_uses_collector.py +23 -0
  1398. angr/utils/ssa/vvar_uses_collector.py +37 -0
  1399. angr/utils/tagged_interval_map.py +112 -0
  1400. angr/utils/timing.py +74 -0
  1401. angr/utils/types.py +151 -0
  1402. angr/utils/vex.py +11 -0
  1403. angr/vaults.py +367 -0
  1404. angr-9.2.165.dist-info/METADATA +110 -0
  1405. angr-9.2.165.dist-info/RECORD +1409 -0
  1406. angr-9.2.165.dist-info/WHEEL +6 -0
  1407. angr-9.2.165.dist-info/entry_points.txt +2 -0
  1408. angr-9.2.165.dist-info/licenses/LICENSE +27 -0
  1409. angr-9.2.165.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1285 @@
1
+ # pylint:disable=no-self-use,unused-argument
2
+ from __future__ import annotations
3
+ from typing import Any, Protocol, cast, TypeVar, Generic
4
+ from collections.abc import Callable
5
+ from abc import abstractmethod
6
+ import re
7
+ import logging
8
+
9
+ import angr.ailment as ailment
10
+ import pyvex
11
+ import claripy
12
+ from pyvex.expr import IRExpr
13
+
14
+ from angr.misc.ux import once
15
+ from angr.engines.vex.claripy.irop import UnsupportedIROpError, SimOperationError, vexop_to_simop
16
+ from angr.code_location import CodeLocation
17
+ from angr.project import Project
18
+ from angr.engines.engine import DataType_co, SimEngine, StateType
19
+ from angr.block import Block
20
+
21
+
22
+ class BlockProtocol(Protocol):
23
+ """
24
+ The minimum protocol that a block an engine can process should adhere to.
25
+ Requires just an addr attribute.
26
+ """
27
+
28
+ addr: int
29
+
30
+
31
+ BlockType = TypeVar("BlockType", bound=BlockProtocol)
32
+ ResultType = TypeVar("ResultType")
33
+ StmtDataType = TypeVar("StmtDataType")
34
+
35
+
36
+ class IRTop(pyvex.expr.IRExpr):
37
+ """
38
+ A dummy IRExpr used for intra-engine communication and code-reuse.
39
+ """
40
+
41
+ def __init__(self, ty: str):
42
+ super().__init__()
43
+ self.ty = ty
44
+
45
+ def result_type(self, tyenv):
46
+ return self.ty
47
+
48
+
49
+ class SimEngineLight(Generic[StateType, DataType_co, BlockType, ResultType], SimEngine[StateType, ResultType]):
50
+ """
51
+ A full-featured engine base class, suitable for static analysis
52
+ """
53
+
54
+ # local variables
55
+ block: BlockType
56
+ _call_stack: list[Any]
57
+ state: StateType
58
+
59
+ stmt_idx: int
60
+ ins_addr: int
61
+ tmps: dict[int, DataType_co]
62
+
63
+ def __init__(self, project: Project, logger=None):
64
+ self.l = logger or logging.getLogger(self.__module__ + "." + self.__class__.__name__)
65
+ super().__init__(project)
66
+
67
+ @abstractmethod
68
+ def process(self, state: StateType, *, block: BlockType | None = None, **kwargs) -> ResultType: ...
69
+
70
+ def lift(self, state: StateType) -> BlockType:
71
+ raise TypeError(f"{type(self)} requires `block` to be passed to `process`")
72
+
73
+ #
74
+ # Helper methods
75
+ #
76
+
77
+ def _codeloc(self, block_only=False, context=None):
78
+ return CodeLocation(
79
+ self.block.addr,
80
+ None if block_only else self.stmt_idx,
81
+ ins_addr=None if block_only else self.ins_addr,
82
+ context=context,
83
+ )
84
+
85
+ @abstractmethod
86
+ def _top(self, bits: int) -> DataType_co: ...
87
+
88
+ @abstractmethod
89
+ def _is_top(self, expr: Any) -> bool: ...
90
+
91
+ @staticmethod
92
+ def sp_offset(bits: int, offset: int) -> claripy.ast.BV:
93
+ base = claripy.BVS("SpOffset", bits, explicit_name=True)
94
+ if offset:
95
+ base += offset
96
+ return base
97
+
98
+ @staticmethod
99
+ def extract_offset_to_sp(spoffset_expr: claripy.ast.Base) -> int | None:
100
+ """
101
+ Extract the offset to the original stack pointer.
102
+
103
+ :param spoffset_expr: The claripy AST to parse.
104
+ :return: The offset to the original stack pointer, or None if `spoffset_expr` is not a supported
105
+ type of SpOffset expression.
106
+ """
107
+
108
+ if "SpOffset" in spoffset_expr.variables:
109
+ # Local variable
110
+ if spoffset_expr.op == "BVS":
111
+ return 0
112
+ if spoffset_expr.op == "__add__":
113
+ if len(spoffset_expr.args) == 1:
114
+ # Unexpected but fine
115
+ return 0
116
+ if isinstance(spoffset_expr.args[1], claripy.ast.Base) and spoffset_expr.args[1].op == "BVV":
117
+ return cast(int, spoffset_expr.args[1].args[0])
118
+ elif spoffset_expr.op == "__sub__":
119
+ if len(spoffset_expr.args) == 1:
120
+ # Unexpected but fine
121
+ return 0
122
+ if isinstance(spoffset_expr.args[1], claripy.ast.Base) and spoffset_expr.args[1].op == "BVV":
123
+ return -cast(int, spoffset_expr.args[1].args[0]) & (
124
+ (1 << cast(claripy.ast.BV, spoffset_expr).size()) - 1
125
+ )
126
+ return None
127
+
128
+
129
+ T = TypeVar("T")
130
+
131
+
132
+ def longest_prefix_lookup(haystack: str, mapping: dict[str, T]) -> T | None:
133
+ for l in reversed(range(len(haystack))):
134
+ handler = mapping.get(haystack[:l], None)
135
+ if handler is not None:
136
+ return handler
137
+ return None
138
+
139
+
140
+ # noinspection PyPep8Naming
141
+ class SimEngineLightVEX(
142
+ Generic[StateType, DataType_co, ResultType, StmtDataType], SimEngineLight[StateType, DataType_co, Block, ResultType]
143
+ ):
144
+ """
145
+ A mixin for doing static analysis on VEX
146
+ """
147
+
148
+ tyenv: pyvex.IRTypeEnv
149
+
150
+ @staticmethod
151
+ def unop_handler(f: Callable[[T, pyvex.expr.Unop], DataType_co]) -> Callable[[T, pyvex.expr.Unop], DataType_co]:
152
+ f.unop_handler = True
153
+ return f
154
+
155
+ @staticmethod
156
+ def binop_handler(f: Callable[[T, pyvex.expr.Binop], DataType_co]) -> Callable[[T, pyvex.expr.Binop], DataType_co]:
157
+ f.binop_handler = True
158
+ return f
159
+
160
+ @staticmethod
161
+ def binopv_handler(
162
+ f: Callable[[T, int, int, pyvex.expr.Binop], DataType_co],
163
+ ) -> Callable[[T, int, int, pyvex.expr.Binop], DataType_co]:
164
+ f.binopv_handler = True
165
+ return f
166
+
167
+ @staticmethod
168
+ def triop_handler(f: Callable[[T, pyvex.expr.Triop], DataType_co]) -> Callable[[T, pyvex.expr.Triop], DataType_co]:
169
+ f.triop_handler = True
170
+ return f
171
+
172
+ @staticmethod
173
+ def qop_handler(f: Callable[[T, pyvex.expr.Qop], DataType_co]) -> Callable[[T, pyvex.expr.Qop], DataType_co]:
174
+ f.qop_handler = True
175
+ return f
176
+
177
+ @staticmethod
178
+ def ccall_handler(f: Callable[[T, pyvex.expr.CCall], DataType_co]) -> Callable[[T, pyvex.expr.CCall], DataType_co]:
179
+ f.ccall_handler = True
180
+ return f
181
+
182
+ @staticmethod
183
+ def dirty_handler(
184
+ f: Callable[[T, pyvex.stmt.Dirty], StmtDataType],
185
+ ) -> Callable[[T, pyvex.stmt.Dirty], StmtDataType]:
186
+ f.dirty_handler = True
187
+ return f
188
+
189
+ def __init__(self, *args, **kwargs):
190
+ super().__init__(*args, **kwargs)
191
+
192
+ def checked(h: T, attr: str) -> T:
193
+ if not getattr(h, attr, False):
194
+ raise TypeError(f"Handle {h} is not validated for {attr}")
195
+ return h
196
+
197
+ self._stmt_handlers: dict[str, Callable[[Any], StmtDataType]] = {
198
+ "Ist_WrTmp": self._handle_stmt_WrTmp,
199
+ "Ist_Put": self._handle_stmt_Put,
200
+ "Ist_PutI": self._handle_stmt_PutI,
201
+ "Ist_Store": self._handle_stmt_Store,
202
+ "Ist_StoreG": self._handle_stmt_StoreG,
203
+ "Ist_LoadG": self._handle_stmt_LoadG,
204
+ "Ist_CAS": self._handle_stmt_CAS,
205
+ "Ist_LLSC": self._handle_stmt_LLSC,
206
+ "Ist_MBE": self._handle_stmt_MBE,
207
+ "Ist_Exit": self._handle_stmt_Exit,
208
+ "Ist_NoOp": self._handle_stmt_NoOp,
209
+ "Ist_IMark": self._handle_stmt_IMark,
210
+ "Ist_AbiHint": self._handle_stmt_AbiHint,
211
+ "Ist_Dirty": self._handle_stmt_Dirty,
212
+ }
213
+ self._expr_handlers: dict[str, Callable[[Any], DataType_co]] = {
214
+ "IRTop": self._handle_expr_IRTop,
215
+ "VECRET": self._handle_expr_VECRET,
216
+ "GSPTR": self._handle_expr_GSPTR,
217
+ "RdTmp": self._handle_expr_RdTmp,
218
+ "Get": self._handle_expr_Get,
219
+ "GetI": self._handle_expr_GetI,
220
+ "Load": self._handle_expr_Load,
221
+ "ITE": self._handle_expr_ITE,
222
+ "Unop": self._handle_expr_Unop,
223
+ "Binop": self._handle_expr_Binop,
224
+ "Triop": self._handle_expr_Triop,
225
+ "Qop": self._handle_expr_Qop,
226
+ "CCall": self._handle_expr_CCall,
227
+ "Const": self._handle_expr_Const,
228
+ }
229
+ self._unop_handlers: dict[str, Callable[[pyvex.expr.Unop], DataType_co]] = {
230
+ name.split("_", 3)[-1]: checked(getattr(self, name), "unop_handler")
231
+ for name in dir(self)
232
+ if name.startswith("_handle_unop_")
233
+ }
234
+ self._binop_handlers: dict[str, Callable[[pyvex.expr.Binop], DataType_co]] = {
235
+ name.split("_", 3)[-1]: checked(getattr(self, name), "binop_handler")
236
+ for name in dir(self)
237
+ if name.startswith("_handle_binop_")
238
+ }
239
+ self._binopv_handlers: dict[str, Callable[[int, int, pyvex.expr.Binop], DataType_co]] = {
240
+ name.split("_", 3)[-1]: checked(getattr(self, name), "binopv_handler")
241
+ for name in dir(self)
242
+ if name.startswith("_handle_binopv_")
243
+ }
244
+ self._triop_handlers: dict[str, Callable[[pyvex.expr.Triop], DataType_co]] = {
245
+ name.split("_", 3)[-1]: checked(getattr(self, name), "triop_handler")
246
+ for name in dir(self)
247
+ if name.startswith("_handle_triop_")
248
+ }
249
+ self._qop_handlers: dict[str, Callable[[pyvex.expr.Qop], DataType_co]] = {
250
+ name.split("_", 3)[-1]: checked(getattr(self, name), "qop_handler")
251
+ for name in dir(self)
252
+ if name.startswith("_handle_qop_")
253
+ }
254
+ self._ccall_handlers: dict[str, Callable[[pyvex.expr.CCall], DataType_co]] = {
255
+ name.split("_", 3)[-1]: checked(getattr(self, name), "ccall_handler")
256
+ for name in dir(self)
257
+ if name.startswith("_handle_ccall_")
258
+ }
259
+ self._dirty_handlers: dict[str, Callable[[pyvex.stmt.Dirty], StmtDataType]] = {
260
+ name.split("_", 3)[-1]: checked(getattr(self, name), "dirty_handler")
261
+ for name in dir(self)
262
+ if name.startswith("_handle_dirty_")
263
+ }
264
+
265
+ def process(
266
+ self, state: StateType, *, block: Block | None = None, whitelist: set[int] | None = None, **kwargs
267
+ ) -> ResultType:
268
+ # initialize local variables
269
+ self.tmps = {}
270
+
271
+ if block is None:
272
+ block = self.lift(state)
273
+ self.block = block
274
+ self.state = state
275
+ self.arch = self.project.arch
276
+ self.tyenv = block.vex.tyenv
277
+ self.stmt_idx = -1
278
+ self.ins_addr = -1
279
+
280
+ result = self._process_block(whitelist=whitelist)
281
+ del self.stmt_idx
282
+ del self.ins_addr
283
+ del self.tmps
284
+ del self.block
285
+ del self.state
286
+ del self.tyenv
287
+ return result
288
+
289
+ def _process_block(self, whitelist: set[int] | None = None) -> ResultType:
290
+ result = []
291
+ for stmt_idx, stmt in enumerate(self.block.vex.statements):
292
+ if whitelist is not None and stmt_idx not in whitelist:
293
+ continue
294
+ self.stmt_idx = stmt_idx
295
+
296
+ if type(stmt) is pyvex.IRStmt.IMark:
297
+ # Note that we cannot skip IMarks as they are used later to trigger observation events
298
+ # The bug caused by skipping IMarks is reported at https://github.com/angr/angr/pull/1150
299
+ self.ins_addr = stmt.addr + stmt.delta
300
+
301
+ result.append(self._stmt(stmt))
302
+
303
+ return self._process_block_end(result, whitelist)
304
+
305
+ def _stmt(self, stmt: pyvex.stmt.IRStmt) -> StmtDataType:
306
+ return self._stmt_handlers[stmt.tag](stmt)
307
+
308
+ @abstractmethod
309
+ def _process_block_end(self, stmt_result: list[StmtDataType], whitelist: set[int] | None) -> ResultType: ...
310
+
311
+ #
312
+ # Statement handlers
313
+ #
314
+
315
+ @abstractmethod
316
+ def _handle_stmt_WrTmp(self, stmt: pyvex.stmt.WrTmp) -> StmtDataType: ...
317
+
318
+ @abstractmethod
319
+ def _handle_stmt_Put(self, stmt: pyvex.stmt.Put) -> StmtDataType: ...
320
+
321
+ @abstractmethod
322
+ def _handle_stmt_PutI(self, stmt: pyvex.stmt.PutI) -> StmtDataType: ...
323
+
324
+ @abstractmethod
325
+ def _handle_stmt_Store(self, stmt: pyvex.stmt.Store) -> StmtDataType: ...
326
+
327
+ @abstractmethod
328
+ def _handle_stmt_StoreG(self, stmt: pyvex.stmt.StoreG) -> StmtDataType: ...
329
+
330
+ @abstractmethod
331
+ def _handle_stmt_LoadG(self, stmt: pyvex.stmt.LoadG) -> StmtDataType: ...
332
+
333
+ @abstractmethod
334
+ def _handle_stmt_CAS(self, stmt: pyvex.stmt.CAS) -> StmtDataType: ...
335
+
336
+ @abstractmethod
337
+ def _handle_stmt_LLSC(self, stmt: pyvex.stmt.LLSC) -> StmtDataType: ...
338
+
339
+ @abstractmethod
340
+ def _handle_stmt_MBE(self, stmt: pyvex.stmt.MBE) -> StmtDataType: ...
341
+
342
+ @abstractmethod
343
+ def _handle_stmt_Exit(self, stmt: pyvex.stmt.Exit) -> StmtDataType: ...
344
+
345
+ @abstractmethod
346
+ def _handle_stmt_NoOp(self, stmt: pyvex.stmt.NoOp) -> StmtDataType: ...
347
+
348
+ @abstractmethod
349
+ def _handle_stmt_IMark(self, stmt: pyvex.stmt.IMark) -> StmtDataType: ...
350
+
351
+ @abstractmethod
352
+ def _handle_stmt_AbiHint(self, stmt: pyvex.stmt.AbiHint) -> StmtDataType: ...
353
+
354
+ def _handle_stmt_Dirty(self, stmt: pyvex.stmt.Dirty) -> StmtDataType:
355
+ handler = longest_prefix_lookup(stmt.cee.name, self._dirty_handlers)
356
+ if handler is not None:
357
+ return handler(stmt)
358
+
359
+ if once(stmt.cee.name) and self.l is not None:
360
+ self.l.error("Unsupported Dirty %s.", stmt.cee.name)
361
+ if stmt.tmp in (-1, 0xFFFFFFFF):
362
+ return self._handle_stmt_NoOp(pyvex.stmt.NoOp())
363
+ return self._handle_stmt_WrTmp(pyvex.stmt.WrTmp(stmt.tmp, IRTop(self.tyenv.lookup(stmt.tmp))))
364
+
365
+ #
366
+ # Expression handlers
367
+ #
368
+
369
+ def _expr(self, expr: IRExpr) -> DataType_co:
370
+ handler = type(expr).__name__
371
+ return self._expr_handlers[handler](expr)
372
+
373
+ # not generated by vex
374
+ def _handle_expr_IRTop(self, expr: IRTop) -> DataType_co:
375
+ return self._top(pyvex.get_type_size(expr.result_type(self.tyenv)))
376
+
377
+ @abstractmethod
378
+ def _handle_expr_VECRET(self, expr: pyvex.expr.VECRET) -> DataType_co: ...
379
+
380
+ @abstractmethod
381
+ def _handle_expr_GSPTR(self, expr: pyvex.expr.GSPTR) -> DataType_co: ...
382
+
383
+ @abstractmethod
384
+ def _handle_expr_RdTmp(self, expr: pyvex.expr.RdTmp) -> DataType_co: ...
385
+
386
+ @abstractmethod
387
+ def _handle_expr_Get(self, expr: pyvex.expr.Get) -> DataType_co: ...
388
+
389
+ @abstractmethod
390
+ def _handle_expr_GetI(self, expr: pyvex.expr.GetI) -> DataType_co: ...
391
+
392
+ @abstractmethod
393
+ def _handle_expr_Load(self, expr: pyvex.expr.Load) -> DataType_co: ...
394
+
395
+ @abstractmethod
396
+ def _handle_expr_ITE(self, expr: pyvex.expr.ITE) -> DataType_co: ...
397
+
398
+ def _handle_expr_Unop(self, expr: pyvex.expr.Unop) -> DataType_co:
399
+ handler = None
400
+ assert expr.op.startswith("Iop_")
401
+ handler = longest_prefix_lookup(expr.op[4:], self._unop_handlers)
402
+ if handler is not None:
403
+ return handler(expr)
404
+
405
+ # All conversions are handled by the Conversion handler
406
+ try:
407
+ simop = vexop_to_simop(expr.op)
408
+ except (UnsupportedIROpError, SimOperationError):
409
+ simop = None
410
+
411
+ if simop is not None and "Reinterp" not in expr.op and simop.op_attrs.get("conversion", None):
412
+ return self._handle_conversion(simop._from_size, simop._to_size, simop.is_signed, expr.args[0])
413
+
414
+ if once(expr.op) and self.l is not None:
415
+ self.l.error("Unsupported Unop %s.", expr.op)
416
+ return self._top(pyvex.get_type_size(expr.result_type(self.tyenv)))
417
+
418
+ @abstractmethod
419
+ def _handle_conversion(self, from_size: int, to_size: int, signed: bool, operand: IRExpr) -> DataType_co: ...
420
+
421
+ def _handle_expr_Binop(self, expr: pyvex.expr.Binop) -> DataType_co:
422
+ assert expr.op.startswith("Iop_")
423
+
424
+ # vector information
425
+ m = re.match(r"Iop_[^\d]+(\d+)[SU]{0,1}x(\d+)", expr.op)
426
+ if m is not None:
427
+ vector_size = int(m.group(1))
428
+ vector_count = int(m.group(2))
429
+ handler_v = longest_prefix_lookup(expr.op[4:], self._binopv_handlers)
430
+ if handler_v is not None:
431
+ return handler_v(vector_size, vector_count, expr)
432
+
433
+ handler = longest_prefix_lookup(expr.op[4:], self._binop_handlers)
434
+ if handler is not None:
435
+ return handler(expr)
436
+
437
+ if once(expr.op) and self.l is not None:
438
+ self.l.warning("Unsupported Binop %s.", expr.op)
439
+ return self._top(pyvex.get_type_size(expr.result_type(self.tyenv)))
440
+
441
+ def _handle_expr_Triop(self, expr: pyvex.expr.Triop) -> DataType_co:
442
+ assert expr.op.startswith("Iop_")
443
+ handler = longest_prefix_lookup(expr.op[4:], self._triop_handlers)
444
+ if handler is not None:
445
+ return handler(expr)
446
+
447
+ # should we try dispatching some triops with roundingmode as binops?
448
+
449
+ if once(expr.op) and self.l is not None:
450
+ self.l.error("Unsupported Triop %s.", expr.op)
451
+ return self._top(pyvex.get_type_size(expr.result_type(self.tyenv)))
452
+
453
+ def _handle_expr_Qop(self, expr: pyvex.expr.Qop) -> DataType_co:
454
+ assert expr.op.startswith("Iop_")
455
+ handler = longest_prefix_lookup(expr.op[4:], self._qop_handlers)
456
+ if handler is not None:
457
+ return handler(expr)
458
+
459
+ if once(expr.op) and self.l is not None:
460
+ self.l.error("Unsupported Qop %s.", expr.op)
461
+ return self._top(pyvex.get_type_size(expr.result_type(self.tyenv)))
462
+
463
+ def _handle_expr_CCall(self, expr: pyvex.expr.CCall) -> DataType_co: # pylint:disable=useless-return
464
+ handler = longest_prefix_lookup(expr.cee.name, self._ccall_handlers)
465
+ if handler is not None:
466
+ return handler(expr)
467
+
468
+ if once(expr.cee.name) and self.l is not None:
469
+ self.l.error("Unsupported CCall %s.", expr.cee.name)
470
+ return self._top(pyvex.get_type_size(expr.result_type(self.tyenv)))
471
+
472
+ @abstractmethod
473
+ def _handle_expr_Const(self, expr: pyvex.expr.Const) -> DataType_co: ...
474
+
475
+
476
+ class SimEngineNostmtVEX(
477
+ Generic[StateType, DataType_co, ResultType], SimEngineLightVEX[StateType, DataType_co, ResultType, None]
478
+ ):
479
+ """
480
+ A base class of SimEngineLightVEX that has default handlers for statements if they just need to return None, so you
481
+ don't have to implement every single statement handler as ``return None``.
482
+ """
483
+
484
+ def _handle_stmt_WrTmp(self, stmt):
485
+ pass
486
+
487
+ def _handle_stmt_Put(self, stmt):
488
+ pass
489
+
490
+ def _handle_stmt_PutI(self, stmt):
491
+ pass
492
+
493
+ def _handle_stmt_Store(self, stmt):
494
+ pass
495
+
496
+ def _handle_stmt_StoreG(self, stmt):
497
+ pass
498
+
499
+ def _handle_stmt_LoadG(self, stmt):
500
+ pass
501
+
502
+ def _handle_stmt_CAS(self, stmt):
503
+ pass
504
+
505
+ def _handle_stmt_LLSC(self, stmt):
506
+ pass
507
+
508
+ def _handle_stmt_MBE(self, stmt):
509
+ pass
510
+
511
+ def _handle_stmt_Exit(self, stmt):
512
+ pass
513
+
514
+ def _handle_stmt_NoOp(self, stmt):
515
+ pass
516
+
517
+ def _handle_stmt_IMark(self, stmt):
518
+ pass
519
+
520
+ def _handle_stmt_AbiHint(self, stmt):
521
+ pass
522
+
523
+
524
+ # noinspection PyPep8Naming
525
+ class SimEngineLightAIL(
526
+ Generic[StateType, DataType_co, StmtDataType, ResultType],
527
+ SimEngineLight[StateType, DataType_co, ailment.Block, ResultType],
528
+ ):
529
+ """
530
+ A mixin for doing static analysis on AIL
531
+ """
532
+
533
+ def __init__(self, *args, **kwargs):
534
+ self._stmt_handlers: dict[str, Callable[[Any], StmtDataType]] = {
535
+ "Assignment": self._handle_stmt_Assignment,
536
+ "CAS": self._handle_stmt_CAS,
537
+ "WeakAssignment": self._handle_stmt_WeakAssignment,
538
+ "Store": self._handle_stmt_Store,
539
+ "Jump": self._handle_stmt_Jump,
540
+ "ConditionalJump": self._handle_stmt_ConditionalJump,
541
+ "Call": self._handle_stmt_Call,
542
+ "Return": self._handle_stmt_Return,
543
+ "DirtyStatement": self._handle_stmt_DirtyStatement,
544
+ "Label": self._handle_stmt_Label,
545
+ }
546
+ self._expr_handlers: dict[str, Callable[[Any], DataType_co]] = {
547
+ "Atom": self._handle_expr_Atom,
548
+ "Const": self._handle_expr_Const,
549
+ "Tmp": self._handle_expr_Tmp,
550
+ "VirtualVariable": self._handle_expr_VirtualVariable,
551
+ "Phi": self._handle_expr_Phi,
552
+ "Op": self._handle_expr_Op,
553
+ "UnaryOp": self._handle_expr_UnaryOp,
554
+ "BinaryOp": self._handle_expr_BinaryOp,
555
+ "Convert": self._handle_expr_Convert,
556
+ "Reinterpret": self._handle_expr_Reinterpret,
557
+ "Load": self._handle_expr_Load,
558
+ "Register": self._handle_expr_Register,
559
+ "ITE": self._handle_expr_ITE,
560
+ "Call": self._handle_expr_Call,
561
+ "DirtyExpression": self._handle_expr_DirtyExpression,
562
+ "VEXCCallExpression": self._handle_expr_VEXCCallExpression,
563
+ "MultiStatementExpression": self._handle_expr_MultiStatementExpression,
564
+ "BasePointerOffset": self._handle_expr_BasePointerOffset,
565
+ "StackBaseOffset": self._handle_expr_StackBaseOffset,
566
+ }
567
+ self._unop_handlers: dict[str, Callable[[ailment.UnaryOp], DataType_co]] = {
568
+ "Not": self._handle_unop_Not,
569
+ "Neg": self._handle_unop_Neg,
570
+ "BitwiseNeg": self._handle_unop_BitwiseNeg,
571
+ "Reference": self._handle_unop_Reference,
572
+ "Dereference": self._handle_unop_Dereference,
573
+ "Clz": self._handle_unop_Clz,
574
+ "Ctz": self._handle_unop_Ctz,
575
+ "GetMSBs": self._handle_unop_GetMSBs,
576
+ "unpack": self._handle_unop_unpack,
577
+ "Sqrt": self._handle_unop_Sqrt,
578
+ "RSqrtEst": self._handle_unop_RSqrtEst,
579
+ }
580
+ self._binop_handlers: dict[str, Callable[[ailment.BinaryOp], DataType_co]] = {
581
+ "Add": self._handle_binop_Add,
582
+ "AddF": self._handle_binop_AddF,
583
+ "AddV": self._handle_binop_AddV,
584
+ "Sub": self._handle_binop_Sub,
585
+ "SubF": self._handle_binop_SubF,
586
+ "SubV": self._handle_binop_SubV,
587
+ "Mul": self._handle_binop_Mul,
588
+ "Mull": self._handle_binop_Mull,
589
+ "MulF": self._handle_binop_MulF,
590
+ "MulV": self._handle_binop_MulV,
591
+ "MulHiV": self._handle_binop_MulHiV,
592
+ "Div": self._handle_binop_Div,
593
+ "DivF": self._handle_binop_DivF,
594
+ "DivV": self._handle_binop_DivV,
595
+ "Mod": self._handle_binop_Mod,
596
+ "Xor": self._handle_binop_Xor,
597
+ "And": self._handle_binop_And,
598
+ "LogicalAnd": self._handle_binop_LogicalAnd,
599
+ "Or": self._handle_binop_Or,
600
+ "LogicalOr": self._handle_binop_LogicalOr,
601
+ "Shl": self._handle_binop_Shl,
602
+ "Shr": self._handle_binop_Shr,
603
+ "Sar": self._handle_binop_Sar,
604
+ "CmpF": self._handle_binop_CmpF,
605
+ "CmpEQ": self._handle_binop_CmpEQ,
606
+ "CmpNE": self._handle_binop_CmpNE,
607
+ "CmpLT": self._handle_binop_CmpLT,
608
+ "CmpLE": self._handle_binop_CmpLE,
609
+ "CmpGT": self._handle_binop_CmpGT,
610
+ "CmpGE": self._handle_binop_CmpGE,
611
+ "Concat": self._handle_binop_Concat,
612
+ "Ror": self._handle_binop_Ror,
613
+ "Rol": self._handle_binop_Rol,
614
+ "Carry": self._handle_binop_Carry,
615
+ "SCarry": self._handle_binop_SCarry,
616
+ "SBorrow": self._handle_binop_SBorrow,
617
+ "InterleaveLOV": self._handle_binop_InterleaveLOV,
618
+ "InterleaveHIV": self._handle_binop_InterleaveHIV,
619
+ "CasCmpEQ": self._handle_binop_CasCmpEQ,
620
+ "CasCmpNE": self._handle_binop_CasCmpNE,
621
+ "ExpCmpNE": self._handle_binop_ExpCmpNE,
622
+ "SarNV": self._handle_binop_SarNV,
623
+ "ShrNV": self._handle_binop_ShrNV,
624
+ "ShlNV": self._handle_binop_ShlNV,
625
+ "CmpEQV": self._handle_binop_CmpEQV,
626
+ "CmpNEV": self._handle_binop_CmpNEV,
627
+ "CmpGEV": self._handle_binop_CmpGEV,
628
+ "CmpGTV": self._handle_binop_CmpGTV,
629
+ "CmpLEV": self._handle_binop_CmpLTV,
630
+ "CmpLTV": self._handle_binop_CmpLEV,
631
+ "MinV": self._handle_binop_MinV,
632
+ "MaxV": self._handle_binop_MaxV,
633
+ "QAddV": self._handle_binop_QAddV,
634
+ "QNarrowBinV": self._handle_binop_QNarrowBinV,
635
+ "PermV": self._handle_binop_PermV,
636
+ "Set": self._handle_binop_Set,
637
+ }
638
+ super().__init__(*args, **kwargs)
639
+
640
+ def process(
641
+ self, state: StateType, *, block: ailment.Block | None = None, whitelist: set[int] | None = None, **kwargs
642
+ ) -> ResultType:
643
+ self.tmps = {}
644
+ if block is None:
645
+ block = self.lift(state)
646
+ self.block = block
647
+ self.state = state
648
+ self.stmt_idx = 0
649
+ self.ins_addr = 0
650
+
651
+ stmt_data = self._process_stmts(whitelist=whitelist)
652
+ result = self._process_block_end(block, stmt_data, whitelist)
653
+ del self.tmps
654
+ del self.block
655
+ del self.state
656
+ del self.stmt_idx
657
+ del self.ins_addr
658
+ return result
659
+
660
+ @abstractmethod
661
+ def _process_block_end(
662
+ self, block: ailment.Block, stmt_data: list[StmtDataType], whitelist: set[int] | None
663
+ ) -> ResultType: ...
664
+
665
+ #
666
+ # Helper methods
667
+ #
668
+
669
+ def _codeloc(self, block_only=False, context=None):
670
+ return CodeLocation(
671
+ self.block.addr,
672
+ None if block_only else self.stmt_idx,
673
+ ins_addr=None if block_only else self.ins_addr,
674
+ context=context,
675
+ block_idx=self.block.idx,
676
+ )
677
+
678
+ #
679
+ # Statements
680
+ #
681
+
682
+ def _process_stmts(self, whitelist: set[int] | None) -> list[StmtDataType]:
683
+ result = []
684
+
685
+ for stmt_idx, stmt in enumerate(self.block.statements):
686
+ if whitelist is not None and stmt_idx not in whitelist:
687
+ continue
688
+
689
+ self.stmt_idx = stmt_idx
690
+ self.ins_addr = stmt.ins_addr
691
+ result.append(self._stmt(stmt))
692
+
693
+ return result
694
+
695
+ def _stmt(self, stmt: ailment.statement.Statement) -> StmtDataType:
696
+ stmt_type_name = type(stmt).__name__
697
+ return self._stmt_handlers[stmt_type_name](stmt)
698
+
699
+ @abstractmethod
700
+ def _handle_stmt_Assignment(self, stmt: ailment.statement.Assignment) -> StmtDataType: ...
701
+
702
+ @abstractmethod
703
+ def _handle_stmt_CAS(self, stmt: ailment.statement.CAS) -> StmtDataType: ...
704
+
705
+ @abstractmethod
706
+ def _handle_stmt_WeakAssignment(self, stmt: ailment.statement.WeakAssignment) -> StmtDataType: ...
707
+
708
+ @abstractmethod
709
+ def _handle_stmt_Store(self, stmt: ailment.statement.Store) -> StmtDataType: ...
710
+
711
+ @abstractmethod
712
+ def _handle_stmt_Jump(self, stmt: ailment.statement.Jump) -> StmtDataType: ...
713
+
714
+ @abstractmethod
715
+ def _handle_stmt_ConditionalJump(self, stmt: ailment.statement.ConditionalJump) -> StmtDataType: ...
716
+
717
+ @abstractmethod
718
+ def _handle_stmt_Call(self, stmt: ailment.statement.Call) -> StmtDataType: ...
719
+
720
+ @abstractmethod
721
+ def _handle_stmt_Return(self, stmt: ailment.statement.Return) -> StmtDataType: ...
722
+
723
+ @abstractmethod
724
+ def _handle_stmt_DirtyStatement(self, stmt: ailment.statement.DirtyStatement) -> StmtDataType: ...
725
+
726
+ @abstractmethod
727
+ def _handle_stmt_Label(self, stmt: ailment.statement.Label) -> StmtDataType: ...
728
+
729
+ #
730
+ # Expressions
731
+ #
732
+
733
+ def _expr(self, expr: ailment.Expression) -> DataType_co:
734
+ expr_type_name = type(expr).__name__
735
+ return self._expr_handlers[expr_type_name](expr)
736
+
737
+ def _handle_expr_Atom(self, expr: ailment.expression.Atom) -> DataType_co:
738
+ raise TypeError("We should never see raw Atoms")
739
+
740
+ @abstractmethod
741
+ def _handle_expr_Const(self, expr: ailment.expression.Const) -> DataType_co: ...
742
+
743
+ @abstractmethod
744
+ def _handle_expr_Tmp(self, expr: ailment.expression.Tmp) -> DataType_co: ...
745
+
746
+ @abstractmethod
747
+ def _handle_expr_VirtualVariable(self, expr: ailment.expression.VirtualVariable) -> DataType_co: ...
748
+
749
+ @abstractmethod
750
+ def _handle_expr_Phi(self, expr: ailment.expression.Phi) -> DataType_co: ...
751
+
752
+ def _handle_expr_Op(self, expr: ailment.expression.Op) -> DataType_co:
753
+ raise TypeError("We should never see raw Ops")
754
+
755
+ def _handle_expr_UnaryOp(self, expr: ailment.expression.UnaryOp) -> DataType_co:
756
+ return self._unop_handlers[expr.op](expr)
757
+
758
+ def _handle_expr_BinaryOp(self, expr: ailment.expression.BinaryOp) -> DataType_co:
759
+ return self._binop_handlers[expr.op](expr)
760
+
761
+ @abstractmethod
762
+ def _handle_expr_Convert(self, expr: ailment.expression.Convert) -> DataType_co: ...
763
+
764
+ @abstractmethod
765
+ def _handle_expr_Reinterpret(self, expr: ailment.expression.Reinterpret) -> DataType_co: ...
766
+
767
+ @abstractmethod
768
+ def _handle_expr_Load(self, expr: ailment.expression.Load) -> DataType_co: ...
769
+
770
+ @abstractmethod
771
+ def _handle_expr_Register(self, expr: ailment.expression.Register) -> DataType_co: ...
772
+
773
+ @abstractmethod
774
+ def _handle_expr_ITE(self, expr: ailment.expression.ITE) -> DataType_co: ...
775
+
776
+ @abstractmethod
777
+ def _handle_expr_Call(self, expr: ailment.statement.Call) -> DataType_co: ...
778
+
779
+ @abstractmethod
780
+ def _handle_expr_DirtyExpression(self, expr: ailment.expression.DirtyExpression) -> DataType_co: ...
781
+
782
+ @abstractmethod
783
+ def _handle_expr_VEXCCallExpression(self, expr: ailment.expression.VEXCCallExpression) -> DataType_co: ...
784
+
785
+ @abstractmethod
786
+ def _handle_expr_MultiStatementExpression(
787
+ self, expr: ailment.expression.MultiStatementExpression
788
+ ) -> DataType_co: ...
789
+
790
+ @abstractmethod
791
+ def _handle_expr_BasePointerOffset(self, expr: ailment.expression.BasePointerOffset) -> DataType_co: ...
792
+
793
+ @abstractmethod
794
+ def _handle_expr_StackBaseOffset(self, expr: ailment.expression.StackBaseOffset) -> DataType_co: ...
795
+
796
+ #
797
+ # UnOps
798
+ #
799
+
800
+ @abstractmethod
801
+ def _handle_unop_Not(self, expr: ailment.expression.UnaryOp) -> DataType_co: ...
802
+
803
+ @abstractmethod
804
+ def _handle_unop_Neg(self, expr: ailment.expression.UnaryOp) -> DataType_co: ...
805
+
806
+ @abstractmethod
807
+ def _handle_unop_BitwiseNeg(self, expr: ailment.expression.UnaryOp) -> DataType_co: ...
808
+
809
+ @abstractmethod
810
+ def _handle_unop_Reference(self, expr: ailment.expression.UnaryOp) -> DataType_co: ...
811
+
812
+ @abstractmethod
813
+ def _handle_unop_Dereference(self, expr: ailment.expression.UnaryOp) -> DataType_co: ...
814
+
815
+ @abstractmethod
816
+ def _handle_unop_Clz(self, expr: ailment.expression.UnaryOp) -> DataType_co: ...
817
+
818
+ @abstractmethod
819
+ def _handle_unop_Ctz(self, expr: ailment.expression.UnaryOp) -> DataType_co: ...
820
+
821
+ @abstractmethod
822
+ def _handle_unop_GetMSBs(self, expr: ailment.expression.UnaryOp) -> DataType_co: ...
823
+
824
+ @abstractmethod
825
+ def _handle_unop_unpack(self, expr: ailment.expression.UnaryOp) -> DataType_co: ...
826
+
827
+ @abstractmethod
828
+ def _handle_unop_Sqrt(self, expr: ailment.expression.UnaryOp) -> DataType_co: ...
829
+
830
+ @abstractmethod
831
+ def _handle_unop_RSqrtEst(self, expr: ailment.expression.UnaryOp) -> DataType_co: ...
832
+
833
+ #
834
+ # BinOps
835
+ #
836
+ @abstractmethod
837
+ def _handle_binop_Add(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
838
+
839
+ @abstractmethod
840
+ def _handle_binop_AddF(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
841
+
842
+ @abstractmethod
843
+ def _handle_binop_AddV(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
844
+
845
+ @abstractmethod
846
+ def _handle_binop_Sub(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
847
+
848
+ @abstractmethod
849
+ def _handle_binop_SubF(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
850
+
851
+ @abstractmethod
852
+ def _handle_binop_SubV(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
853
+
854
+ @abstractmethod
855
+ def _handle_binop_Mul(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
856
+
857
+ @abstractmethod
858
+ def _handle_binop_Mull(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
859
+
860
+ @abstractmethod
861
+ def _handle_binop_MulF(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
862
+
863
+ @abstractmethod
864
+ def _handle_binop_MulV(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
865
+
866
+ @abstractmethod
867
+ def _handle_binop_MulHiV(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
868
+
869
+ @abstractmethod
870
+ def _handle_binop_Div(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
871
+
872
+ @abstractmethod
873
+ def _handle_binop_DivF(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
874
+
875
+ @abstractmethod
876
+ def _handle_binop_DivV(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
877
+
878
+ @abstractmethod
879
+ def _handle_binop_Mod(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
880
+
881
+ @abstractmethod
882
+ def _handle_binop_Xor(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
883
+
884
+ @abstractmethod
885
+ def _handle_binop_And(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
886
+
887
+ @abstractmethod
888
+ def _handle_binop_LogicalAnd(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
889
+
890
+ @abstractmethod
891
+ def _handle_binop_Or(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
892
+
893
+ @abstractmethod
894
+ def _handle_binop_LogicalOr(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
895
+
896
+ @abstractmethod
897
+ def _handle_binop_Shl(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
898
+
899
+ @abstractmethod
900
+ def _handle_binop_Shr(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
901
+
902
+ @abstractmethod
903
+ def _handle_binop_Sar(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
904
+
905
+ @abstractmethod
906
+ def _handle_binop_CmpF(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
907
+
908
+ @abstractmethod
909
+ def _handle_binop_CmpEQ(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
910
+
911
+ @abstractmethod
912
+ def _handle_binop_CmpNE(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
913
+
914
+ @abstractmethod
915
+ def _handle_binop_CmpLT(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
916
+
917
+ @abstractmethod
918
+ def _handle_binop_CmpLE(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
919
+
920
+ @abstractmethod
921
+ def _handle_binop_CmpGT(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
922
+
923
+ @abstractmethod
924
+ def _handle_binop_CmpGE(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
925
+
926
+ @abstractmethod
927
+ def _handle_binop_Concat(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
928
+
929
+ @abstractmethod
930
+ def _handle_binop_Ror(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
931
+
932
+ @abstractmethod
933
+ def _handle_binop_Rol(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
934
+
935
+ @abstractmethod
936
+ def _handle_binop_Carry(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
937
+
938
+ @abstractmethod
939
+ def _handle_binop_SCarry(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
940
+
941
+ @abstractmethod
942
+ def _handle_binop_SBorrow(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
943
+
944
+ @abstractmethod
945
+ def _handle_binop_InterleaveLOV(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
946
+
947
+ @abstractmethod
948
+ def _handle_binop_InterleaveHIV(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
949
+
950
+ @abstractmethod
951
+ def _handle_binop_CasCmpEQ(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
952
+
953
+ @abstractmethod
954
+ def _handle_binop_CasCmpNE(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
955
+
956
+ @abstractmethod
957
+ def _handle_binop_ExpCmpNE(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
958
+
959
+ @abstractmethod
960
+ def _handle_binop_SarNV(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
961
+
962
+ @abstractmethod
963
+ def _handle_binop_ShrNV(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
964
+
965
+ @abstractmethod
966
+ def _handle_binop_ShlNV(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
967
+
968
+ @abstractmethod
969
+ def _handle_binop_CmpEQV(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
970
+
971
+ @abstractmethod
972
+ def _handle_binop_CmpNEV(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
973
+
974
+ @abstractmethod
975
+ def _handle_binop_CmpGEV(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
976
+
977
+ @abstractmethod
978
+ def _handle_binop_CmpGTV(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
979
+
980
+ @abstractmethod
981
+ def _handle_binop_CmpLEV(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
982
+
983
+ @abstractmethod
984
+ def _handle_binop_CmpLTV(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
985
+
986
+ @abstractmethod
987
+ def _handle_binop_MinV(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
988
+
989
+ @abstractmethod
990
+ def _handle_binop_MaxV(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
991
+
992
+ @abstractmethod
993
+ def _handle_binop_QAddV(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
994
+
995
+ @abstractmethod
996
+ def _handle_binop_QNarrowBinV(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
997
+
998
+ @abstractmethod
999
+ def _handle_binop_PermV(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
1000
+
1001
+ @abstractmethod
1002
+ def _handle_binop_Set(self, expr: ailment.expression.BinaryOp) -> DataType_co: ...
1003
+
1004
+
1005
+ class SimEngineNostmtAIL(
1006
+ Generic[StateType, DataType_co, StmtDataType, ResultType],
1007
+ SimEngineLightAIL[StateType, DataType_co, StmtDataType | None, ResultType],
1008
+ ):
1009
+ """
1010
+ A base class of SimEngineLightAIL that has default handlers for statements if they just need to return None, so you
1011
+ don't have to implement every single statement handler as ``return None``.
1012
+ """
1013
+
1014
+ def _handle_stmt_Assignment(self, stmt) -> StmtDataType | None:
1015
+ pass
1016
+
1017
+ def _handle_stmt_WeakAssignment(self, stmt) -> StmtDataType | None:
1018
+ pass
1019
+
1020
+ def _handle_stmt_CAS(self, stmt) -> StmtDataType | None:
1021
+ pass
1022
+
1023
+ def _handle_stmt_Store(self, stmt) -> StmtDataType | None:
1024
+ pass
1025
+
1026
+ def _handle_stmt_Jump(self, stmt) -> StmtDataType | None:
1027
+ pass
1028
+
1029
+ def _handle_stmt_ConditionalJump(self, stmt) -> StmtDataType | None:
1030
+ pass
1031
+
1032
+ def _handle_stmt_Call(self, stmt) -> StmtDataType | None:
1033
+ pass
1034
+
1035
+ def _handle_stmt_Return(self, stmt) -> StmtDataType | None:
1036
+ pass
1037
+
1038
+ def _handle_stmt_DirtyStatement(self, stmt) -> StmtDataType | None:
1039
+ pass
1040
+
1041
+ def _handle_stmt_Label(self, stmt) -> StmtDataType | None:
1042
+ pass
1043
+
1044
+
1045
+ class SimEngineNoexprAIL(
1046
+ Generic[StateType, DataType_co, StmtDataType, ResultType],
1047
+ SimEngineLightAIL[StateType, DataType_co | None, StmtDataType, ResultType],
1048
+ ):
1049
+ """
1050
+ A base class of SimEngineLightAIL that has default handlers for expressions if they just need to return None, so you
1051
+ don't have to implement every single expression handler as ``return None``.
1052
+ """
1053
+
1054
+ def _handle_expr_Atom(self, expr: ailment.expression.Atom) -> DataType_co | None:
1055
+ pass
1056
+
1057
+ def _handle_expr_Const(self, expr: ailment.expression.Const) -> DataType_co | None:
1058
+ pass
1059
+
1060
+ def _handle_expr_Tmp(self, expr: ailment.expression.Tmp) -> DataType_co | None:
1061
+ pass
1062
+
1063
+ def _handle_expr_VirtualVariable(self, expr: ailment.expression.VirtualVariable) -> DataType_co | None:
1064
+ pass
1065
+
1066
+ def _handle_expr_Phi(self, expr: ailment.expression.Phi) -> DataType_co | None:
1067
+ pass
1068
+
1069
+ def _handle_expr_Convert(self, expr: ailment.expression.Convert) -> DataType_co | None:
1070
+ pass
1071
+
1072
+ def _handle_expr_Reinterpret(self, expr: ailment.expression.Reinterpret) -> DataType_co | None:
1073
+ pass
1074
+
1075
+ def _handle_expr_Load(self, expr: ailment.expression.Load) -> DataType_co | None:
1076
+ pass
1077
+
1078
+ def _handle_expr_Register(self, expr: ailment.expression.Register) -> DataType_co | None:
1079
+ pass
1080
+
1081
+ def _handle_expr_ITE(self, expr: ailment.expression.ITE) -> DataType_co | None:
1082
+ pass
1083
+
1084
+ def _handle_expr_Call(self, expr: ailment.statement.Call) -> DataType_co | None:
1085
+ pass
1086
+
1087
+ def _handle_expr_DirtyExpression(self, expr: ailment.expression.DirtyExpression) -> DataType_co | None:
1088
+ pass
1089
+
1090
+ def _handle_expr_VEXCCallExpression(self, expr: ailment.expression.VEXCCallExpression) -> DataType_co | None:
1091
+ pass
1092
+
1093
+ def _handle_expr_MultiStatementExpression(
1094
+ self, expr: ailment.expression.MultiStatementExpression
1095
+ ) -> DataType_co | None:
1096
+ pass
1097
+
1098
+ def _handle_expr_BasePointerOffset(self, expr: ailment.expression.BasePointerOffset) -> DataType_co | None:
1099
+ pass
1100
+
1101
+ def _handle_expr_StackBaseOffset(self, expr: ailment.expression.StackBaseOffset) -> DataType_co | None:
1102
+ pass
1103
+
1104
+ def _handle_unop_Not(self, expr: ailment.expression.UnaryOp) -> DataType_co | None:
1105
+ pass
1106
+
1107
+ def _handle_unop_Neg(self, expr: ailment.expression.UnaryOp) -> DataType_co | None:
1108
+ pass
1109
+
1110
+ def _handle_unop_BitwiseNeg(self, expr: ailment.expression.UnaryOp) -> DataType_co | None:
1111
+ pass
1112
+
1113
+ def _handle_unop_Reference(self, expr: ailment.expression.UnaryOp) -> DataType_co | None:
1114
+ pass
1115
+
1116
+ def _handle_unop_Dereference(self, expr: ailment.expression.UnaryOp) -> DataType_co | None:
1117
+ pass
1118
+
1119
+ def _handle_unop_GetMSBs(self, expr: ailment.expression.UnaryOp) -> DataType_co | None:
1120
+ pass
1121
+
1122
+ def _handle_unop_unpack(self, expr: ailment.expression.UnaryOp) -> DataType_co | None:
1123
+ pass
1124
+
1125
+ def _handle_unop_RSqrtEst(self, expr: ailment.expression.UnaryOp) -> DataType_co | None:
1126
+ pass
1127
+
1128
+ def _handle_binop_Add(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1129
+ pass
1130
+
1131
+ def _handle_binop_AddF(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1132
+ pass
1133
+
1134
+ def _handle_binop_AddV(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1135
+ pass
1136
+
1137
+ def _handle_binop_Sub(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1138
+ pass
1139
+
1140
+ def _handle_binop_SubF(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1141
+ pass
1142
+
1143
+ def _handle_binop_SubV(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1144
+ pass
1145
+
1146
+ def _handle_binop_Mul(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1147
+ pass
1148
+
1149
+ def _handle_binop_Mull(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1150
+ pass
1151
+
1152
+ def _handle_binop_MulF(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1153
+ pass
1154
+
1155
+ def _handle_binop_MulV(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1156
+ pass
1157
+
1158
+ def _handle_binop_MulHiV(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1159
+ pass
1160
+
1161
+ def _handle_binop_Div(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1162
+ pass
1163
+
1164
+ def _handle_binop_DivF(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1165
+ pass
1166
+
1167
+ def _handle_binop_DivV(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1168
+ pass
1169
+
1170
+ def _handle_binop_Mod(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1171
+ pass
1172
+
1173
+ def _handle_binop_Xor(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1174
+ pass
1175
+
1176
+ def _handle_binop_And(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1177
+ pass
1178
+
1179
+ def _handle_binop_LogicalAnd(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1180
+ pass
1181
+
1182
+ def _handle_binop_Or(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1183
+ pass
1184
+
1185
+ def _handle_binop_LogicalOr(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1186
+ pass
1187
+
1188
+ def _handle_binop_Shl(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1189
+ pass
1190
+
1191
+ def _handle_binop_Shr(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1192
+ pass
1193
+
1194
+ def _handle_binop_Sar(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1195
+ pass
1196
+
1197
+ def _handle_binop_CmpF(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1198
+ pass
1199
+
1200
+ def _handle_binop_CmpEQ(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1201
+ pass
1202
+
1203
+ def _handle_binop_CmpNE(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1204
+ pass
1205
+
1206
+ def _handle_binop_CmpLT(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1207
+ pass
1208
+
1209
+ def _handle_binop_CmpLE(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1210
+ pass
1211
+
1212
+ def _handle_binop_CmpGT(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1213
+ pass
1214
+
1215
+ def _handle_binop_CmpGE(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1216
+ pass
1217
+
1218
+ def _handle_binop_Concat(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1219
+ pass
1220
+
1221
+ def _handle_binop_Ror(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1222
+ pass
1223
+
1224
+ def _handle_binop_Rol(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1225
+ pass
1226
+
1227
+ def _handle_binop_Carry(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1228
+ pass
1229
+
1230
+ def _handle_binop_SCarry(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1231
+ pass
1232
+
1233
+ def _handle_binop_SBorrow(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1234
+ pass
1235
+
1236
+ def _handle_binop_InterleaveLOV(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1237
+ pass
1238
+
1239
+ def _handle_binop_InterleaveHIV(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1240
+ pass
1241
+
1242
+ def _handle_binop_CasCmpNE(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1243
+ pass
1244
+
1245
+ def _handle_binop_ExpCmpNE(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1246
+ pass
1247
+
1248
+ def _handle_binop_SarNV(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1249
+ pass
1250
+
1251
+ def _handle_binop_ShrNV(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1252
+ pass
1253
+
1254
+ def _handle_binop_ShlNV(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1255
+ pass
1256
+
1257
+ def _handle_binop_CmpEQV(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1258
+ pass
1259
+
1260
+ def _handle_binop_CmpNEV(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1261
+ pass
1262
+
1263
+ def _handle_binop_CmpGEV(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1264
+ pass
1265
+
1266
+ def _handle_binop_CmpGTV(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1267
+ pass
1268
+
1269
+ def _handle_binop_CmpLEV(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1270
+ pass
1271
+
1272
+ def _handle_binop_CmpLTV(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1273
+ pass
1274
+
1275
+ def _handle_binop_PermV(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1276
+ pass
1277
+
1278
+ def _handle_binop_Set(self, expr: ailment.expression.BinaryOp) -> DataType_co | None:
1279
+ pass
1280
+
1281
+ def _handle_unop_Clz(self, expr: ailment.expression.UnaryOp) -> DataType_co | None:
1282
+ pass
1283
+
1284
+ def _handle_unop_Ctz(self, expr: ailment.expression.UnaryOp) -> DataType_co | None:
1285
+ pass