angr 9.2.192__cp311-cp311-macosx_10_12_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1442) hide show
  1. angr/__init__.py +366 -0
  2. angr/__main__.py +182 -0
  3. angr/ail_callable.py +79 -0
  4. angr/ailment/__init__.py +83 -0
  5. angr/ailment/block.py +88 -0
  6. angr/ailment/block_walker.py +856 -0
  7. angr/ailment/constant.py +3 -0
  8. angr/ailment/converter_common.py +11 -0
  9. angr/ailment/converter_pcode.py +648 -0
  10. angr/ailment/converter_vex.py +829 -0
  11. angr/ailment/expression.py +1655 -0
  12. angr/ailment/manager.py +34 -0
  13. angr/ailment/statement.py +973 -0
  14. angr/ailment/tagged_object.py +58 -0
  15. angr/ailment/utils.py +114 -0
  16. angr/analyses/__init__.py +117 -0
  17. angr/analyses/analysis.py +429 -0
  18. angr/analyses/backward_slice.py +686 -0
  19. angr/analyses/binary_optimizer.py +670 -0
  20. angr/analyses/bindiff.py +1512 -0
  21. angr/analyses/boyscout.py +76 -0
  22. angr/analyses/callee_cleanup_finder.py +74 -0
  23. angr/analyses/calling_convention/__init__.py +6 -0
  24. angr/analyses/calling_convention/calling_convention.py +1113 -0
  25. angr/analyses/calling_convention/fact_collector.py +647 -0
  26. angr/analyses/calling_convention/utils.py +60 -0
  27. angr/analyses/cdg.py +189 -0
  28. angr/analyses/cfg/__init__.py +23 -0
  29. angr/analyses/cfg/cfb.py +451 -0
  30. angr/analyses/cfg/cfg.py +74 -0
  31. angr/analyses/cfg/cfg_arch_options.py +95 -0
  32. angr/analyses/cfg/cfg_base.py +2954 -0
  33. angr/analyses/cfg/cfg_emulated.py +3451 -0
  34. angr/analyses/cfg/cfg_fast.py +5431 -0
  35. angr/analyses/cfg/cfg_fast_soot.py +662 -0
  36. angr/analyses/cfg/cfg_job_base.py +203 -0
  37. angr/analyses/cfg/indirect_jump_resolvers/__init__.py +30 -0
  38. angr/analyses/cfg/indirect_jump_resolvers/aarch64_macho_got.py +77 -0
  39. angr/analyses/cfg/indirect_jump_resolvers/amd64_elf_got.py +62 -0
  40. angr/analyses/cfg/indirect_jump_resolvers/amd64_pe_iat.py +51 -0
  41. angr/analyses/cfg/indirect_jump_resolvers/arm_elf_fast.py +159 -0
  42. angr/analyses/cfg/indirect_jump_resolvers/const_resolver.py +339 -0
  43. angr/analyses/cfg/indirect_jump_resolvers/constant_value_manager.py +107 -0
  44. angr/analyses/cfg/indirect_jump_resolvers/default_resolvers.py +82 -0
  45. angr/analyses/cfg/indirect_jump_resolvers/jumptable.py +2490 -0
  46. angr/analyses/cfg/indirect_jump_resolvers/memload_resolver.py +81 -0
  47. angr/analyses/cfg/indirect_jump_resolvers/mips_elf_fast.py +286 -0
  48. angr/analyses/cfg/indirect_jump_resolvers/mips_elf_got.py +148 -0
  49. angr/analyses/cfg/indirect_jump_resolvers/propagator_utils.py +46 -0
  50. angr/analyses/cfg/indirect_jump_resolvers/resolver.py +74 -0
  51. angr/analyses/cfg/indirect_jump_resolvers/syscall_resolver.py +92 -0
  52. angr/analyses/cfg/indirect_jump_resolvers/x86_elf_pic_plt.py +88 -0
  53. angr/analyses/cfg/indirect_jump_resolvers/x86_pe_iat.py +47 -0
  54. angr/analyses/cfg_slice_to_sink/__init__.py +11 -0
  55. angr/analyses/cfg_slice_to_sink/cfg_slice_to_sink.py +117 -0
  56. angr/analyses/cfg_slice_to_sink/graph.py +87 -0
  57. angr/analyses/cfg_slice_to_sink/transitions.py +27 -0
  58. angr/analyses/class_identifier.py +63 -0
  59. angr/analyses/code_tagging.py +123 -0
  60. angr/analyses/codecave.py +77 -0
  61. angr/analyses/complete_calling_conventions.py +475 -0
  62. angr/analyses/congruency_check.py +377 -0
  63. angr/analyses/data_dep/__init__.py +16 -0
  64. angr/analyses/data_dep/data_dependency_analysis.py +595 -0
  65. angr/analyses/data_dep/dep_nodes.py +171 -0
  66. angr/analyses/data_dep/sim_act_location.py +49 -0
  67. angr/analyses/datagraph_meta.py +105 -0
  68. angr/analyses/ddg.py +1670 -0
  69. angr/analyses/decompiler/__init__.py +41 -0
  70. angr/analyses/decompiler/ail_simplifier.py +2246 -0
  71. angr/analyses/decompiler/ailgraph_walker.py +49 -0
  72. angr/analyses/decompiler/block_io_finder.py +302 -0
  73. angr/analyses/decompiler/block_similarity.py +199 -0
  74. angr/analyses/decompiler/block_simplifier.py +397 -0
  75. angr/analyses/decompiler/callsite_maker.py +579 -0
  76. angr/analyses/decompiler/ccall_rewriters/__init__.py +9 -0
  77. angr/analyses/decompiler/ccall_rewriters/amd64_ccalls.py +618 -0
  78. angr/analyses/decompiler/ccall_rewriters/rewriter_base.py +24 -0
  79. angr/analyses/decompiler/ccall_rewriters/x86_ccalls.py +354 -0
  80. angr/analyses/decompiler/clinic.py +3662 -0
  81. angr/analyses/decompiler/condition_processor.py +1323 -0
  82. angr/analyses/decompiler/counters/__init__.py +16 -0
  83. angr/analyses/decompiler/counters/boolean_counter.py +27 -0
  84. angr/analyses/decompiler/counters/call_counter.py +77 -0
  85. angr/analyses/decompiler/counters/expression_counters.py +77 -0
  86. angr/analyses/decompiler/counters/seq_cf_structure_counter.py +63 -0
  87. angr/analyses/decompiler/decompilation_cache.py +54 -0
  88. angr/analyses/decompiler/decompilation_options.py +317 -0
  89. angr/analyses/decompiler/decompiler.py +796 -0
  90. angr/analyses/decompiler/dephication/__init__.py +6 -0
  91. angr/analyses/decompiler/dephication/dephication_base.py +100 -0
  92. angr/analyses/decompiler/dephication/graph_dephication.py +70 -0
  93. angr/analyses/decompiler/dephication/graph_rewriting.py +112 -0
  94. angr/analyses/decompiler/dephication/graph_vvar_mapping.py +357 -0
  95. angr/analyses/decompiler/dephication/rewriting_engine.py +528 -0
  96. angr/analyses/decompiler/dephication/seqnode_dephication.py +156 -0
  97. angr/analyses/decompiler/dirty_rewriters/__init__.py +7 -0
  98. angr/analyses/decompiler/dirty_rewriters/amd64_dirty.py +74 -0
  99. angr/analyses/decompiler/dirty_rewriters/rewriter_base.py +27 -0
  100. angr/analyses/decompiler/empty_node_remover.py +212 -0
  101. angr/analyses/decompiler/expression_narrower.py +290 -0
  102. angr/analyses/decompiler/goto_manager.py +112 -0
  103. angr/analyses/decompiler/graph_region.py +441 -0
  104. angr/analyses/decompiler/jump_target_collector.py +37 -0
  105. angr/analyses/decompiler/jumptable_entry_condition_rewriter.py +67 -0
  106. angr/analyses/decompiler/label_collector.py +32 -0
  107. angr/analyses/decompiler/node_replacer.py +42 -0
  108. angr/analyses/decompiler/notes/__init__.py +9 -0
  109. angr/analyses/decompiler/notes/decompilation_note.py +48 -0
  110. angr/analyses/decompiler/notes/deobfuscated_strings.py +56 -0
  111. angr/analyses/decompiler/optimization_passes/__init__.py +164 -0
  112. angr/analyses/decompiler/optimization_passes/base_ptr_save_simplifier.py +157 -0
  113. angr/analyses/decompiler/optimization_passes/call_stmt_rewriter.py +46 -0
  114. angr/analyses/decompiler/optimization_passes/code_motion.py +362 -0
  115. angr/analyses/decompiler/optimization_passes/condition_constprop.py +211 -0
  116. angr/analyses/decompiler/optimization_passes/const_derefs.py +127 -0
  117. angr/analyses/decompiler/optimization_passes/const_prop_reverter.py +365 -0
  118. angr/analyses/decompiler/optimization_passes/cross_jump_reverter.py +106 -0
  119. angr/analyses/decompiler/optimization_passes/deadblock_remover.py +82 -0
  120. angr/analyses/decompiler/optimization_passes/determine_load_sizes.py +64 -0
  121. angr/analyses/decompiler/optimization_passes/div_simplifier.py +425 -0
  122. angr/analyses/decompiler/optimization_passes/duplication_reverter/__init__.py +5 -0
  123. angr/analyses/decompiler/optimization_passes/duplication_reverter/ail_merge_graph.py +503 -0
  124. angr/analyses/decompiler/optimization_passes/duplication_reverter/duplication_reverter.py +1221 -0
  125. angr/analyses/decompiler/optimization_passes/duplication_reverter/errors.py +16 -0
  126. angr/analyses/decompiler/optimization_passes/duplication_reverter/similarity.py +126 -0
  127. angr/analyses/decompiler/optimization_passes/duplication_reverter/utils.py +167 -0
  128. angr/analyses/decompiler/optimization_passes/eager_std_string_concatenation.py +236 -0
  129. angr/analyses/decompiler/optimization_passes/eager_std_string_eval.py +186 -0
  130. angr/analyses/decompiler/optimization_passes/engine_base.py +502 -0
  131. angr/analyses/decompiler/optimization_passes/expr_op_swapper.py +138 -0
  132. angr/analyses/decompiler/optimization_passes/flip_boolean_cmp.py +113 -0
  133. angr/analyses/decompiler/optimization_passes/inlined_string_transformation_simplifier.py +618 -0
  134. angr/analyses/decompiler/optimization_passes/inlined_strlen_simplifier.py +274 -0
  135. angr/analyses/decompiler/optimization_passes/ite_expr_converter.py +224 -0
  136. angr/analyses/decompiler/optimization_passes/ite_region_converter.py +337 -0
  137. angr/analyses/decompiler/optimization_passes/lowered_switch_simplifier.py +939 -0
  138. angr/analyses/decompiler/optimization_passes/mod_simplifier.py +99 -0
  139. angr/analyses/decompiler/optimization_passes/optimization_pass.py +710 -0
  140. angr/analyses/decompiler/optimization_passes/peephole_simplifier.py +75 -0
  141. angr/analyses/decompiler/optimization_passes/register_save_area_simplifier.py +263 -0
  142. angr/analyses/decompiler/optimization_passes/register_save_area_simplifier_adv.py +198 -0
  143. angr/analyses/decompiler/optimization_passes/ret_addr_save_simplifier.py +171 -0
  144. angr/analyses/decompiler/optimization_passes/ret_deduplicator.py +222 -0
  145. angr/analyses/decompiler/optimization_passes/return_duplicator_base.py +632 -0
  146. angr/analyses/decompiler/optimization_passes/return_duplicator_high.py +61 -0
  147. angr/analyses/decompiler/optimization_passes/return_duplicator_low.py +166 -0
  148. angr/analyses/decompiler/optimization_passes/stack_canary_simplifier.py +333 -0
  149. angr/analyses/decompiler/optimization_passes/static_vvar_rewriter.py +336 -0
  150. angr/analyses/decompiler/optimization_passes/switch_default_case_duplicator.py +166 -0
  151. angr/analyses/decompiler/optimization_passes/switch_reused_entry_rewriter.py +102 -0
  152. angr/analyses/decompiler/optimization_passes/tag_slicer.py +41 -0
  153. angr/analyses/decompiler/optimization_passes/win_stack_canary_simplifier.py +477 -0
  154. angr/analyses/decompiler/optimization_passes/x86_gcc_getpc_simplifier.py +88 -0
  155. angr/analyses/decompiler/peephole_optimizations/__init__.py +136 -0
  156. angr/analyses/decompiler/peephole_optimizations/a_div_const_add_a_mul_n_div_const.py +42 -0
  157. angr/analyses/decompiler/peephole_optimizations/a_mul_const_div_shr_const.py +38 -0
  158. angr/analyses/decompiler/peephole_optimizations/a_mul_const_sub_a.py +34 -0
  159. angr/analyses/decompiler/peephole_optimizations/a_shl_const_sub_a.py +34 -0
  160. angr/analyses/decompiler/peephole_optimizations/a_sub_a_div.py +25 -0
  161. angr/analyses/decompiler/peephole_optimizations/a_sub_a_shr_const_shr_const.py +37 -0
  162. angr/analyses/decompiler/peephole_optimizations/a_sub_a_sub_n.py +23 -0
  163. angr/analyses/decompiler/peephole_optimizations/arm_cmpf.py +236 -0
  164. angr/analyses/decompiler/peephole_optimizations/base.py +157 -0
  165. angr/analyses/decompiler/peephole_optimizations/basepointeroffset_add_n.py +34 -0
  166. angr/analyses/decompiler/peephole_optimizations/basepointeroffset_and_mask.py +36 -0
  167. angr/analyses/decompiler/peephole_optimizations/bitwise_or_to_logical_or.py +34 -0
  168. angr/analyses/decompiler/peephole_optimizations/bool_expr_xor_1.py +27 -0
  169. angr/analyses/decompiler/peephole_optimizations/bswap.py +142 -0
  170. angr/analyses/decompiler/peephole_optimizations/cas_intrinsics.py +182 -0
  171. angr/analyses/decompiler/peephole_optimizations/cmpord_rewriter.py +71 -0
  172. angr/analyses/decompiler/peephole_optimizations/coalesce_adjacent_shrs.py +39 -0
  173. angr/analyses/decompiler/peephole_optimizations/coalesce_same_cascading_ifs.py +28 -0
  174. angr/analyses/decompiler/peephole_optimizations/constant_derefs.py +44 -0
  175. angr/analyses/decompiler/peephole_optimizations/conv_a_sub0_shr_and.py +69 -0
  176. angr/analyses/decompiler/peephole_optimizations/conv_shl_shr.py +52 -0
  177. angr/analyses/decompiler/peephole_optimizations/eager_eval.py +436 -0
  178. angr/analyses/decompiler/peephole_optimizations/extended_byte_and_mask.py +56 -0
  179. angr/analyses/decompiler/peephole_optimizations/inlined_memcpy.py +78 -0
  180. angr/analyses/decompiler/peephole_optimizations/inlined_memset.py +262 -0
  181. angr/analyses/decompiler/peephole_optimizations/inlined_strcpy.py +217 -0
  182. angr/analyses/decompiler/peephole_optimizations/inlined_strcpy_consolidation.py +106 -0
  183. angr/analyses/decompiler/peephole_optimizations/inlined_wcscpy.py +256 -0
  184. angr/analyses/decompiler/peephole_optimizations/inlined_wcscpy_consolidation.py +296 -0
  185. angr/analyses/decompiler/peephole_optimizations/invert_negated_logical_conjuction_disjunction.py +50 -0
  186. angr/analyses/decompiler/peephole_optimizations/modulo_simplifier.py +89 -0
  187. angr/analyses/decompiler/peephole_optimizations/one_sub_bool.py +33 -0
  188. angr/analyses/decompiler/peephole_optimizations/optimized_div_simplifier.py +356 -0
  189. angr/analyses/decompiler/peephole_optimizations/remove_cascading_conversions.py +45 -0
  190. angr/analyses/decompiler/peephole_optimizations/remove_cxx_destructor_calls.py +32 -0
  191. angr/analyses/decompiler/peephole_optimizations/remove_empty_if_body.py +46 -0
  192. angr/analyses/decompiler/peephole_optimizations/remove_noop_conversions.py +47 -0
  193. angr/analyses/decompiler/peephole_optimizations/remove_redundant_bitmasks.py +125 -0
  194. angr/analyses/decompiler/peephole_optimizations/remove_redundant_conversions.py +273 -0
  195. angr/analyses/decompiler/peephole_optimizations/remove_redundant_derefs.py +21 -0
  196. angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_branch.py +30 -0
  197. angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_comparisons.py +54 -0
  198. angr/analyses/decompiler/peephole_optimizations/remove_redundant_nots.py +36 -0
  199. angr/analyses/decompiler/peephole_optimizations/remove_redundant_reinterprets.py +44 -0
  200. angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts.py +95 -0
  201. angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts_around_comparators.py +115 -0
  202. angr/analyses/decompiler/peephole_optimizations/rewrite_bit_extractions.py +85 -0
  203. angr/analyses/decompiler/peephole_optimizations/rewrite_conv_mul.py +40 -0
  204. angr/analyses/decompiler/peephole_optimizations/rewrite_cxx_operator_calls.py +90 -0
  205. angr/analyses/decompiler/peephole_optimizations/rewrite_mips_gp_loads.py +49 -0
  206. angr/analyses/decompiler/peephole_optimizations/rol_ror.py +130 -0
  207. angr/analyses/decompiler/peephole_optimizations/sar_to_signed_div.py +143 -0
  208. angr/analyses/decompiler/peephole_optimizations/shl_to_mul.py +25 -0
  209. angr/analyses/decompiler/peephole_optimizations/simplify_pc_relative_loads.py +51 -0
  210. angr/analyses/decompiler/peephole_optimizations/single_bit_cond_to_boolexpr.py +28 -0
  211. angr/analyses/decompiler/peephole_optimizations/single_bit_xor.py +29 -0
  212. angr/analyses/decompiler/peephole_optimizations/tidy_stack_addr.py +131 -0
  213. angr/analyses/decompiler/peephole_optimizations/utils.py +18 -0
  214. angr/analyses/decompiler/presets/__init__.py +22 -0
  215. angr/analyses/decompiler/presets/basic.py +36 -0
  216. angr/analyses/decompiler/presets/fast.py +66 -0
  217. angr/analyses/decompiler/presets/full.py +76 -0
  218. angr/analyses/decompiler/presets/malware.py +70 -0
  219. angr/analyses/decompiler/presets/preset.py +37 -0
  220. angr/analyses/decompiler/redundant_label_remover.py +141 -0
  221. angr/analyses/decompiler/region_identifier.py +1319 -0
  222. angr/analyses/decompiler/region_simplifiers/__init__.py +5 -0
  223. angr/analyses/decompiler/region_simplifiers/cascading_cond_transformer.py +95 -0
  224. angr/analyses/decompiler/region_simplifiers/cascading_ifs.py +82 -0
  225. angr/analyses/decompiler/region_simplifiers/expr_folding.py +838 -0
  226. angr/analyses/decompiler/region_simplifiers/goto.py +178 -0
  227. angr/analyses/decompiler/region_simplifiers/if_.py +135 -0
  228. angr/analyses/decompiler/region_simplifiers/ifelse.py +91 -0
  229. angr/analyses/decompiler/region_simplifiers/loop.py +143 -0
  230. angr/analyses/decompiler/region_simplifiers/node_address_finder.py +24 -0
  231. angr/analyses/decompiler/region_simplifiers/region_simplifier.py +270 -0
  232. angr/analyses/decompiler/region_simplifiers/switch_cluster_simplifier.py +654 -0
  233. angr/analyses/decompiler/region_simplifiers/switch_expr_simplifier.py +87 -0
  234. angr/analyses/decompiler/region_walker.py +24 -0
  235. angr/analyses/decompiler/return_maker.py +72 -0
  236. angr/analyses/decompiler/semantic_naming/__init__.py +37 -0
  237. angr/analyses/decompiler/semantic_naming/array_index_naming.py +196 -0
  238. angr/analyses/decompiler/semantic_naming/boolean_naming.py +264 -0
  239. angr/analyses/decompiler/semantic_naming/call_result_naming.py +220 -0
  240. angr/analyses/decompiler/semantic_naming/naming_base.py +166 -0
  241. angr/analyses/decompiler/semantic_naming/orchestrator.py +107 -0
  242. angr/analyses/decompiler/semantic_naming/pointer_naming.py +334 -0
  243. angr/analyses/decompiler/semantic_naming/region_loop_counter_naming.py +246 -0
  244. angr/analyses/decompiler/semantic_naming/size_naming.py +137 -0
  245. angr/analyses/decompiler/seq_to_blocks.py +20 -0
  246. angr/analyses/decompiler/sequence_walker.py +261 -0
  247. angr/analyses/decompiler/ssailification/__init__.py +4 -0
  248. angr/analyses/decompiler/ssailification/rewriting.py +451 -0
  249. angr/analyses/decompiler/ssailification/rewriting_engine.py +1091 -0
  250. angr/analyses/decompiler/ssailification/rewriting_state.py +61 -0
  251. angr/analyses/decompiler/ssailification/ssailification.py +283 -0
  252. angr/analyses/decompiler/ssailification/traversal.py +127 -0
  253. angr/analyses/decompiler/ssailification/traversal_engine.py +323 -0
  254. angr/analyses/decompiler/ssailification/traversal_state.py +48 -0
  255. angr/analyses/decompiler/stack_item.py +36 -0
  256. angr/analyses/decompiler/structured_codegen/__init__.py +25 -0
  257. angr/analyses/decompiler/structured_codegen/base.py +193 -0
  258. angr/analyses/decompiler/structured_codegen/c.py +4257 -0
  259. angr/analyses/decompiler/structured_codegen/dummy.py +15 -0
  260. angr/analyses/decompiler/structured_codegen/dwarf_import.py +190 -0
  261. angr/analyses/decompiler/structuring/__init__.py +30 -0
  262. angr/analyses/decompiler/structuring/dream.py +1217 -0
  263. angr/analyses/decompiler/structuring/phoenix.py +3636 -0
  264. angr/analyses/decompiler/structuring/recursive_structurer.py +187 -0
  265. angr/analyses/decompiler/structuring/sailr.py +120 -0
  266. angr/analyses/decompiler/structuring/structurer_base.py +1140 -0
  267. angr/analyses/decompiler/structuring/structurer_nodes.py +442 -0
  268. angr/analyses/decompiler/utils.py +1224 -0
  269. angr/analyses/deobfuscator/__init__.py +23 -0
  270. angr/analyses/deobfuscator/api_obf_finder.py +333 -0
  271. angr/analyses/deobfuscator/api_obf_peephole_optimizer.py +80 -0
  272. angr/analyses/deobfuscator/api_obf_type2_finder.py +166 -0
  273. angr/analyses/deobfuscator/data_transformation_embedder.py +633 -0
  274. angr/analyses/deobfuscator/hash_lookup_api_deobfuscator.py +156 -0
  275. angr/analyses/deobfuscator/irsb_reg_collector.py +54 -0
  276. angr/analyses/deobfuscator/scope_ops_analyzer.py +68 -0
  277. angr/analyses/deobfuscator/string_obf_finder.py +983 -0
  278. angr/analyses/deobfuscator/string_obf_opt_passes.py +136 -0
  279. angr/analyses/deobfuscator/string_obf_peephole_optimizer.py +47 -0
  280. angr/analyses/disassembly.py +1351 -0
  281. angr/analyses/disassembly_utils.py +101 -0
  282. angr/analyses/dominance_frontier.py +57 -0
  283. angr/analyses/fcp/__init__.py +4 -0
  284. angr/analyses/fcp/fcp.py +427 -0
  285. angr/analyses/find_objects_static.py +205 -0
  286. angr/analyses/flirt/__init__.py +47 -0
  287. angr/analyses/flirt/consts.py +160 -0
  288. angr/analyses/flirt/flirt.py +249 -0
  289. angr/analyses/flirt/flirt_function.py +20 -0
  290. angr/analyses/flirt/flirt_matcher.py +352 -0
  291. angr/analyses/flirt/flirt_module.py +32 -0
  292. angr/analyses/flirt/flirt_node.py +23 -0
  293. angr/analyses/flirt/flirt_sig.py +359 -0
  294. angr/analyses/flirt/flirt_utils.py +31 -0
  295. angr/analyses/forward_analysis/__init__.py +12 -0
  296. angr/analyses/forward_analysis/forward_analysis.py +619 -0
  297. angr/analyses/forward_analysis/job_info.py +64 -0
  298. angr/analyses/forward_analysis/visitors/__init__.py +14 -0
  299. angr/analyses/forward_analysis/visitors/call_graph.py +29 -0
  300. angr/analyses/forward_analysis/visitors/function_graph.py +86 -0
  301. angr/analyses/forward_analysis/visitors/graph.py +242 -0
  302. angr/analyses/forward_analysis/visitors/loop.py +29 -0
  303. angr/analyses/forward_analysis/visitors/single_node_graph.py +38 -0
  304. angr/analyses/identifier/__init__.py +5 -0
  305. angr/analyses/identifier/custom_callable.py +137 -0
  306. angr/analyses/identifier/errors.py +10 -0
  307. angr/analyses/identifier/func.py +60 -0
  308. angr/analyses/identifier/functions/__init__.py +37 -0
  309. angr/analyses/identifier/functions/atoi.py +73 -0
  310. angr/analyses/identifier/functions/based_atoi.py +125 -0
  311. angr/analyses/identifier/functions/fdprintf.py +123 -0
  312. angr/analyses/identifier/functions/free.py +64 -0
  313. angr/analyses/identifier/functions/int2str.py +287 -0
  314. angr/analyses/identifier/functions/malloc.py +111 -0
  315. angr/analyses/identifier/functions/memcmp.py +67 -0
  316. angr/analyses/identifier/functions/memcpy.py +89 -0
  317. angr/analyses/identifier/functions/memset.py +43 -0
  318. angr/analyses/identifier/functions/printf.py +123 -0
  319. angr/analyses/identifier/functions/recv_until.py +312 -0
  320. angr/analyses/identifier/functions/skip_calloc.py +73 -0
  321. angr/analyses/identifier/functions/skip_realloc.py +97 -0
  322. angr/analyses/identifier/functions/skip_recv_n.py +105 -0
  323. angr/analyses/identifier/functions/snprintf.py +112 -0
  324. angr/analyses/identifier/functions/sprintf.py +116 -0
  325. angr/analyses/identifier/functions/strcasecmp.py +33 -0
  326. angr/analyses/identifier/functions/strcmp.py +113 -0
  327. angr/analyses/identifier/functions/strcpy.py +43 -0
  328. angr/analyses/identifier/functions/strlen.py +27 -0
  329. angr/analyses/identifier/functions/strncmp.py +104 -0
  330. angr/analyses/identifier/functions/strncpy.py +65 -0
  331. angr/analyses/identifier/functions/strtol.py +89 -0
  332. angr/analyses/identifier/identify.py +825 -0
  333. angr/analyses/identifier/runner.py +360 -0
  334. angr/analyses/init_finder.py +289 -0
  335. angr/analyses/loop_analysis/__init__.py +4 -0
  336. angr/analyses/loop_analysis/loop_analysis.py +464 -0
  337. angr/analyses/loop_analysis.py +349 -0
  338. angr/analyses/loop_unroller/__init__.py +4 -0
  339. angr/analyses/loop_unroller/loop_unroller.py +222 -0
  340. angr/analyses/loopfinder.py +171 -0
  341. angr/analyses/outliner/__init__.py +7 -0
  342. angr/analyses/outliner/outliner.py +402 -0
  343. angr/analyses/patchfinder.py +137 -0
  344. angr/analyses/pathfinder.py +282 -0
  345. angr/analyses/propagator/__init__.py +5 -0
  346. angr/analyses/propagator/engine_base.py +62 -0
  347. angr/analyses/propagator/engine_vex.py +297 -0
  348. angr/analyses/propagator/propagator.py +361 -0
  349. angr/analyses/propagator/top_checker_mixin.py +218 -0
  350. angr/analyses/propagator/values.py +117 -0
  351. angr/analyses/propagator/vex_vars.py +68 -0
  352. angr/analyses/proximity_graph.py +444 -0
  353. angr/analyses/purity/__init__.py +15 -0
  354. angr/analyses/purity/analysis.py +78 -0
  355. angr/analyses/purity/engine.py +593 -0
  356. angr/analyses/reaching_definitions/__init__.py +67 -0
  357. angr/analyses/reaching_definitions/call_trace.py +73 -0
  358. angr/analyses/reaching_definitions/dep_graph.py +433 -0
  359. angr/analyses/reaching_definitions/engine_ail.py +1128 -0
  360. angr/analyses/reaching_definitions/engine_vex.py +1128 -0
  361. angr/analyses/reaching_definitions/external_codeloc.py +0 -0
  362. angr/analyses/reaching_definitions/function_handler.py +639 -0
  363. angr/analyses/reaching_definitions/function_handler_library/__init__.py +12 -0
  364. angr/analyses/reaching_definitions/function_handler_library/stdio.py +269 -0
  365. angr/analyses/reaching_definitions/function_handler_library/stdlib.py +195 -0
  366. angr/analyses/reaching_definitions/function_handler_library/string.py +158 -0
  367. angr/analyses/reaching_definitions/function_handler_library/unistd.py +51 -0
  368. angr/analyses/reaching_definitions/heap_allocator.py +70 -0
  369. angr/analyses/reaching_definitions/rd_initializer.py +237 -0
  370. angr/analyses/reaching_definitions/rd_state.py +579 -0
  371. angr/analyses/reaching_definitions/reaching_definitions.py +581 -0
  372. angr/analyses/reaching_definitions/subject.py +65 -0
  373. angr/analyses/reassembler.py +2900 -0
  374. angr/analyses/s_liveness.py +254 -0
  375. angr/analyses/s_propagator.py +575 -0
  376. angr/analyses/s_reaching_definitions/__init__.py +12 -0
  377. angr/analyses/s_reaching_definitions/s_rda_model.py +145 -0
  378. angr/analyses/s_reaching_definitions/s_rda_view.py +344 -0
  379. angr/analyses/s_reaching_definitions/s_reaching_definitions.py +230 -0
  380. angr/analyses/smc.py +160 -0
  381. angr/analyses/soot_class_hierarchy.py +273 -0
  382. angr/analyses/stack_pointer_tracker.py +954 -0
  383. angr/analyses/static_hooker.py +53 -0
  384. angr/analyses/typehoon/__init__.py +5 -0
  385. angr/analyses/typehoon/dfa.py +118 -0
  386. angr/analyses/typehoon/lifter.py +133 -0
  387. angr/analyses/typehoon/simple_solver.py +2009 -0
  388. angr/analyses/typehoon/translator.py +283 -0
  389. angr/analyses/typehoon/typeconsts.py +439 -0
  390. angr/analyses/typehoon/typehoon.py +338 -0
  391. angr/analyses/typehoon/typevars.py +633 -0
  392. angr/analyses/typehoon/variance.py +11 -0
  393. angr/analyses/unpacker/__init__.py +6 -0
  394. angr/analyses/unpacker/obfuscation_detector.py +103 -0
  395. angr/analyses/unpacker/packing_detector.py +138 -0
  396. angr/analyses/variable_recovery/__init__.py +9 -0
  397. angr/analyses/variable_recovery/annotations.py +58 -0
  398. angr/analyses/variable_recovery/engine_ail.py +978 -0
  399. angr/analyses/variable_recovery/engine_base.py +1256 -0
  400. angr/analyses/variable_recovery/engine_vex.py +594 -0
  401. angr/analyses/variable_recovery/irsb_scanner.py +143 -0
  402. angr/analyses/variable_recovery/variable_recovery.py +574 -0
  403. angr/analyses/variable_recovery/variable_recovery_base.py +489 -0
  404. angr/analyses/variable_recovery/variable_recovery_fast.py +669 -0
  405. angr/analyses/veritesting.py +626 -0
  406. angr/analyses/vfg.py +1898 -0
  407. angr/analyses/vsa_ddg.py +420 -0
  408. angr/analyses/vtable.py +92 -0
  409. angr/analyses/xrefs.py +286 -0
  410. angr/angrdb/__init__.py +14 -0
  411. angr/angrdb/db.py +215 -0
  412. angr/angrdb/models.py +184 -0
  413. angr/angrdb/serializers/__init__.py +10 -0
  414. angr/angrdb/serializers/cfg_model.py +41 -0
  415. angr/angrdb/serializers/comments.py +60 -0
  416. angr/angrdb/serializers/funcs.py +61 -0
  417. angr/angrdb/serializers/kb.py +111 -0
  418. angr/angrdb/serializers/labels.py +59 -0
  419. angr/angrdb/serializers/loader.py +165 -0
  420. angr/angrdb/serializers/structured_code.py +167 -0
  421. angr/angrdb/serializers/variables.py +58 -0
  422. angr/angrdb/serializers/xrefs.py +48 -0
  423. angr/annocfg.py +317 -0
  424. angr/blade.py +431 -0
  425. angr/block.py +509 -0
  426. angr/callable.py +176 -0
  427. angr/calling_conventions.py +2613 -0
  428. angr/code_location.py +249 -0
  429. angr/codenode.py +145 -0
  430. angr/concretization_strategies/__init__.py +32 -0
  431. angr/concretization_strategies/any.py +17 -0
  432. angr/concretization_strategies/any_named.py +35 -0
  433. angr/concretization_strategies/base.py +81 -0
  434. angr/concretization_strategies/controlled_data.py +58 -0
  435. angr/concretization_strategies/eval.py +19 -0
  436. angr/concretization_strategies/logging.py +35 -0
  437. angr/concretization_strategies/max.py +25 -0
  438. angr/concretization_strategies/nonzero.py +16 -0
  439. angr/concretization_strategies/nonzero_range.py +22 -0
  440. angr/concretization_strategies/norepeats.py +37 -0
  441. angr/concretization_strategies/norepeats_range.py +37 -0
  442. angr/concretization_strategies/range.py +19 -0
  443. angr/concretization_strategies/signed_add.py +31 -0
  444. angr/concretization_strategies/single.py +15 -0
  445. angr/concretization_strategies/solutions.py +20 -0
  446. angr/concretization_strategies/unlimited_range.py +17 -0
  447. angr/distributed/__init__.py +9 -0
  448. angr/distributed/server.py +197 -0
  449. angr/distributed/worker.py +185 -0
  450. angr/emulator.py +144 -0
  451. angr/engines/__init__.py +69 -0
  452. angr/engines/ail/__init__.py +16 -0
  453. angr/engines/ail/callstack.py +58 -0
  454. angr/engines/ail/engine_light.py +903 -0
  455. angr/engines/ail/engine_successors.py +24 -0
  456. angr/engines/ail/setup.py +57 -0
  457. angr/engines/concrete.py +66 -0
  458. angr/engines/engine.py +29 -0
  459. angr/engines/failure.py +27 -0
  460. angr/engines/hook.py +93 -0
  461. angr/engines/icicle.py +294 -0
  462. angr/engines/light/__init__.py +23 -0
  463. angr/engines/light/data.py +681 -0
  464. angr/engines/light/engine.py +1297 -0
  465. angr/engines/pcode/__init__.py +9 -0
  466. angr/engines/pcode/behavior.py +998 -0
  467. angr/engines/pcode/cc.py +148 -0
  468. angr/engines/pcode/emulate.py +440 -0
  469. angr/engines/pcode/engine.py +242 -0
  470. angr/engines/pcode/lifter.py +1428 -0
  471. angr/engines/procedure.py +70 -0
  472. angr/engines/soot/__init__.py +5 -0
  473. angr/engines/soot/engine.py +410 -0
  474. angr/engines/soot/exceptions.py +17 -0
  475. angr/engines/soot/expressions/__init__.py +87 -0
  476. angr/engines/soot/expressions/arrayref.py +22 -0
  477. angr/engines/soot/expressions/base.py +21 -0
  478. angr/engines/soot/expressions/binop.py +28 -0
  479. angr/engines/soot/expressions/cast.py +22 -0
  480. angr/engines/soot/expressions/condition.py +35 -0
  481. angr/engines/soot/expressions/constants.py +47 -0
  482. angr/engines/soot/expressions/instanceOf.py +15 -0
  483. angr/engines/soot/expressions/instancefieldref.py +8 -0
  484. angr/engines/soot/expressions/invoke.py +114 -0
  485. angr/engines/soot/expressions/length.py +8 -0
  486. angr/engines/soot/expressions/local.py +8 -0
  487. angr/engines/soot/expressions/new.py +16 -0
  488. angr/engines/soot/expressions/newArray.py +54 -0
  489. angr/engines/soot/expressions/newMultiArray.py +86 -0
  490. angr/engines/soot/expressions/paramref.py +8 -0
  491. angr/engines/soot/expressions/phi.py +30 -0
  492. angr/engines/soot/expressions/staticfieldref.py +8 -0
  493. angr/engines/soot/expressions/thisref.py +7 -0
  494. angr/engines/soot/expressions/unsupported.py +7 -0
  495. angr/engines/soot/field_dispatcher.py +46 -0
  496. angr/engines/soot/method_dispatcher.py +46 -0
  497. angr/engines/soot/statements/__init__.py +44 -0
  498. angr/engines/soot/statements/assign.py +30 -0
  499. angr/engines/soot/statements/base.py +79 -0
  500. angr/engines/soot/statements/goto.py +14 -0
  501. angr/engines/soot/statements/identity.py +15 -0
  502. angr/engines/soot/statements/if_.py +19 -0
  503. angr/engines/soot/statements/invoke.py +12 -0
  504. angr/engines/soot/statements/return_.py +20 -0
  505. angr/engines/soot/statements/switch.py +41 -0
  506. angr/engines/soot/statements/throw.py +15 -0
  507. angr/engines/soot/values/__init__.py +38 -0
  508. angr/engines/soot/values/arrayref.py +122 -0
  509. angr/engines/soot/values/base.py +7 -0
  510. angr/engines/soot/values/constants.py +18 -0
  511. angr/engines/soot/values/instancefieldref.py +44 -0
  512. angr/engines/soot/values/local.py +18 -0
  513. angr/engines/soot/values/paramref.py +18 -0
  514. angr/engines/soot/values/staticfieldref.py +38 -0
  515. angr/engines/soot/values/strref.py +38 -0
  516. angr/engines/soot/values/thisref.py +149 -0
  517. angr/engines/successors.py +608 -0
  518. angr/engines/syscall.py +51 -0
  519. angr/engines/unicorn.py +490 -0
  520. angr/engines/vex/__init__.py +20 -0
  521. angr/engines/vex/claripy/__init__.py +5 -0
  522. angr/engines/vex/claripy/ccall.py +2097 -0
  523. angr/engines/vex/claripy/datalayer.py +141 -0
  524. angr/engines/vex/claripy/irop.py +1276 -0
  525. angr/engines/vex/heavy/__init__.py +16 -0
  526. angr/engines/vex/heavy/actions.py +231 -0
  527. angr/engines/vex/heavy/concretizers.py +403 -0
  528. angr/engines/vex/heavy/dirty.py +466 -0
  529. angr/engines/vex/heavy/heavy.py +370 -0
  530. angr/engines/vex/heavy/inspect.py +52 -0
  531. angr/engines/vex/heavy/resilience.py +85 -0
  532. angr/engines/vex/heavy/super_fastpath.py +34 -0
  533. angr/engines/vex/lifter.py +420 -0
  534. angr/engines/vex/light/__init__.py +11 -0
  535. angr/engines/vex/light/light.py +551 -0
  536. angr/engines/vex/light/resilience.py +74 -0
  537. angr/engines/vex/light/slicing.py +52 -0
  538. angr/errors.py +611 -0
  539. angr/exploration_techniques/__init__.py +53 -0
  540. angr/exploration_techniques/base.py +126 -0
  541. angr/exploration_techniques/bucketizer.py +94 -0
  542. angr/exploration_techniques/common.py +56 -0
  543. angr/exploration_techniques/dfs.py +37 -0
  544. angr/exploration_techniques/director.py +520 -0
  545. angr/exploration_techniques/driller_core.py +100 -0
  546. angr/exploration_techniques/explorer.py +152 -0
  547. angr/exploration_techniques/lengthlimiter.py +22 -0
  548. angr/exploration_techniques/local_loop_seer.py +65 -0
  549. angr/exploration_techniques/loop_seer.py +236 -0
  550. angr/exploration_techniques/manual_mergepoint.py +82 -0
  551. angr/exploration_techniques/memory_watcher.py +43 -0
  552. angr/exploration_techniques/oppologist.py +92 -0
  553. angr/exploration_techniques/slicecutor.py +118 -0
  554. angr/exploration_techniques/spiller.py +280 -0
  555. angr/exploration_techniques/spiller_db.py +27 -0
  556. angr/exploration_techniques/stochastic.py +56 -0
  557. angr/exploration_techniques/stub_stasher.py +19 -0
  558. angr/exploration_techniques/suggestions.py +159 -0
  559. angr/exploration_techniques/tech_builder.py +49 -0
  560. angr/exploration_techniques/threading.py +69 -0
  561. angr/exploration_techniques/timeout.py +34 -0
  562. angr/exploration_techniques/tracer.py +1098 -0
  563. angr/exploration_techniques/unique.py +106 -0
  564. angr/exploration_techniques/veritesting.py +37 -0
  565. angr/factory.py +413 -0
  566. angr/flirt/__init__.py +124 -0
  567. angr/flirt/build_sig.py +305 -0
  568. angr/graph_utils.py +0 -0
  569. angr/keyed_region.py +525 -0
  570. angr/knowledge_base.py +146 -0
  571. angr/knowledge_plugins/__init__.py +43 -0
  572. angr/knowledge_plugins/callsite_prototypes.py +95 -0
  573. angr/knowledge_plugins/cfg/__init__.py +18 -0
  574. angr/knowledge_plugins/cfg/cfg_manager.py +95 -0
  575. angr/knowledge_plugins/cfg/cfg_model.py +1043 -0
  576. angr/knowledge_plugins/cfg/cfg_node.py +536 -0
  577. angr/knowledge_plugins/cfg/indirect_jump.py +131 -0
  578. angr/knowledge_plugins/cfg/memory_data.py +156 -0
  579. angr/knowledge_plugins/comments.py +16 -0
  580. angr/knowledge_plugins/custom_strings.py +38 -0
  581. angr/knowledge_plugins/data.py +22 -0
  582. angr/knowledge_plugins/debug_variables.py +216 -0
  583. angr/knowledge_plugins/functions/__init__.py +9 -0
  584. angr/knowledge_plugins/functions/function.py +1830 -0
  585. angr/knowledge_plugins/functions/function_manager.py +621 -0
  586. angr/knowledge_plugins/functions/function_parser.py +360 -0
  587. angr/knowledge_plugins/functions/soot_function.py +128 -0
  588. angr/knowledge_plugins/indirect_jumps.py +35 -0
  589. angr/knowledge_plugins/key_definitions/__init__.py +17 -0
  590. angr/knowledge_plugins/key_definitions/atoms.py +374 -0
  591. angr/knowledge_plugins/key_definitions/constants.py +29 -0
  592. angr/knowledge_plugins/key_definitions/definition.py +216 -0
  593. angr/knowledge_plugins/key_definitions/environment.py +96 -0
  594. angr/knowledge_plugins/key_definitions/heap_address.py +33 -0
  595. angr/knowledge_plugins/key_definitions/key_definition_manager.py +82 -0
  596. angr/knowledge_plugins/key_definitions/live_definitions.py +1020 -0
  597. angr/knowledge_plugins/key_definitions/liveness.py +165 -0
  598. angr/knowledge_plugins/key_definitions/rd_model.py +171 -0
  599. angr/knowledge_plugins/key_definitions/tag.py +78 -0
  600. angr/knowledge_plugins/key_definitions/undefined.py +70 -0
  601. angr/knowledge_plugins/key_definitions/unknown_size.py +86 -0
  602. angr/knowledge_plugins/key_definitions/uses.py +178 -0
  603. angr/knowledge_plugins/labels.py +110 -0
  604. angr/knowledge_plugins/obfuscations.py +40 -0
  605. angr/knowledge_plugins/patches.py +126 -0
  606. angr/knowledge_plugins/plugin.py +24 -0
  607. angr/knowledge_plugins/propagations/__init__.py +10 -0
  608. angr/knowledge_plugins/propagations/prop_value.py +191 -0
  609. angr/knowledge_plugins/propagations/propagation_manager.py +60 -0
  610. angr/knowledge_plugins/propagations/propagation_model.py +80 -0
  611. angr/knowledge_plugins/propagations/states.py +552 -0
  612. angr/knowledge_plugins/structured_code.py +63 -0
  613. angr/knowledge_plugins/types.py +95 -0
  614. angr/knowledge_plugins/variables/__init__.py +8 -0
  615. angr/knowledge_plugins/variables/variable_access.py +113 -0
  616. angr/knowledge_plugins/variables/variable_manager.py +1375 -0
  617. angr/knowledge_plugins/xrefs/__init__.py +12 -0
  618. angr/knowledge_plugins/xrefs/xref.py +150 -0
  619. angr/knowledge_plugins/xrefs/xref_manager.py +127 -0
  620. angr/knowledge_plugins/xrefs/xref_types.py +16 -0
  621. angr/misc/__init__.py +19 -0
  622. angr/misc/ansi.py +47 -0
  623. angr/misc/autoimport.py +90 -0
  624. angr/misc/bug_report.py +126 -0
  625. angr/misc/hookset.py +106 -0
  626. angr/misc/loggers.py +130 -0
  627. angr/misc/picklable_lock.py +46 -0
  628. angr/misc/plugins.py +289 -0
  629. angr/misc/telemetry.py +54 -0
  630. angr/misc/testing.py +24 -0
  631. angr/misc/ux.py +31 -0
  632. angr/procedures/__init__.py +12 -0
  633. angr/procedures/advapi32/__init__.py +0 -0
  634. angr/procedures/cgc/__init__.py +3 -0
  635. angr/procedures/cgc/_terminate.py +11 -0
  636. angr/procedures/cgc/allocate.py +75 -0
  637. angr/procedures/cgc/deallocate.py +67 -0
  638. angr/procedures/cgc/fdwait.py +65 -0
  639. angr/procedures/cgc/random.py +67 -0
  640. angr/procedures/cgc/receive.py +93 -0
  641. angr/procedures/cgc/transmit.py +65 -0
  642. angr/procedures/definitions/__init__.py +1043 -0
  643. angr/procedures/definitions/cgc.py +23 -0
  644. angr/procedures/definitions/common/glibc.json +3516 -0
  645. angr/procedures/definitions/gnulib.py +41 -0
  646. angr/procedures/definitions/libstdcpp.py +25 -0
  647. angr/procedures/definitions/linux_kernel.py +8382 -0
  648. angr/procedures/definitions/linux_loader.py +7 -0
  649. angr/procedures/definitions/macho_libsystem.py +18 -0
  650. angr/procedures/definitions/msvcr.py +25 -0
  651. angr/procedures/definitions/parse_glibc.py +77 -0
  652. angr/procedures/definitions/parse_syscalls_from_local_system.py +54 -0
  653. angr/procedures/definitions/parse_win32json.py +2540 -0
  654. angr/procedures/definitions/types_stl.py +22 -0
  655. angr/procedures/definitions/wdk/api-ms-win-dx-d3dkmt-l1-1-4.json +24 -0
  656. angr/procedures/definitions/wdk/api-ms-win-dx-d3dkmt-l1-1-6.json +18 -0
  657. angr/procedures/definitions/wdk/clfs.json +189 -0
  658. angr/procedures/definitions/wdk/fltmgr.json +813 -0
  659. angr/procedures/definitions/wdk/fwpkclnt.json +24 -0
  660. angr/procedures/definitions/wdk/fwpuclnt.json +453 -0
  661. angr/procedures/definitions/wdk/gdi32.json +528 -0
  662. angr/procedures/definitions/wdk/hal.json +96 -0
  663. angr/procedures/definitions/wdk/ksecdd.json +72 -0
  664. angr/procedures/definitions/wdk/ndis.json +336 -0
  665. angr/procedures/definitions/wdk/ntoskrnl.json +5158 -0
  666. angr/procedures/definitions/wdk/offreg.json +87 -0
  667. angr/procedures/definitions/wdk/pshed.json +33 -0
  668. angr/procedures/definitions/wdk/secur32.json +39 -0
  669. angr/procedures/definitions/wdk/vhfum.json +30 -0
  670. angr/procedures/definitions/win32/_types_win32.json +34480 -0
  671. angr/procedures/definitions/win32/aclui.json +24 -0
  672. angr/procedures/definitions/win32/activeds.json +81 -0
  673. angr/procedures/definitions/win32/advapi32.json +2505 -0
  674. angr/procedures/definitions/win32/advpack.json +165 -0
  675. angr/procedures/definitions/win32/amsi.json +36 -0
  676. angr/procedures/definitions/win32/api-ms-win-appmodel-runtime-l1-1-1.json +45 -0
  677. angr/procedures/definitions/win32/api-ms-win-appmodel-runtime-l1-1-3.json +30 -0
  678. angr/procedures/definitions/win32/api-ms-win-appmodel-runtime-l1-1-6.json +18 -0
  679. angr/procedures/definitions/win32/api-ms-win-core-apiquery-l2-1-0.json +18 -0
  680. angr/procedures/definitions/win32/api-ms-win-core-backgroundtask-l1-1-0.json +18 -0
  681. angr/procedures/definitions/win32/api-ms-win-core-comm-l1-1-1.json +18 -0
  682. angr/procedures/definitions/win32/api-ms-win-core-comm-l1-1-2.json +18 -0
  683. angr/procedures/definitions/win32/api-ms-win-core-enclave-l1-1-1.json +24 -0
  684. angr/procedures/definitions/win32/api-ms-win-core-errorhandling-l1-1-3.json +18 -0
  685. angr/procedures/definitions/win32/api-ms-win-core-featurestaging-l1-1-0.json +30 -0
  686. angr/procedures/definitions/win32/api-ms-win-core-featurestaging-l1-1-1.json +18 -0
  687. angr/procedures/definitions/win32/api-ms-win-core-file-fromapp-l1-1-0.json +48 -0
  688. angr/procedures/definitions/win32/api-ms-win-core-handle-l1-1-0.json +18 -0
  689. angr/procedures/definitions/win32/api-ms-win-core-ioring-l1-1-0.json +51 -0
  690. angr/procedures/definitions/win32/api-ms-win-core-marshal-l1-1-0.json +27 -0
  691. angr/procedures/definitions/win32/api-ms-win-core-memory-l1-1-3.json +27 -0
  692. angr/procedures/definitions/win32/api-ms-win-core-memory-l1-1-4.json +18 -0
  693. angr/procedures/definitions/win32/api-ms-win-core-memory-l1-1-5.json +24 -0
  694. angr/procedures/definitions/win32/api-ms-win-core-memory-l1-1-6.json +27 -0
  695. angr/procedures/definitions/win32/api-ms-win-core-memory-l1-1-7.json +21 -0
  696. angr/procedures/definitions/win32/api-ms-win-core-memory-l1-1-8.json +24 -0
  697. angr/procedures/definitions/win32/api-ms-win-core-path-l1-1-0.json +81 -0
  698. angr/procedures/definitions/win32/api-ms-win-core-psm-appnotify-l1-1-0.json +21 -0
  699. angr/procedures/definitions/win32/api-ms-win-core-psm-appnotify-l1-1-1.json +21 -0
  700. angr/procedures/definitions/win32/api-ms-win-core-realtime-l1-1-1.json +24 -0
  701. angr/procedures/definitions/win32/api-ms-win-core-realtime-l1-1-2.json +24 -0
  702. angr/procedures/definitions/win32/api-ms-win-core-slapi-l1-1-0.json +18 -0
  703. angr/procedures/definitions/win32/api-ms-win-core-state-helpers-l1-1-0.json +18 -0
  704. angr/procedures/definitions/win32/api-ms-win-core-synch-l1-2-0.json +24 -0
  705. angr/procedures/definitions/win32/api-ms-win-core-sysinfo-l1-2-0.json +18 -0
  706. angr/procedures/definitions/win32/api-ms-win-core-sysinfo-l1-2-3.json +21 -0
  707. angr/procedures/definitions/win32/api-ms-win-core-sysinfo-l1-2-4.json +21 -0
  708. angr/procedures/definitions/win32/api-ms-win-core-sysinfo-l1-2-6.json +18 -0
  709. angr/procedures/definitions/win32/api-ms-win-core-util-l1-1-1.json +21 -0
  710. angr/procedures/definitions/win32/api-ms-win-core-wow64-l1-1-1.json +24 -0
  711. angr/procedures/definitions/win32/api-ms-win-devices-query-l1-1-0.json +42 -0
  712. angr/procedures/definitions/win32/api-ms-win-devices-query-l1-1-1.json +30 -0
  713. angr/procedures/definitions/win32/api-ms-win-dx-d3dkmt-l1-1-0.json +18 -0
  714. angr/procedures/definitions/win32/api-ms-win-gaming-deviceinformation-l1-1-0.json +18 -0
  715. angr/procedures/definitions/win32/api-ms-win-gaming-expandedresources-l1-1-0.json +24 -0
  716. angr/procedures/definitions/win32/api-ms-win-gaming-tcui-l1-1-0.json +36 -0
  717. angr/procedures/definitions/win32/api-ms-win-gaming-tcui-l1-1-1.json +21 -0
  718. angr/procedures/definitions/win32/api-ms-win-gaming-tcui-l1-1-2.json +36 -0
  719. angr/procedures/definitions/win32/api-ms-win-gaming-tcui-l1-1-3.json +21 -0
  720. angr/procedures/definitions/win32/api-ms-win-gaming-tcui-l1-1-4.json +39 -0
  721. angr/procedures/definitions/win32/api-ms-win-mm-misc-l1-1-1.json +18 -0
  722. angr/procedures/definitions/win32/api-ms-win-net-isolation-l1-1-0.json +39 -0
  723. angr/procedures/definitions/win32/api-ms-win-security-base-l1-2-2.json +18 -0
  724. angr/procedures/definitions/win32/api-ms-win-security-isolatedcontainer-l1-1-0.json +18 -0
  725. angr/procedures/definitions/win32/api-ms-win-security-isolatedcontainer-l1-1-1.json +18 -0
  726. angr/procedures/definitions/win32/api-ms-win-service-core-l1-1-3.json +18 -0
  727. angr/procedures/definitions/win32/api-ms-win-service-core-l1-1-4.json +18 -0
  728. angr/procedures/definitions/win32/api-ms-win-service-core-l1-1-5.json +21 -0
  729. angr/procedures/definitions/win32/api-ms-win-shcore-scaling-l1-1-0.json +24 -0
  730. angr/procedures/definitions/win32/api-ms-win-shcore-scaling-l1-1-1.json +33 -0
  731. angr/procedures/definitions/win32/api-ms-win-shcore-scaling-l1-1-2.json +18 -0
  732. angr/procedures/definitions/win32/api-ms-win-wsl-api-l1-1-0.json +36 -0
  733. angr/procedures/definitions/win32/apphelp.json +18 -0
  734. angr/procedures/definitions/win32/authz.json +114 -0
  735. angr/procedures/definitions/win32/avicap32.json +27 -0
  736. angr/procedures/definitions/win32/avifil32.json +195 -0
  737. angr/procedures/definitions/win32/avrt.json +57 -0
  738. angr/procedures/definitions/win32/bcp47mrm.json +21 -0
  739. angr/procedures/definitions/win32/bcrypt.json +174 -0
  740. angr/procedures/definitions/win32/bcryptprimitives.json +21 -0
  741. angr/procedures/definitions/win32/bluetoothapis.json +138 -0
  742. angr/procedures/definitions/win32/bthprops_cpl.json +33 -0
  743. angr/procedures/definitions/win32/cabinet.json +81 -0
  744. angr/procedures/definitions/win32/certadm.json +69 -0
  745. angr/procedures/definitions/win32/certpoleng.json +39 -0
  746. angr/procedures/definitions/win32/cfgmgr32.json +732 -0
  747. angr/procedures/definitions/win32/chakra.json +270 -0
  748. angr/procedures/definitions/win32/cldapi.json +123 -0
  749. angr/procedures/definitions/win32/clfsw32.json +192 -0
  750. angr/procedures/definitions/win32/clusapi.json +855 -0
  751. angr/procedures/definitions/win32/comctl32.json +360 -0
  752. angr/procedures/definitions/win32/comdlg32.json +78 -0
  753. angr/procedures/definitions/win32/compstui.json +27 -0
  754. angr/procedures/definitions/win32/computecore.json +177 -0
  755. angr/procedures/definitions/win32/computenetwork.json +144 -0
  756. angr/procedures/definitions/win32/computestorage.json +51 -0
  757. angr/procedures/definitions/win32/comsvcs.json +36 -0
  758. angr/procedures/definitions/win32/credui.json +72 -0
  759. angr/procedures/definitions/win32/crypt32.json +702 -0
  760. angr/procedures/definitions/win32/cryptnet.json +30 -0
  761. angr/procedures/definitions/win32/cryptui.json +45 -0
  762. angr/procedures/definitions/win32/cryptxml.json +72 -0
  763. angr/procedures/definitions/win32/cscapi.json +27 -0
  764. angr/procedures/definitions/win32/d2d1.json +54 -0
  765. angr/procedures/definitions/win32/d3d10.json +96 -0
  766. angr/procedures/definitions/win32/d3d10_1.json +21 -0
  767. angr/procedures/definitions/win32/d3d11.json +24 -0
  768. angr/procedures/definitions/win32/d3d12.json +39 -0
  769. angr/procedures/definitions/win32/d3d9.json +48 -0
  770. angr/procedures/definitions/win32/d3dcompiler_47.json +93 -0
  771. angr/procedures/definitions/win32/d3dcsx.json +42 -0
  772. angr/procedures/definitions/win32/davclnt.json +69 -0
  773. angr/procedures/definitions/win32/dbgeng.json +27 -0
  774. angr/procedures/definitions/win32/dbghelp.json +663 -0
  775. angr/procedures/definitions/win32/dbgmodel.json +18 -0
  776. angr/procedures/definitions/win32/dciman32.json +75 -0
  777. angr/procedures/definitions/win32/dcomp.json +51 -0
  778. angr/procedures/definitions/win32/ddraw.json +36 -0
  779. angr/procedures/definitions/win32/deviceaccess.json +18 -0
  780. angr/procedures/definitions/win32/dflayout.json +18 -0
  781. angr/procedures/definitions/win32/dhcpcsvc.json +60 -0
  782. angr/procedures/definitions/win32/dhcpcsvc6.json +33 -0
  783. angr/procedures/definitions/win32/dhcpsapi.json +603 -0
  784. angr/procedures/definitions/win32/diagnosticdataquery.json +120 -0
  785. angr/procedures/definitions/win32/dinput8.json +18 -0
  786. angr/procedures/definitions/win32/directml.json +21 -0
  787. angr/procedures/definitions/win32/dmprocessxmlfiltered.json +18 -0
  788. angr/procedures/definitions/win32/dnsapi.json +207 -0
  789. angr/procedures/definitions/win32/drt.json +63 -0
  790. angr/procedures/definitions/win32/drtprov.json +42 -0
  791. angr/procedures/definitions/win32/drttransport.json +21 -0
  792. angr/procedures/definitions/win32/dsound.json +45 -0
  793. angr/procedures/definitions/win32/dsparse.json +72 -0
  794. angr/procedures/definitions/win32/dsprop.json +36 -0
  795. angr/procedures/definitions/win32/dssec.json +27 -0
  796. angr/procedures/definitions/win32/dsuiext.json +27 -0
  797. angr/procedures/definitions/win32/dwmapi.json +108 -0
  798. angr/procedures/definitions/win32/dwrite.json +18 -0
  799. angr/procedures/definitions/win32/dxcompiler.json +21 -0
  800. angr/procedures/definitions/win32/dxcore.json +18 -0
  801. angr/procedures/definitions/win32/dxgi.json +33 -0
  802. angr/procedures/definitions/win32/dxva2.json +129 -0
  803. angr/procedures/definitions/win32/eappcfg.json +57 -0
  804. angr/procedures/definitions/win32/eappprxy.json +69 -0
  805. angr/procedures/definitions/win32/efswrt.json +21 -0
  806. angr/procedures/definitions/win32/elscore.json +30 -0
  807. angr/procedures/definitions/win32/esent.json +702 -0
  808. angr/procedures/definitions/win32/evr.json +36 -0
  809. angr/procedures/definitions/win32/faultrep.json +27 -0
  810. angr/procedures/definitions/win32/fhsvcctl.json +36 -0
  811. angr/procedures/definitions/win32/firewallapi.json +24 -0
  812. angr/procedures/definitions/win32/fltlib.json +99 -0
  813. angr/procedures/definitions/win32/fontsub.json +21 -0
  814. angr/procedures/definitions/win32/forceinline.json +24 -0
  815. angr/procedures/definitions/win32/fwpuclnt.json +591 -0
  816. angr/procedures/definitions/win32/fxsutility.json +21 -0
  817. angr/procedures/definitions/win32/gdi32.json +1308 -0
  818. angr/procedures/definitions/win32/gdiplus.json +1902 -0
  819. angr/procedures/definitions/win32/glu32.json +171 -0
  820. angr/procedures/definitions/win32/gpedit.json +33 -0
  821. angr/procedures/definitions/win32/hhctrl_ocx.json +21 -0
  822. angr/procedures/definitions/win32/hid.json +150 -0
  823. angr/procedures/definitions/win32/hlink.json +99 -0
  824. angr/procedures/definitions/win32/hrtfapo.json +18 -0
  825. angr/procedures/definitions/win32/httpapi.json +144 -0
  826. angr/procedures/definitions/win32/icm32.json +78 -0
  827. angr/procedures/definitions/win32/icmui.json +21 -0
  828. angr/procedures/definitions/win32/icu.json +3090 -0
  829. angr/procedures/definitions/win32/ieframe.json +102 -0
  830. angr/procedures/definitions/win32/imagehlp.json +84 -0
  831. angr/procedures/definitions/win32/imgutil.json +42 -0
  832. angr/procedures/definitions/win32/imm32.json +261 -0
  833. angr/procedures/definitions/win32/infocardapi.json +66 -0
  834. angr/procedures/definitions/win32/inkobjcore.json +96 -0
  835. angr/procedures/definitions/win32/iphlpapi.json +618 -0
  836. angr/procedures/definitions/win32/iscsidsc.json +252 -0
  837. angr/procedures/definitions/win32/isolatedwindowsenvironmentutils.json +21 -0
  838. angr/procedures/definitions/win32/kernel32.json +4566 -0
  839. angr/procedures/definitions/win32/kernelbase.json +33 -0
  840. angr/procedures/definitions/win32/keycredmgr.json +27 -0
  841. angr/procedures/definitions/win32/ksproxy_ax.json +33 -0
  842. angr/procedures/definitions/win32/ksuser.json +39 -0
  843. angr/procedures/definitions/win32/ktmw32.json +132 -0
  844. angr/procedures/definitions/win32/licenseprotection.json +21 -0
  845. angr/procedures/definitions/win32/loadperf.json +51 -0
  846. angr/procedures/definitions/win32/magnification.json +72 -0
  847. angr/procedures/definitions/win32/mapi32.json +213 -0
  848. angr/procedures/definitions/win32/mdmlocalmanagement.json +24 -0
  849. angr/procedures/definitions/win32/mdmregistration.json +60 -0
  850. angr/procedures/definitions/win32/mf.json +201 -0
  851. angr/procedures/definitions/win32/mfcore.json +21 -0
  852. angr/procedures/definitions/win32/mfplat.json +450 -0
  853. angr/procedures/definitions/win32/mfplay.json +18 -0
  854. angr/procedures/definitions/win32/mfreadwrite.json +30 -0
  855. angr/procedures/definitions/win32/mfsensorgroup.json +45 -0
  856. angr/procedures/definitions/win32/mfsrcsnk.json +21 -0
  857. angr/procedures/definitions/win32/mgmtapi.json +42 -0
  858. angr/procedures/definitions/win32/mi.json +18 -0
  859. angr/procedures/definitions/win32/mmdevapi.json +18 -0
  860. angr/procedures/definitions/win32/mpr.json +156 -0
  861. angr/procedures/definitions/win32/mprapi.json +351 -0
  862. angr/procedures/definitions/win32/mqrt.json +117 -0
  863. angr/procedures/definitions/win32/mrmsupport.json +96 -0
  864. angr/procedures/definitions/win32/msacm32.json +141 -0
  865. angr/procedures/definitions/win32/msajapi.json +1656 -0
  866. angr/procedures/definitions/win32/mscms.json +252 -0
  867. angr/procedures/definitions/win32/mscoree.json +96 -0
  868. angr/procedures/definitions/win32/msctfmonitor.json +24 -0
  869. angr/procedures/definitions/win32/msdelta.json +63 -0
  870. angr/procedures/definitions/win32/msdmo.json +48 -0
  871. angr/procedures/definitions/win32/msdrm.json +267 -0
  872. angr/procedures/definitions/win32/msi.json +807 -0
  873. angr/procedures/definitions/win32/msimg32.json +24 -0
  874. angr/procedures/definitions/win32/mspatcha.json +63 -0
  875. angr/procedures/definitions/win32/mspatchc.json +42 -0
  876. angr/procedures/definitions/win32/msports.json +36 -0
  877. angr/procedures/definitions/win32/msrating.json +72 -0
  878. angr/procedures/definitions/win32/mssign32.json +45 -0
  879. angr/procedures/definitions/win32/mstask.json +21 -0
  880. angr/procedures/definitions/win32/msvfw32.json +144 -0
  881. angr/procedures/definitions/win32/mswsock.json +63 -0
  882. angr/procedures/definitions/win32/mtxdm.json +18 -0
  883. angr/procedures/definitions/win32/ncrypt.json +132 -0
  884. angr/procedures/definitions/win32/ndfapi.json +63 -0
  885. angr/procedures/definitions/win32/netapi32.json +633 -0
  886. angr/procedures/definitions/win32/netsh.json +39 -0
  887. angr/procedures/definitions/win32/netshell.json +21 -0
  888. angr/procedures/definitions/win32/newdev.json +48 -0
  889. angr/procedures/definitions/win32/ninput.json +105 -0
  890. angr/procedures/definitions/win32/normaliz.json +21 -0
  891. angr/procedures/definitions/win32/ntdll.json +234 -0
  892. angr/procedures/definitions/win32/ntdllk.json +18 -0
  893. angr/procedures/definitions/win32/ntdsapi.json +258 -0
  894. angr/procedures/definitions/win32/ntlanman.json +45 -0
  895. angr/procedures/definitions/win32/odbc32.json +477 -0
  896. angr/procedures/definitions/win32/odbcbcp.json +96 -0
  897. angr/procedures/definitions/win32/ole32.json +966 -0
  898. angr/procedures/definitions/win32/oleacc.json +66 -0
  899. angr/procedures/definitions/win32/oleaut32.json +1230 -0
  900. angr/procedures/definitions/win32/oledlg.json +84 -0
  901. angr/procedures/definitions/win32/ondemandconnroutehelper.json +30 -0
  902. angr/procedures/definitions/win32/opengl32.json +1080 -0
  903. angr/procedures/definitions/win32/opmxbox.json +24 -0
  904. angr/procedures/definitions/win32/p2p.json +339 -0
  905. angr/procedures/definitions/win32/p2pgraph.json +126 -0
  906. angr/procedures/definitions/win32/pdh.json +309 -0
  907. angr/procedures/definitions/win32/peerdist.json +99 -0
  908. angr/procedures/definitions/win32/powrprof.json +267 -0
  909. angr/procedures/definitions/win32/prntvpt.json +48 -0
  910. angr/procedures/definitions/win32/projectedfslib.json +72 -0
  911. angr/procedures/definitions/win32/propsys.json +669 -0
  912. angr/procedures/definitions/win32/psapi.json +96 -0
  913. angr/procedures/definitions/win32/quartz.json +21 -0
  914. angr/procedures/definitions/win32/query.json +27 -0
  915. angr/procedures/definitions/win32/qwave.json +48 -0
  916. angr/procedures/definitions/win32/rasapi32.json +267 -0
  917. angr/procedures/definitions/win32/rasdlg.json +33 -0
  918. angr/procedures/definitions/win32/resutils.json +375 -0
  919. angr/procedures/definitions/win32/rpcns4.json +198 -0
  920. angr/procedures/definitions/win32/rpcproxy.json +27 -0
  921. angr/procedures/definitions/win32/rpcrt4.json +1356 -0
  922. angr/procedures/definitions/win32/rstrtmgr.json +48 -0
  923. angr/procedures/definitions/win32/rtm.json +243 -0
  924. angr/procedures/definitions/win32/rtutils.json +138 -0
  925. angr/procedures/definitions/win32/rtworkq.json +114 -0
  926. angr/procedures/definitions/win32/sas.json +18 -0
  927. angr/procedures/definitions/win32/scarddlg.json +30 -0
  928. angr/procedures/definitions/win32/schannel.json +42 -0
  929. angr/procedures/definitions/win32/sechost.json +21 -0
  930. angr/procedures/definitions/win32/secur32.json +282 -0
  931. angr/procedures/definitions/win32/sensapi.json +24 -0
  932. angr/procedures/definitions/win32/sensorsutilsv2.json +135 -0
  933. angr/procedures/definitions/win32/setupapi.json +1017 -0
  934. angr/procedures/definitions/win32/sfc.json +33 -0
  935. angr/procedures/definitions/win32/shdocvw.json +24 -0
  936. angr/procedures/definitions/win32/shell32.json +747 -0
  937. angr/procedures/definitions/win32/shlwapi.json +1095 -0
  938. angr/procedures/definitions/win32/slc.json +111 -0
  939. angr/procedures/definitions/win32/slcext.json +27 -0
  940. angr/procedures/definitions/win32/slwga.json +18 -0
  941. angr/procedures/definitions/win32/snmpapi.json +93 -0
  942. angr/procedures/definitions/win32/spoolss.json +93 -0
  943. angr/procedures/definitions/win32/srclient.json +18 -0
  944. angr/procedures/definitions/win32/srpapi.json +48 -0
  945. angr/procedures/definitions/win32/sspicli.json +36 -0
  946. angr/procedures/definitions/win32/sti.json +18 -0
  947. angr/procedures/definitions/win32/t2embed.json +57 -0
  948. angr/procedures/definitions/win32/tapi32.json +762 -0
  949. angr/procedures/definitions/win32/tbs.json +57 -0
  950. angr/procedures/definitions/win32/tdh.json +96 -0
  951. angr/procedures/definitions/win32/tokenbinding.json +45 -0
  952. angr/procedures/definitions/win32/traffic.json +75 -0
  953. angr/procedures/definitions/win32/txfw32.json +42 -0
  954. angr/procedures/definitions/win32/ualapi.json +27 -0
  955. angr/procedures/definitions/win32/uiautomationcore.json +309 -0
  956. angr/procedures/definitions/win32/urlmon.json +246 -0
  957. angr/procedures/definitions/win32/user32.json +2298 -0
  958. angr/procedures/definitions/win32/userenv.json +147 -0
  959. angr/procedures/definitions/win32/usp10.json +135 -0
  960. angr/procedures/definitions/win32/uxtheme.json +246 -0
  961. angr/procedures/definitions/win32/verifier.json +18 -0
  962. angr/procedures/definitions/win32/version.json +57 -0
  963. angr/procedures/definitions/win32/vertdll.json +36 -0
  964. angr/procedures/definitions/win32/virtdisk.json +102 -0
  965. angr/procedures/definitions/win32/vmdevicehost.json +54 -0
  966. angr/procedures/definitions/win32/vmsavedstatedumpprovider.json +144 -0
  967. angr/procedures/definitions/win32/vssapi.json +18 -0
  968. angr/procedures/definitions/win32/wcmapi.json +30 -0
  969. angr/procedures/definitions/win32/wdsbp.json +36 -0
  970. angr/procedures/definitions/win32/wdsclientapi.json +126 -0
  971. angr/procedures/definitions/win32/wdsmc.json +33 -0
  972. angr/procedures/definitions/win32/wdspxe.json +108 -0
  973. angr/procedures/definitions/win32/wdstptc.json +54 -0
  974. angr/procedures/definitions/win32/webauthn.json +54 -0
  975. angr/procedures/definitions/win32/webservices.json +594 -0
  976. angr/procedures/definitions/win32/websocket.json +54 -0
  977. angr/procedures/definitions/win32/wecapi.json +60 -0
  978. angr/procedures/definitions/win32/wer.json +78 -0
  979. angr/procedures/definitions/win32/wevtapi.json +120 -0
  980. angr/procedures/definitions/win32/winbio.json +177 -0
  981. angr/procedures/definitions/win32/windows_ai_machinelearning.json +18 -0
  982. angr/procedures/definitions/win32/windows_media_mediacontrol.json +39 -0
  983. angr/procedures/definitions/win32/windows_networking.json +18 -0
  984. angr/procedures/definitions/win32/windows_ui_xaml.json +21 -0
  985. angr/procedures/definitions/win32/windowscodecs.json +42 -0
  986. angr/procedures/definitions/win32/winfax.json +183 -0
  987. angr/procedures/definitions/win32/winhttp.json +183 -0
  988. angr/procedures/definitions/win32/winhvemulation.json +27 -0
  989. angr/procedures/definitions/win32/winhvplatform.json +213 -0
  990. angr/procedures/definitions/win32/wininet.json +903 -0
  991. angr/procedures/definitions/win32/winml.json +18 -0
  992. angr/procedures/definitions/win32/winmm.json +543 -0
  993. angr/procedures/definitions/win32/winscard.json +225 -0
  994. angr/procedures/definitions/win32/winspool_drv.json +531 -0
  995. angr/procedures/definitions/win32/wintrust.json +195 -0
  996. angr/procedures/definitions/win32/winusb.json +117 -0
  997. angr/procedures/definitions/win32/wlanapi.json +195 -0
  998. angr/procedures/definitions/win32/wlanui.json +18 -0
  999. angr/procedures/definitions/win32/wldap32.json +744 -0
  1000. angr/procedures/definitions/win32/wldp.json +42 -0
  1001. angr/procedures/definitions/win32/wmvcore.json +48 -0
  1002. angr/procedures/definitions/win32/wnvapi.json +21 -0
  1003. angr/procedures/definitions/win32/wofutil.json +48 -0
  1004. angr/procedures/definitions/win32/ws2_32.json +495 -0
  1005. angr/procedures/definitions/win32/wscapi.json +33 -0
  1006. angr/procedures/definitions/win32/wsclient.json +24 -0
  1007. angr/procedures/definitions/win32/wsdapi.json +111 -0
  1008. angr/procedures/definitions/win32/wsmsvc.json +114 -0
  1009. angr/procedures/definitions/win32/wsnmp32.json +162 -0
  1010. angr/procedures/definitions/win32/wtsapi32.json +204 -0
  1011. angr/procedures/definitions/win32/xaudio2_8.json +27 -0
  1012. angr/procedures/definitions/win32/xinput1_4.json +36 -0
  1013. angr/procedures/definitions/win32/xmllite.json +33 -0
  1014. angr/procedures/definitions/win32/xolehlp.json +27 -0
  1015. angr/procedures/definitions/win32/xpsprint.json +21 -0
  1016. angr/procedures/glibc/__ctype_b_loc.py +21 -0
  1017. angr/procedures/glibc/__ctype_tolower_loc.py +21 -0
  1018. angr/procedures/glibc/__ctype_toupper_loc.py +21 -0
  1019. angr/procedures/glibc/__errno_location.py +7 -0
  1020. angr/procedures/glibc/__init__.py +3 -0
  1021. angr/procedures/glibc/__libc_init.py +37 -0
  1022. angr/procedures/glibc/__libc_start_main.py +301 -0
  1023. angr/procedures/glibc/dynamic_loading.py +20 -0
  1024. angr/procedures/glibc/scanf.py +19 -0
  1025. angr/procedures/glibc/sscanf.py +10 -0
  1026. angr/procedures/gnulib/__init__.py +3 -0
  1027. angr/procedures/gnulib/xalloc_die.py +14 -0
  1028. angr/procedures/gnulib/xstrtol_fatal.py +14 -0
  1029. angr/procedures/java/__init__.py +42 -0
  1030. angr/procedures/java/unconstrained.py +65 -0
  1031. angr/procedures/java_io/__init__.py +0 -0
  1032. angr/procedures/java_io/read.py +12 -0
  1033. angr/procedures/java_io/write.py +17 -0
  1034. angr/procedures/java_jni/__init__.py +482 -0
  1035. angr/procedures/java_jni/array_operations.py +312 -0
  1036. angr/procedures/java_jni/class_and_interface_operations.py +31 -0
  1037. angr/procedures/java_jni/field_access.py +173 -0
  1038. angr/procedures/java_jni/global_and_local_refs.py +57 -0
  1039. angr/procedures/java_jni/method_calls.py +365 -0
  1040. angr/procedures/java_jni/not_implemented.py +26 -0
  1041. angr/procedures/java_jni/object_operations.py +94 -0
  1042. angr/procedures/java_jni/string_operations.py +87 -0
  1043. angr/procedures/java_jni/version_information.py +12 -0
  1044. angr/procedures/java_lang/__init__.py +0 -0
  1045. angr/procedures/java_lang/character.py +30 -0
  1046. angr/procedures/java_lang/double.py +24 -0
  1047. angr/procedures/java_lang/exit.py +13 -0
  1048. angr/procedures/java_lang/getsimplename.py +18 -0
  1049. angr/procedures/java_lang/integer.py +43 -0
  1050. angr/procedures/java_lang/load_library.py +9 -0
  1051. angr/procedures/java_lang/math.py +15 -0
  1052. angr/procedures/java_lang/string.py +78 -0
  1053. angr/procedures/java_lang/stringbuilder.py +44 -0
  1054. angr/procedures/java_lang/system.py +18 -0
  1055. angr/procedures/java_util/__init__.py +0 -0
  1056. angr/procedures/java_util/collection.py +35 -0
  1057. angr/procedures/java_util/iterator.py +46 -0
  1058. angr/procedures/java_util/list.py +99 -0
  1059. angr/procedures/java_util/map.py +131 -0
  1060. angr/procedures/java_util/random.py +14 -0
  1061. angr/procedures/java_util/scanner_nextline.py +23 -0
  1062. angr/procedures/libc/__init__.py +3 -0
  1063. angr/procedures/libc/abort.py +9 -0
  1064. angr/procedures/libc/access.py +13 -0
  1065. angr/procedures/libc/atoi.py +14 -0
  1066. angr/procedures/libc/atol.py +13 -0
  1067. angr/procedures/libc/calloc.py +8 -0
  1068. angr/procedures/libc/closelog.py +10 -0
  1069. angr/procedures/libc/err.py +14 -0
  1070. angr/procedures/libc/error.py +54 -0
  1071. angr/procedures/libc/exit.py +11 -0
  1072. angr/procedures/libc/fclose.py +19 -0
  1073. angr/procedures/libc/feof.py +21 -0
  1074. angr/procedures/libc/fflush.py +16 -0
  1075. angr/procedures/libc/fgetc.py +27 -0
  1076. angr/procedures/libc/fgets.py +69 -0
  1077. angr/procedures/libc/fopen.py +63 -0
  1078. angr/procedures/libc/fprintf.py +25 -0
  1079. angr/procedures/libc/fputc.py +23 -0
  1080. angr/procedures/libc/fputs.py +24 -0
  1081. angr/procedures/libc/fread.py +24 -0
  1082. angr/procedures/libc/free.py +9 -0
  1083. angr/procedures/libc/fscanf.py +20 -0
  1084. angr/procedures/libc/fseek.py +34 -0
  1085. angr/procedures/libc/ftell.py +22 -0
  1086. angr/procedures/libc/fwrite.py +19 -0
  1087. angr/procedures/libc/getchar.py +13 -0
  1088. angr/procedures/libc/getdelim.py +99 -0
  1089. angr/procedures/libc/getegid.py +8 -0
  1090. angr/procedures/libc/geteuid.py +8 -0
  1091. angr/procedures/libc/getgid.py +8 -0
  1092. angr/procedures/libc/gets.py +68 -0
  1093. angr/procedures/libc/getuid.py +8 -0
  1094. angr/procedures/libc/malloc.py +12 -0
  1095. angr/procedures/libc/memcmp.py +69 -0
  1096. angr/procedures/libc/memcpy.py +45 -0
  1097. angr/procedures/libc/memset.py +72 -0
  1098. angr/procedures/libc/openlog.py +10 -0
  1099. angr/procedures/libc/perror.py +13 -0
  1100. angr/procedures/libc/printf.py +34 -0
  1101. angr/procedures/libc/putchar.py +13 -0
  1102. angr/procedures/libc/puts.py +19 -0
  1103. angr/procedures/libc/rand.py +8 -0
  1104. angr/procedures/libc/realloc.py +8 -0
  1105. angr/procedures/libc/rewind.py +12 -0
  1106. angr/procedures/libc/scanf.py +20 -0
  1107. angr/procedures/libc/setbuf.py +9 -0
  1108. angr/procedures/libc/setvbuf.py +7 -0
  1109. angr/procedures/libc/snprintf.py +36 -0
  1110. angr/procedures/libc/sprintf.py +25 -0
  1111. angr/procedures/libc/srand.py +7 -0
  1112. angr/procedures/libc/sscanf.py +13 -0
  1113. angr/procedures/libc/stpcpy.py +18 -0
  1114. angr/procedures/libc/strcat.py +14 -0
  1115. angr/procedures/libc/strchr.py +48 -0
  1116. angr/procedures/libc/strcmp.py +31 -0
  1117. angr/procedures/libc/strcpy.py +13 -0
  1118. angr/procedures/libc/strlen.py +114 -0
  1119. angr/procedures/libc/strncat.py +19 -0
  1120. angr/procedures/libc/strncmp.py +183 -0
  1121. angr/procedures/libc/strncpy.py +22 -0
  1122. angr/procedures/libc/strnlen.py +13 -0
  1123. angr/procedures/libc/strstr.py +101 -0
  1124. angr/procedures/libc/strtol.py +261 -0
  1125. angr/procedures/libc/strtoul.py +9 -0
  1126. angr/procedures/libc/system.py +13 -0
  1127. angr/procedures/libc/time.py +9 -0
  1128. angr/procedures/libc/tmpnam.py +20 -0
  1129. angr/procedures/libc/tolower.py +10 -0
  1130. angr/procedures/libc/toupper.py +10 -0
  1131. angr/procedures/libc/ungetc.py +20 -0
  1132. angr/procedures/libc/vsnprintf.py +17 -0
  1133. angr/procedures/libc/wchar.py +16 -0
  1134. angr/procedures/libstdcpp/__init__.py +0 -0
  1135. angr/procedures/libstdcpp/_unwind_resume.py +11 -0
  1136. angr/procedures/libstdcpp/std____throw_bad_alloc.py +13 -0
  1137. angr/procedures/libstdcpp/std____throw_bad_cast.py +13 -0
  1138. angr/procedures/libstdcpp/std____throw_length_error.py +13 -0
  1139. angr/procedures/libstdcpp/std____throw_logic_error.py +13 -0
  1140. angr/procedures/libstdcpp/std__terminate.py +13 -0
  1141. angr/procedures/linux_kernel/__init__.py +3 -0
  1142. angr/procedures/linux_kernel/access.py +18 -0
  1143. angr/procedures/linux_kernel/arch_prctl.py +34 -0
  1144. angr/procedures/linux_kernel/arm_user_helpers.py +59 -0
  1145. angr/procedures/linux_kernel/brk.py +18 -0
  1146. angr/procedures/linux_kernel/cwd.py +28 -0
  1147. angr/procedures/linux_kernel/fstat.py +138 -0
  1148. angr/procedures/linux_kernel/fstat64.py +170 -0
  1149. angr/procedures/linux_kernel/futex.py +17 -0
  1150. angr/procedures/linux_kernel/getegid.py +17 -0
  1151. angr/procedures/linux_kernel/geteuid.py +17 -0
  1152. angr/procedures/linux_kernel/getgid.py +17 -0
  1153. angr/procedures/linux_kernel/getpid.py +14 -0
  1154. angr/procedures/linux_kernel/getrlimit.py +24 -0
  1155. angr/procedures/linux_kernel/gettid.py +9 -0
  1156. angr/procedures/linux_kernel/getuid.py +17 -0
  1157. angr/procedures/linux_kernel/iovec.py +47 -0
  1158. angr/procedures/linux_kernel/lseek.py +42 -0
  1159. angr/procedures/linux_kernel/mmap.py +16 -0
  1160. angr/procedures/linux_kernel/mprotect.py +42 -0
  1161. angr/procedures/linux_kernel/munmap.py +8 -0
  1162. angr/procedures/linux_kernel/openat.py +26 -0
  1163. angr/procedures/linux_kernel/set_tid_address.py +8 -0
  1164. angr/procedures/linux_kernel/sigaction.py +19 -0
  1165. angr/procedures/linux_kernel/sigprocmask.py +23 -0
  1166. angr/procedures/linux_kernel/stat.py +23 -0
  1167. angr/procedures/linux_kernel/sysinfo.py +59 -0
  1168. angr/procedures/linux_kernel/tgkill.py +10 -0
  1169. angr/procedures/linux_kernel/time.py +34 -0
  1170. angr/procedures/linux_kernel/uid.py +30 -0
  1171. angr/procedures/linux_kernel/uname.py +29 -0
  1172. angr/procedures/linux_kernel/unlink.py +22 -0
  1173. angr/procedures/linux_kernel/vsyscall.py +16 -0
  1174. angr/procedures/linux_loader/__init__.py +3 -0
  1175. angr/procedures/linux_loader/_dl_initial_error_catch_tsd.py +7 -0
  1176. angr/procedures/linux_loader/_dl_rtld_lock.py +15 -0
  1177. angr/procedures/linux_loader/sim_loader.py +54 -0
  1178. angr/procedures/linux_loader/tls.py +40 -0
  1179. angr/procedures/msvcr/__getmainargs.py +16 -0
  1180. angr/procedures/msvcr/__init__.py +4 -0
  1181. angr/procedures/msvcr/_initterm.py +38 -0
  1182. angr/procedures/msvcr/fmode.py +31 -0
  1183. angr/procedures/ntdll/__init__.py +0 -0
  1184. angr/procedures/ntdll/exceptions.py +60 -0
  1185. angr/procedures/posix/__init__.py +3 -0
  1186. angr/procedures/posix/accept.py +29 -0
  1187. angr/procedures/posix/bind.py +13 -0
  1188. angr/procedures/posix/bzero.py +9 -0
  1189. angr/procedures/posix/chroot.py +27 -0
  1190. angr/procedures/posix/close.py +9 -0
  1191. angr/procedures/posix/closedir.py +7 -0
  1192. angr/procedures/posix/dup.py +56 -0
  1193. angr/procedures/posix/fcntl.py +10 -0
  1194. angr/procedures/posix/fdopen.py +76 -0
  1195. angr/procedures/posix/fileno.py +18 -0
  1196. angr/procedures/posix/fork.py +13 -0
  1197. angr/procedures/posix/getenv.py +35 -0
  1198. angr/procedures/posix/gethostbyname.py +43 -0
  1199. angr/procedures/posix/getpass.py +19 -0
  1200. angr/procedures/posix/getsockopt.py +11 -0
  1201. angr/procedures/posix/htonl.py +11 -0
  1202. angr/procedures/posix/htons.py +11 -0
  1203. angr/procedures/posix/inet_ntoa.py +59 -0
  1204. angr/procedures/posix/listen.py +13 -0
  1205. angr/procedures/posix/mmap.py +144 -0
  1206. angr/procedures/posix/open.py +18 -0
  1207. angr/procedures/posix/opendir.py +10 -0
  1208. angr/procedures/posix/poll.py +55 -0
  1209. angr/procedures/posix/pread64.py +46 -0
  1210. angr/procedures/posix/pthread.py +87 -0
  1211. angr/procedures/posix/pwrite64.py +46 -0
  1212. angr/procedures/posix/read.py +13 -0
  1213. angr/procedures/posix/readdir.py +62 -0
  1214. angr/procedures/posix/recv.py +13 -0
  1215. angr/procedures/posix/recvfrom.py +13 -0
  1216. angr/procedures/posix/select.py +48 -0
  1217. angr/procedures/posix/send.py +23 -0
  1218. angr/procedures/posix/setsockopt.py +9 -0
  1219. angr/procedures/posix/sigaction.py +23 -0
  1220. angr/procedures/posix/sim_time.py +48 -0
  1221. angr/procedures/posix/sleep.py +8 -0
  1222. angr/procedures/posix/socket.py +18 -0
  1223. angr/procedures/posix/strcasecmp.py +26 -0
  1224. angr/procedures/posix/strdup.py +18 -0
  1225. angr/procedures/posix/strtok_r.py +64 -0
  1226. angr/procedures/posix/syslog.py +15 -0
  1227. angr/procedures/posix/tz.py +9 -0
  1228. angr/procedures/posix/unlink.py +11 -0
  1229. angr/procedures/posix/usleep.py +8 -0
  1230. angr/procedures/posix/write.py +13 -0
  1231. angr/procedures/procedure_dict.py +50 -0
  1232. angr/procedures/stubs/CallReturn.py +13 -0
  1233. angr/procedures/stubs/NoReturnUnconstrained.py +13 -0
  1234. angr/procedures/stubs/Nop.py +7 -0
  1235. angr/procedures/stubs/PathTerminator.py +9 -0
  1236. angr/procedures/stubs/Redirect.py +18 -0
  1237. angr/procedures/stubs/ReturnChar.py +11 -0
  1238. angr/procedures/stubs/ReturnUnconstrained.py +24 -0
  1239. angr/procedures/stubs/UnresolvableCallTarget.py +9 -0
  1240. angr/procedures/stubs/UnresolvableJumpTarget.py +9 -0
  1241. angr/procedures/stubs/UserHook.py +18 -0
  1242. angr/procedures/stubs/__init__.py +3 -0
  1243. angr/procedures/stubs/b64_decode.py +15 -0
  1244. angr/procedures/stubs/caller.py +14 -0
  1245. angr/procedures/stubs/crazy_scanf.py +20 -0
  1246. angr/procedures/stubs/format_parser.py +669 -0
  1247. angr/procedures/stubs/syscall_stub.py +24 -0
  1248. angr/procedures/testing/__init__.py +3 -0
  1249. angr/procedures/testing/manyargs.py +9 -0
  1250. angr/procedures/testing/retreg.py +8 -0
  1251. angr/procedures/tracer/__init__.py +4 -0
  1252. angr/procedures/tracer/random.py +9 -0
  1253. angr/procedures/tracer/receive.py +23 -0
  1254. angr/procedures/tracer/transmit.py +26 -0
  1255. angr/procedures/uclibc/__init__.py +3 -0
  1256. angr/procedures/uclibc/__uClibc_main.py +10 -0
  1257. angr/procedures/win32/EncodePointer.py +7 -0
  1258. angr/procedures/win32/ExitProcess.py +9 -0
  1259. angr/procedures/win32/GetCommandLine.py +12 -0
  1260. angr/procedures/win32/GetCurrentProcessId.py +7 -0
  1261. angr/procedures/win32/GetCurrentThreadId.py +7 -0
  1262. angr/procedures/win32/GetLastInputInfo.py +40 -0
  1263. angr/procedures/win32/GetModuleHandle.py +29 -0
  1264. angr/procedures/win32/GetProcessAffinityMask.py +37 -0
  1265. angr/procedures/win32/InterlockedExchange.py +15 -0
  1266. angr/procedures/win32/IsProcessorFeaturePresent.py +7 -0
  1267. angr/procedures/win32/VirtualAlloc.py +114 -0
  1268. angr/procedures/win32/VirtualProtect.py +60 -0
  1269. angr/procedures/win32/__init__.py +3 -0
  1270. angr/procedures/win32/critical_section.py +12 -0
  1271. angr/procedures/win32/dynamic_loading.py +104 -0
  1272. angr/procedures/win32/file_handles.py +47 -0
  1273. angr/procedures/win32/gethostbyname.py +12 -0
  1274. angr/procedures/win32/heap.py +45 -0
  1275. angr/procedures/win32/is_bad_ptr.py +26 -0
  1276. angr/procedures/win32/local_storage.py +88 -0
  1277. angr/procedures/win32/mutex.py +11 -0
  1278. angr/procedures/win32/sim_time.py +135 -0
  1279. angr/procedures/win32/system_paths.py +35 -0
  1280. angr/procedures/win32_kernel/ExAllocatePool.py +13 -0
  1281. angr/procedures/win32_kernel/ExFreePoolWithTag.py +8 -0
  1282. angr/procedures/win32_kernel/__fastfail.py +15 -0
  1283. angr/procedures/win32_kernel/__init__.py +3 -0
  1284. angr/procedures/win_user32/__init__.py +0 -0
  1285. angr/procedures/win_user32/chars.py +15 -0
  1286. angr/procedures/win_user32/keyboard.py +14 -0
  1287. angr/procedures/win_user32/messagebox.py +49 -0
  1288. angr/project.py +860 -0
  1289. angr/protos/__init__.py +19 -0
  1290. angr/protos/cfg_pb2.py +42 -0
  1291. angr/protos/function_pb2.py +38 -0
  1292. angr/protos/primitives_pb2.py +59 -0
  1293. angr/protos/variables_pb2.py +55 -0
  1294. angr/protos/xrefs_pb2.py +36 -0
  1295. angr/py.typed +1 -0
  1296. angr/rustylib.cpython-311-darwin.so +0 -0
  1297. angr/serializable.py +66 -0
  1298. angr/sim_manager.py +971 -0
  1299. angr/sim_options.py +436 -0
  1300. angr/sim_procedure.py +626 -0
  1301. angr/sim_state.py +926 -0
  1302. angr/sim_state_options.py +403 -0
  1303. angr/sim_type.py +4026 -0
  1304. angr/sim_variable.py +470 -0
  1305. angr/simos/__init__.py +47 -0
  1306. angr/simos/cgc.py +153 -0
  1307. angr/simos/javavm.py +458 -0
  1308. angr/simos/linux.py +509 -0
  1309. angr/simos/simos.py +444 -0
  1310. angr/simos/snimmuc_nxp.py +149 -0
  1311. angr/simos/userland.py +163 -0
  1312. angr/simos/windows.py +615 -0
  1313. angr/simos/xbox.py +32 -0
  1314. angr/slicer.py +352 -0
  1315. angr/state_hierarchy.py +262 -0
  1316. angr/state_plugins/__init__.py +84 -0
  1317. angr/state_plugins/callstack.py +478 -0
  1318. angr/state_plugins/cgc.py +155 -0
  1319. angr/state_plugins/debug_variables.py +192 -0
  1320. angr/state_plugins/filesystem.py +463 -0
  1321. angr/state_plugins/gdb.py +148 -0
  1322. angr/state_plugins/globals.py +65 -0
  1323. angr/state_plugins/heap/__init__.py +15 -0
  1324. angr/state_plugins/heap/heap_base.py +128 -0
  1325. angr/state_plugins/heap/heap_brk.py +136 -0
  1326. angr/state_plugins/heap/heap_freelist.py +213 -0
  1327. angr/state_plugins/heap/heap_libc.py +46 -0
  1328. angr/state_plugins/heap/heap_ptmalloc.py +620 -0
  1329. angr/state_plugins/heap/utils.py +22 -0
  1330. angr/state_plugins/history.py +564 -0
  1331. angr/state_plugins/inspect.py +375 -0
  1332. angr/state_plugins/javavm_classloader.py +134 -0
  1333. angr/state_plugins/jni_references.py +95 -0
  1334. angr/state_plugins/libc.py +1263 -0
  1335. angr/state_plugins/light_registers.py +168 -0
  1336. angr/state_plugins/log.py +84 -0
  1337. angr/state_plugins/loop_data.py +92 -0
  1338. angr/state_plugins/plugin.py +176 -0
  1339. angr/state_plugins/posix.py +703 -0
  1340. angr/state_plugins/preconstrainer.py +196 -0
  1341. angr/state_plugins/scratch.py +173 -0
  1342. angr/state_plugins/sim_action.py +326 -0
  1343. angr/state_plugins/sim_action_object.py +271 -0
  1344. angr/state_plugins/sim_event.py +59 -0
  1345. angr/state_plugins/solver.py +1128 -0
  1346. angr/state_plugins/symbolizer.py +291 -0
  1347. angr/state_plugins/trace_additions.py +738 -0
  1348. angr/state_plugins/uc_manager.py +94 -0
  1349. angr/state_plugins/unicorn_engine.py +1920 -0
  1350. angr/state_plugins/view.py +340 -0
  1351. angr/storage/__init__.py +15 -0
  1352. angr/storage/file.py +1210 -0
  1353. angr/storage/memory_mixins/__init__.py +317 -0
  1354. angr/storage/memory_mixins/actions_mixin.py +72 -0
  1355. angr/storage/memory_mixins/address_concretization_mixin.py +384 -0
  1356. angr/storage/memory_mixins/bvv_conversion_mixin.py +73 -0
  1357. angr/storage/memory_mixins/clouseau_mixin.py +137 -0
  1358. angr/storage/memory_mixins/conditional_store_mixin.py +25 -0
  1359. angr/storage/memory_mixins/convenient_mappings_mixin.py +256 -0
  1360. angr/storage/memory_mixins/default_filler_mixin.py +144 -0
  1361. angr/storage/memory_mixins/dirty_addrs_mixin.py +11 -0
  1362. angr/storage/memory_mixins/hex_dumper_mixin.py +82 -0
  1363. angr/storage/memory_mixins/javavm_memory_mixin.py +392 -0
  1364. angr/storage/memory_mixins/keyvalue_memory_mixin.py +43 -0
  1365. angr/storage/memory_mixins/label_merger_mixin.py +31 -0
  1366. angr/storage/memory_mixins/memory_mixin.py +175 -0
  1367. angr/storage/memory_mixins/multi_value_merger_mixin.py +79 -0
  1368. angr/storage/memory_mixins/name_resolution_mixin.py +67 -0
  1369. angr/storage/memory_mixins/paged_memory/__init__.py +0 -0
  1370. angr/storage/memory_mixins/paged_memory/page_backer_mixins.py +266 -0
  1371. angr/storage/memory_mixins/paged_memory/paged_memory_mixin.py +743 -0
  1372. angr/storage/memory_mixins/paged_memory/paged_memory_multivalue_mixin.py +65 -0
  1373. angr/storage/memory_mixins/paged_memory/pages/__init__.py +26 -0
  1374. angr/storage/memory_mixins/paged_memory/pages/base.py +31 -0
  1375. angr/storage/memory_mixins/paged_memory/pages/cooperation.py +341 -0
  1376. angr/storage/memory_mixins/paged_memory/pages/history_tracking_mixin.py +92 -0
  1377. angr/storage/memory_mixins/paged_memory/pages/ispo_mixin.py +55 -0
  1378. angr/storage/memory_mixins/paged_memory/pages/list_page.py +338 -0
  1379. angr/storage/memory_mixins/paged_memory/pages/multi_values.py +324 -0
  1380. angr/storage/memory_mixins/paged_memory/pages/mv_list_page.py +419 -0
  1381. angr/storage/memory_mixins/paged_memory/pages/permissions_mixin.py +36 -0
  1382. angr/storage/memory_mixins/paged_memory/pages/refcount_mixin.py +52 -0
  1383. angr/storage/memory_mixins/paged_memory/pages/ultra_page.py +529 -0
  1384. angr/storage/memory_mixins/paged_memory/privileged_mixin.py +36 -0
  1385. angr/storage/memory_mixins/paged_memory/stack_allocation_mixin.py +74 -0
  1386. angr/storage/memory_mixins/regioned_memory/__init__.py +17 -0
  1387. angr/storage/memory_mixins/regioned_memory/abstract_address_descriptor.py +36 -0
  1388. angr/storage/memory_mixins/regioned_memory/abstract_merger_mixin.py +31 -0
  1389. angr/storage/memory_mixins/regioned_memory/region_category_mixin.py +9 -0
  1390. angr/storage/memory_mixins/regioned_memory/region_data.py +246 -0
  1391. angr/storage/memory_mixins/regioned_memory/region_meta_mixin.py +241 -0
  1392. angr/storage/memory_mixins/regioned_memory/regioned_address_concretization_mixin.py +119 -0
  1393. angr/storage/memory_mixins/regioned_memory/regioned_memory_mixin.py +442 -0
  1394. angr/storage/memory_mixins/regioned_memory/static_find_mixin.py +69 -0
  1395. angr/storage/memory_mixins/simple_interface_mixin.py +71 -0
  1396. angr/storage/memory_mixins/simplification_mixin.py +15 -0
  1397. angr/storage/memory_mixins/size_resolution_mixin.py +143 -0
  1398. angr/storage/memory_mixins/slotted_memory.py +140 -0
  1399. angr/storage/memory_mixins/smart_find_mixin.py +161 -0
  1400. angr/storage/memory_mixins/symbolic_merger_mixin.py +16 -0
  1401. angr/storage/memory_mixins/top_merger_mixin.py +25 -0
  1402. angr/storage/memory_mixins/underconstrained_mixin.py +67 -0
  1403. angr/storage/memory_mixins/unwrapper_mixin.py +26 -0
  1404. angr/storage/memory_object.py +195 -0
  1405. angr/tablespecs.py +91 -0
  1406. angr/unicornlib.dylib +0 -0
  1407. angr/utils/__init__.py +46 -0
  1408. angr/utils/ail.py +176 -0
  1409. angr/utils/algo.py +34 -0
  1410. angr/utils/balancer.py +776 -0
  1411. angr/utils/bits.py +46 -0
  1412. angr/utils/constants.py +9 -0
  1413. angr/utils/cowdict.py +63 -0
  1414. angr/utils/cpp.py +17 -0
  1415. angr/utils/doms.py +150 -0
  1416. angr/utils/dynamic_dictlist.py +89 -0
  1417. angr/utils/endness.py +18 -0
  1418. angr/utils/enums_conv.py +97 -0
  1419. angr/utils/env.py +12 -0
  1420. angr/utils/formatting.py +128 -0
  1421. angr/utils/funcid.py +244 -0
  1422. angr/utils/graph.py +981 -0
  1423. angr/utils/lazy_import.py +13 -0
  1424. angr/utils/library.py +236 -0
  1425. angr/utils/loader.py +55 -0
  1426. angr/utils/mp.py +66 -0
  1427. angr/utils/orderedset.py +74 -0
  1428. angr/utils/ssa/__init__.py +455 -0
  1429. angr/utils/ssa/tmp_uses_collector.py +23 -0
  1430. angr/utils/ssa/vvar_uses_collector.py +36 -0
  1431. angr/utils/strings.py +20 -0
  1432. angr/utils/tagged_interval_map.py +112 -0
  1433. angr/utils/timing.py +74 -0
  1434. angr/utils/types.py +193 -0
  1435. angr/utils/vex.py +11 -0
  1436. angr/vaults.py +367 -0
  1437. angr-9.2.192.dist-info/METADATA +112 -0
  1438. angr-9.2.192.dist-info/RECORD +1442 -0
  1439. angr-9.2.192.dist-info/WHEEL +6 -0
  1440. angr-9.2.192.dist-info/entry_points.txt +2 -0
  1441. angr-9.2.192.dist-info/licenses/LICENSE +27 -0
  1442. angr-9.2.192.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1276 @@
1
+ """
2
+ This module contains symbolic implementations of VEX operations.
3
+ """
4
+
5
+ # pylint:disable=no-member
6
+ from __future__ import annotations
7
+
8
+ from functools import partial
9
+ import collections
10
+ import itertools
11
+ import operator
12
+ import math
13
+ import re
14
+ import logging
15
+
16
+ import pyvex
17
+ import claripy
18
+
19
+ from angr.errors import UnsupportedIROpError, SimOperationError, SimValueError, SimZeroDivisionException
20
+ from angr.state_plugins.sim_action_object import SimActionObject
21
+
22
+
23
+ l = logging.getLogger(name=__name__)
24
+
25
+
26
+ #
27
+ # The more sane approach
28
+ #
29
+
30
+ OP_ATTRS_PATTERN = re.compile(
31
+ r"^Iop_"
32
+ r"(?P<generic_name>\D+?)??"
33
+ r"(?P<from_type>[IFDV])??"
34
+ r"(?P<from_signed>[US])??"
35
+ r"(?P<from_size>\d+)??"
36
+ r"(?P<from_signed_back>[US])??"
37
+ # this screws up CmpLE: r'(?P<e_flag>E)??'
38
+ r"("
39
+ r"(?P<from_side>HL|HI|L|LO|lo)??"
40
+ r"(?P<conversion>to|as)"
41
+ r"(?P<to_type>Int|I|F|D|V)??"
42
+ r"(?P<to_size>\d+)??"
43
+ r"(?P<to_signed>[US])??"
44
+ r")??"
45
+ # special logic for SetV128lo32/64
46
+ r"("
47
+ r"(?P<set_side>lo)"
48
+ r"(?P<set_size>\d+)"
49
+ r")??"
50
+ r"(?P<vector_info>\d+U?S?F?0?x\d+)??"
51
+ r"(?P<rounding_mode>_R([ZPNM]))?$"
52
+ )
53
+
54
+
55
+ def op_attrs(p):
56
+ m = OP_ATTRS_PATTERN.match(p)
57
+
58
+ if not m:
59
+ return None
60
+ attrs = m.groupdict()
61
+
62
+ attrs["from_signed"] = attrs["from_signed_back"] if attrs["from_signed"] is None else attrs["from_signed"]
63
+ attrs.pop("from_signed_back", None)
64
+ if attrs["generic_name"] == "CmpOR":
65
+ assert attrs["from_type"] == "D"
66
+ attrs["generic_name"] = "CmpORD"
67
+ attrs["from_type"] = None
68
+
69
+ # fix up vector stuff
70
+ vector_info = attrs.pop("vector_info", None)
71
+ if vector_info:
72
+ vm = re.match(
73
+ r"^(?P<vector_size>\d+)?"
74
+ r"(?P<vector_signed>[US])?"
75
+ r"(?P<vector_type>[FD])?"
76
+ r"(?P<vector_zero>0)?"
77
+ r"x"
78
+ r"(?P<vector_count>\d+)?$",
79
+ vector_info,
80
+ )
81
+ attrs.update(vm.groupdict())
82
+
83
+ return attrs
84
+
85
+
86
+ all_operations = list(pyvex.irop_enums_to_ints.keys())
87
+ operations: dict[str, SimIROp] = {}
88
+ classified = set()
89
+ unclassified = set()
90
+ unsupported = set()
91
+ explicit_attrs = {
92
+ "Iop_64x4toV256": {
93
+ "generic_name": "64x4",
94
+ "to_size": 256,
95
+ },
96
+ "Iop_Yl2xF64": {
97
+ "generic_name": "Yl2x",
98
+ "to_size": 64,
99
+ },
100
+ "Iop_Yl2xp1F64": {
101
+ "generic_name": "Yl2xp1",
102
+ "to_size": 64,
103
+ },
104
+ "Iop_V256to64_0": {
105
+ "generic_name": "unpack",
106
+ "to_size": 64,
107
+ },
108
+ "Iop_V256to64_1": {
109
+ "generic_name": "unpack",
110
+ "to_size": 64,
111
+ },
112
+ "Iop_V256to64_2": {
113
+ "generic_name": "unpack",
114
+ "to_size": 64,
115
+ },
116
+ "Iop_V256to64_3": {
117
+ "generic_name": "unpack",
118
+ "to_size": 64,
119
+ },
120
+ "Iop_V256toV128_0": {
121
+ "generic_name": "unpack",
122
+ "to_size": 128,
123
+ },
124
+ "Iop_V256toV128_1": {
125
+ "generic_name": "unpack",
126
+ "to_size": 128,
127
+ },
128
+ }
129
+
130
+ for _vec_lanewidth in (8, 16, 32, 64):
131
+ for _vec_width in (64, 128):
132
+ _vec_count = _vec_width // _vec_lanewidth
133
+ if _vec_count <= 1:
134
+ continue
135
+
136
+ # the regex thinks the I is an integral descriptor
137
+ explicit_attrs[f"Iop_InterleaveHI{_vec_lanewidth}x{_vec_count}"] = {
138
+ "generic_name": "InterleaveHI",
139
+ "to_size": _vec_width,
140
+ "vector_size": _vec_lanewidth,
141
+ "vector_count": _vec_count,
142
+ }
143
+
144
+
145
+ def make_operations():
146
+ for p in all_operations:
147
+ if p in ("Iop_INVALID", "Iop_LAST"):
148
+ continue
149
+
150
+ try:
151
+ attrs = explicit_attrs[p]
152
+ except KeyError:
153
+ attrs = op_attrs(p)
154
+
155
+ if attrs is None:
156
+ unclassified.add(p)
157
+ else:
158
+ classified.add(p)
159
+ try:
160
+ operations[p] = SimIROp(p, **attrs)
161
+ except SimOperationError:
162
+ unsupported.add(p)
163
+
164
+ l.debug(
165
+ "%d matched (%d supported) and %d unmatched operations", len(classified), len(operations), len(unclassified)
166
+ )
167
+
168
+
169
+ arithmetic_operation_map = {
170
+ "Add": "__add__",
171
+ "Sub": "__sub__",
172
+ "Mul": "__mul__",
173
+ "Div": "__floordiv__",
174
+ "Neg": "Neg",
175
+ "Abs": "Abs",
176
+ "Mod": "__mod__",
177
+ }
178
+ shift_operation_map = {
179
+ "Shl": "__lshift__",
180
+ "Shr": "LShR",
181
+ "Sar": "__rshift__",
182
+ }
183
+ bitwise_operation_map = {
184
+ "Xor": "__xor__",
185
+ "Or": "__or__",
186
+ "And": "__and__",
187
+ "Not": "__invert__",
188
+ }
189
+
190
+ operation_map = {}
191
+ operation_map.update(arithmetic_operation_map)
192
+ operation_map.update(shift_operation_map)
193
+ operation_map.update(bitwise_operation_map)
194
+
195
+ rm_map = {
196
+ 0: claripy.fp.RM.RM_NearestTiesEven,
197
+ 1: claripy.fp.RM.RM_TowardsNegativeInf,
198
+ 2: claripy.fp.RM.RM_TowardsPositiveInf,
199
+ 3: claripy.fp.RM.RM_TowardsZero,
200
+ }
201
+
202
+ generic_names = set()
203
+ conversions = collections.defaultdict(list)
204
+ unsupported_conversions = []
205
+ add_operations = []
206
+ other_operations = []
207
+ vector_operations = []
208
+ fp_ops = set()
209
+ common_unsupported_generics = collections.Counter()
210
+
211
+
212
+ def supports_vector(f):
213
+ f.supports_vector = True
214
+ return f
215
+
216
+
217
+ class SimIROp:
218
+ """
219
+ A symbolic version of a Vex IR operation.
220
+ """
221
+
222
+ __slots__ = (
223
+ "_calculate",
224
+ "_conversion",
225
+ "_float",
226
+ "_from_side",
227
+ "_from_signed",
228
+ "_from_size",
229
+ "_from_type",
230
+ "_generic_name",
231
+ "_output_size_bits",
232
+ "_output_type",
233
+ "_rounding_mode",
234
+ "_set_side",
235
+ "_set_size",
236
+ "_to_signed",
237
+ "_to_size",
238
+ "_to_type",
239
+ "_vector_count",
240
+ "_vector_signed",
241
+ "_vector_size",
242
+ "_vector_type",
243
+ "_vector_zero",
244
+ "name",
245
+ "op_attrs",
246
+ )
247
+
248
+ def __init__(self, name, **attrs):
249
+ self.name = name
250
+ self.op_attrs = attrs
251
+
252
+ self._generic_name: str = None
253
+ self._from_size = None
254
+ self._from_side = None
255
+ self._from_type = None
256
+ self._from_signed = None
257
+ self._to_size = None
258
+ self._to_type = None
259
+ self._to_signed = None
260
+ self._set_side = None
261
+ self._set_size = None
262
+ self._conversion = None
263
+ self._vector_size = None
264
+ self._vector_signed = None
265
+ self._vector_type = None
266
+ self._vector_zero = None
267
+ self._vector_count = None
268
+
269
+ self._rounding_mode = None
270
+
271
+ for k, v in self.op_attrs.items():
272
+ if v is not None and ("size" in k or "count" in k):
273
+ v = int(v)
274
+ setattr(self, f"_{k}", v)
275
+
276
+ # determine the output size
277
+ # pylint:disable=no-member
278
+ self._output_type = pyvex.get_op_retty(name)
279
+ # pylint:enable=no-member
280
+ self._output_size_bits = pyvex.const.get_type_size(self._output_type)
281
+
282
+ size_check = (
283
+ self._to_size is None
284
+ or (self._to_size * 2 if self._generic_name == "DivMod" else self._to_size) == self._output_size_bits
285
+ )
286
+ if not size_check:
287
+ raise SimOperationError("VEX output size doesn't match detected output size")
288
+
289
+ #
290
+ # Some categorization
291
+ #
292
+
293
+ generic_names.add(self._generic_name)
294
+ if self._conversion is not None:
295
+ conversions[(self._from_type, self._from_signed, self._to_type, self._to_signed)].append(self)
296
+
297
+ if len({self._vector_type, self._from_type, self._to_type} & {"F", "D"}) != 0:
298
+ self._float = True
299
+
300
+ if len({self._vector_type, self._from_type, self._to_type} & {"D"}) != 0:
301
+ # fp_ops.add(self.name)
302
+ raise UnsupportedIROpError("BCD ops aren't supported")
303
+ else:
304
+ self._float = False
305
+
306
+ #
307
+ # Now determine the operation
308
+ #
309
+
310
+ self._calculate = None
311
+
312
+ # is it explicitly implemented?
313
+ if hasattr(self, "_op_" + name):
314
+ self._calculate = getattr(self, "_op_" + name)
315
+ # if the generic name is None and there's a conversion present, this is a standard
316
+ # widening or narrowing or sign-extension
317
+ elif self._generic_name is None and self._conversion:
318
+ # convert int to float
319
+ if self._float and self._from_type == "I":
320
+ self._calculate = self._op_int_to_fp
321
+
322
+ # convert float to differently-sized float
323
+ elif self._from_type == "F" and self._to_type == "F":
324
+ self._calculate = self._op_fp_to_fp
325
+
326
+ elif self._from_type == "F" and self._to_type == "I":
327
+ self._calculate = self._op_fp_to_int
328
+
329
+ # this concatenates the args into the high and low halves of the result
330
+ elif self._from_side == "HL":
331
+ self._calculate = self._op_concat
332
+
333
+ # this just returns the high half of the first arg
334
+ elif self._from_size > self._to_size and self._from_side == "HI":
335
+ self._calculate = self._op_hi_half
336
+
337
+ # this just returns the high half of the first arg
338
+ elif self._from_size > self._to_size and self._from_side in ("L", "LO"):
339
+ self._calculate = self._op_lo_half
340
+
341
+ elif self._from_size > self._to_size and self._from_side is None:
342
+ self._calculate = self._op_extract
343
+
344
+ elif self._from_size < self._to_size and self.is_signed:
345
+ self._calculate = self._op_sign_extend
346
+
347
+ elif self._from_size < self._to_size and not self.is_signed:
348
+ self._calculate = self._op_zero_extend
349
+
350
+ else:
351
+ l.error("%s is an unexpected conversion operation configuration", self)
352
+ assert False
353
+
354
+ elif self._float and self._vector_zero:
355
+ # /* --- lowest-lane-only scalar FP --- */
356
+ f = getattr(claripy, "fp" + self._generic_name, None)
357
+ if f is not None:
358
+ f = partial(f, claripy.fp.RM.default()) # always? really?
359
+
360
+ f = f if f is not None else getattr(self, "_op_fgeneric_" + self._generic_name, None)
361
+ if f is None:
362
+ raise SimOperationError(f"no fp implementation found for operation {self._generic_name}")
363
+
364
+ self._calculate = partial(self._auto_vectorize, f)
365
+
366
+ # other conversions
367
+ elif self._conversion and self._generic_name not in {"Round", "Reinterp", "QNarrowBin"}:
368
+ if self._generic_name == "DivMod":
369
+ self._calculate = self._op_divmod
370
+ else:
371
+ unsupported_conversions.append(self.name)
372
+ common_unsupported_generics[self._generic_name] += 1
373
+
374
+ # generic bitwise
375
+ elif self._generic_name in bitwise_operation_map:
376
+ assert self._from_side is None
377
+ self._calculate = self._op_mapped
378
+
379
+ # generic mapping operations
380
+ elif self._generic_name in arithmetic_operation_map or self._generic_name in shift_operation_map:
381
+ assert self._from_side is None
382
+
383
+ if self._float and self._vector_count is None:
384
+ self._calculate = self._op_float_mapped
385
+ elif not self._float and self._vector_count is not None:
386
+ self._calculate = self._op_vector_mapped
387
+ elif self._float and self._vector_count is not None:
388
+ self._calculate = self._op_vector_float_mapped
389
+ else:
390
+ self._calculate = self._op_mapped
391
+
392
+ # TODO: clean up this mess
393
+ # specifically-implemented generics
394
+ elif self._float and hasattr(self, f"_op_fgeneric_{self._generic_name}"):
395
+ calculate = getattr(self, f"_op_fgeneric_{self._generic_name}")
396
+ if self._vector_size is not None and not hasattr(calculate, "supports_vector"):
397
+ # NOTE: originally this branch just marked the op as unsupported but I think we can do better
398
+ # "marking unsupported" seems to include adding the op to the vector_operations list? why
399
+ self._calculate = partial(self._auto_vectorize, calculate)
400
+ else:
401
+ self._calculate = calculate
402
+
403
+ elif not self._float and hasattr(self, f"_op_generic_{self._generic_name}"):
404
+ calculate = getattr(self, f"_op_generic_{self._generic_name}")
405
+ if self._vector_size is not None and not hasattr(calculate, "supports_vector"):
406
+ # NOTE: same as above
407
+ self._calculate = partial(self._auto_vectorize, calculate)
408
+ else:
409
+ self._calculate = calculate
410
+
411
+ else:
412
+ common_unsupported_generics[self._generic_name] += 1
413
+ other_operations.append(name)
414
+
415
+ # if we're here and calculate is None, we don't support this
416
+ if self._calculate is None:
417
+ raise UnsupportedIROpError(f"no calculate function identified for {self.name}")
418
+
419
+ def __repr__(self):
420
+ return f"<SimIROp {self.name}>"
421
+
422
+ def _dbg_print_attrs(self):
423
+ print(f"Operation: {self.name}")
424
+ for k, v in self.op_attrs.items():
425
+ if v is not None and v != "":
426
+ print(f"... {k}: {v}")
427
+
428
+ def calculate(self, *args):
429
+ # calculate may recieve SimActionObjects (if AST_DEPS is enabled) or
430
+ # claripy expressions, so we need to unpack the SAOs before passing them
431
+ # to claripy.
432
+ unpacked_args = []
433
+ for arg in args:
434
+ if isinstance(arg, SimActionObject):
435
+ unpacked_args.append(arg.to_claripy())
436
+ elif isinstance(arg, claripy.ast.Base):
437
+ unpacked_args.append(arg)
438
+ else:
439
+ raise SimOperationError(f"Unsupported argument type {type(arg)}")
440
+ args = unpacked_args
441
+
442
+ if not self._float:
443
+ args = tuple(arg.raw_to_bv() for arg in args)
444
+
445
+ try:
446
+ if self._vector_size is None:
447
+ return self.extend_size(self._calculate(args))
448
+ return self._calculate(args)
449
+ except (ZeroDivisionError, claripy.ClaripyZeroDivisionError) as e:
450
+ raise SimZeroDivisionException("divide by zero!") from e
451
+ except (TypeError, ValueError, SimValueError, claripy.ClaripyError) as e:
452
+ raise SimOperationError(f"{self.name}._calculate() raised exception") from e
453
+
454
+ def extend_size(self, o):
455
+ cur_size = o.size()
456
+ target_size = self._output_size_bits
457
+ if self._vector_count is not None:
458
+ # phrased this awkward way to account for vectorized widening multiply
459
+ target_size //= self._vector_count
460
+ if cur_size == target_size:
461
+ return o
462
+ if cur_size < target_size:
463
+ ext_size = target_size - cur_size
464
+ if (
465
+ self._to_signed == "S"
466
+ or (self._to_signed is None and self._from_signed == "S")
467
+ or (self._to_signed is None and self._vector_signed == "S")
468
+ ):
469
+ return claripy.SignExt(ext_size, o)
470
+ return claripy.ZeroExt(ext_size, o)
471
+
472
+ # if cur_size > target_size:
473
+ # it should never happen!
474
+ raise SimOperationError(f"output of {self.name} is too big")
475
+
476
+ @property
477
+ def is_signed(self):
478
+ return self._from_signed == "S" or self._vector_signed == "S"
479
+
480
+ #
481
+ # The actual operation handlers go here.
482
+ #
483
+
484
+ # pylint:disable=no-self-use,unused-argument
485
+ def _op_mapped(self, args):
486
+ if self._from_size is not None:
487
+ sized_args = []
488
+ for a in args:
489
+ s = a.size()
490
+ if s == self._from_size:
491
+ sized_args.append(a)
492
+ elif s < self._from_size:
493
+ if self.is_signed:
494
+ sized_args.append(claripy.SignExt(self._from_size - s, a))
495
+ else:
496
+ sized_args.append(claripy.ZeroExt(self._from_size - s, a))
497
+ elif s > self._from_size:
498
+ raise SimOperationError(f"operation {self.name} received too large an argument")
499
+ else:
500
+ sized_args = args
501
+
502
+ if self._generic_name in operation_map: # bitwise/arithmetic/shift operations
503
+ o = operation_map[self._generic_name]
504
+ else:
505
+ raise SimOperationError(f"op_mapped called with invalid mapping, for {self.name}")
506
+
507
+ if o == "__floordiv__" and self.is_signed:
508
+ # yikes!!!!!!!
509
+ return claripy.SDiv(*sized_args)
510
+ if o == "Abs":
511
+ return claripy.If(sized_args[0].SLT(0), -sized_args[0], sized_args[0])
512
+
513
+ return getattr(claripy.ast.BV, o)(*sized_args)
514
+
515
+ def _translate_rm(self, rm_num):
516
+ if not rm_num.symbolic:
517
+ return rm_map[rm_num.concrete_value]
518
+ l.warning("symbolic rounding mode found, using default")
519
+ return claripy.fp.RM.default()
520
+
521
+ NO_RM = {"Neg", "Abs"}
522
+
523
+ def _op_float_mapped(self, args):
524
+ op = getattr(claripy, "fp" + self._generic_name)
525
+
526
+ if self._generic_name in self.NO_RM:
527
+ return op(*args)
528
+
529
+ rm = self._translate_rm(args[0])
530
+ return op(rm, *args[1:])
531
+
532
+ def _op_vector_mapped(self, args):
533
+ chopped_args = (
534
+ [claripy.Extract((i + 1) * self._vector_size - 1, i * self._vector_size, a) for a in args]
535
+ for i in reversed(range(self._vector_count))
536
+ )
537
+ return claripy.Concat(*(self._op_mapped(ca) for ca in chopped_args))
538
+
539
+ def _op_vector_float_mapped(self, args):
540
+ no_rm_arg = self._generic_name in self.NO_RM
541
+ rm_part = [] if no_rm_arg else [args[0]]
542
+ # wtf is up with these guys
543
+ if not no_rm_arg and self.name in {"Iop_Add32Fx2", "Iop_Sub32Fx2", "Iop_Mul32Fx2", "Iop_PwAdd32Fx2"}:
544
+ no_rm_arg = True
545
+ rm_part = [claripy.BVV(0, 8)]
546
+
547
+ chopped_args = (
548
+ [
549
+ claripy.Extract((i + 1) * self._vector_size - 1, i * self._vector_size, a).raw_to_fp()
550
+ for a in (args if no_rm_arg else args[1:])
551
+ ]
552
+ for i in reversed(range(self._vector_count))
553
+ )
554
+ return claripy.Concat(*(self._op_float_mapped(rm_part + ca).raw_to_bv() for ca in chopped_args))
555
+
556
+ @supports_vector
557
+ def _op_generic_Dup(self, args):
558
+ """
559
+ Vector duplication
560
+
561
+ Iop_Dup8x8
562
+ Iop_Dup8x16
563
+ Iop_Dup16x4
564
+ Iop_Dup16x8
565
+ Iop_Dup32x2
566
+ Iop_Dup32x4
567
+ """
568
+ arg_num = len(args)
569
+ if arg_num != 1:
570
+ raise SimOperationError(f"expect exactly one vector to be duplicated, got {arg_num}")
571
+ # Duplicate the vector for this many times
572
+ vector_count = self._vector_count
573
+ # Keep a copy of the vector to be duplicated
574
+ elem = args[0]
575
+ # Do the duplication
576
+ expr = elem
577
+ for _ in range(1, vector_count):
578
+ expr = claripy.Concat(elem, expr)
579
+ return expr
580
+
581
+ def _op_concat(self, args):
582
+ return claripy.Concat(*args)
583
+
584
+ def _op_hi_half(self, args):
585
+ return claripy.Extract(args[0].size() - 1, args[0].size() // 2, args[0])
586
+
587
+ def _op_lo_half(self, args):
588
+ return claripy.Extract(args[0].size() // 2 - 1, 0, args[0])
589
+
590
+ def _op_extract(self, args):
591
+ return claripy.Extract(self._to_size - 1, 0, args[0])
592
+
593
+ def _op_sign_extend(self, args):
594
+ return claripy.SignExt(self._to_size - args[0].size(), args[0])
595
+
596
+ def _op_zero_extend(self, args):
597
+ return claripy.ZeroExt(self._to_size - args[0].size(), args[0])
598
+
599
+ def vector_args(self, args):
600
+ """
601
+ Yields each of the individual lane pairs from the arguments, in
602
+ order from most significan to least significant
603
+ """
604
+ for i in reversed(range(self._vector_count)):
605
+ pieces = []
606
+ for vec in args:
607
+ piece = vec[(i + 1) * self._vector_size - 1 : i * self._vector_size]
608
+ if self._float:
609
+ piece = piece.raw_to_fp()
610
+ pieces.append(piece)
611
+ yield pieces
612
+
613
+ @supports_vector
614
+ def _op_generic_GetElem(self, args):
615
+ """
616
+ Transfers one byte/half-word/word of a vector to a general-purpose register.
617
+
618
+ NOTE: the index should starts from the least significant bits.
619
+ For example, index 0 for Iop_GetElem32x2 returns the low half of a vector
620
+
621
+ Iop_GetElem8x8
622
+ Iop_GetElem16x4
623
+ Iop_GetElem32x2
624
+ Iop_GetElem8x16
625
+ Iop_GetElem16x8
626
+ Iop_GetElem32x4
627
+ Iop_GetElem64x2
628
+ """
629
+ # Size of the element
630
+ vector_size = self._vector_size
631
+ # Vector count
632
+ vector_count = self._vector_count
633
+ # Extension register value, element index
634
+ dReg, index = args
635
+ # Chopped elements; there should be `vector_count` elements in total
636
+ elements = dReg.chop(vector_size)
637
+
638
+ # Handle the index as symbolic
639
+ expr = elements[vector_count - 1]
640
+ for i in range(vector_count - 2, -1, -1):
641
+ # Iterate through the element from the second from LSB to the first from the MSB
642
+ expr = claripy.If(index == vector_count - i - 1, elements[i], expr)
643
+ # Example output: <BV32 if index == 0x1 then d0[63:32] else d0[31:0]>
644
+ return expr
645
+
646
+ @supports_vector
647
+ def _op_generic_SetElem(self, args):
648
+ """
649
+ Transfers one byte/half-word/word to a vector from a general-purpose register.
650
+
651
+ NOTE: the index should starts from the least significant bits.
652
+ For example, index 0 for Iop_SetElem32x2 sets the low half of a vector
653
+
654
+ Iop_SetElem8x8
655
+ Iop_SetElem16x4
656
+ Iop_SetElem32x2
657
+ Iop_SetElem8x16
658
+ Iop_SetElem16x8
659
+ Iop_SetElem32x4
660
+ Iop_SetElem64x2
661
+ """
662
+ # Size of the element
663
+ vector_size = self._vector_size
664
+ # Element count
665
+ vector_count = self._vector_count
666
+ # Extension register value, element index, element to set
667
+ dReg, index, element = args
668
+ # Chopped elements; there should be `vector_count` elements in total
669
+ elements = dReg.chop(vector_size)
670
+
671
+ # Generate new elements
672
+ new_elements = (claripy.If(vector_count - 1 - i == index, element, elements[i]) for i in range(vector_count))
673
+ return claripy.Concat(*new_elements)
674
+
675
+ def _op_generic_Mull(self, args):
676
+ op1, op2 = args
677
+ op1 = self.extend_size(op1)
678
+ op2 = self.extend_size(op2)
679
+ return op1 * op2
680
+
681
+ def _op_generic_Clz(self, args):
682
+ """Count the leading zeroes"""
683
+ piece_size = len(args[0])
684
+ wtf_expr = claripy.BVV(piece_size, piece_size)
685
+ for a in range(piece_size):
686
+ bit = claripy.Extract(a, a, args[0])
687
+ wtf_expr = claripy.If(bit == 1, claripy.BVV(piece_size - a - 1, piece_size), wtf_expr)
688
+ return wtf_expr
689
+
690
+ def _op_generic_Ctz(self, args):
691
+ """Count the trailing zeroes"""
692
+ piece_size = len(args[0])
693
+ wtf_expr = claripy.BVV(piece_size, piece_size)
694
+ for a in reversed(range(piece_size)):
695
+ bit = claripy.Extract(a, a, args[0])
696
+ wtf_expr = claripy.If(bit == 1, claripy.BVV(a, piece_size), wtf_expr)
697
+ return wtf_expr
698
+
699
+ def generic_minmax(self, args, cmp_op):
700
+ res_comps = []
701
+ for i in reversed(range(self._vector_count)):
702
+ a_comp = claripy.Extract((i + 1) * self._vector_size - 1, i * self._vector_size, args[0])
703
+ b_comp = claripy.Extract((i + 1) * self._vector_size - 1, i * self._vector_size, args[1])
704
+ res_comps.append(claripy.If(cmp_op(a_comp, b_comp), a_comp, b_comp))
705
+ return claripy.Concat(*res_comps)
706
+
707
+ @supports_vector
708
+ def _op_generic_Min(self, args):
709
+ return self.generic_minmax(args, claripy.SLT if self.is_signed else claripy.ULT)
710
+
711
+ @supports_vector
712
+ def _op_generic_Max(self, args):
713
+ return self.generic_minmax(args, claripy.SGT if self.is_signed else claripy.UGT)
714
+
715
+ @supports_vector
716
+ def _op_generic_GetMSBs(self, args):
717
+ size = self._vector_count * self._vector_size
718
+ bits = [claripy.Extract(i, i, args[0]) for i in range(size - 1, 6, -8)]
719
+ return claripy.Concat(*bits)
720
+
721
+ @supports_vector
722
+ def _op_generic_InterleaveLO(self, args):
723
+ s = self._vector_size
724
+ c = self._vector_count
725
+ left_vector = [args[0][(i + 1) * s - 1 : i * s] for i in range(c // 2)]
726
+ right_vector = [args[1][(i + 1) * s - 1 : i * s] for i in range(c // 2)]
727
+ return claripy.Concat(*itertools.chain.from_iterable(zip(reversed(left_vector), reversed(right_vector))))
728
+
729
+ @supports_vector
730
+ def _op_generic_InterleaveHI(self, args):
731
+ s = self._vector_size
732
+ c = self._vector_count
733
+ left_vector = [args[0][(i + 1) * s - 1 : i * s] for i in range(c // 2, c)]
734
+ right_vector = [args[1][(i + 1) * s - 1 : i * s] for i in range(c // 2, c)]
735
+ return claripy.Concat(*itertools.chain.from_iterable(zip(reversed(left_vector), reversed(right_vector))))
736
+
737
+ def generic_compare(self, args, comparison):
738
+ if self._vector_size is not None:
739
+ res_comps = []
740
+ for i in reversed(range(self._vector_count)):
741
+ a_comp = claripy.Extract((i + 1) * self._vector_size - 1, i * self._vector_size, args[0])
742
+ b_comp = claripy.Extract((i + 1) * self._vector_size - 1, i * self._vector_size, args[1])
743
+ res_comps.append(
744
+ claripy.If(
745
+ comparison(a_comp, b_comp),
746
+ claripy.BVV(-1, self._vector_size),
747
+ claripy.BVV(0, self._vector_size),
748
+ )
749
+ )
750
+ return claripy.Concat(*res_comps)
751
+ return claripy.If(comparison(args[0], args[1]), claripy.BVV(1, 1), claripy.BVV(0, 1))
752
+
753
+ @supports_vector
754
+ def _op_generic_CmpEQ(self, args):
755
+ return self.generic_compare(args, operator.eq)
756
+
757
+ _op_generic_CasCmpEQ = _op_generic_CmpEQ
758
+
759
+ def _op_generic_CmpNE(self, args):
760
+ return self.generic_compare(args, operator.ne)
761
+
762
+ _op_generic_ExpCmpNE = _op_generic_CmpNE
763
+ _op_generic_CasCmpNE = _op_generic_CmpNE
764
+
765
+ @supports_vector
766
+ def _op_generic_CmpNEZ(self, args):
767
+ assert len(args) == 1
768
+ args = [args[0], claripy.BVV(0, args[0].size())]
769
+ return self.generic_compare(args, operator.ne) # TODO: Is this the correct action for scalars?
770
+
771
+ @supports_vector
772
+ def _op_generic_CmpGT(self, args):
773
+ return self.generic_compare(args, claripy.SGT if self.is_signed else claripy.UGT)
774
+
775
+ _op_generic_CasCmpGT = _op_generic_CmpGT
776
+
777
+ @supports_vector
778
+ def _op_generic_CmpGE(self, args):
779
+ return self.generic_compare(args, claripy.SGE if self.is_signed else claripy.UGE)
780
+
781
+ _op_generic_CasCmpGE = _op_generic_CmpGE
782
+
783
+ @supports_vector
784
+ def _op_generic_CmpLT(self, args):
785
+ return self.generic_compare(args, claripy.SLT if self.is_signed else claripy.ULT)
786
+
787
+ _op_generic_CasCmpLT = _op_generic_CmpLT
788
+
789
+ @supports_vector
790
+ def _op_generic_CmpLE(self, args):
791
+ return self.generic_compare(args, claripy.SLE if self.is_signed else claripy.ULE)
792
+
793
+ _op_generic_CasCmpLE = _op_generic_CmpLE
794
+
795
+ def _op_generic_CmpORD(self, args):
796
+ x = args[0]
797
+ y = args[1]
798
+ s = self._from_size
799
+ cond = claripy.SLT(x, y) if self.is_signed else claripy.ULT(x, y)
800
+ return claripy.If(x == y, claripy.BVV(0x2, s), claripy.If(cond, claripy.BVV(0x8, s), claripy.BVV(0x4, s)))
801
+
802
+ def generic_shift_thing(self, args, op):
803
+ if self._vector_size is not None:
804
+ shifted = []
805
+ if args[1].length != self._vector_size:
806
+ shift_by = args[1].zero_extend(self._vector_size - args[1].length)
807
+ else:
808
+ shift_by = args[1]
809
+ for i in reversed(range(self._vector_count)):
810
+ left = claripy.Extract((i + 1) * self._vector_size - 1, i * self._vector_size, args[0])
811
+ shifted.append(op(left, shift_by))
812
+ return claripy.Concat(*shifted)
813
+ raise SimOperationError("you done fucked")
814
+
815
+ @supports_vector
816
+ def _op_generic_ShlN(self, args):
817
+ return self.generic_shift_thing(args, operator.lshift)
818
+
819
+ @supports_vector
820
+ def _op_generic_ShrN(self, args):
821
+ return self.generic_shift_thing(args, claripy.LShR)
822
+
823
+ @supports_vector
824
+ def _op_generic_SarN(self, args):
825
+ return self.generic_shift_thing(args, operator.rshift)
826
+
827
+ @supports_vector
828
+ def _op_generic_HAdd(self, args):
829
+ """
830
+ Halving add, for some ARM NEON instructions.
831
+ """
832
+ components = []
833
+ for a, b in self.vector_args(args):
834
+ if self.is_signed:
835
+ a = a.sign_extend(self._vector_size)
836
+ b = b.sign_extend(self._vector_size)
837
+ else:
838
+ a = a.zero_extend(self._vector_size)
839
+ b = b.zero_extend(self._vector_size)
840
+ components.append((a + b)[self._vector_size : 1])
841
+ return claripy.Concat(*components)
842
+
843
+ @supports_vector
844
+ def _op_generic_HSub(self, args):
845
+ """
846
+ Halving subtract, for some ARM NEON instructions.
847
+ """
848
+ components = []
849
+ for a, b in self.vector_args(args):
850
+ if self.is_signed:
851
+ a = a.sign_extend(self._vector_size)
852
+ b = b.sign_extend(self._vector_size)
853
+ else:
854
+ a = a.zero_extend(self._vector_size)
855
+ b = b.zero_extend(self._vector_size)
856
+ components.append((a - b)[self._vector_size : 1])
857
+ return claripy.Concat(*components)
858
+
859
+ @supports_vector
860
+ def _op_generic_QAdd(self, args):
861
+ """
862
+ Saturating add.
863
+ """
864
+ components = []
865
+ for a, b in self.vector_args(args):
866
+ top_a = a[self._vector_size - 1]
867
+ top_b = b[self._vector_size - 1]
868
+ res = a + b
869
+ top_r = res[self._vector_size - 1]
870
+ if self.is_signed:
871
+ big_top_r = (~top_r).zero_extend(self._vector_size - 1)
872
+ cap = (claripy.BVV(-1, self._vector_size) // 2) + big_top_r
873
+ cap_cond = ((~(top_a ^ top_b)) & (top_a ^ top_r)) == 1
874
+ else:
875
+ cap = claripy.BVV(-1, self._vector_size)
876
+ cap_cond = claripy.ULT(res, a)
877
+ components.append(claripy.If(cap_cond, cap, res))
878
+ return claripy.Concat(*components)
879
+
880
+ @supports_vector
881
+ def _op_generic_QSub(self, args):
882
+ """
883
+ Saturating subtract.
884
+ """
885
+ components = []
886
+ for a, b in self.vector_args(args):
887
+ top_a = a[self._vector_size - 1]
888
+ top_b = b[self._vector_size - 1]
889
+ res = a - b
890
+ top_r = res[self._vector_size - 1]
891
+ if self.is_signed:
892
+ big_top_r = (~top_r).zero_extend(self._vector_size - 1)
893
+ cap = (claripy.BVV(-1, self._vector_size) // 2) + big_top_r
894
+ cap_cond = ((top_a ^ top_b) & (top_a ^ top_r)) == 1
895
+ else:
896
+ cap = claripy.BVV(0, self._vector_size)
897
+ cap_cond = claripy.UGT(res, a)
898
+ components.append(claripy.If(cap_cond, cap, res))
899
+ return claripy.Concat(*components)
900
+
901
+ def _op_divmod(self, args):
902
+ if self.is_signed:
903
+ quotient = args[0].SDiv(claripy.SignExt(self._from_size - self._to_size, args[1]))
904
+ remainder = args[0].SMod(claripy.SignExt(self._from_size - self._to_size, args[1]))
905
+ quotient_size = self._to_size
906
+ remainder_size = self._to_size
907
+ return claripy.Concat(
908
+ claripy.Extract(remainder_size - 1, 0, remainder), claripy.Extract(quotient_size - 1, 0, quotient)
909
+ )
910
+ quotient = args[0] // claripy.ZeroExt(self._from_size - self._to_size, args[1])
911
+ remainder = args[0] % claripy.ZeroExt(self._from_size - self._to_size, args[1])
912
+ quotient_size = self._to_size
913
+ remainder_size = self._to_size
914
+ return claripy.Concat(
915
+ claripy.Extract(remainder_size - 1, 0, remainder), claripy.Extract(quotient_size - 1, 0, quotient)
916
+ )
917
+
918
+ # pylint:enable=no-self-use,unused-argument
919
+
920
+ # FP!
921
+ def _op_int_to_fp(self, args):
922
+ rm_exists = self._from_size != 32 or self._to_size != 64
923
+ rm = self._translate_rm(args[0] if rm_exists else claripy.BVV(0, 32))
924
+ arg = args[1 if rm_exists else 0]
925
+
926
+ return arg.val_to_fp(claripy.fp.FSort.from_size(self._output_size_bits), signed=self._from_signed != "U", rm=rm)
927
+
928
+ def _op_fp_to_fp(self, args):
929
+ rm_exists = self._from_size != 32 or self._to_size != 64
930
+ rm = self._translate_rm(args[0] if rm_exists else claripy.BVV(0, 32))
931
+ arg = args[1 if rm_exists else 0].raw_to_fp()
932
+
933
+ return arg.raw_to_fp().to_fp(claripy.fp.FSort.from_size(self._output_size_bits), rm=rm)
934
+
935
+ def _op_fp_to_int(self, args):
936
+ if self.name.endswith("_RZ"):
937
+ rm = claripy.fp.RM_TowardsZero
938
+ arg = args[0]
939
+ elif self.name.endswith("_RN"):
940
+ rm = claripy.fp.RM_NearestTiesEven
941
+ arg = args[0]
942
+ elif self.name.endswith("_RM"):
943
+ rm = claripy.fp.RM_TowardsNegativeInf
944
+ arg = args[0]
945
+ elif self.name.endswith("_RP"):
946
+ rm = claripy.fp.RM_TowardsPositiveInf
947
+ arg = args[0]
948
+ else:
949
+ rm = self._translate_rm(args[0])
950
+ arg = args[1]
951
+
952
+ if not self._vector_size:
953
+ return self._compute_fp_to_int(rm, arg.raw_to_fp(), self._to_size)
954
+ vector_args = arg.chop(self._vector_size)
955
+ return claripy.Concat(
956
+ *[self._compute_fp_to_int(rm, varg.raw_to_fp(), self._vector_size) for varg in vector_args]
957
+ )
958
+
959
+ def _compute_fp_to_int(self, rm, arg, to_size):
960
+ if self._to_signed == "S":
961
+ return claripy.fpToSBV(rm, arg, to_size)
962
+ return claripy.fpToUBV(rm, arg, to_size)
963
+
964
+ def _op_fgeneric_Cmp(self, args): # pylint:disable=no-self-use
965
+ # see https://github.com/angr/vex/blob/master/pub/libvex_ir.h#L580
966
+ a, b = args[0].raw_to_fp(), args[1].raw_to_fp()
967
+ return claripy.ite_cases(
968
+ (
969
+ (claripy.fpLT(a, b), claripy.BVV(0x01, 32)),
970
+ (claripy.fpGT(a, b), claripy.BVV(0x00, 32)),
971
+ (claripy.fpEQ(a, b), claripy.BVV(0x40, 32)),
972
+ ),
973
+ claripy.BVV(0x45, 32),
974
+ )
975
+
976
+ @staticmethod
977
+ def _fp_vector_comparison(cmp, a0, a1):
978
+ # for cmpps_eq stuff, i.e. Iop_CmpEQ32Fx4
979
+ return claripy.If(cmp(a0, a1), claripy.BVV(-1, len(a0)), claripy.BVV(0, len(a0)))
980
+
981
+ def _op_fgeneric_CmpEQ(self, a0, a1):
982
+ return self._fp_vector_comparison(claripy.fpEQ, a0, a1)
983
+
984
+ def _op_fgeneric_CmpLE(self, a0, a1):
985
+ return self._fp_vector_comparison(claripy.fpLEQ, a0, a1)
986
+
987
+ def _op_fgeneric_CmpLT(self, a0, a1):
988
+ return self._fp_vector_comparison(claripy.fpLT, a0, a1)
989
+
990
+ def _auto_vectorize(self, f, args, rm=None, rm_passed=False):
991
+ if rm is not None:
992
+ rm = self._translate_rm(rm)
993
+ if rm_passed:
994
+ f = partial(f, rm)
995
+
996
+ if self._vector_size is None:
997
+ return f(args)
998
+
999
+ if self._vector_zero:
1000
+ chopped = [arg[(self._vector_size - 1) : 0].raw_to_fp() for arg in args]
1001
+ result = f(*chopped).raw_to_bv()
1002
+ return claripy.Concat(args[0][(args[0].length - 1) : self._vector_size], result)
1003
+ # I'm changing this behavior because I think this branch was never used otherwise
1004
+ # before it only chopped the first argument but I'm going to make it chop all of them
1005
+ result = []
1006
+ for lane_args in self.vector_args(args):
1007
+ if self._float:
1008
+ # HACK HACK HACK
1009
+ # this is such a weird divergence. why do the fp generics take several args and the int generics
1010
+ # take a list?
1011
+ result.append(f(*lane_args).raw_to_bv())
1012
+ else:
1013
+ result.append(f(lane_args))
1014
+ return claripy.Concat(*result)
1015
+
1016
+ @staticmethod
1017
+ def _fgeneric_minmax(cmp_op, a, b):
1018
+ a, b = a.raw_to_fp(), b.raw_to_fp()
1019
+ return claripy.If(cmp_op(a, b), a, b)
1020
+
1021
+ def _op_fgeneric_Min(self, a, b):
1022
+ return self._fgeneric_minmax(claripy.fpLT, a, b)
1023
+
1024
+ def _op_fgeneric_Max(self, a, b):
1025
+ return self._fgeneric_minmax(claripy.fpGT, a, b)
1026
+
1027
+ def _op_fgeneric_Reinterp(self, args):
1028
+ if self._to_type == "I":
1029
+ return args[0].raw_to_bv()
1030
+ if self._to_type == "F":
1031
+ return args[0].raw_to_fp()
1032
+ raise SimOperationError("unsupported Reinterp _to_type")
1033
+
1034
+ @supports_vector
1035
+ def _op_fgeneric_Round(self, args):
1036
+ if self._vector_size is not None:
1037
+ rm = {
1038
+ "RM": claripy.fp.RM.RM_TowardsNegativeInf,
1039
+ "RP": claripy.fp.RM.RM_TowardsPositiveInf,
1040
+ "RN": claripy.fp.RM.RM_NearestTiesEven,
1041
+ "RZ": claripy.fp.RM.RM_TowardsZero,
1042
+ }[self._rounding_mode]
1043
+
1044
+ rounded = []
1045
+ for i in reversed(range(self._vector_count)):
1046
+ # pylint:disable=no-member
1047
+ left = claripy.Extract((i + 1) * self._vector_size - 1, i * self._vector_size, args[0]).raw_to_fp()
1048
+ rounded.append(claripy.fpToSBV(rm, left, self._vector_size))
1049
+ return claripy.Concat(*rounded)
1050
+ rm = self._translate_rm(args[0])
1051
+ rounded_bv = claripy.fpToSBV(rm, args[1].raw_to_fp(), args[1].length)
1052
+
1053
+ # if exponent is large enough, floating points are always integers.
1054
+ fsort = claripy.fp.FSort.from_size(args[1].length)
1055
+ mantissa_bits = fsort.mantissa - 1 # -1 since FSort has mantissa value 1 higher than the number of bits
1056
+ exp_bits = fsort.exp
1057
+ rounded_fp = claripy.fpToFP(claripy.fp.RM.RM_NearestTiesEven, rounded_bv, fsort)
1058
+ exp_bv = args[1].raw_to_bv()[exp_bits + mantissa_bits - 1 : mantissa_bits]
1059
+ exp_threshold = (2 ** (exp_bits - 1) - 1) + mantissa_bits
1060
+ return claripy.If(exp_bv >= exp_threshold, args[1].raw_to_fp(), rounded_fp)
1061
+
1062
+ def _op_fgeneric_RSqrtEst(self, arg): # pylint:disable=no-self-use
1063
+ return claripy.BVS("RSqrtEst", arg.size())
1064
+
1065
+ def _generic_pack_saturation(self, args, src_size, dst_size, src_signed, dst_signed):
1066
+ """
1067
+ Generic pack with saturation.
1068
+ Split args in chunks of src_size and then pack them into saturated chunks of dst_size bits.
1069
+ Then chunks are concatenated.
1070
+
1071
+ So far as I know plain saturating conversion should only ever have to be performed on vectors.
1072
+ """
1073
+ if src_size <= 0 or dst_size <= 0:
1074
+ raise SimOperationError(f"Can't pack from or to zero or negative size: {self.name}")
1075
+ if src_size < dst_size:
1076
+ raise SimOperationError(f"Can't pack from small size into larger size: {self.name}")
1077
+ result = None
1078
+
1079
+ max_value = 2**dst_size - 1
1080
+ if dst_signed:
1081
+ max_value >>= 1
1082
+ min_value = 0 if not dst_signed or not src_signed else -(2 ** (dst_size - 1))
1083
+
1084
+ gt = claripy.SGT if src_signed else claripy.UGT
1085
+ lt = claripy.SLT if src_signed else claripy.ULT
1086
+
1087
+ for v in args:
1088
+ for src_value in v.chop(src_size):
1089
+ dst_value = claripy.If(
1090
+ gt(src_value, max_value),
1091
+ max_value,
1092
+ claripy.If(lt(src_value, min_value), min_value, src_value[dst_size - 1 : 0]),
1093
+ )
1094
+ result = dst_value if result is None else self._op_concat((result, dst_value))
1095
+ return result
1096
+
1097
+ @supports_vector
1098
+ def _op_generic_QNarrowBin(self, args):
1099
+ return self._generic_pack_saturation(
1100
+ args, self._from_size, self._vector_size, self._from_signed == "S", self._vector_signed == "S"
1101
+ )
1102
+
1103
+ def _op_Iop_64x4toV256(self, args):
1104
+ return self._op_concat(args)
1105
+
1106
+ @staticmethod
1107
+ def _op_Iop_V256to64_0(args):
1108
+ return args[0][63:0]
1109
+
1110
+ @staticmethod
1111
+ def _op_Iop_V256to64_1(args):
1112
+ return args[0][127:64]
1113
+
1114
+ @staticmethod
1115
+ def _op_Iop_V256to64_2(args):
1116
+ return args[0][191:128]
1117
+
1118
+ @staticmethod
1119
+ def _op_Iop_V256to64_3(args):
1120
+ return args[0][255:192]
1121
+
1122
+ @staticmethod
1123
+ def _op_Iop_V256toV128_0(args):
1124
+ return args[0][127:0]
1125
+
1126
+ @staticmethod
1127
+ def _op_Iop_V256toV128_1(args):
1128
+ return args[0][255:128]
1129
+
1130
+ @staticmethod
1131
+ def _op_Iop_MAddF64(args):
1132
+ """
1133
+ Ternary operation.
1134
+ arg0 == 0
1135
+ return arg1 * arg2 + arg3
1136
+
1137
+ :param args: Arguments to this operation.
1138
+ :return: The operation result.
1139
+ """
1140
+
1141
+ return args[1] * args[2] + args[3]
1142
+
1143
+ @supports_vector
1144
+ def _op_generic_MulHi(self, args):
1145
+ """
1146
+ Sign-extend double each lane, multiply each lane, and store only the high half of the result
1147
+ """
1148
+ if self._vector_signed == "S":
1149
+ lanes_0 = [lane.sign_extend(self._vector_size) for lane in args[0].chop(self._vector_size)]
1150
+ lanes_1 = [lane.sign_extend(self._vector_size) for lane in args[1].chop(self._vector_size)]
1151
+ else:
1152
+ lanes_0 = [lane.zero_extend(self._vector_size) for lane in args[0].chop(self._vector_size)]
1153
+ lanes_1 = [lane.zero_extend(self._vector_size) for lane in args[1].chop(self._vector_size)]
1154
+ mulres = [a * b for a, b in zip(lanes_0, lanes_1)]
1155
+ highparts = [x.chop(self._vector_size)[0] for x in mulres]
1156
+ return claripy.Concat(*highparts)
1157
+
1158
+ @supports_vector
1159
+ def _op_generic_Perm(self, args):
1160
+ ordered_0 = list(reversed(args[0].chop(self._vector_size)))
1161
+ ordered_1 = list(reversed(args[1].chop(self._vector_size)))
1162
+ res = []
1163
+ nbits = int(math.log2(self._vector_count))
1164
+ for pword in ordered_1:
1165
+ switch = pword[nbits - 1 : 0]
1166
+ kill = pword[self._vector_size - 1]
1167
+ switched = claripy.ite_cases([(switch == i, v) for i, v in enumerate(ordered_0[:-1])], ordered_0[-1])
1168
+ killed = claripy.If(kill == 1, 0, switched)
1169
+ res.append(killed)
1170
+
1171
+ return claripy.Concat(*reversed(res))
1172
+
1173
+ @supports_vector
1174
+ def _op_generic_CatEvenLanes(self, args):
1175
+ vec_0 = args[0].chop(self._vector_size)
1176
+ vec_1 = args[1].chop(self._vector_size)
1177
+ return claripy.Concat(*(vec_0[1::2] + vec_1[1::2]))
1178
+
1179
+ @supports_vector
1180
+ def _op_generic_CatOddLanes(self, args):
1181
+ vec_0 = args[0].chop(self._vector_size)
1182
+ vec_1 = args[1].chop(self._vector_size)
1183
+ return claripy.Concat(*(vec_0[::2] + vec_1[::2]))
1184
+
1185
+ def _op_generic_Set(self, args):
1186
+ if self._set_side != "lo":
1187
+ raise NotImplementedError(f"Unsupported set_side {self._set_side}")
1188
+ if self._set_size in {32, 64}:
1189
+ if self._set_size != args[1].size():
1190
+ raise SimOperationError(f"Unexpected args[1] size {args[1].size()}")
1191
+ return claripy.Concat(args[0][args[0].size() - 1 : self._set_size], args[1])
1192
+ raise NotImplementedError(f"Unsupported set_size {self._set_size}")
1193
+
1194
+ # def _op_Iop_Yl2xF64(self, args):
1195
+ # rm = self._translate_rm(args[0])
1196
+ # arg2_bv = args[2].raw_to_bv()
1197
+ # # IEEE754 double looks like this:
1198
+ # # SEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
1199
+ # # thus, we extract the exponent bits, re-bias them, then
1200
+ # # (signed) convert them back into an FP value for the integer
1201
+ # # part of the log. then we make the approximation that log2(x)
1202
+ # # = x - 1 for 1.0 <= x < 2.0 to account for the mantissa.
1203
+
1204
+ # # the bias for doubles is 1023
1205
+ # arg2_exp = (arg2_bv[62:52] - 1023).val_to_fp(claripy.fp.FSORT_DOUBLE, signed=True, rm=rm)
1206
+ # arg2_mantissa = claripy.Concat(claripy.BVV(int('001111111111', 2), 12), arg2_bv[51:0]).raw_to_fp()
1207
+ # # this is the hacky approximation:
1208
+ # log2_arg2_mantissa = claripy.fpSub(rm, arg2_mantissa, claripy.FPV(1.0, claripy.fp.FSORT_DOUBLE))
1209
+ # return claripy.fpMul(rm, args[1].raw_to_fp(), claripy.fpAdd(rm, arg2_exp, log2_arg2_mantissa))
1210
+
1211
+ # def _op_Iop_Yl2xp1F64(self, args):
1212
+ # rm_raw, arg1, arg2 = args
1213
+ # rm = self._translate_rm(rm_raw)
1214
+ # arg2_p1 = claripy.fpAdd(rm, arg2.raw_to_fp(), claripy.FPV(1.0, claripy.fp.FSORT_DOUBLE))
1215
+ # return self._op_Iop_Yl2xF64((rm_raw, arg1, arg2_p1))
1216
+
1217
+ @staticmethod
1218
+ def pow(rm, arg, n):
1219
+ out = claripy.FPV(1.0, arg.sort)
1220
+ for _ in range(n):
1221
+ out = claripy.fpMul(rm, arg, out)
1222
+ return out
1223
+
1224
+ # def _op_Iop_SinF64(self, args):
1225
+ # rm, arg = args
1226
+ # rm = self._translate_rm(rm)
1227
+ # rounds = 15
1228
+ # accumulator = claripy.FPV(0.0, arg.sort)
1229
+ # factorialpart = 1.0
1230
+ # for i in range(1, rounds + 1):
1231
+ # term = claripy.fpDiv(rm, self.pow(rm, arg, 2*i - 1), claripy.FPV(float(factorialpart), arg.sort))
1232
+ # factorialpart *= ((i*2) + 1) * (i*2)
1233
+ # if i % 2 == 1:
1234
+ # accumulator = claripy.fpAdd(rm, accumulator, term)
1235
+ # else:
1236
+ # accumulator = claripy.fpSub(rm, accumulator, term)
1237
+
1238
+ # return accumulator
1239
+
1240
+ # def _op_Iop_CosF64(self, args):
1241
+ # rm, arg = args
1242
+ # rm = self._translate_rm(rm)
1243
+ # rounds = 20
1244
+ # accumulator = claripy.FPV(1.0, arg.sort)
1245
+ # factorialpart = 2.0
1246
+ # for i in range(1, rounds + 1):
1247
+ # term = claripy.fpDiv(rm, self.pow(rm, arg, 2*i), claripy.FPV(float(factorialpart), arg.sort))
1248
+ # factorialpart *= (i*2 + 1) * (i*2 + 2)
1249
+ # if i % 2 == 1:
1250
+ # accumulator = claripy.fpSub(rm, accumulator, term)
1251
+ # else:
1252
+ # accumulator = claripy.fpAdd(rm, accumulator, term)
1253
+
1254
+ # return accumulator
1255
+
1256
+
1257
+ #
1258
+ # Op Handler
1259
+ #
1260
+
1261
+
1262
+ def vexop_to_simop(op, extended=True, fp=True):
1263
+ res = operations.get(op)
1264
+ if res is None and extended:
1265
+ attrs = op_attrs(op)
1266
+ if attrs is None:
1267
+ raise UnsupportedIROpError("Operation not implemented")
1268
+ res = SimIROp(op, **attrs)
1269
+ if res is None:
1270
+ raise UnsupportedIROpError("Operation not implemented")
1271
+ if res._float and not fp:
1272
+ raise UnsupportedIROpError("Floating point support disabled")
1273
+ return res
1274
+
1275
+
1276
+ make_operations()