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,1128 @@
1
+ # pylint:disable=missing-class-docstring,too-many-boolean-expressions
2
+ from __future__ import annotations
3
+ from itertools import chain
4
+ from collections.abc import Iterable
5
+ import logging
6
+ from typing import cast
7
+
8
+ from archinfo.types import RegisterOffset
9
+ import claripy
10
+ import angr.ailment as ailment
11
+ from claripy import FSORT_DOUBLE, FSORT_FLOAT
12
+
13
+ from angr.engines.light import SpOffset
14
+ from angr.engines.light.engine import SimEngineNostmtAIL
15
+ from angr.errors import SimEngineError, SimMemoryMissingError
16
+ from angr.calling_conventions import default_cc, SimRegArg, SimTypeBottom
17
+ from angr.storage.memory_mixins.paged_memory.pages.multi_values import MultiValues, mv_is_bv
18
+ from angr.knowledge_plugins.key_definitions.atoms import Atom, Register, Tmp, MemoryLocation
19
+ from angr.knowledge_plugins.key_definitions.constants import OP_BEFORE, OP_AFTER
20
+ from angr.knowledge_plugins.key_definitions.live_definitions import Definition, LiveDefinitions
21
+ from angr.code_location import CodeLocation, ExternalCodeLocation
22
+ from .subject import SubjectType
23
+ from .rd_state import ReachingDefinitionsState
24
+ from .function_handler import FunctionHandler, FunctionCallData
25
+
26
+ l = logging.getLogger(name=__name__)
27
+
28
+
29
+ class SimEngineRDAIL(
30
+ SimEngineNostmtAIL[
31
+ ReachingDefinitionsState, MultiValues[claripy.ast.BV | claripy.ast.FP], None, ReachingDefinitionsState
32
+ ]
33
+ ):
34
+ def __init__(
35
+ self,
36
+ project,
37
+ function_handler: FunctionHandler,
38
+ stack_pointer_tracker=None,
39
+ use_callee_saved_regs_at_return=True,
40
+ bp_as_gpr: bool = False,
41
+ ):
42
+ super().__init__(project)
43
+ self._function_handler = function_handler
44
+ self._visited_blocks = None
45
+ self._dep_graph = None
46
+ self._stack_pointer_tracker = stack_pointer_tracker
47
+ self._use_callee_saved_regs_at_return = use_callee_saved_regs_at_return
48
+ self.bp_as_gpr = bp_as_gpr
49
+
50
+ def _is_top(self, expr):
51
+ """
52
+ MultiValues are not really "top" in the stricter sense. They are just a collection of values,
53
+ some of which might be top
54
+ """
55
+ return False
56
+
57
+ def _top(self, bits) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
58
+ return MultiValues(self.state.top(bits))
59
+
60
+ def process(
61
+ self, state, *, dep_graph=None, visited_blocks=None, block=None, fail_fast=False, whitelist=None, **kwargs
62
+ ):
63
+ self._dep_graph = dep_graph
64
+ self._visited_blocks = visited_blocks
65
+
66
+ try:
67
+ result_state = super().process(state, whitelist=whitelist, block=block)
68
+ except SimEngineError:
69
+ if fail_fast is True:
70
+ raise
71
+ result_state = state
72
+ return result_state
73
+
74
+ def _process_block_end(self, block, stmt_data, whitelist):
75
+ return self.state
76
+
77
+ #
78
+ # Private methods
79
+ #
80
+
81
+ def _expr_bv(self, expr: ailment.expression.Expression) -> MultiValues[claripy.ast.BV]:
82
+ result = self._expr(expr)
83
+ assert mv_is_bv(result)
84
+ return result
85
+
86
+ def _expr_pair(
87
+ self, arg0: ailment.expression.Expression, arg1: ailment.expression.Expression
88
+ ) -> (
89
+ tuple[MultiValues[claripy.ast.BV], MultiValues[claripy.ast.BV]]
90
+ | tuple[MultiValues[claripy.ast.FP], MultiValues[claripy.ast.FP]]
91
+ ):
92
+ r0 = self._expr(arg0)
93
+ r1 = self._expr(arg1)
94
+ assert type(r0) is type(r1)
95
+ return r0, r1 # type: ignore
96
+
97
+ def _external_codeloc(self):
98
+ return ExternalCodeLocation(self.state.codeloc.context)
99
+
100
+ def _set_codeloc(self):
101
+ # TODO do we want a better mechanism to specify context updates?
102
+ new_codeloc = CodeLocation(
103
+ self.block.addr,
104
+ self.stmt_idx,
105
+ ins_addr=self.ins_addr,
106
+ block_idx=self.block.idx,
107
+ context=self.state.codeloc.context,
108
+ )
109
+ self.state.move_codelocs(new_codeloc)
110
+ self.state.analysis.model.at_new_stmt(new_codeloc)
111
+
112
+ #
113
+ # AIL statement handlers
114
+ #
115
+
116
+ def _stmt(self, stmt):
117
+ if self.state.analysis:
118
+ self.state.analysis.stmt_observe(self.stmt_idx, stmt, self.block, self.state, OP_BEFORE)
119
+ self.state.analysis.insn_observe(self.ins_addr, stmt, self.block, self.state, OP_BEFORE)
120
+
121
+ self._set_codeloc()
122
+ super()._stmt(stmt)
123
+
124
+ if self.state.analysis:
125
+ self.state.analysis.stmt_observe(self.stmt_idx, stmt, self.block, self.state, OP_AFTER)
126
+ self.state.analysis.insn_observe(self.ins_addr, stmt, self.block, self.state, OP_AFTER)
127
+
128
+ def _handle_stmt_Assignment(self, stmt):
129
+ src = self._expr(stmt.src)
130
+ dst = stmt.dst
131
+
132
+ if isinstance(dst, ailment.Tmp):
133
+ self.state.kill_and_add_definition(Tmp(dst.tmp_idx, dst.size), src)
134
+ self.tmps[dst.tmp_idx] = src
135
+
136
+ elif isinstance(dst, ailment.Register):
137
+ reg = Register(RegisterOffset(dst.reg_offset), dst.size)
138
+ self.state.kill_and_add_definition(reg, src)
139
+
140
+ if dst.reg_offset == self.arch.sp_offset:
141
+ self.state._sp_adjusted = True
142
+ # TODO: Special logic that frees all definitions above the current stack pointer
143
+ else:
144
+ l.warning("Unsupported type of Assignment dst %s.", type(dst).__name__)
145
+
146
+ def _handle_stmt_CAS(self, stmt: ailment.statement.CAS):
147
+ addr = self._expr(stmt.addr)
148
+ old_lo = stmt.old_lo
149
+ old_hi = stmt.old_hi
150
+
151
+ self._expr(stmt.data_lo)
152
+ if stmt.data_hi is not None:
153
+ self._expr(stmt.data_hi)
154
+ self._expr(stmt.expd_lo)
155
+ if stmt.expd_hi is not None:
156
+ self._expr(stmt.expd_hi)
157
+
158
+ if isinstance(old_lo, ailment.Tmp):
159
+ self.state.kill_and_add_definition(Tmp(old_lo.tmp_idx, old_lo.size), addr)
160
+ self.tmps[old_lo.tmp_idx] = self._top(old_lo.size)
161
+
162
+ if isinstance(old_hi, ailment.Tmp):
163
+ self.state.kill_and_add_definition(Tmp(old_hi.tmp_idx, old_hi.size), addr)
164
+ self.tmps[old_hi.tmp_idx] = self._top(old_hi.size)
165
+
166
+ def _handle_stmt_Store(self, stmt: ailment.Stmt.Store) -> None:
167
+ data = self._expr(stmt.data)
168
+ addr = self._expr_bv(stmt.addr)
169
+ size: int = stmt.size
170
+ if stmt.guard is not None:
171
+ self._expr(stmt.guard)
172
+
173
+ addr_v = addr.one_value()
174
+ if addr_v is not None and not self.state.is_top(addr_v):
175
+ if self.state.is_stack_address(addr_v):
176
+ stack_offset = self.state.get_stack_offset(addr_v)
177
+ if stack_offset is not None:
178
+ memory_location = MemoryLocation(SpOffset(self.arch.bits, stack_offset), size, endness=stmt.endness)
179
+ else:
180
+ memory_location = None
181
+ elif self.state.is_heap_address(addr_v):
182
+ memory_location = None
183
+ else:
184
+ memory_location = MemoryLocation(addr_v.concrete_value, size, endness=stmt.endness)
185
+
186
+ if memory_location is not None:
187
+ self.state.kill_and_add_definition(memory_location, data, endness=stmt.endness)
188
+
189
+ def _handle_stmt_Jump(self, stmt):
190
+ _ = self._expr(stmt.target)
191
+
192
+ def _handle_stmt_ConditionalJump(self, stmt):
193
+ _ = self._expr(stmt.condition) # pylint:disable=unused-variable
194
+ if stmt.true_target is not None:
195
+ _ = self._expr(stmt.true_target) # pylint:disable=unused-variable
196
+ if stmt.false_target is not None:
197
+ _ = self._expr(stmt.false_target) # pylint:disable=unused-variable
198
+
199
+ ip = Register(cast(RegisterOffset, self.arch.ip_offset), self.arch.bytes)
200
+ self.state.kill_definitions(ip)
201
+
202
+ def _handle_stmt_Call(self, stmt: ailment.Stmt.Call):
203
+ data = self._handle_Call_base(stmt, is_expr=False)
204
+ src = data.ret_values
205
+ if src is None:
206
+ return
207
+
208
+ dst = stmt.ret_expr
209
+ if isinstance(dst, ailment.Tmp):
210
+ _, defs = self.state.kill_and_add_definition(Tmp(dst.tmp_idx, dst.size), src, uses=data.ret_values_deps)
211
+ self.tmps[dst.tmp_idx] = src
212
+
213
+ elif isinstance(dst, ailment.Register):
214
+ full_reg_offset, full_reg_size = self.arch.registers[
215
+ self.arch.register_names[RegisterOffset(dst.reg_offset)]
216
+ ]
217
+ if dst.size != full_reg_size:
218
+ # we need to extend the value to overwrite the entire register
219
+ otv = {}
220
+ next_off = 0
221
+ if full_reg_offset < dst.reg_offset:
222
+ otv[0] = {claripy.BVV(0, (dst.reg_offset - full_reg_offset) * 8)}
223
+ next_off = dst.reg_offset - full_reg_offset
224
+ for off, items in src.items():
225
+ otv[next_off + off] = set(items)
226
+ next_off += len(src) // 8
227
+ if next_off < full_reg_size:
228
+ otv[next_off] = {claripy.BVV(0, (full_reg_size - next_off) * 8)}
229
+ src = MultiValues(offset_to_values=otv)
230
+ reg = Register(full_reg_offset, full_reg_size)
231
+ _, defs = self.state.kill_and_add_definition(reg, src, uses=data.ret_values_deps)
232
+ else:
233
+ defs = set()
234
+
235
+ if self.state.analysis:
236
+ self.state.analysis.function_calls[data.callsite_codeloc].ret_defns.update(defs)
237
+
238
+ def _handle_Call_base(self, stmt: ailment.Stmt.Call, is_expr: bool = False) -> FunctionCallData:
239
+ if isinstance(stmt.target, ailment.Expr.Expression):
240
+ target = self._expr(stmt.target) # pylint:disable=unused-variable
241
+ func_name = None
242
+ elif isinstance(stmt.target, str):
243
+ func_name = stmt.target
244
+ target = None
245
+ else:
246
+ target = stmt.target
247
+ func_name = None
248
+
249
+ ip = Register(cast(RegisterOffset, self.arch.ip_offset), self.arch.bytes)
250
+ self.state.kill_definitions(ip)
251
+
252
+ statement = self.block.statements[self.stmt_idx]
253
+ caller_will_handle_single_ret = True
254
+ if hasattr(statement, "dst") and statement.dst != stmt.ret_expr:
255
+ caller_will_handle_single_ret = False
256
+
257
+ data = FunctionCallData(
258
+ self.state.codeloc,
259
+ self._function_handler.make_function_codeloc(
260
+ target, self.state.codeloc, self.state.analysis.model.func_addr
261
+ ),
262
+ target,
263
+ cc=stmt.calling_convention,
264
+ prototype=stmt.prototype,
265
+ name=func_name,
266
+ args_values=[self._expr(arg) for arg in stmt.args] if stmt.args is not None else None,
267
+ redefine_locals=stmt.args is None and not is_expr,
268
+ caller_will_handle_single_ret=caller_will_handle_single_ret,
269
+ ret_atoms={Atom.from_ail_expr(stmt.ret_expr, self.arch)} if stmt.ret_expr is not None else None,
270
+ )
271
+
272
+ self._function_handler.handle_function(self.state, data)
273
+
274
+ if hasattr(stmt, "arg_defs"):
275
+ for arg_def in stmt.arg_defs:
276
+ arg_def: Definition
277
+ if arg_def in self.state.all_definitions:
278
+ self.state.kill_definitions(arg_def.atom)
279
+
280
+ # kill all cc_ops
281
+ if "cc_op" in self.arch.registers:
282
+
283
+ def killreg(name: str):
284
+ offset, size = self.arch.registers[name]
285
+ self.state.kill_definitions(Register(offset, size))
286
+
287
+ killreg("cc_op")
288
+ killreg("cc_dep1")
289
+ killreg("cc_dep2")
290
+ killreg("cc_ndep")
291
+
292
+ return data
293
+
294
+ def _handle_stmt_Return(self, stmt: ailment.Stmt.Return): # pylint:disable=unused-argument
295
+ cc = None
296
+ prototype = None
297
+ if self.state.analysis.subject.type == SubjectType.Function:
298
+ cc = self.state.analysis.subject.content.calling_convention
299
+ prototype = self.state.analysis.subject.content.prototype
300
+ # import ipdb; ipdb.set_trace()
301
+
302
+ if cc is None:
303
+ # fall back to the default calling convention
304
+ cc_cls = default_cc(
305
+ self.project.arch.name,
306
+ platform=self.project.simos.name if self.project.simos is not None else None,
307
+ default=None,
308
+ )
309
+ if cc_cls is None:
310
+ l.warning("Unknown default calling convention for architecture %s.", self.project.arch.name)
311
+ cc = None
312
+ else:
313
+ cc = cc_cls(self.project.arch)
314
+
315
+ if self._use_callee_saved_regs_at_return and cc is not None:
316
+ # handle callee-saved registers: add uses for these registers so that the restoration statements are not
317
+ # considered dead assignments.
318
+ for reg in self.arch.register_list:
319
+ if (
320
+ reg.general_purpose
321
+ and reg.name not in cc.CALLER_SAVED_REGS
322
+ and reg.name not in cc.ARG_REGS
323
+ and reg.vex_offset
324
+ not in {
325
+ self.arch.sp_offset,
326
+ self.arch.bp_offset,
327
+ self.arch.ip_offset,
328
+ }
329
+ and (isinstance(cc.RETURN_VAL, SimRegArg) and reg.name != cc.RETURN_VAL.reg_name)
330
+ ):
331
+ self.state.add_register_use(reg.vex_offset, reg.size)
332
+
333
+ if stmt.ret_exprs:
334
+ # Handle return expressions
335
+ for ret_expr in stmt.ret_exprs:
336
+ self._expr(ret_expr)
337
+ return
338
+
339
+ # No return expressions are available.
340
+ # consume registers that are potentially useful
341
+
342
+ # return value
343
+ if (
344
+ cc is not None
345
+ and prototype is not None
346
+ and prototype.returnty is not None
347
+ and not isinstance(prototype.returnty, SimTypeBottom)
348
+ ):
349
+ ret_val = cc.return_val(prototype.returnty)
350
+ if isinstance(ret_val, SimRegArg):
351
+ if ret_val.clear_entire_reg:
352
+ offset, size = cc.arch.registers[ret_val.reg_name]
353
+ else:
354
+ offset = cc.arch.registers[ret_val.reg_name][0] + ret_val.reg_offset
355
+ size = ret_val.size
356
+ self.state.add_register_use(offset, size)
357
+ else:
358
+ l.error("Cannot handle CC with non-register return value location")
359
+
360
+ # base pointer
361
+ # TODO: Check if the stack base pointer is used as a stack base pointer in this function or not
362
+ self.state.add_register_use(self.project.arch.bp_offset, self.project.arch.bytes)
363
+ # We don't add sp since stack pointers are supposed to be get rid of in AIL. this is definitely a hack though
364
+ # self.state.add_use(Register(self.project.arch.sp_offset, self.project.arch.bits // 8))
365
+
366
+ def _handle_stmt_DirtyStatement(self, stmt: ailment.Stmt.DirtyStatement):
367
+ self._expr(stmt.dirty)
368
+
369
+ #
370
+ # AIL expression handlers
371
+ #
372
+
373
+ def _handle_expr_Tmp(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
374
+ self.state.add_tmp_use(expr.tmp_idx)
375
+
376
+ try:
377
+ return self.tmps[expr.tmp_idx]
378
+ except KeyError:
379
+ return self._top(expr.bits)
380
+
381
+ def _handle_expr_Call(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
382
+ data = self._handle_Call_base(expr, is_expr=True)
383
+ result = data.ret_values
384
+
385
+ if result is None:
386
+ return self._top(expr.bits)
387
+
388
+ # truncate result if needed
389
+ if len(result) > expr.bits:
390
+ assert mv_is_bv(result)
391
+ result = cast(
392
+ MultiValues[claripy.ast.BV | claripy.ast.FP],
393
+ result.extract((len(result) - expr.bits) // 8, expr.bits // 8, "Iend_BE"),
394
+ )
395
+
396
+ if data.ret_values_deps is not None:
397
+ for dep in data.ret_values_deps:
398
+ result = self.state.annotate_mv_with_def(result, dep)
399
+ return result
400
+
401
+ def _handle_expr_Register(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
402
+ self.state: ReachingDefinitionsState
403
+
404
+ reg_offset = expr.reg_offset
405
+ size = expr.size
406
+ # bits = size * 8
407
+
408
+ # Special handling for SP and BP
409
+ if self._stack_pointer_tracker is not None:
410
+ if reg_offset == self.arch.sp_offset:
411
+ sb_offset = self._stack_pointer_tracker.offset_before(self.ins_addr, self.arch.sp_offset)
412
+ if sb_offset is not None:
413
+ return MultiValues(v=self.state._initial_stack_pointer() + sb_offset)
414
+ elif reg_offset == self.arch.bp_offset and not self.bp_as_gpr:
415
+ sb_offset = self._stack_pointer_tracker.offset_before(self.ins_addr, self.arch.bp_offset)
416
+ if sb_offset is not None:
417
+ return MultiValues(v=self.state._initial_stack_pointer() + sb_offset)
418
+
419
+ reg_atom = Register(RegisterOffset(reg_offset), size)
420
+
421
+ # first check if it is ever defined
422
+ try:
423
+ value: MultiValues = self.state.registers.load(reg_offset, size=size)
424
+ except SimMemoryMissingError as ex:
425
+ # the full value does not exist, but we handle partial existence, too
426
+ missing_defs = None
427
+ if ex.missing_size != size:
428
+ existing_values = []
429
+ i = 0
430
+ while i < size:
431
+ try:
432
+ value: MultiValues = self.state.registers.load(reg_offset + i, size=1)
433
+ except SimMemoryMissingError as ex_:
434
+ i += ex_.missing_size
435
+ continue
436
+ i += 1
437
+ existing_values.append(value)
438
+ # extract existing definitions
439
+ for existing_value in existing_values:
440
+ for vs in existing_value.values():
441
+ for v in vs:
442
+ if missing_defs is None:
443
+ missing_defs = self.state.extract_defs(v)
444
+ else:
445
+ missing_defs = chain(missing_defs, self.state.extract_defs(v))
446
+
447
+ if missing_defs is not None:
448
+ self.state.add_register_use_by_defs(missing_defs, expr=expr)
449
+
450
+ top = self.state.top(size * self.state.arch.byte_width)
451
+ # annotate it
452
+ extloc = self._external_codeloc()
453
+ top = self.state.annotate_with_def(top, Definition(reg_atom, extloc))
454
+ value = MultiValues(top)
455
+ # write it back
456
+ self.state.kill_and_add_definition(reg_atom, value, override_codeloc=extloc)
457
+
458
+ # extract Definitions
459
+ defs: Iterable[Definition] | None = None
460
+ for vs in value.values():
461
+ for v in vs:
462
+ defs = self.state.extract_defs(v) if defs is None else chain(defs, self.state.extract_defs(v))
463
+
464
+ if defs is None:
465
+ # define it right away as an external dependency
466
+ self.state.kill_and_add_definition(reg_atom, value, override_codeloc=self._external_codeloc())
467
+ else:
468
+ self.state.add_register_use_by_defs(defs, expr=expr)
469
+
470
+ return value
471
+
472
+ def _handle_expr_Load(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
473
+ addrs = self._expr_bv(expr.addr)
474
+
475
+ size = expr.size
476
+ bits = expr.bits
477
+ if expr.guard is not None:
478
+ assert expr.alt is not None
479
+ self._expr(expr.guard)
480
+ self._expr(expr.alt)
481
+
482
+ # convert addrs from MultiValues to a list of valid addresses
483
+ if addrs.count() == 1:
484
+ addrs_v = next(iter(addrs.values()))
485
+ else:
486
+ top = self.state.top(bits)
487
+ # annotate it
488
+ extloc = self._external_codeloc()
489
+ dummy_atom = MemoryLocation(0, size, endness=expr.endness)
490
+ def_ = Definition(dummy_atom, extloc)
491
+ top = self.state.annotate_with_def(top, def_)
492
+ # add use
493
+ self.state.add_memory_use_by_def(def_, expr=expr)
494
+ return MultiValues(top)
495
+
496
+ result: MultiValues | None = None
497
+ for addr in addrs_v:
498
+ if not isinstance(addr, claripy.ast.Base):
499
+ continue
500
+ if addr.concrete:
501
+ # a concrete address
502
+ concrete_addr: int = addr.concrete_value
503
+ try:
504
+ vs: MultiValues = self.state.memory.load(concrete_addr, size=size, endness=expr.endness)
505
+ defs = set(LiveDefinitions.extract_defs_from_mv(vs))
506
+ except SimMemoryMissingError:
507
+ continue
508
+
509
+ self.state.add_memory_use_by_defs(defs, expr=expr)
510
+ result = result.merge(vs) if result is not None else vs
511
+ elif self.state.is_stack_address(addr):
512
+ stack_offset = self.state.get_stack_offset(addr)
513
+ if stack_offset is not None:
514
+ stack_addr = self.state.live_definitions.stack_offset_to_stack_addr(stack_offset)
515
+ try:
516
+ vs: MultiValues = self.state.stack.load(stack_addr, size=size, endness=expr.endness)
517
+ defs = set(LiveDefinitions.extract_defs_from_mv(vs))
518
+ except SimMemoryMissingError:
519
+ continue
520
+
521
+ # XXX should be add_stack_use_by_defs?
522
+ self.state.add_memory_use_by_defs(defs, expr=expr)
523
+ result = result.merge(vs) if result is not None else vs
524
+ else:
525
+ # XXX does ail not support heap tracking?
526
+ l.debug("Memory address %r undefined or unsupported at pc %#x.", addr, self.ins_addr)
527
+
528
+ if result is None:
529
+ top = self.state.top(bits)
530
+ # TODO: Annotate top with a definition
531
+ result = MultiValues(top)
532
+
533
+ return result
534
+
535
+ def _handle_expr_Convert(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
536
+ to_conv: MultiValues = self._expr(expr.operand)
537
+ bits = expr.to_bits
538
+ size = bits // self.arch.byte_width
539
+
540
+ if (
541
+ to_conv.count() == 1
542
+ and 0 in to_conv
543
+ and expr.from_type == ailment.Expr.Convert.TYPE_INT
544
+ and expr.to_type == ailment.Expr.Convert.TYPE_INT
545
+ ):
546
+ values = to_conv[0]
547
+ else:
548
+ top = self.state.top(expr.to_bits)
549
+ # annotate it
550
+ dummy_atom = MemoryLocation(0, size, endness=self.arch.memory_endness)
551
+ def_ = Definition(dummy_atom, self._external_codeloc())
552
+ top = self.state.annotate_with_def(top, def_)
553
+ # add use
554
+ self.state.add_memory_use_by_def(def_, expr=expr)
555
+ return MultiValues(top)
556
+
557
+ converted = set()
558
+ for v in values:
559
+ if expr.to_bits < expr.from_bits:
560
+ conv = v[expr.to_bits - 1 : 0]
561
+ elif expr.to_bits > expr.from_bits:
562
+ conv = claripy.ZeroExt(expr.to_bits - expr.from_bits, v)
563
+ else:
564
+ conv = v
565
+ converted.add(conv)
566
+
567
+ return MultiValues(offset_to_values={0: converted})
568
+
569
+ def _handle_expr_Reinterpret(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
570
+ _: MultiValues = self._expr(expr.operand)
571
+ bits = expr.to_bits
572
+
573
+ # we currently do not support floating-point operations. therefore, we return TOP directly
574
+ reinterpreted = self.state.top(bits)
575
+
576
+ return MultiValues(reinterpreted)
577
+
578
+ def _handle_unop_Default(self, expr):
579
+ return self._top(expr.bits)
580
+
581
+ _handle_unop_Reference = _handle_unop_Default
582
+ _handle_unop_Ctz = _handle_unop_Default
583
+ _handle_unop_Dereference = _handle_unop_Default
584
+ _handle_unop_GetMSBs = _handle_unop_Default
585
+ _handle_unop_unpack = _handle_unop_Default
586
+ _handle_unop_Sqrt = _handle_unop_Default
587
+ _handle_unop_RSqrtEst = _handle_unop_Default
588
+
589
+ def _handle_expr_ITE(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
590
+ _: MultiValues = self._expr(expr.cond)
591
+ iftrue: MultiValues = self._expr(expr.iftrue)
592
+ _: MultiValues = self._expr(expr.iffalse)
593
+ top = self.state.top(len(iftrue))
594
+ return MultiValues(top)
595
+
596
+ def _handle_unop_Not(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
597
+ operand = self._expr_bv(expr.operand)
598
+ bits = expr.bits
599
+
600
+ operand_v = operand.one_value()
601
+
602
+ if operand_v is not None and operand_v.concrete:
603
+ return MultiValues(~operand_v) # pylint:disable=invalid-unary-operand-type
604
+ return MultiValues(self.state.top(bits))
605
+
606
+ def _handle_unop_Neg(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
607
+ operand: MultiValues = self._expr(expr.operand)
608
+ bits = expr.bits
609
+
610
+ operand_v = operand.one_value()
611
+
612
+ if operand_v is not None and operand_v.concrete:
613
+ return MultiValues(-operand_v) # pylint:disable=invalid-unary-operand-type
614
+ return MultiValues(self.state.top(bits))
615
+
616
+ def _handle_unop_BitwiseNeg(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
617
+ operand = self._expr_bv(expr.operand)
618
+ bits = expr.bits
619
+
620
+ operand_v = operand.one_value()
621
+
622
+ if operand_v is not None and operand_v.concrete:
623
+ return MultiValues(offset_to_values={0: {~operand_v}})
624
+ return MultiValues(offset_to_values={0: {self.state.top(bits)}})
625
+
626
+ def _handle_binop_Add(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
627
+ expr0, expr1 = self._expr_pair(expr.operands[0], expr.operands[1])
628
+ bits = expr.bits
629
+
630
+ r: MultiValues[claripy.ast.BV | claripy.ast.FP] | None = None
631
+ expr0_v = expr0.one_value()
632
+ expr1_v = expr1.one_value()
633
+
634
+ if expr0_v is not None and expr1_v is not None:
635
+ # adding two single values together
636
+ if (expr0_v.concrete or self.state.is_stack_address(expr0_v)) and expr1_v.concrete:
637
+ r = MultiValues(expr0_v + expr1_v) # type: ignore
638
+ elif expr0_v is None and expr1_v is not None:
639
+ # adding a single value to a multivalue
640
+ if (
641
+ expr0.count() == 1
642
+ and 0 in expr0
643
+ and all(v.concrete or self.state.is_stack_address(v) for v in expr0[0])
644
+ ):
645
+ vs = {v + expr1_v for v in expr0[0]} # type: ignore
646
+ r = MultiValues(offset_to_values={0: vs})
647
+ elif expr0_v is not None and expr1_v is None:
648
+ # adding a single value to a multivalue
649
+ if expr1.count() == 1 and 0 in expr1 and all(v.concrete for v in expr1[0]):
650
+ vs = {v + expr0_v for v in expr1[0]} # type: ignore
651
+ r = MultiValues(offset_to_values={0: vs})
652
+ else:
653
+ r = MultiValues(self.state.top(bits))
654
+
655
+ if r is None:
656
+ r = MultiValues(self.state.top(bits))
657
+
658
+ return r
659
+
660
+ def _handle_binop_Sub(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
661
+ expr0, expr1 = self._expr_pair(expr.operands[0], expr.operands[1])
662
+ bits = expr.bits
663
+
664
+ r: MultiValues[claripy.ast.BV | claripy.ast.FP] | None = None
665
+ expr0_v = expr0.one_value()
666
+ expr1_v = expr1.one_value()
667
+
668
+ if expr0_v is not None and expr1_v is not None:
669
+ if (expr0_v.concrete or self.state.is_stack_address(expr0_v)) and expr1_v.concrete:
670
+ r = MultiValues(expr0_v - expr1_v) # type: ignore
671
+ elif expr0_v is None and expr1_v is not None:
672
+ # subtracting a single value from a multivalue
673
+ if (
674
+ expr0.count() == 1
675
+ and 0 in expr0
676
+ and all(v.concrete or self.state.is_stack_address(v) for v in expr0[0])
677
+ ):
678
+ vs = {v - expr1_v for v in expr0[0]} # type: ignore
679
+ r = MultiValues(offset_to_values={0: vs})
680
+ elif expr0_v is not None and expr1_v is None:
681
+ # subtracting a single value from a multivalue
682
+ if expr1.count() == 1 and 0 in expr1 and all(v.concrete for v in expr1[0]):
683
+ vs = {expr0_v - v for v in expr1[0]} # type: ignore
684
+ r = MultiValues(offset_to_values={0: vs})
685
+ else:
686
+ r = MultiValues(self.state.top(bits))
687
+
688
+ if r is None:
689
+ r = MultiValues(self.state.top(bits))
690
+
691
+ return r
692
+
693
+ def _handle_binop_Default(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
694
+ arg0, arg1 = expr.operands
695
+
696
+ self._expr(arg0)
697
+ self._expr(arg1)
698
+ bits = expr.bits
699
+
700
+ return MultiValues(self.state.top(bits))
701
+
702
+ _handle_binop_AddV = _handle_binop_Add
703
+ _handle_binop_Div = _handle_binop_Default
704
+ _handle_binop_MulV = _handle_binop_Default
705
+ _handle_binop_MulHiV = _handle_binop_Default
706
+ _handle_binop_Mod = _handle_binop_Default
707
+ _handle_binop_AddF = _handle_binop_Default
708
+ _handle_binop_DivF = _handle_binop_Default
709
+ _handle_binop_DivV = _handle_binop_Default
710
+ _handle_binop_MulF = _handle_binop_Default
711
+ _handle_binop_SubF = _handle_binop_Default
712
+ _handle_binop_SubV = _handle_binop_Default
713
+ _handle_binop_InterleaveLOV = _handle_binop_Default
714
+ _handle_binop_InterleaveHIV = _handle_binop_Default
715
+ _handle_binop_CasCmpEQ = _handle_binop_Default
716
+ _handle_binop_CasCmpNE = _handle_binop_Default
717
+ _handle_binop_SarNV = _handle_binop_Default
718
+ _handle_binop_ShrNV = _handle_binop_Default
719
+ _handle_binop_ShlNV = _handle_binop_Default
720
+ _handle_binop_CmpEQV = _handle_binop_Default
721
+ _handle_binop_CmpNEV = _handle_binop_Default
722
+ _handle_binop_CmpGEV = _handle_binop_Default
723
+ _handle_binop_CmpGTV = _handle_binop_Default
724
+ _handle_binop_CmpLEV = _handle_binop_Default
725
+ _handle_binop_CmpLTV = _handle_binop_Default
726
+ _handle_binop_MinV = _handle_binop_Default
727
+ _handle_binop_MaxV = _handle_binop_Default
728
+ _handle_binop_QAddV = _handle_binop_Default
729
+ _handle_binop_QNarrowBinV = _handle_binop_Default
730
+ _handle_binop_PermV = _handle_binop_Default
731
+ _handle_binop_Set = _handle_binop_Default
732
+
733
+ def _handle_binop_Mul(self, expr):
734
+ expr0 = self._expr(expr.operands[0])
735
+ expr1 = self._expr(expr.operands[1])
736
+ bits = expr.bits
737
+
738
+ expr0_v = expr0.one_value()
739
+ expr1_v = expr1.one_value()
740
+
741
+ if expr0_v is not None and expr1_v is not None and expr0_v.concrete and expr1_v.concrete:
742
+ r = MultiValues(offset_to_values={0: {expr0_v * expr1_v}}) # type: ignore
743
+ else:
744
+ r = MultiValues(offset_to_values={0: {self.state.top(bits)}})
745
+
746
+ return r
747
+
748
+ def _handle_binop_Mull(self, expr):
749
+ expr0 = self._expr(expr.operands[0])
750
+ expr1 = self._expr(expr.operands[1])
751
+ bits = expr.bits
752
+
753
+ expr0_v = expr0.one_value()
754
+ expr1_v = expr1.one_value()
755
+
756
+ if expr0_v is not None and expr1_v is not None and expr0_v.concrete and expr1_v.concrete:
757
+ xt = expr.bits // 2
758
+ if expr.signed:
759
+ r = MultiValues(
760
+ offset_to_values={0: {expr0_v.sign_extend(xt) * expr1_v.sign_extend(xt)}} # type: ignore
761
+ )
762
+ else:
763
+ r = MultiValues(
764
+ offset_to_values={0: {expr0_v.zero_extend(xt) * expr1_v.zero_extend(xt)}} # type: ignore
765
+ )
766
+ else:
767
+ r = MultiValues(offset_to_values={0: {self.state.top(bits)}})
768
+
769
+ return r
770
+
771
+ def _handle_binop_Shr(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
772
+ expr0 = self._expr_bv(expr.operands[0])
773
+ expr1 = self._expr_bv(expr.operands[1])
774
+ bits = expr.bits
775
+
776
+ r: MultiValues[claripy.ast.BV | claripy.ast.FP] | None = None
777
+ expr0_v = expr0.one_value()
778
+ expr1_v = expr1.one_value()
779
+
780
+ if expr0_v is not None and expr1_v is not None:
781
+ if expr0_v.concrete and expr1_v.concrete:
782
+ r = MultiValues(claripy.LShR(expr0_v, expr1_v.concrete_value))
783
+ elif expr0_v is None and expr1_v is not None:
784
+ # each value in expr0 >> expr1_v
785
+ if expr0.count() == 1 and 0 in expr0 and all(v.concrete for v in expr0[0]) and expr1_v.concrete:
786
+ vs = {
787
+ (claripy.LShR(v, expr1_v.concrete_value) if v.concrete else self.state.top(bits)) for v in expr0[0]
788
+ }
789
+ r = MultiValues(offset_to_values={0: vs})
790
+ elif expr0_v is not None and expr1_v is None:
791
+ # expr0_v >> each value in expr1
792
+ if expr1.count() == 1 and 0 in expr1 and all(v.concrete for v in expr1[0]):
793
+ vs = {
794
+ (claripy.LShR(expr0_v, v.concrete_value) if v.concrete else self.state.top(bits)) for v in expr1[0]
795
+ }
796
+ r = MultiValues(offset_to_values={0: vs})
797
+ else:
798
+ r = MultiValues(self.state.top(bits))
799
+
800
+ if r is None:
801
+ r = MultiValues(self.state.top(bits))
802
+
803
+ return r
804
+
805
+ def _handle_binop_Sar(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
806
+ expr0 = self._expr_bv(expr.operands[0])
807
+ expr1 = self._expr_bv(expr.operands[1])
808
+ bits = expr.bits
809
+
810
+ r: MultiValues[claripy.ast.BV | claripy.ast.FP] | None = None
811
+ expr0_v = expr0.one_value()
812
+ expr1_v = expr1.one_value()
813
+
814
+ if expr0_v is not None and expr1_v is not None:
815
+ if expr0_v.concrete and expr1_v.concrete:
816
+ r = MultiValues(expr0_v >> expr1_v.concrete_value)
817
+ elif expr0_v is None and expr1_v is not None:
818
+ # each value in expr0 >> expr1_v
819
+ if expr0.count() == 1 and 0 in expr0 and all(v.concrete for v in expr0[0]) and expr1_v.concrete:
820
+ vs = {
821
+ (claripy.LShR(v, expr1_v.concrete_value) if v.concrete else self.state.top(bits)) for v in expr0[0]
822
+ }
823
+ r = MultiValues(offset_to_values={0: vs})
824
+ elif expr0_v is not None and expr1_v is None:
825
+ # expr0_v >> each value in expr1
826
+ if expr1.count() == 1 and 0 in expr1 and all(v.concrete for v in expr1[0]):
827
+ vs = {
828
+ (claripy.LShR(expr0_v, v.concrete_value) if v.concrete else self.state.top(bits)) for v in expr1[0]
829
+ }
830
+ r = MultiValues(offset_to_values={0: vs})
831
+ else:
832
+ r = MultiValues(self.state.top(bits))
833
+
834
+ if r is None:
835
+ r = MultiValues(self.state.top(bits))
836
+
837
+ return r
838
+
839
+ def _handle_binop_Shl(self, expr):
840
+ expr0 = self._expr_bv(expr.operands[0])
841
+ expr1 = self._expr_bv(expr.operands[1])
842
+ bits = expr.bits
843
+
844
+ r: MultiValues[claripy.ast.BV | claripy.ast.FP] | None = None
845
+ expr0_v = expr0.one_value()
846
+ expr1_v = expr1.one_value()
847
+
848
+ if expr0_v is not None and expr1_v is not None:
849
+ if expr0_v.concrete and expr1_v.concrete:
850
+ r = MultiValues(expr0_v << expr1_v.concrete_value)
851
+ elif expr0_v is None and expr1_v is not None:
852
+ # each value in expr0 << expr1_v
853
+ if expr0.count() == 1 and 0 in expr0 and all(v.concrete for v in expr0[0]) and expr1_v.concrete:
854
+ vs = {((v << expr1_v.concrete_value) if v.concrete else self.state.top(bits)) for v in expr0[0]}
855
+ r = MultiValues(offset_to_values={0: vs})
856
+ elif expr0_v is not None and expr1_v is None:
857
+ # expr0_v >> each value in expr1
858
+ if expr1.count() == 1 and 0 in expr1 and all(v.concrete for v in expr1[0]):
859
+ vs = {((expr0_v << v.concrete_value) if v.concrete else self.state.top(bits)) for v in expr1[0]}
860
+ r = MultiValues(offset_to_values={0: vs})
861
+ else:
862
+ r = MultiValues(self.state.top(bits))
863
+
864
+ if r is None:
865
+ r = MultiValues(self.state.top(bits))
866
+
867
+ return r
868
+
869
+ _handle_binop_Rol = _handle_binop_Default
870
+ _handle_binop_Ror = _handle_binop_Default
871
+
872
+ def _handle_binop_And(self, expr):
873
+ expr0 = self._expr_bv(expr.operands[0])
874
+ expr1 = self._expr_bv(expr.operands[1])
875
+ bits = expr.bits
876
+
877
+ r: MultiValues[claripy.ast.BV | claripy.ast.FP] | None = None
878
+ expr0_v = expr0.one_value()
879
+ expr1_v = expr1.one_value()
880
+
881
+ if expr0_v is not None and expr1_v is not None:
882
+ # special handling for stack alignment
883
+ if self.state.is_stack_address(expr0_v):
884
+ r = MultiValues(expr0_v)
885
+ else:
886
+ if expr0_v.concrete and expr1_v.concrete:
887
+ r = MultiValues(expr0_v & expr1_v)
888
+ elif expr0_v is None and expr1_v is not None:
889
+ # expr1_v & each value in expr0
890
+ if expr0.count() == 1 and 0 in expr0 and all(v.concrete for v in expr0[0]):
891
+ r = MultiValues(offset_to_values={0: {v & expr1_v for v in expr0[0]}})
892
+ elif expr0_v is not None and expr1_v is None:
893
+ # expr0_v & each value in expr1
894
+ if expr1.count() == 1 and 0 in expr1 and all(v.concrete for v in expr1[0]):
895
+ r = MultiValues(offset_to_values={0: {expr0_v & v for v in expr1[0]}})
896
+ else:
897
+ r = MultiValues(self.state.top(bits))
898
+
899
+ if r is None:
900
+ r = MultiValues(self.state.top(bits))
901
+
902
+ return r
903
+
904
+ def _handle_binop_Or(self, expr):
905
+ expr0: MultiValues = self._expr(expr.operands[0])
906
+ expr1: MultiValues = self._expr(expr.operands[1])
907
+ bits = expr.bits
908
+
909
+ r: MultiValues[claripy.ast.BV | claripy.ast.FP] | None = None
910
+ expr0_v = expr0.one_value()
911
+ expr1_v = expr1.one_value()
912
+
913
+ if expr0_v is not None and expr1_v is not None:
914
+ if expr0_v.concrete and expr1_v.concrete:
915
+ r = MultiValues(expr0_v | expr1_v)
916
+ elif expr0_v is None and expr1_v is not None:
917
+ # expr1_v | each value in expr0
918
+ if expr0.count() == 1 and 0 in expr0 and all(v.concrete for v in expr0[0]):
919
+ vs = {v | expr1_v for v in expr0[0]}
920
+ r = MultiValues(offset_to_values={0: vs})
921
+ elif expr0_v is not None and expr1_v is None:
922
+ # expr0_v | each value in expr1
923
+ if expr1.count() == 1 and 0 in expr1 and all(v.concrete for v in expr1[0]):
924
+ vs = {expr0_v | v for v in expr1[0]}
925
+ r = MultiValues(offset_to_values={0: vs})
926
+ else:
927
+ r = MultiValues(self.state.top(bits))
928
+
929
+ if r is None:
930
+ r = MultiValues(self.state.top(bits))
931
+
932
+ return r
933
+
934
+ def _handle_binop_LogicalAnd(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
935
+ expr0: MultiValues = self._expr(expr.operands[0])
936
+ expr1: MultiValues = self._expr(expr.operands[1])
937
+ bits = expr.bits
938
+
939
+ expr0_v = expr0.one_value()
940
+ expr1_v = expr1.one_value()
941
+
942
+ # TODO: can maybe be smarter about this. if we can determine that expr0 is never falsey, we can just return it,
943
+ # TODO: or if it's always falsey we can return expr1 (did I get this backwards?)
944
+ if expr0_v is None or expr1_v is None:
945
+ return MultiValues(self.state.top(bits))
946
+
947
+ return MultiValues(claripy.If(expr0_v == 0, expr0_v, expr1_v))
948
+
949
+ def _handle_binop_LogicalOr(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
950
+ expr0: MultiValues = self._expr(expr.operands[0])
951
+ expr1: MultiValues = self._expr(expr.operands[1])
952
+ bits = expr.bits
953
+
954
+ expr0_v = expr0.one_value()
955
+ expr1_v = expr1.one_value()
956
+
957
+ if expr0_v is None or expr1_v is None:
958
+ return MultiValues(self.state.top(bits))
959
+
960
+ return MultiValues(claripy.If(expr0_v != 0, expr0_v, expr1_v))
961
+
962
+ def _handle_binop_LogicalXor(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
963
+ expr0: MultiValues = self._expr(expr.operands[0])
964
+ expr1: MultiValues = self._expr(expr.operands[1])
965
+ bits = expr.bits
966
+
967
+ expr0_v = expr0.one_value()
968
+ expr1_v = expr1.one_value()
969
+
970
+ if expr0_v is None or expr1_v is None:
971
+ return MultiValues(self.state.top(bits))
972
+
973
+ return MultiValues(claripy.If(expr0_v != 0, expr1_v, expr0_v))
974
+
975
+ def _handle_binop_Xor(self, expr):
976
+ expr0: MultiValues = self._expr(expr.operands[0])
977
+ expr1: MultiValues = self._expr(expr.operands[1])
978
+ bits = expr.bits
979
+
980
+ r: MultiValues[claripy.ast.BV | claripy.ast.FP] | None = None
981
+ expr0_v = expr0.one_value()
982
+ expr1_v = expr1.one_value()
983
+
984
+ if expr0_v is not None and expr1_v is not None:
985
+ if expr0_v.concrete and expr1_v.concrete:
986
+ r = MultiValues(expr0_v ^ expr1_v)
987
+ elif expr0_v is None and expr1_v is not None:
988
+ # expr1_v ^ each value in expr0
989
+ if expr0.count() == 1 and 0 in expr0 and all(v.concrete for v in expr0[0]):
990
+ vs = {v ^ expr1_v for v in expr0[0]}
991
+ r = MultiValues(offset_to_values={0: vs})
992
+ elif expr0_v is not None and expr1_v is None:
993
+ # expr0_v ^ each value in expr1
994
+ if expr1.count() == 1 and 0 in expr1 and all(v.concrete for v in expr1[0]):
995
+ vs = {expr0_v ^ v for v in expr1[0]}
996
+ r = MultiValues(offset_to_values={0: vs})
997
+ else:
998
+ r = MultiValues(self.state.top(bits))
999
+
1000
+ if r is None:
1001
+ r = MultiValues(self.state.top(bits))
1002
+
1003
+ return r
1004
+
1005
+ def _handle_binop_Carry(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
1006
+ _ = self._expr(expr.operands[0])
1007
+ _ = self._expr(expr.operands[1])
1008
+ bits = expr.bits
1009
+ return MultiValues(self.state.top(bits))
1010
+
1011
+ def _handle_binop_SCarry(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
1012
+ _ = self._expr(expr.operands[0])
1013
+ _ = self._expr(expr.operands[1])
1014
+ bits = expr.bits
1015
+ return MultiValues(self.state.top(bits))
1016
+
1017
+ def _handle_binop_SBorrow(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
1018
+ _ = self._expr(expr.operands[0])
1019
+ _ = self._expr(expr.operands[1])
1020
+ bits = expr.bits
1021
+ return MultiValues(self.state.top(bits))
1022
+
1023
+ def _handle_binop_Concat(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
1024
+ expr0 = self._expr_bv(expr.operands[0])
1025
+ expr1 = self._expr_bv(expr.operands[1])
1026
+ bits = expr.bits
1027
+
1028
+ r: MultiValues[claripy.ast.BV | claripy.ast.FP] | None = None
1029
+ expr0_v = expr0.one_value()
1030
+ expr1_v = expr1.one_value()
1031
+
1032
+ if expr0_v is not None and expr1_v is not None:
1033
+ if expr0_v.concrete and expr1_v.concrete:
1034
+ r = MultiValues(claripy.Concat(expr0_v, expr1_v))
1035
+ elif expr0_v is None and expr1_v is not None:
1036
+ # concatenate expr1_v with each value in expr0
1037
+ if expr0.count() == 1 and 0 in expr0 and all(v.concrete for v in expr0[0]):
1038
+ r = MultiValues(offset_to_values={0: {claripy.Concat(v, expr1_v) for v in expr0[0]}})
1039
+ elif expr0_v is not None and expr1_v is None:
1040
+ # concatenate expr0_v with each value in expr1
1041
+ if expr1.count() == 1 and 0 in expr1 and all(v.concrete for v in expr1[0]):
1042
+ r = MultiValues(offset_to_values={0: {claripy.Concat(expr0_v, v) for v in expr1[0]}})
1043
+ else:
1044
+ r = MultiValues(self.state.top(bits))
1045
+
1046
+ if r is None:
1047
+ r = MultiValues(self.state.top(bits))
1048
+
1049
+ return r
1050
+
1051
+ def _handle_binop_Cmp(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
1052
+ op0 = self._expr(expr.operands[0])
1053
+ op1 = self._expr(expr.operands[1])
1054
+
1055
+ if op0 is None:
1056
+ _ = expr.operands[0]
1057
+ if op1 is None:
1058
+ _ = expr.operands[1]
1059
+
1060
+ top = self.state.top(expr.bits)
1061
+ return MultiValues(top)
1062
+
1063
+ _handle_binop_CmpF = _handle_binop_Cmp
1064
+ _handle_binop_CmpEQ = _handle_binop_Cmp
1065
+ _handle_binop_CmpNE = _handle_binop_Cmp
1066
+ _handle_binop_CmpLE = _handle_binop_Cmp
1067
+ _handle_binop_CmpLEs = _handle_binop_Cmp
1068
+ _handle_binop_CmpLT = _handle_binop_Cmp
1069
+ _handle_binop_CmpLTs = _handle_binop_Cmp
1070
+ _handle_binop_CmpGE = _handle_binop_Cmp
1071
+ _handle_binop_CmpGEs = _handle_binop_Cmp
1072
+ _handle_binop_CmpGT = _handle_binop_Cmp
1073
+ _handle_binop_CmpGTs = _handle_binop_Cmp
1074
+ _handle_binop_CmpORD = _handle_binop_Cmp
1075
+
1076
+ def _handle_binop_ExpCmpNE(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
1077
+ self._expr(expr.operands[0])
1078
+ self._expr(expr.operands[1])
1079
+
1080
+ return MultiValues(self.state.top(expr.bits))
1081
+
1082
+ def _handle_unop_Clz(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
1083
+ self._expr(expr.operand)
1084
+ return MultiValues(self.state.top(expr.bits))
1085
+
1086
+ def _handle_expr_Const(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
1087
+ self.state.mark_const(expr.value, expr.size)
1088
+ if isinstance(expr.value, float):
1089
+ sort = None
1090
+ if expr.bits == 64:
1091
+ sort = FSORT_DOUBLE
1092
+ elif expr.bits == 32:
1093
+ sort = FSORT_FLOAT
1094
+ return MultiValues(claripy.FPV(expr.value, sort))
1095
+ return MultiValues(claripy.BVV(expr.value, expr.bits))
1096
+
1097
+ def _handle_expr_StackBaseOffset(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
1098
+ stack_addr = self.state.stack_address(expr.offset)
1099
+ return MultiValues(stack_addr)
1100
+
1101
+ def _ail_handle_VEXCCallExpression(self, expr: ailment.Expr.VEXCCallExpression) -> MultiValues:
1102
+ for operand in expr.operands:
1103
+ self._expr(operand)
1104
+
1105
+ top = self.state.top(expr.bits)
1106
+ return MultiValues(top)
1107
+
1108
+ def _handle_expr_Phi(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
1109
+ return self._top(expr.bits) # TODO
1110
+
1111
+ def _handle_expr_VEXCCallExpression(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
1112
+ return self._top(expr.bits) # TODO
1113
+
1114
+ def _handle_expr_VirtualVariable(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
1115
+ return self._top(expr.bits) # TODO
1116
+
1117
+ def _handle_expr_DirtyExpression(self, expr) -> MultiValues[claripy.ast.BV | claripy.ast.FP]:
1118
+ if isinstance(expr.dirty_expr, ailment.expression.VEXCCallExpression):
1119
+ for operand in expr.dirty_expr.operands:
1120
+ self._expr(operand)
1121
+
1122
+ return MultiValues(self.state.top(expr.bits))
1123
+
1124
+ def _handle_expr_BasePointerOffset(self, expr):
1125
+ return self._top(expr.bits)
1126
+
1127
+ def _handle_expr_MultiStatementExpression(self, expr):
1128
+ return self._top(expr.bits)