angr 9.2.103__py3-none-manylinux2014_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (1300) hide show
  1. angr/__init__.py +153 -0
  2. angr/__main__.py +59 -0
  3. angr/analyses/__init__.py +46 -0
  4. angr/analyses/analysis.py +359 -0
  5. angr/analyses/backward_slice.py +691 -0
  6. angr/analyses/binary_optimizer.py +683 -0
  7. angr/analyses/bindiff.py +1251 -0
  8. angr/analyses/boyscout.py +77 -0
  9. angr/analyses/callee_cleanup_finder.py +75 -0
  10. angr/analyses/calling_convention.py +956 -0
  11. angr/analyses/cdg.py +197 -0
  12. angr/analyses/cfg/__init__.py +11 -0
  13. angr/analyses/cfg/cfb.py +436 -0
  14. angr/analyses/cfg/cfg.py +73 -0
  15. angr/analyses/cfg/cfg_arch_options.py +82 -0
  16. angr/analyses/cfg/cfg_base.py +2917 -0
  17. angr/analyses/cfg/cfg_emulated.py +3570 -0
  18. angr/analyses/cfg/cfg_fast.py +5053 -0
  19. angr/analyses/cfg/cfg_fast_soot.py +669 -0
  20. angr/analyses/cfg/cfg_job_base.py +204 -0
  21. angr/analyses/cfg/indirect_jump_resolvers/__init__.py +8 -0
  22. angr/analyses/cfg/indirect_jump_resolvers/amd64_elf_got.py +63 -0
  23. angr/analyses/cfg/indirect_jump_resolvers/amd64_pe_iat.py +52 -0
  24. angr/analyses/cfg/indirect_jump_resolvers/arm_elf_fast.py +151 -0
  25. angr/analyses/cfg/indirect_jump_resolvers/const_resolver.py +141 -0
  26. angr/analyses/cfg/indirect_jump_resolvers/default_resolvers.py +68 -0
  27. angr/analyses/cfg/indirect_jump_resolvers/jumptable.py +2368 -0
  28. angr/analyses/cfg/indirect_jump_resolvers/mips_elf_fast.py +517 -0
  29. angr/analyses/cfg/indirect_jump_resolvers/propagator_utils.py +26 -0
  30. angr/analyses/cfg/indirect_jump_resolvers/resolver.py +74 -0
  31. angr/analyses/cfg/indirect_jump_resolvers/x86_elf_pic_plt.py +93 -0
  32. angr/analyses/cfg/indirect_jump_resolvers/x86_pe_iat.py +51 -0
  33. angr/analyses/cfg_slice_to_sink/__init__.py +2 -0
  34. angr/analyses/cfg_slice_to_sink/cfg_slice_to_sink.py +117 -0
  35. angr/analyses/cfg_slice_to_sink/graph.py +84 -0
  36. angr/analyses/cfg_slice_to_sink/transitions.py +25 -0
  37. angr/analyses/class_identifier.py +62 -0
  38. angr/analyses/code_tagging.py +123 -0
  39. angr/analyses/complete_calling_conventions.py +424 -0
  40. angr/analyses/congruency_check.py +384 -0
  41. angr/analyses/data_dep/__init__.py +2 -0
  42. angr/analyses/data_dep/data_dependency_analysis.py +605 -0
  43. angr/analyses/data_dep/dep_nodes.py +170 -0
  44. angr/analyses/data_dep/sim_act_location.py +46 -0
  45. angr/analyses/datagraph_meta.py +105 -0
  46. angr/analyses/ddg.py +1695 -0
  47. angr/analyses/decompiler/__init__.py +13 -0
  48. angr/analyses/decompiler/ail_simplifier.py +1408 -0
  49. angr/analyses/decompiler/ailgraph_walker.py +48 -0
  50. angr/analyses/decompiler/block_io_finder.py +293 -0
  51. angr/analyses/decompiler/block_similarity.py +188 -0
  52. angr/analyses/decompiler/block_simplifier.py +434 -0
  53. angr/analyses/decompiler/call_counter.py +43 -0
  54. angr/analyses/decompiler/callsite_maker.py +403 -0
  55. angr/analyses/decompiler/ccall_rewriters/__init__.py +6 -0
  56. angr/analyses/decompiler/ccall_rewriters/amd64_ccalls.py +489 -0
  57. angr/analyses/decompiler/ccall_rewriters/rewriter_base.py +19 -0
  58. angr/analyses/decompiler/clinic.py +2166 -0
  59. angr/analyses/decompiler/condition_processor.py +1184 -0
  60. angr/analyses/decompiler/decompilation_cache.py +38 -0
  61. angr/analyses/decompiler/decompilation_options.py +274 -0
  62. angr/analyses/decompiler/decompiler.py +544 -0
  63. angr/analyses/decompiler/empty_node_remover.py +211 -0
  64. angr/analyses/decompiler/expression_counters.py +76 -0
  65. angr/analyses/decompiler/expression_narrower.py +92 -0
  66. angr/analyses/decompiler/goto_manager.py +73 -0
  67. angr/analyses/decompiler/graph_region.py +413 -0
  68. angr/analyses/decompiler/jump_target_collector.py +36 -0
  69. angr/analyses/decompiler/jumptable_entry_condition_rewriter.py +66 -0
  70. angr/analyses/decompiler/optimization_passes/__init__.py +108 -0
  71. angr/analyses/decompiler/optimization_passes/base_ptr_save_simplifier.py +144 -0
  72. angr/analyses/decompiler/optimization_passes/code_motion.py +360 -0
  73. angr/analyses/decompiler/optimization_passes/const_derefs.py +265 -0
  74. angr/analyses/decompiler/optimization_passes/cross_jump_reverter.py +108 -0
  75. angr/analyses/decompiler/optimization_passes/deadblock_remover.py +73 -0
  76. angr/analyses/decompiler/optimization_passes/div_simplifier.py +391 -0
  77. angr/analyses/decompiler/optimization_passes/engine_base.py +303 -0
  78. angr/analyses/decompiler/optimization_passes/expr_op_swapper.py +136 -0
  79. angr/analyses/decompiler/optimization_passes/flip_boolean_cmp.py +91 -0
  80. angr/analyses/decompiler/optimization_passes/inlined_string_transformation_simplifier.py +386 -0
  81. angr/analyses/decompiler/optimization_passes/ite_expr_converter.py +226 -0
  82. angr/analyses/decompiler/optimization_passes/ite_region_converter.py +189 -0
  83. angr/analyses/decompiler/optimization_passes/lowered_switch_simplifier.py +757 -0
  84. angr/analyses/decompiler/optimization_passes/mod_simplifier.py +86 -0
  85. angr/analyses/decompiler/optimization_passes/multi_simplifier.py +227 -0
  86. angr/analyses/decompiler/optimization_passes/optimization_pass.py +397 -0
  87. angr/analyses/decompiler/optimization_passes/register_save_area_simplifier.py +198 -0
  88. angr/analyses/decompiler/optimization_passes/ret_addr_save_simplifier.py +172 -0
  89. angr/analyses/decompiler/optimization_passes/ret_deduplicator.py +219 -0
  90. angr/analyses/decompiler/optimization_passes/return_duplicator_base.py +448 -0
  91. angr/analyses/decompiler/optimization_passes/return_duplicator_high.py +57 -0
  92. angr/analyses/decompiler/optimization_passes/return_duplicator_low.py +121 -0
  93. angr/analyses/decompiler/optimization_passes/spilled_register_finder.py +18 -0
  94. angr/analyses/decompiler/optimization_passes/stack_canary_simplifier.py +293 -0
  95. angr/analyses/decompiler/optimization_passes/switch_default_case_duplicator.py +110 -0
  96. angr/analyses/decompiler/optimization_passes/win_stack_canary_simplifier.py +281 -0
  97. angr/analyses/decompiler/optimization_passes/x86_gcc_getpc_simplifier.py +87 -0
  98. angr/analyses/decompiler/peephole_optimizations/__init__.py +69 -0
  99. angr/analyses/decompiler/peephole_optimizations/a_div_const_add_a_mul_n_div_const.py +38 -0
  100. angr/analyses/decompiler/peephole_optimizations/a_mul_const_div_shr_const.py +38 -0
  101. angr/analyses/decompiler/peephole_optimizations/a_shl_const_sub_a.py +31 -0
  102. angr/analyses/decompiler/peephole_optimizations/a_sub_a_div.py +25 -0
  103. angr/analyses/decompiler/peephole_optimizations/a_sub_a_div_const_mul_const.py +56 -0
  104. angr/analyses/decompiler/peephole_optimizations/a_sub_a_sub_n.py +19 -0
  105. angr/analyses/decompiler/peephole_optimizations/arm_cmpf.py +235 -0
  106. angr/analyses/decompiler/peephole_optimizations/base.py +120 -0
  107. angr/analyses/decompiler/peephole_optimizations/basepointeroffset_add_n.py +33 -0
  108. angr/analyses/decompiler/peephole_optimizations/basepointeroffset_and_mask.py +35 -0
  109. angr/analyses/decompiler/peephole_optimizations/bitwise_or_to_logical_or.py +34 -0
  110. angr/analyses/decompiler/peephole_optimizations/bool_expr_xor_1.py +27 -0
  111. angr/analyses/decompiler/peephole_optimizations/bswap.py +131 -0
  112. angr/analyses/decompiler/peephole_optimizations/cmpord_rewriter.py +72 -0
  113. angr/analyses/decompiler/peephole_optimizations/coalesce_same_cascading_ifs.py +27 -0
  114. angr/analyses/decompiler/peephole_optimizations/const_mull_a_shift.py +91 -0
  115. angr/analyses/decompiler/peephole_optimizations/constant_derefs.py +43 -0
  116. angr/analyses/decompiler/peephole_optimizations/conv_a_sub0_shr_and.py +70 -0
  117. angr/analyses/decompiler/peephole_optimizations/conv_shl_shr.py +51 -0
  118. angr/analyses/decompiler/peephole_optimizations/eager_eval.py +225 -0
  119. angr/analyses/decompiler/peephole_optimizations/extended_byte_and_mask.py +55 -0
  120. angr/analyses/decompiler/peephole_optimizations/inlined_strcpy.py +146 -0
  121. angr/analyses/decompiler/peephole_optimizations/inlined_strcpy_consolidation.py +102 -0
  122. angr/analyses/decompiler/peephole_optimizations/inlined_wstrcpy.py +159 -0
  123. angr/analyses/decompiler/peephole_optimizations/invert_negated_logical_conjuction_disjunction.py +50 -0
  124. angr/analyses/decompiler/peephole_optimizations/one_sub_bool.py +33 -0
  125. angr/analyses/decompiler/peephole_optimizations/remove_cascading_conversions.py +19 -0
  126. angr/analyses/decompiler/peephole_optimizations/remove_empty_if_body.py +45 -0
  127. angr/analyses/decompiler/peephole_optimizations/remove_noop_conversions.py +26 -0
  128. angr/analyses/decompiler/peephole_optimizations/remove_redundant_bitmasks.py +48 -0
  129. angr/analyses/decompiler/peephole_optimizations/remove_redundant_conversions.py +160 -0
  130. angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_branch.py +29 -0
  131. angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_comparisons.py +54 -0
  132. angr/analyses/decompiler/peephole_optimizations/remove_redundant_nots.py +17 -0
  133. angr/analyses/decompiler/peephole_optimizations/remove_redundant_reinterprets.py +43 -0
  134. angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts.py +44 -0
  135. angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts_around_comparators.py +40 -0
  136. angr/analyses/decompiler/peephole_optimizations/rewrite_bit_extractions.py +85 -0
  137. angr/analyses/decompiler/peephole_optimizations/rewrite_mips_gp_loads.py +47 -0
  138. angr/analyses/decompiler/peephole_optimizations/rol_ror.py +77 -0
  139. angr/analyses/decompiler/peephole_optimizations/sar_to_signed_div.py +105 -0
  140. angr/analyses/decompiler/peephole_optimizations/simplify_pc_relative_loads.py +37 -0
  141. angr/analyses/decompiler/peephole_optimizations/single_bit_cond_to_boolexpr.py +52 -0
  142. angr/analyses/decompiler/peephole_optimizations/single_bit_xor.py +26 -0
  143. angr/analyses/decompiler/peephole_optimizations/tidy_stack_addr.py +133 -0
  144. angr/analyses/decompiler/redundant_label_remover.py +116 -0
  145. angr/analyses/decompiler/region_identifier.py +1098 -0
  146. angr/analyses/decompiler/region_simplifiers/__init__.py +1 -0
  147. angr/analyses/decompiler/region_simplifiers/cascading_cond_transformer.py +93 -0
  148. angr/analyses/decompiler/region_simplifiers/cascading_ifs.py +81 -0
  149. angr/analyses/decompiler/region_simplifiers/expr_folding.py +606 -0
  150. angr/analyses/decompiler/region_simplifiers/goto.py +177 -0
  151. angr/analyses/decompiler/region_simplifiers/if_.py +142 -0
  152. angr/analyses/decompiler/region_simplifiers/ifelse.py +90 -0
  153. angr/analyses/decompiler/region_simplifiers/loop.py +135 -0
  154. angr/analyses/decompiler/region_simplifiers/node_address_finder.py +23 -0
  155. angr/analyses/decompiler/region_simplifiers/region_simplifier.py +211 -0
  156. angr/analyses/decompiler/region_simplifiers/switch_cluster_simplifier.py +644 -0
  157. angr/analyses/decompiler/region_simplifiers/switch_expr_simplifier.py +83 -0
  158. angr/analyses/decompiler/region_walker.py +23 -0
  159. angr/analyses/decompiler/return_maker.py +70 -0
  160. angr/analyses/decompiler/seq_to_blocks.py +19 -0
  161. angr/analyses/decompiler/sequence_walker.py +235 -0
  162. angr/analyses/decompiler/structured_codegen/__init__.py +10 -0
  163. angr/analyses/decompiler/structured_codegen/base.py +132 -0
  164. angr/analyses/decompiler/structured_codegen/c.py +3811 -0
  165. angr/analyses/decompiler/structured_codegen/dummy.py +14 -0
  166. angr/analyses/decompiler/structured_codegen/dwarf_import.py +186 -0
  167. angr/analyses/decompiler/structuring/__init__.py +15 -0
  168. angr/analyses/decompiler/structuring/dream.py +1225 -0
  169. angr/analyses/decompiler/structuring/phoenix.py +2546 -0
  170. angr/analyses/decompiler/structuring/recursive_structurer.py +186 -0
  171. angr/analyses/decompiler/structuring/structurer_base.py +954 -0
  172. angr/analyses/decompiler/structuring/structurer_nodes.py +414 -0
  173. angr/analyses/decompiler/utils.py +787 -0
  174. angr/analyses/disassembly.py +1302 -0
  175. angr/analyses/disassembly_utils.py +104 -0
  176. angr/analyses/dominance_frontier.py +39 -0
  177. angr/analyses/find_objects_static.py +203 -0
  178. angr/analyses/flirt.py +185 -0
  179. angr/analyses/forward_analysis/__init__.py +2 -0
  180. angr/analyses/forward_analysis/forward_analysis.py +527 -0
  181. angr/analyses/forward_analysis/job_info.py +64 -0
  182. angr/analyses/forward_analysis/visitors/__init__.py +4 -0
  183. angr/analyses/forward_analysis/visitors/call_graph.py +28 -0
  184. angr/analyses/forward_analysis/visitors/function_graph.py +85 -0
  185. angr/analyses/forward_analysis/visitors/graph.py +250 -0
  186. angr/analyses/forward_analysis/visitors/loop.py +28 -0
  187. angr/analyses/forward_analysis/visitors/single_node_graph.py +38 -0
  188. angr/analyses/identifier/__init__.py +1 -0
  189. angr/analyses/identifier/custom_callable.py +138 -0
  190. angr/analyses/identifier/errors.py +9 -0
  191. angr/analyses/identifier/func.py +57 -0
  192. angr/analyses/identifier/functions/__init__.py +36 -0
  193. angr/analyses/identifier/functions/atoi.py +75 -0
  194. angr/analyses/identifier/functions/based_atoi.py +128 -0
  195. angr/analyses/identifier/functions/fdprintf.py +122 -0
  196. angr/analyses/identifier/functions/free.py +64 -0
  197. angr/analyses/identifier/functions/int2str.py +302 -0
  198. angr/analyses/identifier/functions/malloc.py +113 -0
  199. angr/analyses/identifier/functions/memcmp.py +69 -0
  200. angr/analyses/identifier/functions/memcpy.py +89 -0
  201. angr/analyses/identifier/functions/memset.py +43 -0
  202. angr/analyses/identifier/functions/printf.py +122 -0
  203. angr/analyses/identifier/functions/recv_until.py +315 -0
  204. angr/analyses/identifier/functions/skip_calloc.py +72 -0
  205. angr/analyses/identifier/functions/skip_realloc.py +99 -0
  206. angr/analyses/identifier/functions/skip_recv_n.py +107 -0
  207. angr/analyses/identifier/functions/snprintf.py +114 -0
  208. angr/analyses/identifier/functions/sprintf.py +115 -0
  209. angr/analyses/identifier/functions/strcasecmp.py +32 -0
  210. angr/analyses/identifier/functions/strcmp.py +112 -0
  211. angr/analyses/identifier/functions/strcpy.py +43 -0
  212. angr/analyses/identifier/functions/strlen.py +26 -0
  213. angr/analyses/identifier/functions/strncmp.py +103 -0
  214. angr/analyses/identifier/functions/strncpy.py +65 -0
  215. angr/analyses/identifier/functions/strtol.py +91 -0
  216. angr/analyses/identifier/identify.py +848 -0
  217. angr/analyses/identifier/runner.py +359 -0
  218. angr/analyses/init_finder.py +264 -0
  219. angr/analyses/loop_analysis.py +353 -0
  220. angr/analyses/loopfinder.py +174 -0
  221. angr/analyses/propagator/__init__.py +1 -0
  222. angr/analyses/propagator/engine_ail.py +1560 -0
  223. angr/analyses/propagator/engine_base.py +53 -0
  224. angr/analyses/propagator/engine_vex.py +328 -0
  225. angr/analyses/propagator/outdated_definition_walker.py +158 -0
  226. angr/analyses/propagator/propagator.py +422 -0
  227. angr/analyses/propagator/tmpvar_finder.py +17 -0
  228. angr/analyses/propagator/top_checker_mixin.py +14 -0
  229. angr/analyses/propagator/values.py +116 -0
  230. angr/analyses/propagator/vex_vars.py +67 -0
  231. angr/analyses/proximity_graph.py +452 -0
  232. angr/analyses/reaching_definitions/__init__.py +65 -0
  233. angr/analyses/reaching_definitions/call_trace.py +72 -0
  234. angr/analyses/reaching_definitions/dep_graph.py +392 -0
  235. angr/analyses/reaching_definitions/engine_ail.py +1172 -0
  236. angr/analyses/reaching_definitions/engine_vex.py +1102 -0
  237. angr/analyses/reaching_definitions/external_codeloc.py +0 -0
  238. angr/analyses/reaching_definitions/function_handler.py +603 -0
  239. angr/analyses/reaching_definitions/heap_allocator.py +69 -0
  240. angr/analyses/reaching_definitions/rd_initializer.py +235 -0
  241. angr/analyses/reaching_definitions/rd_state.py +613 -0
  242. angr/analyses/reaching_definitions/reaching_definitions.py +594 -0
  243. angr/analyses/reaching_definitions/subject.py +64 -0
  244. angr/analyses/reassembler.py +2970 -0
  245. angr/analyses/soot_class_hierarchy.py +283 -0
  246. angr/analyses/stack_pointer_tracker.py +832 -0
  247. angr/analyses/static_hooker.py +51 -0
  248. angr/analyses/typehoon/__init__.py +1 -0
  249. angr/analyses/typehoon/dfa.py +108 -0
  250. angr/analyses/typehoon/lifter.py +91 -0
  251. angr/analyses/typehoon/simple_solver.py +1258 -0
  252. angr/analyses/typehoon/translator.py +242 -0
  253. angr/analyses/typehoon/typeconsts.py +294 -0
  254. angr/analyses/typehoon/typehoon.py +239 -0
  255. angr/analyses/typehoon/typevars.py +565 -0
  256. angr/analyses/typehoon/variance.py +10 -0
  257. angr/analyses/variable_recovery/__init__.py +2 -0
  258. angr/analyses/variable_recovery/annotations.py +57 -0
  259. angr/analyses/variable_recovery/engine_ail.py +746 -0
  260. angr/analyses/variable_recovery/engine_base.py +962 -0
  261. angr/analyses/variable_recovery/engine_vex.py +580 -0
  262. angr/analyses/variable_recovery/irsb_scanner.py +131 -0
  263. angr/analyses/variable_recovery/variable_recovery.py +552 -0
  264. angr/analyses/variable_recovery/variable_recovery_base.py +452 -0
  265. angr/analyses/variable_recovery/variable_recovery_fast.py +589 -0
  266. angr/analyses/veritesting.py +635 -0
  267. angr/analyses/vfg.py +1945 -0
  268. angr/analyses/vsa_ddg.py +423 -0
  269. angr/analyses/vtable.py +92 -0
  270. angr/analyses/xrefs.py +263 -0
  271. angr/angrdb/__init__.py +9 -0
  272. angr/angrdb/db.py +208 -0
  273. angr/angrdb/models.py +183 -0
  274. angr/angrdb/serializers/__init__.py +2 -0
  275. angr/angrdb/serializers/cfg_model.py +41 -0
  276. angr/angrdb/serializers/comments.py +59 -0
  277. angr/angrdb/serializers/funcs.py +60 -0
  278. angr/angrdb/serializers/kb.py +110 -0
  279. angr/angrdb/serializers/labels.py +58 -0
  280. angr/angrdb/serializers/loader.py +81 -0
  281. angr/angrdb/serializers/structured_code.py +128 -0
  282. angr/angrdb/serializers/variables.py +58 -0
  283. angr/angrdb/serializers/xrefs.py +48 -0
  284. angr/annocfg.py +320 -0
  285. angr/blade.py +430 -0
  286. angr/block.py +506 -0
  287. angr/callable.py +162 -0
  288. angr/calling_conventions.py +2383 -0
  289. angr/code_location.py +168 -0
  290. angr/codenode.py +140 -0
  291. angr/concretization_strategies/__init__.py +97 -0
  292. angr/concretization_strategies/any.py +15 -0
  293. angr/concretization_strategies/any_named.py +32 -0
  294. angr/concretization_strategies/controlled_data.py +54 -0
  295. angr/concretization_strategies/eval.py +18 -0
  296. angr/concretization_strategies/logging.py +32 -0
  297. angr/concretization_strategies/max.py +24 -0
  298. angr/concretization_strategies/nonzero.py +14 -0
  299. angr/concretization_strategies/nonzero_range.py +20 -0
  300. angr/concretization_strategies/norepeats.py +35 -0
  301. angr/concretization_strategies/norepeats_range.py +35 -0
  302. angr/concretization_strategies/range.py +17 -0
  303. angr/concretization_strategies/signed_add.py +24 -0
  304. angr/concretization_strategies/single.py +12 -0
  305. angr/concretization_strategies/solutions.py +18 -0
  306. angr/concretization_strategies/unlimited_range.py +15 -0
  307. angr/distributed/__init__.py +3 -0
  308. angr/distributed/server.py +198 -0
  309. angr/distributed/worker.py +183 -0
  310. angr/engines/__init__.py +41 -0
  311. angr/engines/concrete.py +178 -0
  312. angr/engines/engine.py +212 -0
  313. angr/engines/failure.py +27 -0
  314. angr/engines/hook.py +67 -0
  315. angr/engines/light/__init__.py +2 -0
  316. angr/engines/light/data.py +715 -0
  317. angr/engines/light/engine.py +1441 -0
  318. angr/engines/pcode/__init__.py +2 -0
  319. angr/engines/pcode/behavior.py +995 -0
  320. angr/engines/pcode/cc.py +123 -0
  321. angr/engines/pcode/emulate.py +446 -0
  322. angr/engines/pcode/engine.py +256 -0
  323. angr/engines/pcode/lifter.py +1423 -0
  324. angr/engines/procedure.py +71 -0
  325. angr/engines/soot/__init__.py +1 -0
  326. angr/engines/soot/engine.py +415 -0
  327. angr/engines/soot/exceptions.py +14 -0
  328. angr/engines/soot/expressions/__init__.py +56 -0
  329. angr/engines/soot/expressions/arrayref.py +21 -0
  330. angr/engines/soot/expressions/base.py +22 -0
  331. angr/engines/soot/expressions/binop.py +27 -0
  332. angr/engines/soot/expressions/cast.py +21 -0
  333. angr/engines/soot/expressions/condition.py +34 -0
  334. angr/engines/soot/expressions/constants.py +45 -0
  335. angr/engines/soot/expressions/instanceOf.py +11 -0
  336. angr/engines/soot/expressions/instancefieldref.py +7 -0
  337. angr/engines/soot/expressions/invoke.py +117 -0
  338. angr/engines/soot/expressions/length.py +7 -0
  339. angr/engines/soot/expressions/local.py +7 -0
  340. angr/engines/soot/expressions/new.py +15 -0
  341. angr/engines/soot/expressions/newArray.py +51 -0
  342. angr/engines/soot/expressions/newMultiArray.py +84 -0
  343. angr/engines/soot/expressions/paramref.py +7 -0
  344. angr/engines/soot/expressions/phi.py +29 -0
  345. angr/engines/soot/expressions/staticfieldref.py +7 -0
  346. angr/engines/soot/expressions/thisref.py +6 -0
  347. angr/engines/soot/expressions/unsupported.py +6 -0
  348. angr/engines/soot/field_dispatcher.py +49 -0
  349. angr/engines/soot/method_dispatcher.py +49 -0
  350. angr/engines/soot/statements/__init__.py +30 -0
  351. angr/engines/soot/statements/assign.py +29 -0
  352. angr/engines/soot/statements/base.py +80 -0
  353. angr/engines/soot/statements/goto.py +11 -0
  354. angr/engines/soot/statements/identity.py +14 -0
  355. angr/engines/soot/statements/if_.py +16 -0
  356. angr/engines/soot/statements/invoke.py +11 -0
  357. angr/engines/soot/statements/return_.py +19 -0
  358. angr/engines/soot/statements/switch.py +38 -0
  359. angr/engines/soot/statements/throw.py +12 -0
  360. angr/engines/soot/values/__init__.py +24 -0
  361. angr/engines/soot/values/arrayref.py +124 -0
  362. angr/engines/soot/values/base.py +4 -0
  363. angr/engines/soot/values/constants.py +17 -0
  364. angr/engines/soot/values/instancefieldref.py +42 -0
  365. angr/engines/soot/values/local.py +17 -0
  366. angr/engines/soot/values/paramref.py +17 -0
  367. angr/engines/soot/values/staticfieldref.py +37 -0
  368. angr/engines/soot/values/strref.py +37 -0
  369. angr/engines/soot/values/thisref.py +148 -0
  370. angr/engines/successors.py +540 -0
  371. angr/engines/syscall.py +53 -0
  372. angr/engines/unicorn.py +483 -0
  373. angr/engines/vex/__init__.py +4 -0
  374. angr/engines/vex/claripy/__init__.py +1 -0
  375. angr/engines/vex/claripy/ccall.py +2097 -0
  376. angr/engines/vex/claripy/datalayer.py +149 -0
  377. angr/engines/vex/claripy/irop.py +1279 -0
  378. angr/engines/vex/heavy/__init__.py +5 -0
  379. angr/engines/vex/heavy/actions.py +237 -0
  380. angr/engines/vex/heavy/concretizers.py +394 -0
  381. angr/engines/vex/heavy/dirty.py +467 -0
  382. angr/engines/vex/heavy/heavy.py +379 -0
  383. angr/engines/vex/heavy/inspect.py +51 -0
  384. angr/engines/vex/heavy/resilience.py +85 -0
  385. angr/engines/vex/heavy/super_fastpath.py +34 -0
  386. angr/engines/vex/lifter.py +424 -0
  387. angr/engines/vex/light/__init__.py +3 -0
  388. angr/engines/vex/light/light.py +555 -0
  389. angr/engines/vex/light/resilience.py +73 -0
  390. angr/engines/vex/light/slicing.py +51 -0
  391. angr/errors.py +604 -0
  392. angr/exploration_techniques/__init__.py +176 -0
  393. angr/exploration_techniques/bucketizer.py +96 -0
  394. angr/exploration_techniques/common.py +56 -0
  395. angr/exploration_techniques/dfs.py +34 -0
  396. angr/exploration_techniques/director.py +523 -0
  397. angr/exploration_techniques/driller_core.py +102 -0
  398. angr/exploration_techniques/explorer.py +146 -0
  399. angr/exploration_techniques/lengthlimiter.py +20 -0
  400. angr/exploration_techniques/local_loop_seer.py +64 -0
  401. angr/exploration_techniques/loop_seer.py +239 -0
  402. angr/exploration_techniques/manual_mergepoint.py +80 -0
  403. angr/exploration_techniques/memory_watcher.py +40 -0
  404. angr/exploration_techniques/oppologist.py +93 -0
  405. angr/exploration_techniques/slicecutor.py +115 -0
  406. angr/exploration_techniques/spiller.py +282 -0
  407. angr/exploration_techniques/spiller_db.py +27 -0
  408. angr/exploration_techniques/stochastic.py +57 -0
  409. angr/exploration_techniques/suggestions.py +156 -0
  410. angr/exploration_techniques/symbion.py +78 -0
  411. angr/exploration_techniques/tech_builder.py +47 -0
  412. angr/exploration_techniques/threading.py +77 -0
  413. angr/exploration_techniques/timeout.py +31 -0
  414. angr/exploration_techniques/tracer.py +1101 -0
  415. angr/exploration_techniques/unique.py +104 -0
  416. angr/exploration_techniques/veritesting.py +36 -0
  417. angr/factory.py +385 -0
  418. angr/flirt/__init__.py +126 -0
  419. angr/flirt/build_sig.py +316 -0
  420. angr/graph_utils.py +0 -0
  421. angr/keyed_region.py +532 -0
  422. angr/knowledge_base/__init__.py +1 -0
  423. angr/knowledge_base/knowledge_base.py +145 -0
  424. angr/knowledge_plugins/__init__.py +18 -0
  425. angr/knowledge_plugins/callsite_prototypes.py +52 -0
  426. angr/knowledge_plugins/cfg/__init__.py +16 -0
  427. angr/knowledge_plugins/cfg/cfg_manager.py +94 -0
  428. angr/knowledge_plugins/cfg/cfg_model.py +1057 -0
  429. angr/knowledge_plugins/cfg/cfg_node.py +541 -0
  430. angr/knowledge_plugins/cfg/indirect_jump.py +67 -0
  431. angr/knowledge_plugins/cfg/memory_data.py +156 -0
  432. angr/knowledge_plugins/comments.py +15 -0
  433. angr/knowledge_plugins/custom_strings.py +37 -0
  434. angr/knowledge_plugins/data.py +21 -0
  435. angr/knowledge_plugins/debug_variables.py +221 -0
  436. angr/knowledge_plugins/functions/__init__.py +2 -0
  437. angr/knowledge_plugins/functions/function.py +1694 -0
  438. angr/knowledge_plugins/functions/function_manager.py +501 -0
  439. angr/knowledge_plugins/functions/function_parser.py +295 -0
  440. angr/knowledge_plugins/functions/soot_function.py +131 -0
  441. angr/knowledge_plugins/indirect_jumps.py +34 -0
  442. angr/knowledge_plugins/key_definitions/__init__.py +16 -0
  443. angr/knowledge_plugins/key_definitions/atoms.py +314 -0
  444. angr/knowledge_plugins/key_definitions/constants.py +23 -0
  445. angr/knowledge_plugins/key_definitions/definition.py +217 -0
  446. angr/knowledge_plugins/key_definitions/environment.py +92 -0
  447. angr/knowledge_plugins/key_definitions/heap_address.py +32 -0
  448. angr/knowledge_plugins/key_definitions/key_definition_manager.py +81 -0
  449. angr/knowledge_plugins/key_definitions/live_definitions.py +1074 -0
  450. angr/knowledge_plugins/key_definitions/liveness.py +170 -0
  451. angr/knowledge_plugins/key_definitions/rd_model.py +176 -0
  452. angr/knowledge_plugins/key_definitions/tag.py +77 -0
  453. angr/knowledge_plugins/key_definitions/undefined.py +67 -0
  454. angr/knowledge_plugins/key_definitions/unknown_size.py +83 -0
  455. angr/knowledge_plugins/key_definitions/uses.py +180 -0
  456. angr/knowledge_plugins/labels.py +109 -0
  457. angr/knowledge_plugins/patches.py +125 -0
  458. angr/knowledge_plugins/plugin.py +23 -0
  459. angr/knowledge_plugins/propagations/__init__.py +2 -0
  460. angr/knowledge_plugins/propagations/prop_value.py +193 -0
  461. angr/knowledge_plugins/propagations/propagation_manager.py +60 -0
  462. angr/knowledge_plugins/propagations/propagation_model.py +74 -0
  463. angr/knowledge_plugins/propagations/states.py +1064 -0
  464. angr/knowledge_plugins/structured_code/__init__.py +1 -0
  465. angr/knowledge_plugins/structured_code/manager.py +59 -0
  466. angr/knowledge_plugins/sync/__init__.py +1 -0
  467. angr/knowledge_plugins/sync/sync_controller.py +329 -0
  468. angr/knowledge_plugins/types.py +87 -0
  469. angr/knowledge_plugins/variables/__init__.py +1 -0
  470. angr/knowledge_plugins/variables/variable_access.py +114 -0
  471. angr/knowledge_plugins/variables/variable_manager.py +1191 -0
  472. angr/knowledge_plugins/xrefs/__init__.py +3 -0
  473. angr/knowledge_plugins/xrefs/xref.py +157 -0
  474. angr/knowledge_plugins/xrefs/xref_manager.py +122 -0
  475. angr/knowledge_plugins/xrefs/xref_types.py +13 -0
  476. angr/lib/angr_native.so +0 -0
  477. angr/misc/__init__.py +8 -0
  478. angr/misc/ansi.py +46 -0
  479. angr/misc/autoimport.py +89 -0
  480. angr/misc/bug_report.py +125 -0
  481. angr/misc/hookset.py +106 -0
  482. angr/misc/import_hooks.py +63 -0
  483. angr/misc/loggers.py +130 -0
  484. angr/misc/picklable_lock.py +45 -0
  485. angr/misc/plugins.py +291 -0
  486. angr/misc/range.py +21 -0
  487. angr/misc/testing.py +23 -0
  488. angr/misc/ux.py +31 -0
  489. angr/misc/weakpatch.py +58 -0
  490. angr/procedures/__init__.py +2 -0
  491. angr/procedures/advapi32/__init__.py +0 -0
  492. angr/procedures/cgc/__init__.py +3 -0
  493. angr/procedures/cgc/_terminate.py +10 -0
  494. angr/procedures/cgc/allocate.py +76 -0
  495. angr/procedures/cgc/deallocate.py +59 -0
  496. angr/procedures/cgc/fdwait.py +62 -0
  497. angr/procedures/cgc/random.py +60 -0
  498. angr/procedures/cgc/receive.py +91 -0
  499. angr/procedures/cgc/transmit.py +63 -0
  500. angr/procedures/definitions/__init__.py +784 -0
  501. angr/procedures/definitions/cgc.py +19 -0
  502. angr/procedures/definitions/glibc.py +8384 -0
  503. angr/procedures/definitions/gnulib.py +35 -0
  504. angr/procedures/definitions/libstdcpp.py +20 -0
  505. angr/procedures/definitions/linux_kernel.py +6167 -0
  506. angr/procedures/definitions/linux_loader.py +6 -0
  507. angr/procedures/definitions/msvcr.py +15 -0
  508. angr/procedures/definitions/parse_syscalls_from_local_system.py +49 -0
  509. angr/procedures/definitions/parse_win32json.py +2556 -0
  510. angr/procedures/definitions/types_win32.py +34481 -0
  511. angr/procedures/definitions/wdk_api-ms-win-dx-d3dkmt-l1-1-4.py +44 -0
  512. angr/procedures/definitions/wdk_api-ms-win-dx-d3dkmt-l1-1-6.py +40 -0
  513. angr/procedures/definitions/wdk_clfs.py +154 -0
  514. angr/procedures/definitions/wdk_fltmgr.py +570 -0
  515. angr/procedures/definitions/wdk_fwpkclnt.py +44 -0
  516. angr/procedures/definitions/wdk_fwpuclnt.py +330 -0
  517. angr/procedures/definitions/wdk_gdi32.py +380 -0
  518. angr/procedures/definitions/wdk_hal.py +92 -0
  519. angr/procedures/definitions/wdk_ksecdd.py +76 -0
  520. angr/procedures/definitions/wdk_ndis.py +252 -0
  521. angr/procedures/definitions/wdk_ntoskrnl.py +3463 -0
  522. angr/procedures/definitions/wdk_offreg.py +86 -0
  523. angr/procedures/definitions/wdk_pshed.py +50 -0
  524. angr/procedures/definitions/wdk_secur32.py +54 -0
  525. angr/procedures/definitions/wdk_vhfum.py +48 -0
  526. angr/procedures/definitions/win32_aclui.py +44 -0
  527. angr/procedures/definitions/win32_activeds.py +82 -0
  528. angr/procedures/definitions/win32_advapi32.py +1698 -0
  529. angr/procedures/definitions/win32_advpack.py +138 -0
  530. angr/procedures/definitions/win32_amsi.py +52 -0
  531. angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-1.py +58 -0
  532. angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-3.py +48 -0
  533. angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-6.py +40 -0
  534. angr/procedures/definitions/win32_api-ms-win-core-apiquery-l2-1-0.py +40 -0
  535. angr/procedures/definitions/win32_api-ms-win-core-backgroundtask-l1-1-0.py +40 -0
  536. angr/procedures/definitions/win32_api-ms-win-core-comm-l1-1-1.py +40 -0
  537. angr/procedures/definitions/win32_api-ms-win-core-comm-l1-1-2.py +40 -0
  538. angr/procedures/definitions/win32_api-ms-win-core-enclave-l1-1-1.py +44 -0
  539. angr/procedures/definitions/win32_api-ms-win-core-errorhandling-l1-1-3.py +40 -0
  540. angr/procedures/definitions/win32_api-ms-win-core-featurestaging-l1-1-0.py +48 -0
  541. angr/procedures/definitions/win32_api-ms-win-core-featurestaging-l1-1-1.py +40 -0
  542. angr/procedures/definitions/win32_api-ms-win-core-file-fromapp-l1-1-0.py +60 -0
  543. angr/procedures/definitions/win32_api-ms-win-core-handle-l1-1-0.py +40 -0
  544. angr/procedures/definitions/win32_api-ms-win-core-ioring-l1-1-0.py +62 -0
  545. angr/procedures/definitions/win32_api-ms-win-core-marshal-l1-1-0.py +46 -0
  546. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-3.py +46 -0
  547. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-4.py +40 -0
  548. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-5.py +44 -0
  549. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-6.py +46 -0
  550. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-7.py +42 -0
  551. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-8.py +44 -0
  552. angr/procedures/definitions/win32_api-ms-win-core-path-l1-1-0.py +82 -0
  553. angr/procedures/definitions/win32_api-ms-win-core-psm-appnotify-l1-1-0.py +42 -0
  554. angr/procedures/definitions/win32_api-ms-win-core-psm-appnotify-l1-1-1.py +42 -0
  555. angr/procedures/definitions/win32_api-ms-win-core-realtime-l1-1-1.py +44 -0
  556. angr/procedures/definitions/win32_api-ms-win-core-realtime-l1-1-2.py +44 -0
  557. angr/procedures/definitions/win32_api-ms-win-core-slapi-l1-1-0.py +40 -0
  558. angr/procedures/definitions/win32_api-ms-win-core-state-helpers-l1-1-0.py +40 -0
  559. angr/procedures/definitions/win32_api-ms-win-core-synch-l1-2-0.py +44 -0
  560. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-0.py +40 -0
  561. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-3.py +42 -0
  562. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-4.py +42 -0
  563. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-6.py +40 -0
  564. angr/procedures/definitions/win32_api-ms-win-core-util-l1-1-1.py +42 -0
  565. angr/procedures/definitions/win32_api-ms-win-core-winrt-error-l1-1-0.py +43 -0
  566. angr/procedures/definitions/win32_api-ms-win-core-winrt-error-l1-1-1.py +37 -0
  567. angr/procedures/definitions/win32_api-ms-win-core-winrt-l1-1-0.py +39 -0
  568. angr/procedures/definitions/win32_api-ms-win-core-winrt-registration-l1-1-0.py +23 -0
  569. angr/procedures/definitions/win32_api-ms-win-core-winrt-robuffer-l1-1-0.py +23 -0
  570. angr/procedures/definitions/win32_api-ms-win-core-winrt-roparameterizediid-l1-1-0.py +27 -0
  571. angr/procedures/definitions/win32_api-ms-win-core-winrt-string-l1-1-0.py +75 -0
  572. angr/procedures/definitions/win32_api-ms-win-core-winrt-string-l1-1-1.py +23 -0
  573. angr/procedures/definitions/win32_api-ms-win-core-wow64-l1-1-1.py +44 -0
  574. angr/procedures/definitions/win32_api-ms-win-devices-query-l1-1-0.py +56 -0
  575. angr/procedures/definitions/win32_api-ms-win-devices-query-l1-1-1.py +48 -0
  576. angr/procedures/definitions/win32_api-ms-win-dx-d3dkmt-l1-1-0.py +40 -0
  577. angr/procedures/definitions/win32_api-ms-win-gaming-deviceinformation-l1-1-0.py +40 -0
  578. angr/procedures/definitions/win32_api-ms-win-gaming-expandedresources-l1-1-0.py +44 -0
  579. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-0.py +52 -0
  580. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-1.py +42 -0
  581. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-2.py +52 -0
  582. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-3.py +42 -0
  583. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-4.py +54 -0
  584. angr/procedures/definitions/win32_api-ms-win-mm-misc-l1-1-1.py +40 -0
  585. angr/procedures/definitions/win32_api-ms-win-net-isolation-l1-1-0.py +54 -0
  586. angr/procedures/definitions/win32_api-ms-win-security-base-l1-2-2.py +40 -0
  587. angr/procedures/definitions/win32_api-ms-win-security-isolatedcontainer-l1-1-0.py +40 -0
  588. angr/procedures/definitions/win32_api-ms-win-security-isolatedcontainer-l1-1-1.py +40 -0
  589. angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-3.py +40 -0
  590. angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-4.py +40 -0
  591. angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-5.py +42 -0
  592. angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-0.py +44 -0
  593. angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-1.py +50 -0
  594. angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-2.py +40 -0
  595. angr/procedures/definitions/win32_api-ms-win-shcore-stream-winrt-l1-1-0.py +27 -0
  596. angr/procedures/definitions/win32_api-ms-win-wsl-api-l1-1-0.py +52 -0
  597. angr/procedures/definitions/win32_apphelp.py +40 -0
  598. angr/procedures/definitions/win32_authz.py +104 -0
  599. angr/procedures/definitions/win32_avicap32.py +46 -0
  600. angr/procedures/definitions/win32_avifil32.py +158 -0
  601. angr/procedures/definitions/win32_avrt.py +66 -0
  602. angr/procedures/definitions/win32_bcp47mrm.py +42 -0
  603. angr/procedures/definitions/win32_bcrypt.py +144 -0
  604. angr/procedures/definitions/win32_bcryptprimitives.py +42 -0
  605. angr/procedures/definitions/win32_bluetoothapis.py +120 -0
  606. angr/procedures/definitions/win32_bthprops.py +33 -0
  607. angr/procedures/definitions/win32_bthprops_cpl.py +50 -0
  608. angr/procedures/definitions/win32_cabinet.py +82 -0
  609. angr/procedures/definitions/win32_certadm.py +74 -0
  610. angr/procedures/definitions/win32_certpoleng.py +54 -0
  611. angr/procedures/definitions/win32_cfgmgr32.py +516 -0
  612. angr/procedures/definitions/win32_chakra.py +212 -0
  613. angr/procedures/definitions/win32_cldapi.py +110 -0
  614. angr/procedures/definitions/win32_clfsw32.py +156 -0
  615. angr/procedures/definitions/win32_clusapi.py +598 -0
  616. angr/procedures/definitions/win32_comctl32.py +268 -0
  617. angr/procedures/definitions/win32_comdlg32.py +80 -0
  618. angr/procedures/definitions/win32_compstui.py +46 -0
  619. angr/procedures/definitions/win32_computecore.py +146 -0
  620. angr/procedures/definitions/win32_computenetwork.py +124 -0
  621. angr/procedures/definitions/win32_computestorage.py +62 -0
  622. angr/procedures/definitions/win32_comsvcs.py +52 -0
  623. angr/procedures/definitions/win32_coremessaging.py +23 -0
  624. angr/procedures/definitions/win32_credui.py +76 -0
  625. angr/procedures/definitions/win32_crypt32.py +496 -0
  626. angr/procedures/definitions/win32_cryptnet.py +48 -0
  627. angr/procedures/definitions/win32_cryptui.py +58 -0
  628. angr/procedures/definitions/win32_cryptxml.py +76 -0
  629. angr/procedures/definitions/win32_cscapi.py +46 -0
  630. angr/procedures/definitions/win32_d2d1.py +64 -0
  631. angr/procedures/definitions/win32_d3d10.py +92 -0
  632. angr/procedures/definitions/win32_d3d10_1.py +42 -0
  633. angr/procedures/definitions/win32_d3d11.py +44 -0
  634. angr/procedures/definitions/win32_d3d12.py +54 -0
  635. angr/procedures/definitions/win32_d3d9.py +60 -0
  636. angr/procedures/definitions/win32_d3dcompiler_47.py +90 -0
  637. angr/procedures/definitions/win32_d3dcsx.py +56 -0
  638. angr/procedures/definitions/win32_davclnt.py +74 -0
  639. angr/procedures/definitions/win32_dbgeng.py +46 -0
  640. angr/procedures/definitions/win32_dbghelp.py +476 -0
  641. angr/procedures/definitions/win32_dbgmodel.py +40 -0
  642. angr/procedures/definitions/win32_dciman32.py +78 -0
  643. angr/procedures/definitions/win32_dcomp.py +62 -0
  644. angr/procedures/definitions/win32_ddraw.py +52 -0
  645. angr/procedures/definitions/win32_deviceaccess.py +40 -0
  646. angr/procedures/definitions/win32_dflayout.py +40 -0
  647. angr/procedures/definitions/win32_dhcpcsvc.py +68 -0
  648. angr/procedures/definitions/win32_dhcpcsvc6.py +50 -0
  649. angr/procedures/definitions/win32_dhcpsapi.py +430 -0
  650. angr/procedures/definitions/win32_diagnosticdataquery.py +108 -0
  651. angr/procedures/definitions/win32_dinput8.py +40 -0
  652. angr/procedures/definitions/win32_directml.py +42 -0
  653. angr/procedures/definitions/win32_dmprocessxmlfiltered.py +40 -0
  654. angr/procedures/definitions/win32_dnsapi.py +166 -0
  655. angr/procedures/definitions/win32_drt.py +70 -0
  656. angr/procedures/definitions/win32_drtprov.py +56 -0
  657. angr/procedures/definitions/win32_drttransport.py +42 -0
  658. angr/procedures/definitions/win32_dsound.py +58 -0
  659. angr/procedures/definitions/win32_dsparse.py +76 -0
  660. angr/procedures/definitions/win32_dsprop.py +52 -0
  661. angr/procedures/definitions/win32_dssec.py +46 -0
  662. angr/procedures/definitions/win32_dsuiext.py +46 -0
  663. angr/procedures/definitions/win32_dwmapi.py +100 -0
  664. angr/procedures/definitions/win32_dwrite.py +40 -0
  665. angr/procedures/definitions/win32_dxcompiler.py +42 -0
  666. angr/procedures/definitions/win32_dxcore.py +40 -0
  667. angr/procedures/definitions/win32_dxgi.py +50 -0
  668. angr/procedures/definitions/win32_dxva2.py +114 -0
  669. angr/procedures/definitions/win32_eappcfg.py +66 -0
  670. angr/procedures/definitions/win32_eappprxy.py +74 -0
  671. angr/procedures/definitions/win32_efswrt.py +42 -0
  672. angr/procedures/definitions/win32_elscore.py +48 -0
  673. angr/procedures/definitions/win32_esent.py +496 -0
  674. angr/procedures/definitions/win32_evr.py +52 -0
  675. angr/procedures/definitions/win32_faultrep.py +46 -0
  676. angr/procedures/definitions/win32_fhsvcctl.py +52 -0
  677. angr/procedures/definitions/win32_firewallapi.py +44 -0
  678. angr/procedures/definitions/win32_fltlib.py +94 -0
  679. angr/procedures/definitions/win32_fontsub.py +42 -0
  680. angr/procedures/definitions/win32_forceinline.py +44 -0
  681. angr/procedures/definitions/win32_fwpuclnt.py +422 -0
  682. angr/procedures/definitions/win32_fxsutility.py +42 -0
  683. angr/procedures/definitions/win32_gdi32.py +900 -0
  684. angr/procedures/definitions/win32_gdiplus.py +1296 -0
  685. angr/procedures/definitions/win32_glu32.py +142 -0
  686. angr/procedures/definitions/win32_gpedit.py +50 -0
  687. angr/procedures/definitions/win32_hhctrl_ocx.py +42 -0
  688. angr/procedures/definitions/win32_hid.py +128 -0
  689. angr/procedures/definitions/win32_hlink.py +94 -0
  690. angr/procedures/definitions/win32_hrtfapo.py +40 -0
  691. angr/procedures/definitions/win32_httpapi.py +124 -0
  692. angr/procedures/definitions/win32_icm32.py +80 -0
  693. angr/procedures/definitions/win32_icmui.py +42 -0
  694. angr/procedures/definitions/win32_icu.py +2088 -0
  695. angr/procedures/definitions/win32_ieframe.py +96 -0
  696. angr/procedures/definitions/win32_imagehlp.py +90 -0
  697. angr/procedures/definitions/win32_imgutil.py +56 -0
  698. angr/procedures/definitions/win32_imm32.py +202 -0
  699. angr/procedures/definitions/win32_infocardapi.py +72 -0
  700. angr/procedures/definitions/win32_inkobjcore.py +92 -0
  701. angr/procedures/definitions/win32_iphlpapi.py +440 -0
  702. angr/procedures/definitions/win32_iscsidsc.py +196 -0
  703. angr/procedures/definitions/win32_isolatedwindowsenvironmentutils.py +42 -0
  704. angr/procedures/definitions/win32_kernel32.py +3199 -0
  705. angr/procedures/definitions/win32_kernelbase.py +50 -0
  706. angr/procedures/definitions/win32_keycredmgr.py +46 -0
  707. angr/procedures/definitions/win32_ksproxy_ax.py +50 -0
  708. angr/procedures/definitions/win32_ksuser.py +54 -0
  709. angr/procedures/definitions/win32_ktmw32.py +116 -0
  710. angr/procedures/definitions/win32_licenseprotection.py +42 -0
  711. angr/procedures/definitions/win32_loadperf.py +62 -0
  712. angr/procedures/definitions/win32_magnification.py +76 -0
  713. angr/procedures/definitions/win32_mapi32.py +170 -0
  714. angr/procedures/definitions/win32_mdmlocalmanagement.py +44 -0
  715. angr/procedures/definitions/win32_mdmregistration.py +68 -0
  716. angr/procedures/definitions/win32_mf.py +162 -0
  717. angr/procedures/definitions/win32_mfcore.py +42 -0
  718. angr/procedures/definitions/win32_mfplat.py +328 -0
  719. angr/procedures/definitions/win32_mfplay.py +40 -0
  720. angr/procedures/definitions/win32_mfreadwrite.py +48 -0
  721. angr/procedures/definitions/win32_mfsensorgroup.py +58 -0
  722. angr/procedures/definitions/win32_mfsrcsnk.py +42 -0
  723. angr/procedures/definitions/win32_mgmtapi.py +56 -0
  724. angr/procedures/definitions/win32_mi.py +40 -0
  725. angr/procedures/definitions/win32_mmdevapi.py +40 -0
  726. angr/procedures/definitions/win32_mpr.py +132 -0
  727. angr/procedures/definitions/win32_mprapi.py +262 -0
  728. angr/procedures/definitions/win32_mqrt.py +106 -0
  729. angr/procedures/definitions/win32_mrmsupport.py +92 -0
  730. angr/procedures/definitions/win32_msacm32.py +122 -0
  731. angr/procedures/definitions/win32_msajapi.py +1132 -0
  732. angr/procedures/definitions/win32_mscms.py +196 -0
  733. angr/procedures/definitions/win32_mscoree.py +92 -0
  734. angr/procedures/definitions/win32_msctfmonitor.py +44 -0
  735. angr/procedures/definitions/win32_msdelta.py +70 -0
  736. angr/procedures/definitions/win32_msdmo.py +60 -0
  737. angr/procedures/definitions/win32_msdrm.py +206 -0
  738. angr/procedures/definitions/win32_msi.py +566 -0
  739. angr/procedures/definitions/win32_msimg32.py +44 -0
  740. angr/procedures/definitions/win32_mspatcha.py +70 -0
  741. angr/procedures/definitions/win32_mspatchc.py +56 -0
  742. angr/procedures/definitions/win32_msports.py +52 -0
  743. angr/procedures/definitions/win32_msrating.py +76 -0
  744. angr/procedures/definitions/win32_mssign32.py +58 -0
  745. angr/procedures/definitions/win32_mstask.py +42 -0
  746. angr/procedures/definitions/win32_msvfw32.py +124 -0
  747. angr/procedures/definitions/win32_mswsock.py +70 -0
  748. angr/procedures/definitions/win32_mtxdm.py +40 -0
  749. angr/procedures/definitions/win32_ncrypt.py +116 -0
  750. angr/procedures/definitions/win32_ndfapi.py +70 -0
  751. angr/procedures/definitions/win32_netapi32.py +450 -0
  752. angr/procedures/definitions/win32_netsh.py +54 -0
  753. angr/procedures/definitions/win32_netshell.py +42 -0
  754. angr/procedures/definitions/win32_newdev.py +60 -0
  755. angr/procedures/definitions/win32_ninput.py +98 -0
  756. angr/procedures/definitions/win32_normaliz.py +42 -0
  757. angr/procedures/definitions/win32_ntdll.py +185 -0
  758. angr/procedures/definitions/win32_ntdllk.py +40 -0
  759. angr/procedures/definitions/win32_ntdsapi.py +200 -0
  760. angr/procedures/definitions/win32_ntlanman.py +58 -0
  761. angr/procedures/definitions/win32_odbc32.py +406 -0
  762. angr/procedures/definitions/win32_odbcbcp.py +92 -0
  763. angr/procedures/definitions/win32_ole32.py +672 -0
  764. angr/procedures/definitions/win32_oleacc.py +72 -0
  765. angr/procedures/definitions/win32_oleaut32.py +848 -0
  766. angr/procedures/definitions/win32_oledlg.py +84 -0
  767. angr/procedures/definitions/win32_ondemandconnroutehelper.py +48 -0
  768. angr/procedures/definitions/win32_opengl32.py +748 -0
  769. angr/procedures/definitions/win32_opmxbox.py +44 -0
  770. angr/procedures/definitions/win32_p2p.py +254 -0
  771. angr/procedures/definitions/win32_p2pgraph.py +112 -0
  772. angr/procedures/definitions/win32_pdh.py +234 -0
  773. angr/procedures/definitions/win32_peerdist.py +94 -0
  774. angr/procedures/definitions/win32_powrprof.py +206 -0
  775. angr/procedures/definitions/win32_prntvpt.py +60 -0
  776. angr/procedures/definitions/win32_projectedfslib.py +76 -0
  777. angr/procedures/definitions/win32_propsys.py +474 -0
  778. angr/procedures/definitions/win32_psapi.py +92 -0
  779. angr/procedures/definitions/win32_quartz.py +42 -0
  780. angr/procedures/definitions/win32_query.py +46 -0
  781. angr/procedures/definitions/win32_qwave.py +60 -0
  782. angr/procedures/definitions/win32_rasapi32.py +206 -0
  783. angr/procedures/definitions/win32_rasdlg.py +50 -0
  784. angr/procedures/definitions/win32_resutils.py +278 -0
  785. angr/procedures/definitions/win32_rometadata.py +23 -0
  786. angr/procedures/definitions/win32_rpcns4.py +160 -0
  787. angr/procedures/definitions/win32_rpcproxy.py +46 -0
  788. angr/procedures/definitions/win32_rpcrt4.py +932 -0
  789. angr/procedures/definitions/win32_rstrtmgr.py +60 -0
  790. angr/procedures/definitions/win32_rtm.py +190 -0
  791. angr/procedures/definitions/win32_rtutils.py +120 -0
  792. angr/procedures/definitions/win32_rtworkq.py +104 -0
  793. angr/procedures/definitions/win32_sas.py +40 -0
  794. angr/procedures/definitions/win32_scarddlg.py +48 -0
  795. angr/procedures/definitions/win32_schannel.py +56 -0
  796. angr/procedures/definitions/win32_sechost.py +42 -0
  797. angr/procedures/definitions/win32_secur32.py +216 -0
  798. angr/procedures/definitions/win32_sensapi.py +44 -0
  799. angr/procedures/definitions/win32_sensorsutilsv2.py +118 -0
  800. angr/procedures/definitions/win32_setupapi.py +706 -0
  801. angr/procedures/definitions/win32_sfc.py +50 -0
  802. angr/procedures/definitions/win32_shdocvw.py +44 -0
  803. angr/procedures/definitions/win32_shell32.py +526 -0
  804. angr/procedures/definitions/win32_shlwapi.py +758 -0
  805. angr/procedures/definitions/win32_slc.py +102 -0
  806. angr/procedures/definitions/win32_slcext.py +46 -0
  807. angr/procedures/definitions/win32_slwga.py +40 -0
  808. angr/procedures/definitions/win32_snmpapi.py +90 -0
  809. angr/procedures/definitions/win32_spoolss.py +90 -0
  810. angr/procedures/definitions/win32_srclient.py +40 -0
  811. angr/procedures/definitions/win32_srpapi.py +60 -0
  812. angr/procedures/definitions/win32_sspicli.py +52 -0
  813. angr/procedures/definitions/win32_sti.py +40 -0
  814. angr/procedures/definitions/win32_t2embed.py +66 -0
  815. angr/procedures/definitions/win32_tapi32.py +536 -0
  816. angr/procedures/definitions/win32_tbs.py +66 -0
  817. angr/procedures/definitions/win32_tdh.py +92 -0
  818. angr/procedures/definitions/win32_tokenbinding.py +58 -0
  819. angr/procedures/definitions/win32_traffic.py +78 -0
  820. angr/procedures/definitions/win32_txfw32.py +56 -0
  821. angr/procedures/definitions/win32_ualapi.py +46 -0
  822. angr/procedures/definitions/win32_uiautomationcore.py +234 -0
  823. angr/procedures/definitions/win32_urlmon.py +192 -0
  824. angr/procedures/definitions/win32_user32.py +1565 -0
  825. angr/procedures/definitions/win32_userenv.py +126 -0
  826. angr/procedures/definitions/win32_usp10.py +118 -0
  827. angr/procedures/definitions/win32_uxtheme.py +192 -0
  828. angr/procedures/definitions/win32_verifier.py +40 -0
  829. angr/procedures/definitions/win32_version.py +66 -0
  830. angr/procedures/definitions/win32_vertdll.py +52 -0
  831. angr/procedures/definitions/win32_virtdisk.py +96 -0
  832. angr/procedures/definitions/win32_vmdevicehost.py +64 -0
  833. angr/procedures/definitions/win32_vmsavedstatedumpprovider.py +124 -0
  834. angr/procedures/definitions/win32_vssapi.py +40 -0
  835. angr/procedures/definitions/win32_wcmapi.py +48 -0
  836. angr/procedures/definitions/win32_wdsbp.py +52 -0
  837. angr/procedures/definitions/win32_wdsclientapi.py +112 -0
  838. angr/procedures/definitions/win32_wdsmc.py +50 -0
  839. angr/procedures/definitions/win32_wdspxe.py +100 -0
  840. angr/procedures/definitions/win32_wdstptc.py +64 -0
  841. angr/procedures/definitions/win32_webauthn.py +64 -0
  842. angr/procedures/definitions/win32_webservices.py +424 -0
  843. angr/procedures/definitions/win32_websocket.py +64 -0
  844. angr/procedures/definitions/win32_wecapi.py +68 -0
  845. angr/procedures/definitions/win32_wer.py +80 -0
  846. angr/procedures/definitions/win32_wevtapi.py +108 -0
  847. angr/procedures/definitions/win32_winbio.py +146 -0
  848. angr/procedures/definitions/win32_windows_ai_machinelearning.py +40 -0
  849. angr/procedures/definitions/win32_windows_data_pdf.py +23 -0
  850. angr/procedures/definitions/win32_windows_media_mediacontrol.py +54 -0
  851. angr/procedures/definitions/win32_windows_networking.py +40 -0
  852. angr/procedures/definitions/win32_windows_ui_xaml.py +42 -0
  853. angr/procedures/definitions/win32_windowscodecs.py +56 -0
  854. angr/procedures/definitions/win32_winfax.py +150 -0
  855. angr/procedures/definitions/win32_winhttp.py +150 -0
  856. angr/procedures/definitions/win32_winhvemulation.py +46 -0
  857. angr/procedures/definitions/win32_winhvplatform.py +170 -0
  858. angr/procedures/definitions/win32_wininet.py +630 -0
  859. angr/procedures/definitions/win32_winml.py +40 -0
  860. angr/procedures/definitions/win32_winmm.py +390 -0
  861. angr/procedures/definitions/win32_winscard.py +178 -0
  862. angr/procedures/definitions/win32_winspool.py +363 -0
  863. angr/procedures/definitions/win32_winspool_drv.py +382 -0
  864. angr/procedures/definitions/win32_wintrust.py +158 -0
  865. angr/procedures/definitions/win32_winusb.py +106 -0
  866. angr/procedures/definitions/win32_wlanapi.py +158 -0
  867. angr/procedures/definitions/win32_wlanui.py +40 -0
  868. angr/procedures/definitions/win32_wldap32.py +524 -0
  869. angr/procedures/definitions/win32_wldp.py +56 -0
  870. angr/procedures/definitions/win32_wmvcore.py +60 -0
  871. angr/procedures/definitions/win32_wnvapi.py +42 -0
  872. angr/procedures/definitions/win32_wofutil.py +60 -0
  873. angr/procedures/definitions/win32_ws2_32.py +358 -0
  874. angr/procedures/definitions/win32_wscapi.py +50 -0
  875. angr/procedures/definitions/win32_wsclient.py +44 -0
  876. angr/procedures/definitions/win32_wsdapi.py +102 -0
  877. angr/procedures/definitions/win32_wsmsvc.py +104 -0
  878. angr/procedures/definitions/win32_wsnmp32.py +136 -0
  879. angr/procedures/definitions/win32_wtsapi32.py +164 -0
  880. angr/procedures/definitions/win32_xaudio2_8.py +46 -0
  881. angr/procedures/definitions/win32_xinput1_4.py +52 -0
  882. angr/procedures/definitions/win32_xinputuap.py +35 -0
  883. angr/procedures/definitions/win32_xmllite.py +50 -0
  884. angr/procedures/definitions/win32_xolehlp.py +46 -0
  885. angr/procedures/definitions/win32_xpsprint.py +42 -0
  886. angr/procedures/glibc/__ctype_b_loc.py +22 -0
  887. angr/procedures/glibc/__ctype_tolower_loc.py +22 -0
  888. angr/procedures/glibc/__ctype_toupper_loc.py +22 -0
  889. angr/procedures/glibc/__errno_location.py +6 -0
  890. angr/procedures/glibc/__init__.py +3 -0
  891. angr/procedures/glibc/__libc_init.py +36 -0
  892. angr/procedures/glibc/__libc_start_main.py +294 -0
  893. angr/procedures/glibc/dynamic_loading.py +19 -0
  894. angr/procedures/glibc/scanf.py +10 -0
  895. angr/procedures/glibc/sscanf.py +5 -0
  896. angr/procedures/gnulib/__init__.py +3 -0
  897. angr/procedures/gnulib/xalloc_die.py +13 -0
  898. angr/procedures/gnulib/xstrtol_fatal.py +13 -0
  899. angr/procedures/java/__init__.py +38 -0
  900. angr/procedures/java/unconstrained.py +64 -0
  901. angr/procedures/java_io/__init__.py +0 -0
  902. angr/procedures/java_io/read.py +11 -0
  903. angr/procedures/java_io/write.py +16 -0
  904. angr/procedures/java_jni/__init__.py +475 -0
  905. angr/procedures/java_jni/array_operations.py +309 -0
  906. angr/procedures/java_jni/class_and_interface_operations.py +31 -0
  907. angr/procedures/java_jni/field_access.py +176 -0
  908. angr/procedures/java_jni/global_and_local_refs.py +56 -0
  909. angr/procedures/java_jni/method_calls.py +364 -0
  910. angr/procedures/java_jni/not_implemented.py +25 -0
  911. angr/procedures/java_jni/object_operations.py +95 -0
  912. angr/procedures/java_jni/string_operations.py +86 -0
  913. angr/procedures/java_jni/version_information.py +11 -0
  914. angr/procedures/java_lang/__init__.py +0 -0
  915. angr/procedures/java_lang/character.py +31 -0
  916. angr/procedures/java_lang/double.py +24 -0
  917. angr/procedures/java_lang/exit.py +12 -0
  918. angr/procedures/java_lang/getsimplename.py +15 -0
  919. angr/procedures/java_lang/integer.py +42 -0
  920. angr/procedures/java_lang/load_library.py +8 -0
  921. angr/procedures/java_lang/math.py +14 -0
  922. angr/procedures/java_lang/string.py +78 -0
  923. angr/procedures/java_lang/stringbuilder.py +43 -0
  924. angr/procedures/java_lang/system.py +17 -0
  925. angr/procedures/java_util/__init__.py +0 -0
  926. angr/procedures/java_util/collection.py +34 -0
  927. angr/procedures/java_util/iterator.py +45 -0
  928. angr/procedures/java_util/list.py +98 -0
  929. angr/procedures/java_util/map.py +132 -0
  930. angr/procedures/java_util/random.py +11 -0
  931. angr/procedures/java_util/scanner_nextline.py +22 -0
  932. angr/procedures/libc/__init__.py +3 -0
  933. angr/procedures/libc/abort.py +8 -0
  934. angr/procedures/libc/access.py +10 -0
  935. angr/procedures/libc/atoi.py +14 -0
  936. angr/procedures/libc/atol.py +12 -0
  937. angr/procedures/libc/calloc.py +7 -0
  938. angr/procedures/libc/closelog.py +9 -0
  939. angr/procedures/libc/err.py +13 -0
  940. angr/procedures/libc/error.py +55 -0
  941. angr/procedures/libc/exit.py +10 -0
  942. angr/procedures/libc/fclose.py +20 -0
  943. angr/procedures/libc/feof.py +19 -0
  944. angr/procedures/libc/fflush.py +15 -0
  945. angr/procedures/libc/fgetc.py +24 -0
  946. angr/procedures/libc/fgets.py +68 -0
  947. angr/procedures/libc/fopen.py +64 -0
  948. angr/procedures/libc/fprintf.py +24 -0
  949. angr/procedures/libc/fputc.py +22 -0
  950. angr/procedures/libc/fputs.py +23 -0
  951. angr/procedures/libc/fread.py +22 -0
  952. angr/procedures/libc/free.py +8 -0
  953. angr/procedures/libc/fscanf.py +20 -0
  954. angr/procedures/libc/fseek.py +32 -0
  955. angr/procedures/libc/ftell.py +21 -0
  956. angr/procedures/libc/fwrite.py +18 -0
  957. angr/procedures/libc/getchar.py +13 -0
  958. angr/procedures/libc/getdelim.py +96 -0
  959. angr/procedures/libc/getegid.py +7 -0
  960. angr/procedures/libc/geteuid.py +7 -0
  961. angr/procedures/libc/getgid.py +7 -0
  962. angr/procedures/libc/gets.py +66 -0
  963. angr/procedures/libc/getuid.py +7 -0
  964. angr/procedures/libc/malloc.py +11 -0
  965. angr/procedures/libc/memcmp.py +69 -0
  966. angr/procedures/libc/memcpy.py +37 -0
  967. angr/procedures/libc/memset.py +69 -0
  968. angr/procedures/libc/openlog.py +9 -0
  969. angr/procedures/libc/perror.py +12 -0
  970. angr/procedures/libc/printf.py +33 -0
  971. angr/procedures/libc/putchar.py +12 -0
  972. angr/procedures/libc/puts.py +16 -0
  973. angr/procedures/libc/rand.py +7 -0
  974. angr/procedures/libc/realloc.py +7 -0
  975. angr/procedures/libc/rewind.py +11 -0
  976. angr/procedures/libc/scanf.py +20 -0
  977. angr/procedures/libc/setbuf.py +8 -0
  978. angr/procedures/libc/setvbuf.py +6 -0
  979. angr/procedures/libc/snprintf.py +33 -0
  980. angr/procedures/libc/sprintf.py +22 -0
  981. angr/procedures/libc/srand.py +6 -0
  982. angr/procedures/libc/sscanf.py +13 -0
  983. angr/procedures/libc/stpcpy.py +18 -0
  984. angr/procedures/libc/strcat.py +13 -0
  985. angr/procedures/libc/strchr.py +44 -0
  986. angr/procedures/libc/strcmp.py +28 -0
  987. angr/procedures/libc/strcpy.py +13 -0
  988. angr/procedures/libc/strlen.py +99 -0
  989. angr/procedures/libc/strncat.py +18 -0
  990. angr/procedures/libc/strncmp.py +180 -0
  991. angr/procedures/libc/strncpy.py +18 -0
  992. angr/procedures/libc/strnlen.py +13 -0
  993. angr/procedures/libc/strstr.py +94 -0
  994. angr/procedures/libc/strtol.py +263 -0
  995. angr/procedures/libc/strtoul.py +9 -0
  996. angr/procedures/libc/system.py +12 -0
  997. angr/procedures/libc/time.py +9 -0
  998. angr/procedures/libc/tmpnam.py +19 -0
  999. angr/procedures/libc/tolower.py +7 -0
  1000. angr/procedures/libc/toupper.py +7 -0
  1001. angr/procedures/libc/ungetc.py +19 -0
  1002. angr/procedures/libc/vsnprintf.py +16 -0
  1003. angr/procedures/libc/wchar.py +15 -0
  1004. angr/procedures/libstdcpp/__init__.py +0 -0
  1005. angr/procedures/libstdcpp/_unwind_resume.py +10 -0
  1006. angr/procedures/libstdcpp/std____throw_bad_alloc.py +12 -0
  1007. angr/procedures/libstdcpp/std____throw_bad_cast.py +12 -0
  1008. angr/procedures/libstdcpp/std____throw_length_error.py +12 -0
  1009. angr/procedures/libstdcpp/std____throw_logic_error.py +12 -0
  1010. angr/procedures/libstdcpp/std__terminate.py +12 -0
  1011. angr/procedures/linux_kernel/__init__.py +3 -0
  1012. angr/procedures/linux_kernel/access.py +17 -0
  1013. angr/procedures/linux_kernel/arch_prctl.py +33 -0
  1014. angr/procedures/linux_kernel/arm_user_helpers.py +58 -0
  1015. angr/procedures/linux_kernel/brk.py +17 -0
  1016. angr/procedures/linux_kernel/cwd.py +27 -0
  1017. angr/procedures/linux_kernel/fstat.py +137 -0
  1018. angr/procedures/linux_kernel/fstat64.py +169 -0
  1019. angr/procedures/linux_kernel/futex.py +17 -0
  1020. angr/procedures/linux_kernel/getegid.py +16 -0
  1021. angr/procedures/linux_kernel/geteuid.py +16 -0
  1022. angr/procedures/linux_kernel/getgid.py +16 -0
  1023. angr/procedures/linux_kernel/getpid.py +13 -0
  1024. angr/procedures/linux_kernel/getrlimit.py +24 -0
  1025. angr/procedures/linux_kernel/gettid.py +8 -0
  1026. angr/procedures/linux_kernel/getuid.py +16 -0
  1027. angr/procedures/linux_kernel/iovec.py +43 -0
  1028. angr/procedures/linux_kernel/lseek.py +39 -0
  1029. angr/procedures/linux_kernel/mmap.py +15 -0
  1030. angr/procedures/linux_kernel/mprotect.py +41 -0
  1031. angr/procedures/linux_kernel/munmap.py +7 -0
  1032. angr/procedures/linux_kernel/openat.py +28 -0
  1033. angr/procedures/linux_kernel/set_tid_address.py +7 -0
  1034. angr/procedures/linux_kernel/sigaction.py +16 -0
  1035. angr/procedures/linux_kernel/sigprocmask.py +20 -0
  1036. angr/procedures/linux_kernel/stat.py +22 -0
  1037. angr/procedures/linux_kernel/sysinfo.py +58 -0
  1038. angr/procedures/linux_kernel/tgkill.py +7 -0
  1039. angr/procedures/linux_kernel/time.py +30 -0
  1040. angr/procedures/linux_kernel/uid.py +29 -0
  1041. angr/procedures/linux_kernel/uname.py +28 -0
  1042. angr/procedures/linux_kernel/unlink.py +22 -0
  1043. angr/procedures/linux_kernel/vsyscall.py +15 -0
  1044. angr/procedures/linux_loader/__init__.py +3 -0
  1045. angr/procedures/linux_loader/_dl_initial_error_catch_tsd.py +6 -0
  1046. angr/procedures/linux_loader/_dl_rtld_lock.py +14 -0
  1047. angr/procedures/linux_loader/sim_loader.py +53 -0
  1048. angr/procedures/linux_loader/tls.py +40 -0
  1049. angr/procedures/msvcr/__getmainargs.py +15 -0
  1050. angr/procedures/msvcr/__init__.py +4 -0
  1051. angr/procedures/msvcr/_initterm.py +37 -0
  1052. angr/procedures/msvcr/fmode.py +28 -0
  1053. angr/procedures/ntdll/__init__.py +0 -0
  1054. angr/procedures/ntdll/exceptions.py +57 -0
  1055. angr/procedures/posix/__init__.py +3 -0
  1056. angr/procedures/posix/accept.py +29 -0
  1057. angr/procedures/posix/bind.py +12 -0
  1058. angr/procedures/posix/bzero.py +6 -0
  1059. angr/procedures/posix/chroot.py +26 -0
  1060. angr/procedures/posix/close.py +9 -0
  1061. angr/procedures/posix/closedir.py +6 -0
  1062. angr/procedures/posix/dup.py +55 -0
  1063. angr/procedures/posix/fcntl.py +9 -0
  1064. angr/procedures/posix/fdopen.py +77 -0
  1065. angr/procedures/posix/fileno.py +17 -0
  1066. angr/procedures/posix/fork.py +10 -0
  1067. angr/procedures/posix/getenv.py +34 -0
  1068. angr/procedures/posix/gethostbyname.py +42 -0
  1069. angr/procedures/posix/getpass.py +18 -0
  1070. angr/procedures/posix/getsockopt.py +10 -0
  1071. angr/procedures/posix/htonl.py +11 -0
  1072. angr/procedures/posix/htons.py +11 -0
  1073. angr/procedures/posix/inet_ntoa.py +61 -0
  1074. angr/procedures/posix/listen.py +12 -0
  1075. angr/procedures/posix/mmap.py +140 -0
  1076. angr/procedures/posix/open.py +17 -0
  1077. angr/procedures/posix/opendir.py +9 -0
  1078. angr/procedures/posix/poll.py +54 -0
  1079. angr/procedures/posix/pread64.py +45 -0
  1080. angr/procedures/posix/pthread.py +87 -0
  1081. angr/procedures/posix/pwrite64.py +45 -0
  1082. angr/procedures/posix/read.py +12 -0
  1083. angr/procedures/posix/readdir.py +59 -0
  1084. angr/procedures/posix/recv.py +12 -0
  1085. angr/procedures/posix/recvfrom.py +12 -0
  1086. angr/procedures/posix/select.py +46 -0
  1087. angr/procedures/posix/send.py +22 -0
  1088. angr/procedures/posix/setsockopt.py +8 -0
  1089. angr/procedures/posix/sigaction.py +20 -0
  1090. angr/procedures/posix/sim_time.py +45 -0
  1091. angr/procedures/posix/sleep.py +7 -0
  1092. angr/procedures/posix/socket.py +18 -0
  1093. angr/procedures/posix/strcasecmp.py +23 -0
  1094. angr/procedures/posix/strdup.py +17 -0
  1095. angr/procedures/posix/strtok_r.py +65 -0
  1096. angr/procedures/posix/syslog.py +15 -0
  1097. angr/procedures/posix/tz.py +8 -0
  1098. angr/procedures/posix/unlink.py +10 -0
  1099. angr/procedures/posix/usleep.py +7 -0
  1100. angr/procedures/posix/write.py +12 -0
  1101. angr/procedures/procedure_dict.py +48 -0
  1102. angr/procedures/stubs/CallReturn.py +12 -0
  1103. angr/procedures/stubs/NoReturnUnconstrained.py +12 -0
  1104. angr/procedures/stubs/Nop.py +6 -0
  1105. angr/procedures/stubs/PathTerminator.py +8 -0
  1106. angr/procedures/stubs/Redirect.py +15 -0
  1107. angr/procedures/stubs/ReturnChar.py +10 -0
  1108. angr/procedures/stubs/ReturnUnconstrained.py +24 -0
  1109. angr/procedures/stubs/UnresolvableCallTarget.py +8 -0
  1110. angr/procedures/stubs/UnresolvableJumpTarget.py +8 -0
  1111. angr/procedures/stubs/UserHook.py +15 -0
  1112. angr/procedures/stubs/__init__.py +3 -0
  1113. angr/procedures/stubs/b64_decode.py +12 -0
  1114. angr/procedures/stubs/caller.py +13 -0
  1115. angr/procedures/stubs/crazy_scanf.py +17 -0
  1116. angr/procedures/stubs/format_parser.py +677 -0
  1117. angr/procedures/stubs/syscall_stub.py +26 -0
  1118. angr/procedures/testing/__init__.py +3 -0
  1119. angr/procedures/testing/manyargs.py +8 -0
  1120. angr/procedures/testing/retreg.py +8 -0
  1121. angr/procedures/tracer/__init__.py +4 -0
  1122. angr/procedures/tracer/random.py +8 -0
  1123. angr/procedures/tracer/receive.py +21 -0
  1124. angr/procedures/tracer/transmit.py +24 -0
  1125. angr/procedures/uclibc/__init__.py +3 -0
  1126. angr/procedures/uclibc/__uClibc_main.py +9 -0
  1127. angr/procedures/win32/EncodePointer.py +6 -0
  1128. angr/procedures/win32/ExitProcess.py +8 -0
  1129. angr/procedures/win32/GetCommandLine.py +11 -0
  1130. angr/procedures/win32/GetCurrentProcessId.py +6 -0
  1131. angr/procedures/win32/GetCurrentThreadId.py +6 -0
  1132. angr/procedures/win32/GetLastInputInfo.py +37 -0
  1133. angr/procedures/win32/GetModuleHandle.py +30 -0
  1134. angr/procedures/win32/GetProcessAffinityMask.py +34 -0
  1135. angr/procedures/win32/InterlockedExchange.py +14 -0
  1136. angr/procedures/win32/IsProcessorFeaturePresent.py +6 -0
  1137. angr/procedures/win32/VirtualAlloc.py +113 -0
  1138. angr/procedures/win32/VirtualProtect.py +59 -0
  1139. angr/procedures/win32/__init__.py +3 -0
  1140. angr/procedures/win32/critical_section.py +11 -0
  1141. angr/procedures/win32/dynamic_loading.py +103 -0
  1142. angr/procedures/win32/file_handles.py +47 -0
  1143. angr/procedures/win32/gethostbyname.py +10 -0
  1144. angr/procedures/win32/heap.py +42 -0
  1145. angr/procedures/win32/is_bad_ptr.py +25 -0
  1146. angr/procedures/win32/local_storage.py +85 -0
  1147. angr/procedures/win32/mutex.py +10 -0
  1148. angr/procedures/win32/sim_time.py +135 -0
  1149. angr/procedures/win32/system_paths.py +34 -0
  1150. angr/procedures/win32_kernel/ExAllocatePool.py +12 -0
  1151. angr/procedures/win32_kernel/ExFreePoolWithTag.py +7 -0
  1152. angr/procedures/win32_kernel/__init__.py +3 -0
  1153. angr/procedures/win_user32/__init__.py +0 -0
  1154. angr/procedures/win_user32/chars.py +12 -0
  1155. angr/procedures/win_user32/keyboard.py +13 -0
  1156. angr/procedures/win_user32/messagebox.py +49 -0
  1157. angr/project.py +834 -0
  1158. angr/protos/__init__.py +13 -0
  1159. angr/protos/cfg_pb2.py +31 -0
  1160. angr/protos/function_pb2.py +37 -0
  1161. angr/protos/primitives_pb2.py +124 -0
  1162. angr/protos/variables_pb2.py +126 -0
  1163. angr/protos/xrefs_pb2.py +34 -0
  1164. angr/py.typed +1 -0
  1165. angr/serializable.py +63 -0
  1166. angr/service.py +35 -0
  1167. angr/sim_manager.py +971 -0
  1168. angr/sim_options.py +444 -0
  1169. angr/sim_procedure.py +606 -0
  1170. angr/sim_state.py +1003 -0
  1171. angr/sim_state_options.py +409 -0
  1172. angr/sim_type.py +3372 -0
  1173. angr/sim_variable.py +562 -0
  1174. angr/simos/__init__.py +31 -0
  1175. angr/simos/cgc.py +152 -0
  1176. angr/simos/javavm.py +471 -0
  1177. angr/simos/linux.py +519 -0
  1178. angr/simos/simos.py +450 -0
  1179. angr/simos/snimmuc_nxp.py +152 -0
  1180. angr/simos/userland.py +163 -0
  1181. angr/simos/windows.py +562 -0
  1182. angr/slicer.py +353 -0
  1183. angr/state_hierarchy.py +262 -0
  1184. angr/state_plugins/__init__.py +29 -0
  1185. angr/state_plugins/callstack.py +404 -0
  1186. angr/state_plugins/cgc.py +153 -0
  1187. angr/state_plugins/concrete.py +297 -0
  1188. angr/state_plugins/debug_variables.py +194 -0
  1189. angr/state_plugins/filesystem.py +469 -0
  1190. angr/state_plugins/gdb.py +146 -0
  1191. angr/state_plugins/globals.py +62 -0
  1192. angr/state_plugins/heap/__init__.py +5 -0
  1193. angr/state_plugins/heap/heap_base.py +126 -0
  1194. angr/state_plugins/heap/heap_brk.py +134 -0
  1195. angr/state_plugins/heap/heap_freelist.py +210 -0
  1196. angr/state_plugins/heap/heap_libc.py +45 -0
  1197. angr/state_plugins/heap/heap_ptmalloc.py +646 -0
  1198. angr/state_plugins/heap/utils.py +21 -0
  1199. angr/state_plugins/history.py +548 -0
  1200. angr/state_plugins/inspect.py +376 -0
  1201. angr/state_plugins/javavm_classloader.py +133 -0
  1202. angr/state_plugins/jni_references.py +93 -0
  1203. angr/state_plugins/libc.py +1263 -0
  1204. angr/state_plugins/light_registers.py +170 -0
  1205. angr/state_plugins/log.py +85 -0
  1206. angr/state_plugins/loop_data.py +92 -0
  1207. angr/state_plugins/plugin.py +155 -0
  1208. angr/state_plugins/posix.py +709 -0
  1209. angr/state_plugins/preconstrainer.py +195 -0
  1210. angr/state_plugins/scratch.py +175 -0
  1211. angr/state_plugins/sim_action.py +334 -0
  1212. angr/state_plugins/sim_action_object.py +148 -0
  1213. angr/state_plugins/sim_event.py +58 -0
  1214. angr/state_plugins/solver.py +1129 -0
  1215. angr/state_plugins/symbolizer.py +292 -0
  1216. angr/state_plugins/trace_additions.py +752 -0
  1217. angr/state_plugins/uc_manager.py +85 -0
  1218. angr/state_plugins/unicorn_engine.py +1899 -0
  1219. angr/state_plugins/view.py +341 -0
  1220. angr/storage/__init__.py +9 -0
  1221. angr/storage/file.py +1219 -0
  1222. angr/storage/memory_mixins/__init__.py +393 -0
  1223. angr/storage/memory_mixins/__init__.pyi +49 -0
  1224. angr/storage/memory_mixins/actions_mixin.py +69 -0
  1225. angr/storage/memory_mixins/address_concretization_mixin.py +388 -0
  1226. angr/storage/memory_mixins/bvv_conversion_mixin.py +74 -0
  1227. angr/storage/memory_mixins/clouseau_mixin.py +131 -0
  1228. angr/storage/memory_mixins/conditional_store_mixin.py +24 -0
  1229. angr/storage/memory_mixins/convenient_mappings_mixin.py +257 -0
  1230. angr/storage/memory_mixins/default_filler_mixin.py +146 -0
  1231. angr/storage/memory_mixins/dirty_addrs_mixin.py +9 -0
  1232. angr/storage/memory_mixins/hex_dumper_mixin.py +85 -0
  1233. angr/storage/memory_mixins/javavm_memory/__init__.py +1 -0
  1234. angr/storage/memory_mixins/javavm_memory/javavm_memory_mixin.py +394 -0
  1235. angr/storage/memory_mixins/keyvalue_memory/__init__.py +1 -0
  1236. angr/storage/memory_mixins/keyvalue_memory/keyvalue_memory_mixin.py +36 -0
  1237. angr/storage/memory_mixins/label_merger_mixin.py +31 -0
  1238. angr/storage/memory_mixins/multi_value_merger_mixin.py +68 -0
  1239. angr/storage/memory_mixins/name_resolution_mixin.py +70 -0
  1240. angr/storage/memory_mixins/paged_memory/__init__.py +0 -0
  1241. angr/storage/memory_mixins/paged_memory/page_backer_mixins.py +266 -0
  1242. angr/storage/memory_mixins/paged_memory/paged_memory_mixin.py +750 -0
  1243. angr/storage/memory_mixins/paged_memory/paged_memory_multivalue_mixin.py +63 -0
  1244. angr/storage/memory_mixins/paged_memory/pages/__init__.py +33 -0
  1245. angr/storage/memory_mixins/paged_memory/pages/cooperation.py +330 -0
  1246. angr/storage/memory_mixins/paged_memory/pages/history_tracking_mixin.py +87 -0
  1247. angr/storage/memory_mixins/paged_memory/pages/ispo_mixin.py +53 -0
  1248. angr/storage/memory_mixins/paged_memory/pages/list_page.py +346 -0
  1249. angr/storage/memory_mixins/paged_memory/pages/multi_values.py +290 -0
  1250. angr/storage/memory_mixins/paged_memory/pages/mv_list_page.py +434 -0
  1251. angr/storage/memory_mixins/paged_memory/pages/permissions_mixin.py +33 -0
  1252. angr/storage/memory_mixins/paged_memory/pages/refcount_mixin.py +51 -0
  1253. angr/storage/memory_mixins/paged_memory/pages/ultra_page.py +468 -0
  1254. angr/storage/memory_mixins/paged_memory/privileged_mixin.py +36 -0
  1255. angr/storage/memory_mixins/paged_memory/stack_allocation_mixin.py +73 -0
  1256. angr/storage/memory_mixins/regioned_memory/__init__.py +6 -0
  1257. angr/storage/memory_mixins/regioned_memory/abstract_address_descriptor.py +35 -0
  1258. angr/storage/memory_mixins/regioned_memory/abstract_merger_mixin.py +43 -0
  1259. angr/storage/memory_mixins/regioned_memory/region_category_mixin.py +7 -0
  1260. angr/storage/memory_mixins/regioned_memory/region_data.py +245 -0
  1261. angr/storage/memory_mixins/regioned_memory/region_meta_mixin.py +125 -0
  1262. angr/storage/memory_mixins/regioned_memory/regioned_address_concretization_mixin.py +118 -0
  1263. angr/storage/memory_mixins/regioned_memory/regioned_memory_mixin.py +462 -0
  1264. angr/storage/memory_mixins/regioned_memory/static_find_mixin.py +70 -0
  1265. angr/storage/memory_mixins/simple_interface_mixin.py +73 -0
  1266. angr/storage/memory_mixins/simplification_mixin.py +13 -0
  1267. angr/storage/memory_mixins/size_resolution_mixin.py +140 -0
  1268. angr/storage/memory_mixins/slotted_memory.py +140 -0
  1269. angr/storage/memory_mixins/smart_find_mixin.py +159 -0
  1270. angr/storage/memory_mixins/symbolic_merger_mixin.py +12 -0
  1271. angr/storage/memory_mixins/top_merger_mixin.py +24 -0
  1272. angr/storage/memory_mixins/underconstrained_mixin.py +67 -0
  1273. angr/storage/memory_mixins/unwrapper_mixin.py +26 -0
  1274. angr/storage/memory_object.py +194 -0
  1275. angr/storage/pcap.py +65 -0
  1276. angr/tablespecs.py +90 -0
  1277. angr/utils/__init__.py +33 -0
  1278. angr/utils/algo.py +33 -0
  1279. angr/utils/constants.py +7 -0
  1280. angr/utils/cowdict.py +64 -0
  1281. angr/utils/dynamic_dictlist.py +92 -0
  1282. angr/utils/enums_conv.py +80 -0
  1283. angr/utils/env.py +11 -0
  1284. angr/utils/formatting.py +124 -0
  1285. angr/utils/funcid.py +133 -0
  1286. angr/utils/graph.py +822 -0
  1287. angr/utils/lazy_import.py +12 -0
  1288. angr/utils/library.py +214 -0
  1289. angr/utils/loader.py +55 -0
  1290. angr/utils/mp.py +64 -0
  1291. angr/utils/segment_list.py +558 -0
  1292. angr/utils/timing.py +45 -0
  1293. angr/utils/typing.py +17 -0
  1294. angr/vaults.py +370 -0
  1295. angr-9.2.103.dist-info/LICENSE +24 -0
  1296. angr-9.2.103.dist-info/METADATA +119 -0
  1297. angr-9.2.103.dist-info/RECORD +1300 -0
  1298. angr-9.2.103.dist-info/WHEEL +5 -0
  1299. angr-9.2.103.dist-info/entry_points.txt +2 -0
  1300. angr-9.2.103.dist-info/top_level.txt +1 -0
angr/storage/file.py ADDED
@@ -0,0 +1,1219 @@
1
+ import claripy
2
+ import logging
3
+ import itertools
4
+
5
+ from .memory_mixins import DefaultMemory
6
+ from ..state_plugins.plugin import SimStatePlugin
7
+ from ..state_plugins.sim_action_object import SimActionObject
8
+ from .. import sim_options
9
+
10
+ l = logging.getLogger(name=__name__)
11
+
12
+ file_counter = itertools.count()
13
+ dialogue_counter = itertools.count()
14
+
15
+
16
+ class Flags: # pylint: disable=W0232,
17
+ O_RDONLY = 0
18
+ O_WRONLY = 1
19
+ O_RDWR = 2
20
+ O_ACCMODE = 3 # bitmask for read/write mode
21
+ O_APPEND = 0o2000
22
+ O_ASYNC = 0o20000
23
+ O_CLOEXEC = 0o2000000
24
+ # TODO mode for this flag
25
+ O_CREAT = 0o100
26
+ O_DIRECT = 0o40000
27
+ O_DIRECTORY = 0o200000
28
+ O_DSYNC = 0o10000
29
+ O_EXCL = 0o200
30
+ O_LARGEFILE = 0o100000
31
+ O_NOATIME = 0o1000000
32
+ O_NOCTTY = 0o400
33
+ O_NOFOLLOW = 0o400000
34
+ O_NONBLOCK = 0o4000
35
+ O_NDELAY = 0o4000
36
+ O_PATH = 0o10000000
37
+ O_SYNC = 0o4010000
38
+ O_TMPFILE = 0o20200000
39
+ O_TRUNC = 0o1000
40
+
41
+
42
+ def _deps_unpack(a):
43
+ if isinstance(a, SimActionObject):
44
+ return a.ast, a.reg_deps, a.tmp_deps
45
+ else:
46
+ return a, None, None
47
+
48
+
49
+ class SimFileBase(SimStatePlugin):
50
+ """
51
+ SimFiles are the storage mechanisms used by SimFileDescriptors.
52
+
53
+ Different types of SimFiles can have drastically different interfaces, and as a result there's not much that can be
54
+ specified on this base class. All the read and write methods take a ``pos`` argument, which may have different
55
+ semantics per-class. ``0`` will always be a valid position to use, though, and the next position you should use
56
+ is part of the return tuple.
57
+
58
+ Some simfiles are "streams", meaning that the position that reads come from is determined not by the position you
59
+ pass in (it will in fact be ignored), but by an internal variable. This is stored as ``.pos`` if you care to read
60
+ it. Don't write to it. The same lack-of-semantics applies to this field as well.
61
+
62
+ :ivar name: The name of the file. Purely for cosmetic purposes
63
+ :ivar ident: The identifier of the file, typically autogenerated from the name and a nonce. Purely for cosmetic
64
+ purposes, but does appear in symbolic values autogenerated in the file.
65
+ :ivar seekable: Bool indicating whether seek operations on this file should succeed. If this is True, then ``pos``
66
+ must be a number of bytes from the start of the file.
67
+ :ivar writable: Bool indicating whether writing to this file is allowed.
68
+ :ivar pos: If the file is a stream, this will be the current position. Otherwise, None.
69
+ :ivar concrete: Whether or not this file contains mostly concrete data. Will be used by some SimProcedures to
70
+ choose how to handle variable-length operations like fgets.
71
+ :ivar file_exists:
72
+ Set to False, if file does not exists, set to a claripy Bool if unknown, default True.
73
+ """
74
+
75
+ seekable = False
76
+ pos = None
77
+
78
+ def __init__(self, name=None, writable=True, ident=None, concrete=False, file_exists=True, **kwargs):
79
+ self.name = name
80
+ self.ident = ident
81
+ self.writable = writable
82
+ self.concrete = concrete
83
+ self.file_exists = file_exists
84
+
85
+ if ident is None:
86
+ self.ident = self.make_ident(self.name)
87
+
88
+ if "memory_id" in kwargs:
89
+ kwargs["memory_id"] = self.ident
90
+ super().__init__(**kwargs)
91
+
92
+ @staticmethod
93
+ def make_ident(name):
94
+ if name is None:
95
+ return "file"
96
+
97
+ if type(name) is str:
98
+ name = name.encode()
99
+
100
+ def generate():
101
+ consecutive_bad = 0
102
+ for ch in name:
103
+ if 0x20 <= ch <= 0x7E:
104
+ consecutive_bad = 0
105
+ yield chr(ch)
106
+ elif consecutive_bad < 3:
107
+ consecutive_bad += 1
108
+ yield "?"
109
+
110
+ nice_name = "".join(generate())
111
+ return "file_%d_%s" % (next(file_counter), nice_name)
112
+
113
+ def concretize(self, **kwargs):
114
+ """
115
+ Return a concretization of the contents of the file. The type of the return value of this method will vary
116
+ depending on which kind of SimFile you're using.
117
+ """
118
+ raise NotImplementedError
119
+
120
+ def read(self, pos, size, **kwargs):
121
+ """
122
+ Read some data from the file.
123
+
124
+ :param pos: The offset in the file to read from.
125
+ :param size: The size to read. May be symbolic.
126
+ :return: A tuple of the data read (a bitvector of the length that is the maximum length of the read),
127
+ the actual size of the read, and the new file position pointer.
128
+ """
129
+ raise NotImplementedError
130
+
131
+ def write(self, pos, data, size=None, **kwargs):
132
+ """
133
+ Write some data to the file.
134
+
135
+ :param pos: The offset in the file to write to. May be ignored if the file is a stream or device.
136
+ :param data: The data to write as a bitvector
137
+ :param size: The optional size of the data to write. If not provided will default to the length of the data.
138
+ Must be constrained to less than or equal to the size of the data.
139
+ :return: The new file position pointer.
140
+ """
141
+ raise NotImplementedError
142
+
143
+ @property
144
+ def size(self):
145
+ """
146
+ The number of data bytes stored by the file at present. May be a symbolic value.
147
+ """
148
+ raise NotImplementedError
149
+
150
+ @DefaultMemory.memo
151
+ def copy(self, memo):
152
+ o = super().copy(memo)
153
+ o.ident = self.ident
154
+ o.name = self.name
155
+ o.ident = self.ident
156
+ o.writable = self.writable
157
+ o.concrete = self.concrete
158
+ o.file_exists = self.file_exists
159
+ return o
160
+
161
+
162
+ class SimFile(SimFileBase, DefaultMemory): # TODO: pick a better base class omg
163
+ """
164
+ The normal SimFile is meant to model files on disk. It subclasses SimSymbolicMemory so loads and stores to/from
165
+ it are very simple.
166
+
167
+ :param name: The name of the file
168
+ :param content: Optional initial content for the file as a string or bitvector
169
+ :param size: Optional size of the file. If content is not specified, it defaults to zero
170
+ :param has_end: Whether the size boundary is treated as the end of the file or a frontier at which new content
171
+ will be generated. If unspecified, will pick its value based on options.FILES_HAVE_EOF. Another
172
+ caveat is that if the size is also unspecified this value will default to False.
173
+ :param seekable: Optional bool indicating whether seek operations on this file should succeed, default True.
174
+ :param writable: Whether writing to this file is allowed
175
+ :param concrete: Whether or not this file contains mostly concrete data. Will be used by some SimProcedures to
176
+ choose how to handle variable-length operations like fgets.
177
+
178
+ :ivar has_end: Whether this file has an EOF
179
+ """
180
+
181
+ def __init__(
182
+ self,
183
+ name=None,
184
+ content=None,
185
+ size=None,
186
+ has_end=None,
187
+ seekable=True,
188
+ writable=True,
189
+ ident=None,
190
+ concrete=None,
191
+ **kwargs,
192
+ ):
193
+ kwargs["memory_id"] = kwargs.get("memory_id", "file")
194
+ super().__init__(name=name, writable=writable, ident=ident, **kwargs)
195
+ self._size = size
196
+ self.has_end = has_end
197
+ self.seekable = seekable
198
+
199
+ # this is hacky because we need to work around not having a state yet
200
+ content = _deps_unpack(content)[0]
201
+ if type(content) is bytes:
202
+ if concrete is None:
203
+ concrete = True
204
+ content = claripy.BVV(content)
205
+ elif type(content) is str:
206
+ if concrete is None:
207
+ concrete = True
208
+ content = claripy.BVV(content.encode())
209
+ elif content is None:
210
+ pass
211
+ elif isinstance(content, claripy.Bits):
212
+ if concrete is None and not content.symbolic:
213
+ concrete = True
214
+ pass
215
+ else:
216
+ raise TypeError("Can't handle SimFile content of type %s" % type(content))
217
+
218
+ if concrete is None:
219
+ concrete = False
220
+ self.concrete = concrete
221
+
222
+ if content is not None:
223
+ self.__content = content
224
+
225
+ if self._size is None:
226
+ self._size = len(content) // 8
227
+ else:
228
+ if self._size is None:
229
+ self._size = 0
230
+ if has_end is None:
231
+ self.has_end = False
232
+
233
+ @property
234
+ def category(self): # override trying to determine from self.id to allow arbitrary idents
235
+ return "file"
236
+
237
+ def set_state(self, state):
238
+ super().set_state(state)
239
+ try:
240
+ content = self.__content
241
+ except AttributeError:
242
+ pass
243
+ else:
244
+ self.store(0, content)
245
+ del self.__content
246
+
247
+ if self.has_end is None:
248
+ self.has_end = sim_options.FILES_HAVE_EOF in state.options
249
+
250
+ if type(self._size) is int:
251
+ self._size = claripy.BVV(self._size, state.arch.bits)
252
+ elif len(self._size) != state.arch.bits:
253
+ raise TypeError("SimFile size must be a bitvector of size %d (arch.bits)" % state.arch.bits)
254
+
255
+ @property
256
+ def size(self):
257
+ return self._size
258
+
259
+ def concretize(self, **kwargs):
260
+ """
261
+ Return a concretization of the contents of the file, as a flat bytestring.
262
+ """
263
+ size = self.state.solver.min(self._size, **kwargs)
264
+ data = self.load(0, size)
265
+
266
+ kwargs["cast_to"] = kwargs.get("cast_to", bytes)
267
+ kwargs["extra_constraints"] = tuple(kwargs.get("extra_constraints", ())) + (self._size == size,)
268
+ return self.state.solver.eval(data, **kwargs)
269
+
270
+ def read(self, pos, size, **kwargs):
271
+ disable_actions = kwargs.pop("disable_actions", False)
272
+ inspect = kwargs.pop("inspect", True)
273
+
274
+ # Step 1: figure out a reasonable concrete size to use for the memory load
275
+ # since we don't want to concretize anything
276
+ if self.state.solver.symbolic(size):
277
+ try:
278
+ passed_max_size = self.state.solver.max(
279
+ size, extra_constraints=(size < self.state.libc.max_packet_size,)
280
+ )
281
+ except SimSolverError:
282
+ passed_max_size = self.state.solver.min(size)
283
+ l.warning("Symbolic read size is too large for threshold - concretizing to min (%d)", passed_max_size)
284
+ self.state.add_constraints(size == passed_max_size)
285
+ else:
286
+ passed_max_size = self.state.solver.eval(size)
287
+ if passed_max_size > 2**13:
288
+ l.warning("Program performing extremely large reads")
289
+
290
+ # Step 2.1: check for the possibility of EOFs
291
+ # If it's not possible to EOF (because there's no EOF), this is very simple!
292
+ if not self.has_end:
293
+ # bump the storage size as we read
294
+ self._size = self.state.solver.If(size + pos > self._size, size + pos, self._size)
295
+ return self.load(pos, passed_max_size, disable_actions=disable_actions, inspect=inspect), size, size + pos
296
+
297
+ # Step 2.2: check harder for the possibility of EOFs
298
+ # This is the size if we're reading to the end of the file
299
+ distance_to_eof = self._size - pos
300
+ distance_to_eof = self.state.solver.If(self.state.solver.SLE(distance_to_eof, 0), 0, distance_to_eof)
301
+
302
+ # try to frontload some constraint solving to see if it's impossible for this read to EOF
303
+ if self.state.solver.satisfiable(extra_constraints=(size > distance_to_eof,)):
304
+ # it's possible to EOF
305
+ # final size = min(passed_size, max(distance_to_eof, 0))
306
+ real_size = self.state.solver.If(size >= distance_to_eof, distance_to_eof, size)
307
+
308
+ return (
309
+ self.load(pos, passed_max_size, disable_actions=disable_actions, inspect=inspect),
310
+ real_size,
311
+ real_size + pos,
312
+ )
313
+ else:
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.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 = self.state.solver.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 = self.state.solver.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 = state.solver.BVV(self.pos, state.arch.bits)
382
+ elif len(self.pos) != state.arch.bits:
383
+ raise TypeError("SimFileStream position must be a bitvector of size %d (arch.bits)" % state.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 None
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 = self.state.solver.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.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("SimPacket.read(%d): Negative packet number?" % pos)
514
+ elif pos > len(self.content):
515
+ raise SimFileError("SimPacket.read(%d): Packet number is past frontier of %d?" % (pos, len(self.content)))
516
+ elif 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 = self.state.solver.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
+ "packetsize_%d_%s" % (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
+ "packet_%d_%s" % (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.Bits) else len(data)
598
+ if type(size) is int:
599
+ size = self.state.solver.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("SimPacket.write(%d): Negative packet number?" % pos)
606
+ elif pos > len(self.content):
607
+ raise SimFileError("SimPacket.write(%d): Packet number is past frontier of %d?" % (pos, len(self.content)))
608
+ elif 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
+ elif 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 = self.state.solver.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 = self.state.solver.ite_cases(
652
+ zip(merge_conditions[1:], (o.content[i][1] for o in others)), default[1]
653
+ )
654
+ self.content[i] = (merged_data, merged_size)
655
+
656
+ return True
657
+
658
+ def widen(self, _):
659
+ raise SimMergeError("Widening the filesystem is unsupported")
660
+
661
+
662
+ class SimPacketsStream(SimPackets):
663
+ """
664
+ A specialized SimPackets that tracks its position internally.
665
+
666
+ The pos argument to the read and write methods will be ignored, and will return None. Instead, there is an
667
+ attribute ``pos`` on the file itself, which will give you what you want.
668
+
669
+ :param name: The name of the file, for cosmetic purposes
670
+ :param pos: The initial position of the file, default zero
671
+ :param kwargs: Any other keyword arguments will go on to the SimPackets constructor.
672
+
673
+ :ivar pos: The current position in the file.
674
+ """
675
+
676
+ def __init__(self, name, pos=0, **kwargs):
677
+ super().__init__(name, **kwargs)
678
+ self.pos = pos
679
+
680
+ def read(self, pos, size, **kwargs):
681
+ no_stream = kwargs.pop("no_stream", False)
682
+ if not no_stream:
683
+ pos = self.pos
684
+ data, size, pos = super().read(pos, size, **kwargs)
685
+ if not no_stream:
686
+ self.pos = pos
687
+ return data, size, pos
688
+
689
+ def write(self, _, data, size=None, **kwargs):
690
+ self.pos = super().write(self.pos, data, size, **kwargs)
691
+ return None
692
+
693
+ @SimStatePlugin.memo
694
+ def copy(self, memo):
695
+ c = super().copy(memo)
696
+ c.pos = self.pos
697
+ return c
698
+
699
+ def merge(self, others, merge_conditions, common_ancestor=None): # pylint: disable=unused-argument
700
+ if any(o.pos != self.pos for o in others):
701
+ raise SimMergeError("Can't merge SimPacketsStreams with disparate positions")
702
+ return super().merge(others, merge_conditions, common_ancestor=common_ancestor)
703
+
704
+
705
+ class SimFileDescriptorBase(SimStatePlugin):
706
+ """
707
+ The base class for implementations of POSIX file descriptors.
708
+
709
+ All file descriptors should respect the CONCRETIZE_SYMBOLIC_{READ,WRITE}_SIZES state options.
710
+ """
711
+
712
+ def read(self, pos, size, **kwargs):
713
+ """
714
+ Reads some data from the file, storing it into memory.
715
+
716
+ :param pos: The address to read data from file
717
+ :param size: The requested length of the read
718
+ :return: The real length of the read
719
+ """
720
+ data, realsize = self.read_data(size, **kwargs)
721
+ if not self.state.solver.is_true(realsize == 0):
722
+ do_concrete_update = kwargs.pop("do_concrete_update", False)
723
+ if do_concrete_update:
724
+ concrete_data = claripy.BVV(self.state.solver.eval(data), data.size())
725
+ self.state.memory.store(pos, concrete_data, action=None, inspect=False)
726
+
727
+ self.state.memory.store(pos, data, size=realsize)
728
+ return realsize
729
+
730
+ def write(self, pos, size, **kwargs):
731
+ """
732
+ Writes some data, loaded from the state, into the file.
733
+
734
+ :param pos: The address to read the data to write from in memory
735
+ :param size: The requested size of the write
736
+ :return: The real length of the write
737
+ """
738
+ if type(pos) is str:
739
+ raise TypeError("SimFileDescriptor.write takes an address and size. Did you mean write_data?")
740
+
741
+ # Find a reasonable concrete size for the load since we don't want to concretize anything
742
+ # This is copied from SimFile.read
743
+ # TODO: refactor into a generic concretization strategy?
744
+ if self.state.solver.symbolic(size):
745
+ try:
746
+ passed_max_size = self.state.solver.max(
747
+ size, extra_constraints=(size < self.state.libc.max_packet_size,)
748
+ )
749
+ except SimSolverError:
750
+ passed_max_size = self.state.solver.min(size)
751
+ l.warning("Symbolic write size is too large for threshold - concretizing to min (%d)", passed_max_size)
752
+ self.state.add_constraints(size == passed_max_size)
753
+ else:
754
+ passed_max_size = self.state.solver.eval(size)
755
+ if passed_max_size > 2**13:
756
+ l.warning("Program performing extremely large write")
757
+
758
+ data = self.state.memory.load(pos, passed_max_size)
759
+ return self.write_data(data, size, **kwargs)
760
+
761
+ def read_data(self, size, **kwargs):
762
+ """
763
+ Reads some data from the file, returning the data.
764
+
765
+ :param size: The requested length of the read
766
+ :return: A tuple of the data read and the real length of the read
767
+ """
768
+ raise NotImplementedError
769
+
770
+ def write_data(self, data, size=None, **kwargs):
771
+ """
772
+ Write some data, provided as an argument into the file.
773
+
774
+ :param data: A bitvector to write into the file
775
+ :param size: The requested size of the write (may be symbolic)
776
+ :return: The real length of the write
777
+ """
778
+ raise NotImplementedError
779
+
780
+ def seek(self, offset, whence="start"):
781
+ """
782
+ Seek the file descriptor to a different position in the file.
783
+
784
+ :param offset: The offset to seek to, interpreted according to whence
785
+ :param whence: What the offset is relative to; one of the strings "start", "current", or "end"
786
+ :return: A symbolic boolean describing whether the seek succeeded or not
787
+ """
788
+ raise NotImplementedError
789
+
790
+ def tell(self):
791
+ """
792
+ Return the current position, or None if the concept doesn't make sense for the given file.
793
+ """
794
+ raise NotImplementedError
795
+
796
+ def eof(self):
797
+ """
798
+ Return the EOF status. May be a symbolic boolean.
799
+ """
800
+ raise NotImplementedError
801
+
802
+ def size(self):
803
+ """
804
+ Return the size of the data stored in the file in bytes, or None if the concept doesn't make sense for the
805
+ given file.
806
+ """
807
+ raise NotImplementedError
808
+
809
+ @property
810
+ def read_storage(self):
811
+ """
812
+ Return the SimFile backing reads from this fd
813
+ """
814
+ raise NotImplementedError
815
+
816
+ @property
817
+ def write_storage(self):
818
+ """
819
+ Return the SimFile backing writes to this fd
820
+ """
821
+ raise NotImplementedError
822
+
823
+ @property
824
+ def read_pos(self):
825
+ """
826
+ Return the current position of the read file pointer.
827
+
828
+ If the underlying read file is a stream, this will return the position of the stream. Otherwise, will return
829
+ the position of the file descriptor in the file.
830
+ """
831
+ raise NotImplementedError
832
+
833
+ @property
834
+ def write_pos(self):
835
+ """
836
+ Return the current position of the read file pointer.
837
+
838
+ If the underlying read file is a stream, this will return the position of the stream. Otherwise, will return
839
+ the position of the file descriptor in the file.
840
+ """
841
+ raise NotImplementedError
842
+
843
+ def concretize(self, **kwargs):
844
+ """
845
+ Return a concretizeation of the data in the underlying file. Has different return types to represent different
846
+ data structures on a per-class basis.
847
+
848
+ Any arguments passed to this will be passed onto state.solver.eval.
849
+ """
850
+ raise NotImplementedError
851
+
852
+ @property
853
+ def file_exists(self):
854
+ """
855
+ This should be True in most cases.
856
+ Only if we opened an fd of unknown existence, ALL_FILES_EXIST is False and ANY_FILE_MIGHT_EXIST is True,
857
+ this is a symbolic boolean.
858
+ """
859
+ return True
860
+
861
+ def _prep_read(self, size):
862
+ return self._prep_generic(size, True)
863
+
864
+ def _prep_write(self, size):
865
+ return self._prep_generic(size, False)
866
+
867
+ def _prep_generic(self, size, is_read):
868
+ option = (
869
+ sim_options.CONCRETIZE_SYMBOLIC_FILE_READ_SIZES if is_read else sim_options.CONCRETIZE_SYMBOLIC_WRITE_SIZES
870
+ )
871
+ string = "read" if is_read else "write"
872
+ # check if we need to concretize the length
873
+ if option in self.state.options and self.state.solver.symbolic(size):
874
+ try:
875
+ size = self.state.solver.max(size, extra_constraints=(size <= self.state.libc.max_packet_size,))
876
+ except SimSolverError:
877
+ size = self.state.solver.min(size)
878
+ l.info("Concretizing symbolic %s size to %d", string, size)
879
+
880
+ return size
881
+
882
+
883
+ class SimFileDescriptor(SimFileDescriptorBase):
884
+ """
885
+ A simple file descriptor forwarding reads and writes to a SimFile. Contains information about
886
+ the current opened state of the file, such as the flags or (if relevant) the current position.
887
+
888
+ :ivar file: The SimFile described to by this descriptor
889
+ :ivar flags: The mode that the file descriptor was opened with, a bitfield of flags
890
+ """
891
+
892
+ def __init__(self, simfile, flags=0):
893
+ super().__init__()
894
+ self.file = simfile
895
+ self._pos = 0
896
+ self.flags = flags
897
+
898
+ def read_data(self, size, **kwargs):
899
+ size = self._prep_read(size)
900
+ data, realsize, self._pos = self.file.read(self._pos, size)
901
+ return data, realsize
902
+
903
+ def write_data(self, data, size=None, **kwargs):
904
+ if self.flags & Flags.O_APPEND and self.file.seekable:
905
+ self._pos = self.file.size
906
+
907
+ data = _deps_unpack(data)[0]
908
+ if size is None:
909
+ size = len(data) // self.state.arch.byte_width if isinstance(data, claripy.Bits) else len(data)
910
+
911
+ size = self._prep_write(size)
912
+ self._pos = self.file.write(self._pos, data, size)
913
+ return size
914
+
915
+ def seek(self, offset, whence="start"):
916
+ if not self.file.seekable:
917
+ return claripy.false
918
+
919
+ if type(offset) is int:
920
+ offset = self.state.solver.BVV(offset, self.state.arch.bits)
921
+
922
+ if whence == "start":
923
+ new_pos = offset
924
+ elif whence == "current":
925
+ new_pos = self._pos + offset
926
+ elif whence == "end":
927
+ new_pos = self.file.size + offset
928
+
929
+ success_condition = self.state.solver.And(
930
+ self.state.solver.SGE(new_pos, 0), self.state.solver.SLE(new_pos, self.file.size)
931
+ )
932
+ self._pos = _deps_unpack(self.state.solver.If(success_condition, new_pos, self._pos))[0]
933
+ return success_condition
934
+
935
+ def eof(self):
936
+ if not self.file.seekable:
937
+ return claripy.false
938
+ if not getattr(self.file, "has_end", True):
939
+ return claripy.false
940
+ return self._pos == self.file.size
941
+
942
+ def tell(self):
943
+ if not self.file.seekable:
944
+ return None
945
+ return self._pos
946
+
947
+ def size(self):
948
+ return self.file.size
949
+
950
+ def concretize(self, **kwargs):
951
+ """
952
+ Return a concretization of the underlying file. Returns whatever format is preferred by the file.
953
+ """
954
+ return self.file.concretize(**kwargs)
955
+
956
+ @property
957
+ def file_exists(self):
958
+ return self.file.file_exists
959
+
960
+ @property
961
+ def read_storage(self):
962
+ return self.file
963
+
964
+ @property
965
+ def write_storage(self):
966
+ return self.file
967
+
968
+ @property
969
+ def read_pos(self):
970
+ if self.file.pos is not None:
971
+ return self.file.pos
972
+ return self._pos
973
+
974
+ @property
975
+ def write_pos(self):
976
+ if self.file.pos is not None:
977
+ return self.file.pos
978
+ return self._pos
979
+
980
+ def set_state(self, state):
981
+ self.file.set_state(state)
982
+ super().set_state(state)
983
+
984
+ @SimStatePlugin.memo
985
+ def copy(self, memo):
986
+ c = type(self)(self.file.copy(memo), self.flags)
987
+ c._pos = self._pos
988
+ return c
989
+
990
+ def merge(self, others, merge_conditions, common_ancestor=None): # pylint: disable=unused-argument
991
+ # do NOT merge file content - descriptors do not have ownership, prevent duplicate merging
992
+ if not all(type(o) is type(self) for o in others):
993
+ l.error("Cannot merge SimFileDescriptors of disparate types")
994
+ return False
995
+ if not all(o.flags == self.flags for o in others):
996
+ l.error("Cannot merge SimFileDescriptors of disparate flags")
997
+ return False
998
+
999
+ if type(self._pos) is int and all(type(o._pos) is int for o in others):
1000
+ # TODO: we can do slightly better for packet-based things by having some packets have a "guard condition"
1001
+ # which makes them zero length if they're not merged in
1002
+ if any(o._pos != self._pos for o in others):
1003
+ raise SimMergeError("Cannot merge SimFileDescriptors over SimPackets with disparate number of packets")
1004
+ elif self._pos is None and all(o._pos is None for o in others):
1005
+ pass
1006
+ elif self._pos is None or any(o._pos is None for o in others):
1007
+ raise SimMergeError("Cannot merge SimFileDescriptors with inconsistent None-position - please report this!")
1008
+ else:
1009
+ self._pos = self.state.solver.ite_cases(zip(merge_conditions[1:], (o._pos for o in others)), self._pos)
1010
+
1011
+ return True
1012
+
1013
+ def widen(self, _):
1014
+ raise SimMergeError("Widening the filesystem is unsupported")
1015
+
1016
+
1017
+ class SimFileDescriptorDuplex(SimFileDescriptorBase):
1018
+ """
1019
+ A file descriptor that refers to two file storage mechanisms, one to read from and one to write to. As a result,
1020
+ operations like seek, eof, etc no longer make sense.
1021
+
1022
+ :param read_file: The SimFile to read from
1023
+ :param write_file: The SimFile to write to
1024
+ """
1025
+
1026
+ def __init__(self, read_file, write_file):
1027
+ super().__init__()
1028
+ self._read_file = read_file
1029
+ self._write_file = write_file
1030
+
1031
+ self._read_pos = 0
1032
+ self._write_pos = 0
1033
+
1034
+ def read_data(self, size, **kwargs):
1035
+ size = self._prep_read(size)
1036
+ data, realsize, self._read_pos = self._read_file.read(self._read_pos, size)
1037
+ return data, realsize
1038
+
1039
+ def write_data(self, data, size=None, **kwargs):
1040
+ data = _deps_unpack(data)[0]
1041
+ if size is None:
1042
+ size = len(data) // self.state.arch.byte_width if isinstance(data, claripy.Bits) else len(data)
1043
+
1044
+ size = self._prep_write(size)
1045
+ self._write_pos = self._write_file.write(self._write_pos, data, size)
1046
+ return size
1047
+
1048
+ def set_state(self, state):
1049
+ self._read_file.set_state(state)
1050
+ self._write_file.set_state(state)
1051
+ super().set_state(state)
1052
+
1053
+ def eof(self):
1054
+ # the thing that makes the most sense is for this to refer to the read eof status...
1055
+ if not self._read_file.seekable:
1056
+ return claripy.false
1057
+ if not getattr(self._read_file, "has_end", True):
1058
+ return claripy.false
1059
+ return self._read_pos == self._read_file.size
1060
+
1061
+ def tell(self):
1062
+ return None
1063
+
1064
+ def seek(self, offset, whence="start"):
1065
+ return claripy.false
1066
+
1067
+ def size(self):
1068
+ return None
1069
+
1070
+ def concretize(self, **kwargs):
1071
+ """
1072
+ Return a concretization of the underlying files, as a tuple of (read file, write file).
1073
+ """
1074
+ return (self._read_file.concretize(**kwargs), self._write_file.concretize(**kwargs))
1075
+
1076
+ @property
1077
+ def read_storage(self):
1078
+ return self._read_file
1079
+
1080
+ @property
1081
+ def write_storage(self):
1082
+ return self._write_file
1083
+
1084
+ @property
1085
+ def read_pos(self):
1086
+ if self._read_file.pos is not None:
1087
+ return self._read_file.pos
1088
+ return self._read_pos
1089
+
1090
+ @property
1091
+ def write_pos(self):
1092
+ if self._write_file.pos is not None:
1093
+ return self._write_file.pos
1094
+ return self._write_pos
1095
+
1096
+ @SimStatePlugin.memo
1097
+ def copy(self, memo):
1098
+ c = type(self)(self._read_file.copy(memo), self._write_file.copy(memo))
1099
+ c._read_pos = self._read_pos
1100
+ c._write_pos = self._write_pos
1101
+ return c
1102
+
1103
+ def merge(self, others, merge_conditions, common_ancestor=None): # pylint: disable=unused-argument
1104
+ # do NOT merge storage mechanisms here - fs and posix handle that
1105
+ if not all(type(o) is type(self) for o in others):
1106
+ raise SimMergeError("Cannot merge SimFileDescriptors of disparate types")
1107
+
1108
+ if type(self._read_pos) is int and all(type(o._read_pos) is int for o in others):
1109
+ if any(o._read_pos != self._read_pos for o in others):
1110
+ raise SimMergeError("Cannot merge SimFileDescriptors over SimPackets with disparate number of packets")
1111
+ elif self._read_pos is None and all(o._read_pos is None for o in others):
1112
+ pass
1113
+ elif self._read_pos is None or any(o._read_pos is None for o in others):
1114
+ raise SimMergeError("Cannot merge SimFileDescriptors with inconsistent None-position - please report this!")
1115
+ else:
1116
+ self._read_pos = self.state.solver.ite_cases(
1117
+ zip(merge_conditions[1:], (o._read_pos for o in others)), self._read_pos
1118
+ )
1119
+
1120
+ if type(self._write_pos) is int and all(type(o._write_pos) is int for o in others):
1121
+ if any(o._write_pos != self._write_pos for o in others):
1122
+ raise SimMergeError("Cannot merge SimFileDescriptors over SimPackets with disparate number of packets")
1123
+ elif self._write_pos is None and all(o._write_pos is None for o in others):
1124
+ pass
1125
+ elif self._write_pos is None or any(o._write_pos is None for o in others):
1126
+ raise SimMergeError("Cannot merge SimFileDescriptors with inconsistent None-position - please report this!")
1127
+ else:
1128
+ self._write_pos = self.state.solver.ite_cases(
1129
+ zip(merge_conditions[1:], (o._write_pos for o in others)), self._write_pos
1130
+ )
1131
+
1132
+ return True
1133
+
1134
+ def widen(self, _):
1135
+ raise SimMergeError("Widening the filesystem is unsupported")
1136
+
1137
+
1138
+ class SimPacketsSlots(SimFileBase):
1139
+ """
1140
+ SimPacketsSlots is the new SimDialogue, if you've ever seen that before.
1141
+
1142
+ The idea is that in some cases, the only thing you really care about is getting the lengths of reads right, and
1143
+ some of them should be short reads, and some of them should be truncated. You provide to this class a list of read
1144
+ lengths, and it figures out the length of each read, and delivers some content.
1145
+
1146
+ This class will NOT respect the position argument you pass it - this storage is not stateless.
1147
+ """
1148
+
1149
+ seekable = False
1150
+
1151
+ def __init__(self, name, read_sizes, ident=None, **kwargs):
1152
+ super().__init__(name, writable=False, ident=ident)
1153
+
1154
+ self.read_sizes = read_sizes
1155
+ self.read_data = []
1156
+
1157
+ def concretize(self, **kwargs):
1158
+ return [self.state.solver.eval(var, cast_to=bytes, **kwargs) for var in self.read_data]
1159
+
1160
+ def read(self, pos, size, **kwargs):
1161
+ if not self.read_sizes:
1162
+ return self.state.solver.BVV(0, 0), 0, None
1163
+
1164
+ try:
1165
+ req_size = self.state.solver.eval_one(size)
1166
+ except SimSolverError:
1167
+ raise SimFileError("SimPacketsSlots can't handle multivalued read sizes")
1168
+
1169
+ avail_size = self.read_sizes[0]
1170
+
1171
+ if avail_size > req_size:
1172
+ # chop the packet in half
1173
+ real_size = req_size
1174
+ self.read_sizes[0] -= req_size
1175
+ else:
1176
+ # short read or full size read
1177
+ real_size = avail_size
1178
+ self.read_sizes.pop(0)
1179
+
1180
+ data = self.state.solver.BVS(
1181
+ "packet_%d_%s" % (len(self.read_data), self.ident),
1182
+ real_size * self.state.arch.byte_width,
1183
+ key=("file", self.ident, "packet", len(self.read_data)),
1184
+ )
1185
+ self.read_data.append(data)
1186
+ return data, real_size, None
1187
+
1188
+ def write(self, pos, data, size=None, **kwargs):
1189
+ raise SimFileError("Trying to write to SimPacketsSlots? Illegal")
1190
+
1191
+ @property
1192
+ def size(self):
1193
+ return sum(len(x) for x in self.read_data) // self.state.arch.byte_width
1194
+
1195
+ @SimStatePlugin.memo
1196
+ def copy(self, memo): # pylint: disable=unused-argument
1197
+ o = type(self)(self.name, self.read_sizes, ident=self.ident)
1198
+ o.read_data = list(self.read_data)
1199
+ return o
1200
+
1201
+ def merge(self, others, merge_conditions, common_ancestor=None): # pylint: disable=unused-argument
1202
+ if any(self.read_sizes != o.read_sizes for o in others):
1203
+ raise SimMergeError("Can't merge SimPacketsSlots with disparate reads")
1204
+ already_read_sizes = [len(x) for x in self.read_data]
1205
+ if any(already_read_sizes != [len(x) for x in o.read_data] for o in others):
1206
+ raise SimMergeError("Can't merge SimPacketsSlots with disparate reads")
1207
+
1208
+ for i, default_var in self.read_data:
1209
+ self.read_data[i] = self.state.solver.ite_cases(
1210
+ zip(merge_conditions[1:], [o.read_data[i] for o in others]), default_var
1211
+ )
1212
+
1213
+ return True
1214
+
1215
+ def widen(self, _):
1216
+ raise SimMergeError("Widening the filesystem is unsupported")
1217
+
1218
+
1219
+ from ..errors import SimMergeError, SimFileError, SimSolverError