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
angr/storage/file.py ADDED
@@ -0,0 +1,1210 @@
1
+ from __future__ import annotations
2
+ import logging
3
+ import itertools
4
+
5
+ import claripy
6
+
7
+ from angr import sim_options
8
+ from angr.errors import SimMergeError, SimFileError, SimSolverError
9
+ from angr.state_plugins.plugin import SimStatePlugin
10
+ from angr.state_plugins.sim_action_object import SimActionObject
11
+ from .memory_mixins import DefaultMemory
12
+
13
+ l = logging.getLogger(name=__name__)
14
+
15
+ file_counter = itertools.count()
16
+ dialogue_counter = itertools.count()
17
+
18
+
19
+ class Flags: # pylint: disable=W0232,
20
+ O_RDONLY = 0
21
+ O_WRONLY = 1
22
+ O_RDWR = 2
23
+ O_ACCMODE = 3 # bitmask for read/write mode
24
+ O_APPEND = 0o2000
25
+ O_ASYNC = 0o20000
26
+ O_CLOEXEC = 0o2000000
27
+ # TODO mode for this flag
28
+ O_CREAT = 0o100
29
+ O_DIRECT = 0o40000
30
+ O_DIRECTORY = 0o200000
31
+ O_DSYNC = 0o10000
32
+ O_EXCL = 0o200
33
+ O_LARGEFILE = 0o100000
34
+ O_NOATIME = 0o1000000
35
+ O_NOCTTY = 0o400
36
+ O_NOFOLLOW = 0o400000
37
+ O_NONBLOCK = 0o4000
38
+ O_NDELAY = 0o4000
39
+ O_PATH = 0o10000000
40
+ O_SYNC = 0o4010000
41
+ O_TMPFILE = 0o20200000
42
+ O_TRUNC = 0o1000
43
+
44
+
45
+ def _deps_unpack(a):
46
+ if isinstance(a, SimActionObject):
47
+ return a.ast, a.reg_deps, a.tmp_deps
48
+ return a, None, None
49
+
50
+
51
+ class SimFileBase(SimStatePlugin):
52
+ """
53
+ SimFiles are the storage mechanisms used by SimFileDescriptors.
54
+
55
+ Different types of SimFiles can have drastically different interfaces, and as a result there's not much that can be
56
+ specified on this base class. All the read and write methods take a ``pos`` argument, which may have different
57
+ semantics per-class. ``0`` will always be a valid position to use, though, and the next position you should use
58
+ is part of the return tuple.
59
+
60
+ Some simfiles are "streams", meaning that the position that reads come from is determined not by the position you
61
+ pass in (it will in fact be ignored), but by an internal variable. This is stored as ``.pos`` if you care to read
62
+ it. Don't write to it. The same lack-of-semantics applies to this field as well.
63
+
64
+ :ivar name: The name of the file. Purely for cosmetic purposes
65
+ :ivar ident: The identifier of the file, typically autogenerated from the name and a nonce. Purely for cosmetic
66
+ purposes, but does appear in symbolic values autogenerated in the file.
67
+ :ivar seekable: Bool indicating whether seek operations on this file should succeed. If this is True, then ``pos``
68
+ must be a number of bytes from the start of the file.
69
+ :ivar writable: Bool indicating whether writing to this file is allowed.
70
+ :ivar pos: If the file is a stream, this will be the current position. Otherwise, None.
71
+ :ivar concrete: Whether or not this file contains mostly concrete data. Will be used by some SimProcedures to
72
+ choose how to handle variable-length operations like fgets.
73
+ :ivar file_exists:
74
+ Set to False, if file does not exists, set to a claripy Bool if unknown, default True.
75
+ """
76
+
77
+ seekable = False
78
+ pos = None
79
+
80
+ def __init__(self, name=None, writable=True, ident=None, concrete=False, file_exists=True, **kwargs):
81
+ self.name = name
82
+ self.ident = ident
83
+ self.writable = writable
84
+ self.concrete = concrete
85
+ self.file_exists = file_exists
86
+
87
+ if ident is None:
88
+ self.ident = self.make_ident(self.name)
89
+
90
+ if "memory_id" in kwargs:
91
+ kwargs["memory_id"] = self.ident
92
+ super().__init__(**kwargs)
93
+
94
+ @staticmethod
95
+ def make_ident(name):
96
+ if name is None:
97
+ return "file"
98
+
99
+ if type(name) is str:
100
+ name = name.encode()
101
+
102
+ def generate():
103
+ consecutive_bad = 0
104
+ for ch in name:
105
+ if 0x20 <= ch <= 0x7E:
106
+ consecutive_bad = 0
107
+ yield chr(ch)
108
+ elif consecutive_bad < 3:
109
+ consecutive_bad += 1
110
+ yield "?"
111
+
112
+ nice_name = "".join(generate())
113
+ return f"file_{next(file_counter)}_{nice_name}"
114
+
115
+ def concretize(self, **kwargs):
116
+ """
117
+ Return a concretization of the contents of the file. The type of the return value of this method will vary
118
+ depending on which kind of SimFile you're using.
119
+ """
120
+ raise NotImplementedError
121
+
122
+ def read(self, pos, size, **kwargs):
123
+ """
124
+ Read some data from the file.
125
+
126
+ :param pos: The offset in the file to read from.
127
+ :param size: The size to read. May be symbolic.
128
+ :return: A tuple of the data read (a bitvector of the length that is the maximum length of the read),
129
+ the actual size of the read, and the new file position pointer.
130
+ """
131
+ raise NotImplementedError
132
+
133
+ def write(self, pos, data, size=None, **kwargs):
134
+ """
135
+ Write some data to the file.
136
+
137
+ :param pos: The offset in the file to write to. May be ignored if the file is a stream or device.
138
+ :param data: The data to write as a bitvector
139
+ :param size: The optional size of the data to write. If not provided will default to the length of the data.
140
+ Must be constrained to less than or equal to the size of the data.
141
+ :return: The new file position pointer.
142
+ """
143
+ raise NotImplementedError
144
+
145
+ @property
146
+ def size(self):
147
+ """
148
+ The number of data bytes stored by the file at present. May be a symbolic value.
149
+ """
150
+ raise NotImplementedError
151
+
152
+ @DefaultMemory.memo
153
+ def copy(self, memo):
154
+ o = super().copy(memo)
155
+ o.ident = self.ident
156
+ o.name = self.name
157
+ o.ident = self.ident
158
+ o.writable = self.writable
159
+ o.concrete = self.concrete
160
+ o.file_exists = self.file_exists
161
+ return o
162
+
163
+
164
+ class SimFile(SimFileBase, DefaultMemory): # TODO: pick a better base class omg
165
+ """
166
+ The normal SimFile is meant to model files on disk. It subclasses SimSymbolicMemory so loads and stores to/from
167
+ it are very simple.
168
+
169
+ :param name: The name of the file
170
+ :param content: Optional initial content for the file as a string or bitvector
171
+ :param size: Optional size of the file. If content is not specified, it defaults to zero
172
+ :param has_end: Whether the size boundary is treated as the end of the file or a frontier at which new content
173
+ will be generated. If unspecified, will pick its value based on options.FILES_HAVE_EOF. Another
174
+ caveat is that if the size is also unspecified this value will default to False.
175
+ :param seekable: Optional bool indicating whether seek operations on this file should succeed, default True.
176
+ :param writable: Whether writing to this file is allowed
177
+ :param concrete: Whether or not this file contains mostly concrete data. Will be used by some SimProcedures to
178
+ choose how to handle variable-length operations like fgets.
179
+
180
+ :ivar has_end: Whether this file has an EOF
181
+ """
182
+
183
+ def __init__(
184
+ self,
185
+ name=None,
186
+ content=None,
187
+ size=None,
188
+ has_end=None,
189
+ seekable=True,
190
+ writable=True,
191
+ ident=None,
192
+ concrete=None,
193
+ **kwargs,
194
+ ):
195
+ kwargs["memory_id"] = kwargs.get("memory_id", "file")
196
+ super().__init__(name=name, writable=writable, ident=ident, **kwargs)
197
+ self._size = size
198
+ self.has_end = has_end
199
+ self.seekable = seekable
200
+
201
+ # this is hacky because we need to work around not having a state yet
202
+ content = _deps_unpack(content)[0]
203
+ if type(content) is bytes:
204
+ if concrete is None:
205
+ concrete = True
206
+ content = claripy.BVV(content)
207
+ elif type(content) is str:
208
+ if concrete is None:
209
+ concrete = True
210
+ content = claripy.BVV(content.encode())
211
+ elif content is None:
212
+ pass
213
+ elif isinstance(content, claripy.ast.Bits):
214
+ if concrete is None and not content.symbolic:
215
+ concrete = True
216
+ else:
217
+ raise TypeError(f"Can't handle SimFile content of type {type(content)}")
218
+
219
+ if concrete is None:
220
+ concrete = False
221
+ self.concrete = concrete
222
+
223
+ if content is not None:
224
+ self.__content = content
225
+
226
+ if self._size is None:
227
+ self._size = len(content) // 8
228
+ else:
229
+ if self._size is None:
230
+ self._size = 0
231
+ if has_end is None:
232
+ self.has_end = False
233
+
234
+ @property
235
+ def category(self): # override trying to determine from self.id to allow arbitrary idents
236
+ return "file"
237
+
238
+ def set_state(self, state):
239
+ super().set_state(state)
240
+ try:
241
+ content = self.__content
242
+ except AttributeError:
243
+ pass
244
+ else:
245
+ self.store(0, content)
246
+ del self.__content
247
+
248
+ if self.has_end is None:
249
+ self.has_end = sim_options.FILES_HAVE_EOF in state.options
250
+
251
+ if type(self._size) is int:
252
+ self._size = claripy.BVV(self._size, state.arch.bits)
253
+ elif len(self._size) != state.arch.bits:
254
+ raise TypeError(f"SimFile size must be a bitvector of size {state.arch.bits} (arch.bits)")
255
+
256
+ @property
257
+ def size(self):
258
+ return self._size
259
+
260
+ def concretize(self, **kwargs):
261
+ """
262
+ Return a concretization of the contents of the file, as a flat bytestring.
263
+ """
264
+ size = self.state.solver.min(self._size, **kwargs)
265
+ data = self.load(0, size)
266
+
267
+ kwargs["cast_to"] = kwargs.get("cast_to", bytes)
268
+ kwargs["extra_constraints"] = (*tuple(kwargs.get("extra_constraints", ())), self._size == size)
269
+ return self.state.solver.eval(data, **kwargs)
270
+
271
+ def read(self, pos, size, **kwargs):
272
+ disable_actions = kwargs.pop("disable_actions", False)
273
+ inspect = kwargs.pop("inspect", True)
274
+
275
+ # Step 1: figure out a reasonable concrete size to use for the memory load
276
+ # since we don't want to concretize anything
277
+ if self.state.solver.symbolic(size):
278
+ try:
279
+ passed_max_size = self.state.solver.max(
280
+ size, extra_constraints=(size < self.state.libc.max_packet_size,)
281
+ )
282
+ except SimSolverError:
283
+ passed_max_size = self.state.solver.min(size)
284
+ l.warning("Symbolic read size is too large for threshold - concretizing to min (%d)", passed_max_size)
285
+ self.state.add_constraints(size == passed_max_size)
286
+ else:
287
+ passed_max_size = self.state.solver.eval(size)
288
+ if passed_max_size > 2**13:
289
+ l.warning("Program performing extremely large reads")
290
+
291
+ # Step 2.1: check for the possibility of EOFs
292
+ # If it's not possible to EOF (because there's no EOF), this is very simple!
293
+ if not self.has_end:
294
+ # bump the storage size as we read
295
+ self._size = claripy.If(size + pos > self._size, size + pos, self._size)
296
+ return self.load(pos, passed_max_size, disable_actions=disable_actions, inspect=inspect), size, size + pos
297
+
298
+ # Step 2.2: check harder for the possibility of EOFs
299
+ # This is the size if we're reading to the end of the file
300
+ distance_to_eof = self._size - pos
301
+ distance_to_eof = claripy.If(claripy.SLE(distance_to_eof, 0), 0, distance_to_eof)
302
+
303
+ # try to frontload some constraint solving to see if it's impossible for this read to EOF
304
+ if self.state.solver.satisfiable(extra_constraints=(size > distance_to_eof,)):
305
+ # it's possible to EOF
306
+ # final size = min(passed_size, max(distance_to_eof, 0))
307
+ real_size = claripy.If(size >= distance_to_eof, distance_to_eof, size)
308
+
309
+ return (
310
+ self.load(pos, passed_max_size, disable_actions=disable_actions, inspect=inspect),
311
+ real_size,
312
+ real_size + pos,
313
+ )
314
+ # it's not possible to EOF
315
+ # we don't need to constrain or min/max the output size because there are already constraints asserting
316
+ # that the total filesize is pretty big
317
+ # note: this assumes that constraints cannot be removed
318
+ return self.load(pos, passed_max_size, disable_actions=disable_actions, inspect=inspect), size, size + pos
319
+
320
+ def write(self, pos, data, size=None, events=True, **kwargs):
321
+ if events:
322
+ self.state.history.add_event("fs_write", filename=self.name, data=data, size=size, pos=pos)
323
+
324
+ data = _deps_unpack(data)[0]
325
+ if size is None:
326
+ size = len(data) // self.state.arch.byte_width if isinstance(data, claripy.ast.Bits) else len(data)
327
+ # \(_^^)/
328
+ self.store(pos, data, size=size)
329
+ new_end = _deps_unpack(pos + size)[0] # decline to store SAO
330
+ self._size = claripy.If(new_end > self._size, new_end, self._size)
331
+ return new_end
332
+
333
+ @SimStatePlugin.memo
334
+ def copy(self, memo):
335
+ o = super().copy(memo)
336
+ o.name = self.name
337
+ o._size = self._size
338
+ o.has_end = self.has_end
339
+ o.seekable = self.seekable
340
+ o.writable = self.writable
341
+ o.concrete = self.concrete
342
+ o.file_exists = self.file_exists
343
+ return o
344
+
345
+ def merge(self, others, merge_conditions, common_ancestor=None): # pylint: disable=unused-argument
346
+ if not all(type(o) is type(self) for o in others):
347
+ raise SimMergeError("Cannot merge files of disparate type")
348
+
349
+ if any(o.has_end != self.has_end for o in others):
350
+ raise SimMergeError("Cannot merge files where some have ends and some don't")
351
+
352
+ self._size = claripy.ite_cases(zip(merge_conditions[1:], (o._size for o in others)), self._size)
353
+
354
+ return super().merge(others, merge_conditions, common_ancestor=common_ancestor)
355
+
356
+ def widen(self, _):
357
+ raise SimMergeError("Widening the filesystem is unsupported")
358
+
359
+
360
+ class SimFileStream(SimFile):
361
+ """
362
+ A specialized SimFile that uses a flat memory backing, but functions as a stream, tracking its position internally.
363
+
364
+ The pos argument to the read and write methods will be ignored, and will return None. Instead, there is an
365
+ attribute ``pos`` on the file itself, which will give you what you want.
366
+
367
+ :param name: The name of the file, for cosmetic purposes
368
+ :param pos: The initial position of the file, default zero
369
+ :param kwargs: Any other keyword arguments will go on to the SimFile constructor.
370
+
371
+ :ivar pos: The current position in the file.
372
+ """
373
+
374
+ def __init__(self, name=None, content=None, pos=0, **kwargs):
375
+ super().__init__(name=name, content=content, **kwargs)
376
+ self.pos = pos
377
+
378
+ def set_state(self, state):
379
+ super().set_state(state)
380
+ if type(self.pos) is int:
381
+ self.pos = claripy.BVV(self.pos, state.arch.bits)
382
+ elif len(self.pos) != state.arch.bits:
383
+ raise TypeError(f"SimFileStream position must be a bitvector of size {state.arch.bits} (arch.bits)")
384
+
385
+ def read(self, pos, size, **kwargs):
386
+ no_stream = kwargs.pop("no_stream", False)
387
+ if not no_stream:
388
+ pos = self.pos
389
+ data, size, pos = super().read(pos, size, **kwargs)
390
+ if not no_stream:
391
+ self.pos = pos
392
+ return data, size, pos
393
+
394
+ def write(self, _, data, size=None, **kwargs):
395
+ self.pos = super().write(self.pos, data, size, **kwargs)
396
+ return
397
+
398
+ @SimStatePlugin.memo
399
+ def copy(self, memo):
400
+ c = super().copy(memo)
401
+ c.pos = self.pos
402
+ return c
403
+
404
+ def merge(self, others, merge_conditions, common_ancestor=None): # pylint: disable=unused-argument
405
+ self.pos = claripy.ite_cases(zip(merge_conditions[1:], [o.pos for o in others]), self.pos)
406
+ return super().merge(others, merge_conditions, common_ancestor=common_ancestor)
407
+
408
+
409
+ class SimPackets(SimFileBase):
410
+ """
411
+ The SimPackets is meant to model inputs whose content is delivered a series of asynchronous chunks. The data is
412
+ stored as a list of read or write results. For symbolic sizes, state.libc.max_packet_size will be respected. If
413
+ the SHORT_READS option is enabled, reads will return a symbolic size constrained to be less than or equal to the
414
+ requested size.
415
+
416
+ A SimPackets cannot be used for both reading and writing - for socket objects that can be both read and written to
417
+ you should use a file descriptor to multiplex the read and write operations into two separate file storage
418
+ mechanisms.
419
+
420
+ :param name: The name of the file, for cosmetic purposes
421
+ :param write_mode: Whether this file is opened in read or write mode. If this is unspecified it will be
422
+ autodetected.
423
+ :param content: Some initial content to use for the file. Can be a list of bytestrings or a list of tuples of
424
+ content ASTs and size ASTs.
425
+
426
+ :ivar write_mode: See the eponymous parameter
427
+ :ivar content: A list of packets, as tuples of content ASTs and size ASTs.
428
+ """
429
+
430
+ def __init__(self, name, write_mode=None, content=None, writable=True, ident=None, **kwargs):
431
+ super().__init__(name, writable=writable, ident=ident, **kwargs)
432
+
433
+ self.write_mode = write_mode
434
+ self.content = content
435
+ self.sanitized = 0
436
+
437
+ if self.content is None:
438
+ self.content = []
439
+ else:
440
+ self.content = [
441
+ (
442
+ x
443
+ if type(x) is tuple
444
+ else (
445
+ (x, len(x) // 8)
446
+ if isinstance(x, claripy.ast.Bits)
447
+ else (
448
+ (x.ast, len(x) // 8)
449
+ if isinstance(x, SimActionObject)
450
+ else (claripy.BVV(x), len(x)) if type(x) is bytes else None
451
+ )
452
+ )
453
+ )
454
+ for x in self.content
455
+ ]
456
+ if any(x is None for x in self.content):
457
+ raise TypeError("Bad type in initial SimPacket content")
458
+
459
+ def set_state(self, state):
460
+ super().set_state(state)
461
+ # sanitize the lengths in self.content now that we know the wordsize
462
+ # getattr because we want to support old pickles without this attribute (TODO remove this)
463
+ for i in range(getattr(self, "sanitized", 0), len(self.content)):
464
+ data, length = self.content[i]
465
+ if type(length) is int:
466
+ self.content[i] = (data, claripy.BVV(length, state.arch.bits))
467
+ elif len(length) < state.arch.bits:
468
+ self.content[i] = (data, length.zero_extend(state.arch.bits - len(length)))
469
+ elif len(length) != state.arch.bits:
470
+ raise TypeError("Bad bitvector size for length in SimPackets.content")
471
+ self.sanitized = len(self.content)
472
+
473
+ @property
474
+ def size(self):
475
+ return sum(x[1] for x in self.content)
476
+
477
+ def concretize(self, **kwargs):
478
+ """
479
+ Returns a list of the packets read or written as bytestrings.
480
+ """
481
+ lengths = [self.state.solver.eval(x[1], **kwargs) for x in self.content]
482
+ kwargs["cast_to"] = bytes
483
+ sizes = [x[0].size() for x in self.content]
484
+ return [
485
+ b"" if i == 0 else self.state.solver.eval(x[0][: size - i * self.state.arch.byte_width], **kwargs)
486
+ for i, size, x in zip(lengths, sizes, self.content)
487
+ ]
488
+
489
+ def read(self, pos, size, **kwargs):
490
+ """
491
+ Read a packet from the stream.
492
+
493
+ :param int pos: The packet number to read from the sequence of the stream. May be None to append to the
494
+ stream.
495
+ :param size: The size to read. May be symbolic.
496
+ :param short_reads: Whether to replace the size with a symbolic value constrained to less than or equal to the
497
+ original size. If unspecified, will be chosen based on the state option.
498
+ :return: A tuple of the data read (a bitvector of the length that is the maximum length of the read)
499
+ and the actual size of the read.
500
+ """
501
+ short_reads = kwargs.pop("short_reads", None)
502
+
503
+ # sanity check on read/write modes
504
+ if self.write_mode is None:
505
+ self.write_mode = False
506
+ elif self.write_mode is True:
507
+ raise SimFileError("Cannot read and write to the same SimPackets")
508
+
509
+ # sanity check on packet number and determine if data is already present
510
+ if pos is None:
511
+ pos = len(self.content)
512
+ if pos < 0:
513
+ raise SimFileError(f"SimPacket.read({pos}): Negative packet number?")
514
+ if pos > len(self.content):
515
+ raise SimFileError(f"SimPacket.read({pos}): Packet number is past frontier of {len(self.content)}?")
516
+ if pos != len(self.content):
517
+ _, realsize = self.content[pos]
518
+ self.state.add_constraints(realsize <= size) # assert that the packet fits within the read request
519
+ if not self.state.solver.satisfiable():
520
+ raise SimFileError(
521
+ "SimPackets could not fit the current packet into the read "
522
+ f"request of {size} bytes: {self.content[pos]}"
523
+ )
524
+ return self.content[pos] + (pos + 1,)
525
+
526
+ # Type check
527
+ if type(size) is int:
528
+ size = claripy.BVV(size, self.state.arch.bits)
529
+
530
+ # The read is on the frontier. let's generate a new packet.
531
+ orig_size = size
532
+ max_size = None
533
+
534
+ # if short reads are enabled, replace size with a symbol
535
+ if short_reads is True or (short_reads is None and sim_options.SHORT_READS in self.state.options):
536
+ size = self.state.solver.BVS(
537
+ f"packetsize_{len(self.content)}_{self.ident}",
538
+ self.state.arch.bits,
539
+ key=("file", self.ident, "packetsize", len(self.content)),
540
+ )
541
+ self.state.add_constraints(size <= orig_size)
542
+
543
+ # figure out the maximum size of the read
544
+ if not self.state.solver.symbolic(size):
545
+ max_size = self.state.solver.eval(size)
546
+ elif self.state.solver.satisfiable(extra_constraints=(size <= self.state.libc.max_packet_size,)):
547
+ l.info("Constraining symbolic packet size to be less than %d", self.state.libc.max_packet_size)
548
+ if not self.state.solver.is_true(orig_size <= self.state.libc.max_packet_size):
549
+ self.state.add_constraints(size <= self.state.libc.max_packet_size)
550
+ if not self.state.solver.symbolic(orig_size):
551
+ max_size = min(self.state.solver.eval(orig_size), self.state.libc.max_packet_size)
552
+ else:
553
+ max_size = self.state.solver.max(size)
554
+ else:
555
+ max_size = self.state.solver.min(size)
556
+ l.warning(
557
+ "Could not constrain symbolic packet size to <= %d; using minimum %d for size",
558
+ self.state.libc.max_packet_size,
559
+ max_size,
560
+ )
561
+ self.state.add_constraints(size == max_size)
562
+
563
+ # generate the packet data and return it
564
+ data = self.state.solver.BVS(
565
+ f"packet_{len(self.content)}_{self.ident}",
566
+ max_size * self.state.arch.byte_width,
567
+ key=("file", self.ident, "packet", len(self.content)),
568
+ )
569
+ packet = (data, size)
570
+ self.content.append(packet)
571
+ return (*packet, pos + 1)
572
+
573
+ def write(self, pos, data, size=None, events=True, **kwargs):
574
+ """
575
+ Write a packet to the stream.
576
+
577
+ :param int pos: The packet number to write in the sequence of the stream. May be None to append to the
578
+ stream.
579
+ :param data: The data to write, as a string or bitvector.
580
+ :param size: The optional size to write. May be symbolic; must be constrained to at most the size of
581
+ data.
582
+ :return: The next packet to use after this
583
+ """
584
+ if events:
585
+ self.state.history.add_event("fs_write", filename=self.name, data=data, size=size, pos=pos)
586
+
587
+ # sanity check on read/write modes
588
+ if self.write_mode is None:
589
+ self.write_mode = True
590
+ elif self.write_mode is False:
591
+ raise SimFileError("Cannot read and write to the same SimPackets")
592
+
593
+ data = _deps_unpack(data)[0]
594
+ if type(data) is bytes:
595
+ data = claripy.BVV(data)
596
+ if size is None:
597
+ size = len(data) // self.state.arch.byte_width if isinstance(data, claripy.ast.Bits) else len(data)
598
+ if type(size) is int:
599
+ size = claripy.BVV(size, self.state.arch.bits)
600
+
601
+ # sanity check on packet number and determine if data is already present
602
+ if pos is None:
603
+ pos = len(self.content)
604
+ if pos < 0:
605
+ raise SimFileError(f"SimPacket.write({pos}): Negative packet number?")
606
+ if pos > len(self.content):
607
+ raise SimFileError(f"SimPacket.write({pos}): Packet number is past frontier of {len(self.content)}?")
608
+ if pos != len(self.content):
609
+ realdata, realsize = self.content[pos]
610
+ maxlen = max(len(realdata), len(data))
611
+ self.state.add_constraints(realdata[maxlen - 1 : 0] == data[maxlen - 1 : 0])
612
+ self.state.add_constraints(size == realsize)
613
+ if not self.state.solver.satisfiable():
614
+ raise SimFileError("Packet write equality constraints made state unsatisfiable???")
615
+ return pos + 1
616
+
617
+ # write it out!
618
+ self.content.append((_deps_unpack(data)[0], size))
619
+ return pos + 1
620
+
621
+ @SimStatePlugin.memo
622
+ def copy(self, memo): # pylint: disable=unused-argument
623
+ o = type(self)(
624
+ name=self.name, write_mode=self.write_mode, content=self.content, ident=self.ident, concrete=self.concrete
625
+ )
626
+ o.sanitized = getattr(self, "sanitized", 0)
627
+ return o
628
+
629
+ def merge(self, others, merge_conditions, common_ancestor=None): # pylint: disable=unused-argument
630
+ for o in others:
631
+ if o.write_mode is None:
632
+ continue
633
+ if self.write_mode is None:
634
+ self.write_mode = o.write_mode
635
+ elif self.write_mode is not o.write_mode:
636
+ raise SimMergeError("Cannot merge SimPackets with disparate write_mode")
637
+
638
+ for o in others:
639
+ if len(o.content) != len(self.content):
640
+ raise SimMergeError("Cannot merge SimPackets with disparate number of packets")
641
+
642
+ for i, default in enumerate(self.content):
643
+ max_data_length = max(len(default[0]), max(len(o.content[i][0]) for o in others))
644
+ merged_data = claripy.ite_cases(
645
+ zip(
646
+ merge_conditions[1:],
647
+ (o.content[i][0].concat(claripy.BVV(0, max_data_length - len(o.content[i][0]))) for o in others),
648
+ ),
649
+ default[0],
650
+ )
651
+ merged_size = claripy.ite_cases(zip(merge_conditions[1:], (o.content[i][1] for o in others)), default[1])
652
+ self.content[i] = (merged_data, merged_size)
653
+
654
+ return True
655
+
656
+ def widen(self, _):
657
+ raise SimMergeError("Widening the filesystem is unsupported")
658
+
659
+
660
+ class SimPacketsStream(SimPackets):
661
+ """
662
+ A specialized SimPackets that tracks its position internally.
663
+
664
+ The pos argument to the read and write methods will be ignored, and will return None. Instead, there is an
665
+ attribute ``pos`` on the file itself, which will give you what you want.
666
+
667
+ :param name: The name of the file, for cosmetic purposes
668
+ :param pos: The initial position of the file, default zero
669
+ :param kwargs: Any other keyword arguments will go on to the SimPackets constructor.
670
+
671
+ :ivar pos: The current position in the file.
672
+ """
673
+
674
+ def __init__(self, name, pos=0, **kwargs):
675
+ super().__init__(name, **kwargs)
676
+ self.pos = pos
677
+
678
+ def read(self, pos, size, **kwargs):
679
+ no_stream = kwargs.pop("no_stream", False)
680
+ if not no_stream:
681
+ pos = self.pos
682
+ data, size, pos = super().read(pos, size, **kwargs)
683
+ if not no_stream:
684
+ self.pos = pos
685
+ return data, size, pos
686
+
687
+ def write(self, _, data, size=None, **kwargs):
688
+ self.pos = super().write(self.pos, data, size, **kwargs)
689
+ return
690
+
691
+ @SimStatePlugin.memo
692
+ def copy(self, memo):
693
+ c = super().copy(memo)
694
+ c.pos = self.pos
695
+ return c
696
+
697
+ def merge(self, others, merge_conditions, common_ancestor=None): # pylint: disable=unused-argument
698
+ if any(o.pos != self.pos for o in others):
699
+ raise SimMergeError("Can't merge SimPacketsStreams with disparate positions")
700
+ return super().merge(others, merge_conditions, common_ancestor=common_ancestor)
701
+
702
+
703
+ class SimFileDescriptorBase(SimStatePlugin):
704
+ """
705
+ The base class for implementations of POSIX file descriptors.
706
+
707
+ All file descriptors should respect the CONCRETIZE_SYMBOLIC_{READ,WRITE}_SIZES state options.
708
+ """
709
+
710
+ def read(self, pos, size, **kwargs):
711
+ """
712
+ Reads some data from the file, storing it into memory.
713
+
714
+ :param pos: The address to read data from file
715
+ :param size: The requested length of the read
716
+ :return: The real length of the read
717
+ """
718
+ data, realsize = self.read_data(size, **kwargs)
719
+ if not self.state.solver.is_true(realsize == 0):
720
+ do_concrete_update = kwargs.pop("do_concrete_update", False)
721
+ if do_concrete_update:
722
+ concrete_data = claripy.BVV(self.state.solver.eval(data), data.size())
723
+ self.state.memory.store(pos, concrete_data, action=None, inspect=False)
724
+
725
+ self.state.memory.store(pos, data, size=realsize)
726
+ return realsize
727
+
728
+ def write(self, pos, size, **kwargs):
729
+ """
730
+ Writes some data, loaded from the state, into the file.
731
+
732
+ :param pos: The address to read the data to write from in memory
733
+ :param size: The requested size of the write
734
+ :return: The real length of the write
735
+ """
736
+ if type(pos) is str:
737
+ raise TypeError("SimFileDescriptor.write takes an address and size. Did you mean write_data?")
738
+
739
+ # Find a reasonable concrete size for the load since we don't want to concretize anything
740
+ # This is copied from SimFile.read
741
+ # TODO: refactor into a generic concretization strategy?
742
+ if self.state.solver.symbolic(size):
743
+ try:
744
+ passed_max_size = self.state.solver.max(
745
+ size, extra_constraints=(size < self.state.libc.max_packet_size,)
746
+ )
747
+ except SimSolverError:
748
+ passed_max_size = self.state.solver.min(size)
749
+ l.warning("Symbolic write size is too large for threshold - concretizing to min (%d)", passed_max_size)
750
+ self.state.add_constraints(size == passed_max_size)
751
+ else:
752
+ passed_max_size = self.state.solver.eval(size)
753
+ if passed_max_size > 2**13:
754
+ l.warning("Program performing extremely large write")
755
+
756
+ data = self.state.memory.load(pos, passed_max_size)
757
+ return self.write_data(data, size, **kwargs)
758
+
759
+ def read_data(self, size, **kwargs):
760
+ """
761
+ Reads some data from the file, returning the data.
762
+
763
+ :param size: The requested length of the read
764
+ :return: A tuple of the data read and the real length of the read
765
+ """
766
+ raise NotImplementedError
767
+
768
+ def write_data(self, data, size=None, **kwargs):
769
+ """
770
+ Write some data, provided as an argument into the file.
771
+
772
+ :param data: A bitvector to write into the file
773
+ :param size: The requested size of the write (may be symbolic)
774
+ :return: The real length of the write
775
+ """
776
+ raise NotImplementedError
777
+
778
+ def seek(self, offset, whence="start"):
779
+ """
780
+ Seek the file descriptor to a different position in the file.
781
+
782
+ :param offset: The offset to seek to, interpreted according to whence
783
+ :param whence: What the offset is relative to; one of the strings "start", "current", or "end"
784
+ :return: A symbolic boolean describing whether the seek succeeded or not
785
+ """
786
+ raise NotImplementedError
787
+
788
+ def tell(self):
789
+ """
790
+ Return the current position, or None if the concept doesn't make sense for the given file.
791
+ """
792
+ raise NotImplementedError
793
+
794
+ def eof(self):
795
+ """
796
+ Return the EOF status. May be a symbolic boolean.
797
+ """
798
+ raise NotImplementedError
799
+
800
+ def size(self):
801
+ """
802
+ Return the size of the data stored in the file in bytes, or None if the concept doesn't make sense for the
803
+ given file.
804
+ """
805
+ raise NotImplementedError
806
+
807
+ @property
808
+ def read_storage(self):
809
+ """
810
+ Return the SimFile backing reads from this fd
811
+ """
812
+ raise NotImplementedError
813
+
814
+ @property
815
+ def write_storage(self):
816
+ """
817
+ Return the SimFile backing writes to this fd
818
+ """
819
+ raise NotImplementedError
820
+
821
+ @property
822
+ def read_pos(self):
823
+ """
824
+ Return the current position of the read file pointer.
825
+
826
+ If the underlying read file is a stream, this will return the position of the stream. Otherwise, will return
827
+ the position of the file descriptor in the file.
828
+ """
829
+ raise NotImplementedError
830
+
831
+ @property
832
+ def write_pos(self):
833
+ """
834
+ Return the current position of the read file pointer.
835
+
836
+ If the underlying read file is a stream, this will return the position of the stream. Otherwise, will return
837
+ the position of the file descriptor in the file.
838
+ """
839
+ raise NotImplementedError
840
+
841
+ def concretize(self, **kwargs):
842
+ """
843
+ Return a concretizeation of the data in the underlying file. Has different return types to represent different
844
+ data structures on a per-class basis.
845
+
846
+ Any arguments passed to this will be passed onto state.solver.eval.
847
+ """
848
+ raise NotImplementedError
849
+
850
+ @property
851
+ def file_exists(self):
852
+ """
853
+ This should be True in most cases.
854
+ Only if we opened an fd of unknown existence, ALL_FILES_EXIST is False and ANY_FILE_MIGHT_EXIST is True,
855
+ this is a symbolic boolean.
856
+ """
857
+ return True
858
+
859
+ def _prep_read(self, size):
860
+ return self._prep_generic(size, True)
861
+
862
+ def _prep_write(self, size):
863
+ return self._prep_generic(size, False)
864
+
865
+ def _prep_generic(self, size, is_read):
866
+ option = (
867
+ sim_options.CONCRETIZE_SYMBOLIC_FILE_READ_SIZES if is_read else sim_options.CONCRETIZE_SYMBOLIC_WRITE_SIZES
868
+ )
869
+ string = "read" if is_read else "write"
870
+ # check if we need to concretize the length
871
+ if option in self.state.options and self.state.solver.symbolic(size):
872
+ try:
873
+ size = self.state.solver.max(size, extra_constraints=(size <= self.state.libc.max_packet_size,))
874
+ except SimSolverError:
875
+ size = self.state.solver.min(size)
876
+ l.info("Concretizing symbolic %s size to %d", string, size)
877
+
878
+ return size
879
+
880
+
881
+ class SimFileDescriptor(SimFileDescriptorBase):
882
+ """
883
+ A simple file descriptor forwarding reads and writes to a SimFile. Contains information about
884
+ the current opened state of the file, such as the flags or (if relevant) the current position.
885
+
886
+ :ivar file: The SimFile described to by this descriptor
887
+ :ivar flags: The mode that the file descriptor was opened with, a bitfield of flags
888
+ """
889
+
890
+ def __init__(self, simfile, flags=0):
891
+ super().__init__()
892
+ self.file = simfile
893
+ self._pos = 0
894
+ self.flags = flags
895
+
896
+ def read_data(self, size, **kwargs):
897
+ size = self._prep_read(size)
898
+ data, realsize, self._pos = self.file.read(self._pos, size)
899
+ return data, realsize
900
+
901
+ def write_data(self, data, size=None, **kwargs):
902
+ if self.flags & Flags.O_APPEND and self.file.seekable:
903
+ self._pos = self.file.size
904
+
905
+ data = _deps_unpack(data)[0]
906
+ if size is None:
907
+ size = len(data) // self.state.arch.byte_width if isinstance(data, claripy.ast.Bits) else len(data)
908
+
909
+ size = self._prep_write(size)
910
+ self._pos = self.file.write(self._pos, data, size)
911
+ return size
912
+
913
+ def seek(self, offset, whence="start"):
914
+ if not self.file.seekable:
915
+ return claripy.false()
916
+
917
+ if type(offset) is int:
918
+ offset = claripy.BVV(offset, self.state.arch.bits)
919
+
920
+ if whence == "start":
921
+ new_pos = offset
922
+ elif whence == "current":
923
+ new_pos = self._pos + offset
924
+ elif whence == "end":
925
+ new_pos = self.file.size + offset
926
+
927
+ success_condition = claripy.And(claripy.SGE(new_pos, 0), claripy.SLE(new_pos, self.file.size))
928
+ self._pos = _deps_unpack(claripy.If(success_condition, new_pos, self._pos))[0]
929
+ return success_condition
930
+
931
+ def eof(self):
932
+ if not self.file.seekable:
933
+ return claripy.false()
934
+ if not getattr(self.file, "has_end", True):
935
+ return claripy.false()
936
+ return self._pos == self.file.size
937
+
938
+ def tell(self):
939
+ if not self.file.seekable:
940
+ return None
941
+ return self._pos
942
+
943
+ def size(self):
944
+ return self.file.size
945
+
946
+ def concretize(self, **kwargs):
947
+ """
948
+ Return a concretization of the underlying file. Returns whatever format is preferred by the file.
949
+ """
950
+ return self.file.concretize(**kwargs)
951
+
952
+ @property
953
+ def file_exists(self):
954
+ return self.file.file_exists
955
+
956
+ @property
957
+ def read_storage(self):
958
+ return self.file
959
+
960
+ @property
961
+ def write_storage(self):
962
+ return self.file
963
+
964
+ @property
965
+ def read_pos(self):
966
+ if self.file.pos is not None:
967
+ return self.file.pos
968
+ return self._pos
969
+
970
+ @property
971
+ def write_pos(self):
972
+ if self.file.pos is not None:
973
+ return self.file.pos
974
+ return self._pos
975
+
976
+ def set_state(self, state):
977
+ self.file.set_state(state)
978
+ super().set_state(state)
979
+
980
+ @SimStatePlugin.memo
981
+ def copy(self, memo):
982
+ c = type(self)(self.file.copy(memo), self.flags)
983
+ c._pos = self._pos
984
+ return c
985
+
986
+ def merge(self, others, merge_conditions, common_ancestor=None): # pylint: disable=unused-argument
987
+ # do NOT merge file content - descriptors do not have ownership, prevent duplicate merging
988
+ if not all(type(o) is type(self) for o in others):
989
+ l.error("Cannot merge SimFileDescriptors of disparate types")
990
+ return False
991
+ if not all(o.flags == self.flags for o in others):
992
+ l.error("Cannot merge SimFileDescriptors of disparate flags")
993
+ return False
994
+
995
+ if type(self._pos) is int and all(type(o._pos) is int for o in others):
996
+ # TODO: we can do slightly better for packet-based things by having some packets have a "guard condition"
997
+ # which makes them zero length if they're not merged in
998
+ if any(o._pos != self._pos for o in others):
999
+ raise SimMergeError("Cannot merge SimFileDescriptors over SimPackets with disparate number of packets")
1000
+ elif self._pos is None and all(o._pos is None for o in others):
1001
+ pass
1002
+ elif self._pos is None or any(o._pos is None for o in others):
1003
+ raise SimMergeError("Cannot merge SimFileDescriptors with inconsistent None-position - please report this!")
1004
+ else:
1005
+ self._pos = claripy.ite_cases(zip(merge_conditions[1:], (o._pos for o in others)), self._pos)
1006
+
1007
+ return True
1008
+
1009
+ def widen(self, _):
1010
+ raise SimMergeError("Widening the filesystem is unsupported")
1011
+
1012
+
1013
+ class SimFileDescriptorDuplex(SimFileDescriptorBase):
1014
+ """
1015
+ A file descriptor that refers to two file storage mechanisms, one to read from and one to write to. As a result,
1016
+ operations like seek, eof, etc no longer make sense.
1017
+
1018
+ :param read_file: The SimFile to read from
1019
+ :param write_file: The SimFile to write to
1020
+ """
1021
+
1022
+ def __init__(self, read_file, write_file):
1023
+ super().__init__()
1024
+ self._read_file = read_file
1025
+ self._write_file = write_file
1026
+
1027
+ self._read_pos = 0
1028
+ self._write_pos = 0
1029
+
1030
+ def read_data(self, size, **kwargs):
1031
+ size = self._prep_read(size)
1032
+ data, realsize, self._read_pos = self._read_file.read(self._read_pos, size)
1033
+ return data, realsize
1034
+
1035
+ def write_data(self, data, size=None, **kwargs):
1036
+ data = _deps_unpack(data)[0]
1037
+ if size is None:
1038
+ size = len(data) // self.state.arch.byte_width if isinstance(data, claripy.ast.Bits) else len(data)
1039
+
1040
+ size = self._prep_write(size)
1041
+ self._write_pos = self._write_file.write(self._write_pos, data, size)
1042
+ return size
1043
+
1044
+ def set_state(self, state):
1045
+ self._read_file.set_state(state)
1046
+ self._write_file.set_state(state)
1047
+ super().set_state(state)
1048
+
1049
+ def eof(self):
1050
+ # the thing that makes the most sense is for this to refer to the read eof status...
1051
+ if not self._read_file.seekable:
1052
+ return claripy.false()
1053
+ if not getattr(self._read_file, "has_end", True):
1054
+ return claripy.false()
1055
+ return self._read_pos == self._read_file.size
1056
+
1057
+ def tell(self):
1058
+ return None
1059
+
1060
+ def seek(self, offset, whence="start"):
1061
+ return claripy.false()
1062
+
1063
+ def size(self):
1064
+ return None
1065
+
1066
+ def concretize(self, **kwargs):
1067
+ """
1068
+ Return a concretization of the underlying files, as a tuple of (read file, write file).
1069
+ """
1070
+ return (self._read_file.concretize(**kwargs), self._write_file.concretize(**kwargs))
1071
+
1072
+ @property
1073
+ def read_storage(self):
1074
+ return self._read_file
1075
+
1076
+ @property
1077
+ def write_storage(self):
1078
+ return self._write_file
1079
+
1080
+ @property
1081
+ def read_pos(self):
1082
+ if self._read_file.pos is not None:
1083
+ return self._read_file.pos
1084
+ return self._read_pos
1085
+
1086
+ @property
1087
+ def write_pos(self):
1088
+ if self._write_file.pos is not None:
1089
+ return self._write_file.pos
1090
+ return self._write_pos
1091
+
1092
+ @SimStatePlugin.memo
1093
+ def copy(self, memo):
1094
+ c = type(self)(self._read_file.copy(memo), self._write_file.copy(memo))
1095
+ c._read_pos = self._read_pos
1096
+ c._write_pos = self._write_pos
1097
+ return c
1098
+
1099
+ def merge(self, others, merge_conditions, common_ancestor=None): # pylint: disable=unused-argument
1100
+ # do NOT merge storage mechanisms here - fs and posix handle that
1101
+ if not all(type(o) is type(self) for o in others):
1102
+ raise SimMergeError("Cannot merge SimFileDescriptors of disparate types")
1103
+
1104
+ if type(self._read_pos) is int and all(type(o._read_pos) is int for o in others):
1105
+ if any(o._read_pos != self._read_pos for o in others):
1106
+ raise SimMergeError("Cannot merge SimFileDescriptors over SimPackets with disparate number of packets")
1107
+ elif self._read_pos is None and all(o._read_pos is None for o in others):
1108
+ pass
1109
+ elif self._read_pos is None or any(o._read_pos is None for o in others):
1110
+ raise SimMergeError("Cannot merge SimFileDescriptors with inconsistent None-position - please report this!")
1111
+ else:
1112
+ self._read_pos = claripy.ite_cases(zip(merge_conditions[1:], (o._read_pos for o in others)), self._read_pos)
1113
+
1114
+ if type(self._write_pos) is int and all(type(o._write_pos) is int for o in others):
1115
+ if any(o._write_pos != self._write_pos for o in others):
1116
+ raise SimMergeError("Cannot merge SimFileDescriptors over SimPackets with disparate number of packets")
1117
+ elif self._write_pos is None and all(o._write_pos is None for o in others):
1118
+ pass
1119
+ elif self._write_pos is None or any(o._write_pos is None for o in others):
1120
+ raise SimMergeError("Cannot merge SimFileDescriptors with inconsistent None-position - please report this!")
1121
+ else:
1122
+ self._write_pos = claripy.ite_cases(
1123
+ zip(merge_conditions[1:], (o._write_pos for o in others)), self._write_pos
1124
+ )
1125
+
1126
+ return True
1127
+
1128
+ def widen(self, _):
1129
+ raise SimMergeError("Widening the filesystem is unsupported")
1130
+
1131
+
1132
+ class SimPacketsSlots(SimFileBase):
1133
+ """
1134
+ SimPacketsSlots is the new SimDialogue, if you've ever seen that before.
1135
+
1136
+ The idea is that in some cases, the only thing you really care about is getting the lengths of reads right, and
1137
+ some of them should be short reads, and some of them should be truncated. You provide to this class a list of read
1138
+ lengths, and it figures out the length of each read, and delivers some content.
1139
+
1140
+ This class will NOT respect the position argument you pass it - this storage is not stateless.
1141
+ """
1142
+
1143
+ seekable = False
1144
+
1145
+ def __init__(self, name, read_sizes, ident=None, **kwargs):
1146
+ super().__init__(name, writable=False, ident=ident)
1147
+
1148
+ self.read_sizes = read_sizes
1149
+ self.read_data = []
1150
+
1151
+ def concretize(self, **kwargs):
1152
+ return [self.state.solver.eval(var, cast_to=bytes, **kwargs) for var in self.read_data]
1153
+
1154
+ def read(self, pos, size, **kwargs):
1155
+ if not self.read_sizes:
1156
+ return claripy.BVV(0, 0), 0, None
1157
+
1158
+ try:
1159
+ req_size = self.state.solver.eval_one(size)
1160
+ except SimSolverError as err:
1161
+ raise SimFileError("SimPacketsSlots can't handle multivalued read sizes") from err
1162
+
1163
+ avail_size = self.read_sizes[0]
1164
+
1165
+ if avail_size > req_size:
1166
+ # chop the packet in half
1167
+ real_size = req_size
1168
+ self.read_sizes[0] -= req_size
1169
+ else:
1170
+ # short read or full size read
1171
+ real_size = avail_size
1172
+ self.read_sizes.pop(0)
1173
+
1174
+ data = self.state.solver.BVS(
1175
+ f"packet_{len(self.read_data)}_{self.ident}",
1176
+ real_size * self.state.arch.byte_width,
1177
+ key=("file", self.ident, "packet", len(self.read_data)),
1178
+ )
1179
+ self.read_data.append(data)
1180
+ return data, real_size, None
1181
+
1182
+ def write(self, pos, data, size=None, **kwargs):
1183
+ raise SimFileError("Trying to write to SimPacketsSlots? Illegal")
1184
+
1185
+ @property
1186
+ def size(self):
1187
+ return sum(len(x) for x in self.read_data) // self.state.arch.byte_width
1188
+
1189
+ @SimStatePlugin.memo
1190
+ def copy(self, memo): # pylint: disable=unused-argument
1191
+ o = type(self)(self.name, self.read_sizes, ident=self.ident)
1192
+ o.read_data = list(self.read_data)
1193
+ return o
1194
+
1195
+ def merge(self, others, merge_conditions, common_ancestor=None): # pylint: disable=unused-argument
1196
+ if any(self.read_sizes != o.read_sizes for o in others):
1197
+ raise SimMergeError("Can't merge SimPacketsSlots with disparate reads")
1198
+ already_read_sizes = [len(x) for x in self.read_data]
1199
+ if any(already_read_sizes != [len(x) for x in o.read_data] for o in others):
1200
+ raise SimMergeError("Can't merge SimPacketsSlots with disparate reads")
1201
+
1202
+ for i, default_var in self.read_data:
1203
+ self.read_data[i] = claripy.ite_cases(
1204
+ zip(merge_conditions[1:], [o.read_data[i] for o in others]), default_var
1205
+ )
1206
+
1207
+ return True
1208
+
1209
+ def widen(self, _):
1210
+ raise SimMergeError("Widening the filesystem is unsupported")