angr 9.2.103__py3-none-macosx_11_0_arm64.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.dylib +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
@@ -0,0 +1,1441 @@
1
+ # pylint:disable=no-self-use,isinstance-second-argument-not-valid-type,unused-argument
2
+ from typing import Any
3
+ import struct
4
+ import re
5
+ import logging
6
+
7
+ import ailment
8
+ import pyvex
9
+ import claripy
10
+ import archinfo
11
+
12
+ from ...misc.ux import once
13
+ from ...engines.vex.claripy.datalayer import value as claripy_value
14
+ from ...engines.vex.claripy.irop import UnsupportedIROpError, SimOperationError, vexop_to_simop
15
+ from ...code_location import CodeLocation
16
+ from ...utils.constants import DEFAULT_STATEMENT
17
+ from ..engine import SimEngine
18
+
19
+
20
+ class SimEngineLightMixin:
21
+ """
22
+ A mixin base class for engines meant to perform static analysis
23
+ """
24
+
25
+ def __init__(self, *args, logger=None, **kwargs):
26
+ self.arch: archinfo.Arch | None = None
27
+ self.l = logger
28
+ super().__init__(*args, **kwargs)
29
+
30
+ def _is_top(self, expr) -> bool:
31
+ """
32
+ Check if a given expression is a TOP value.
33
+
34
+ :param expr: The given expression.
35
+ :return: True if the expression is TOP, False otherwise.
36
+ """
37
+ return False
38
+
39
+ def _top(self, size: int):
40
+ """
41
+ Return a TOP value. It will only be called if _is_top() has been implemented.
42
+
43
+ :param size: The size (in bits) of the TOP value.
44
+ :return: A TOP value.
45
+ """
46
+ raise NotImplementedError()
47
+
48
+ @staticmethod
49
+ def sp_offset(bits: int, offset: int):
50
+ base = claripy.BVS("SpOffset", bits, explicit_name=True)
51
+ if offset:
52
+ base += offset
53
+ return base
54
+
55
+ @staticmethod
56
+ def extract_offset_to_sp(spoffset_expr: claripy.ast.Base) -> int | None:
57
+ """
58
+ Extract the offset to the original stack pointer.
59
+
60
+ :param spoffset_expr: The claripy AST to parse.
61
+ :return: The offset to the original stack pointer, or None if `spoffset_expr` is not a supported
62
+ type of SpOffset expression.
63
+ """
64
+
65
+ if "SpOffset" in spoffset_expr.variables:
66
+ # Local variable
67
+ if spoffset_expr.op == "BVS":
68
+ return 0
69
+ elif spoffset_expr.op == "__add__":
70
+ if len(spoffset_expr.args) == 1:
71
+ # Unexpected but fine
72
+ return 0
73
+ elif isinstance(spoffset_expr.args[1], claripy.ast.Base) and spoffset_expr.args[1].op == "BVV":
74
+ return spoffset_expr.args[1].args[0]
75
+ return None
76
+
77
+
78
+ class SimEngineLight(
79
+ SimEngineLightMixin,
80
+ SimEngine,
81
+ ):
82
+ """
83
+ A full-featured engine base class, suitable for static analysis
84
+ """
85
+
86
+ def __init__(self):
87
+ logger = logging.getLogger(self.__module__ + "." + self.__class__.__name__)
88
+ super().__init__(logger=logger)
89
+
90
+ # local variables
91
+ self.state = None
92
+ self.arch: archinfo.Arch = None
93
+ self.block = None
94
+ self._call_stack = None
95
+
96
+ self.stmt_idx = None
97
+ self.ins_addr = None
98
+ self.tmps = None
99
+
100
+ # for VEX blocks only
101
+ self.tyenv = None
102
+
103
+ def process(self, state, *args, **kwargs):
104
+ # we are using a completely different state. Therefore, we directly call our _process() method before
105
+ # SimEngine becomes flexible enough.
106
+ self._process(state, None, block=kwargs.pop("block", None), whitelist=kwargs.pop("whitelist", None))
107
+
108
+ def _process(self, new_state, successors, *args, **kwargs):
109
+ raise NotImplementedError()
110
+
111
+ def _check(self, state, *args, **kwargs):
112
+ return True
113
+
114
+ #
115
+ # Helper methods
116
+ #
117
+
118
+ def _codeloc(self, block_only=False, context=None):
119
+ return CodeLocation(
120
+ self.block.addr,
121
+ None if block_only else self.stmt_idx,
122
+ ins_addr=None if block_only else self.ins_addr,
123
+ context=context,
124
+ )
125
+
126
+
127
+ # noinspection PyPep8Naming
128
+ class SimEngineLightVEXMixin(SimEngineLightMixin):
129
+ """
130
+ A mixin for doing static analysis on VEX
131
+ """
132
+
133
+ def _process(self, state, successors, *args, block, whitelist=None, **kwargs): # pylint:disable=arguments-differ
134
+ # initialize local variables
135
+ self.tmps = {}
136
+ self.block = block
137
+ self.state = state
138
+
139
+ if state is not None:
140
+ self.arch: archinfo.Arch = state.arch
141
+
142
+ self.tyenv = block.vex.tyenv
143
+
144
+ self._process_Stmt(whitelist=whitelist)
145
+
146
+ self.stmt_idx = None
147
+ self.ins_addr = None
148
+
149
+ def _process_Stmt(self, whitelist=None):
150
+ if whitelist is not None:
151
+ # optimize whitelist lookups
152
+ whitelist = set(whitelist)
153
+
154
+ for stmt_idx, stmt in enumerate(self.block.vex.statements):
155
+ if whitelist is not None and stmt_idx not in whitelist:
156
+ continue
157
+ self.stmt_idx = stmt_idx
158
+
159
+ if type(stmt) is pyvex.IRStmt.IMark:
160
+ # Note that we cannot skip IMarks as they are used later to trigger observation events
161
+ # The bug caused by skipping IMarks is reported at https://github.com/angr/angr/pull/1150
162
+ self.ins_addr = stmt.addr + stmt.delta
163
+
164
+ self._handle_Stmt(stmt)
165
+
166
+ self._process_block_end()
167
+
168
+ def _process_block_end(self):
169
+ # handle calls to another function
170
+ # Note that without global information, we cannot handle cases where we *jump* to another function (jumpkind ==
171
+ # "Ijk_Boring"). Users are supposed to overwrite this method, detect these cases with the help of global
172
+ # information (such as CFG or symbol addresses), and handle them accordingly.
173
+ if self.block.vex.jumpkind == "Ijk_Call":
174
+ self.stmt_idx = DEFAULT_STATEMENT
175
+ handler = "_handle_function"
176
+ if hasattr(self, handler):
177
+ func_addr = (
178
+ self.block.vex.next if isinstance(self.block.vex.next, int) else self._expr(self.block.vex.next)
179
+ )
180
+ if func_addr is None and self.l is not None:
181
+ self.l.debug("Cannot determine the callee address at %#x.", self.block.addr)
182
+ getattr(self, handler)(func_addr)
183
+ else:
184
+ if self.l is not None:
185
+ self.l.warning("Function handler not implemented.")
186
+
187
+ #
188
+ # Statement handlers
189
+ #
190
+
191
+ def _handle_Stmt(self, stmt):
192
+ handler = "_handle_%s" % type(stmt).__name__
193
+ if hasattr(self, handler):
194
+ getattr(self, handler)(stmt)
195
+ elif type(stmt).__name__ not in ("IMark", "AbiHint"):
196
+ if self.l is not None:
197
+ self.l.error("Unsupported statement type %s.", type(stmt).__name__)
198
+
199
+ # synchronize with function _handle_WrTmpData()
200
+ def _handle_WrTmp(self, stmt):
201
+ data = self._expr(stmt.data)
202
+ if data is None:
203
+ return
204
+
205
+ self.tmps[stmt.tmp] = data
206
+
207
+ # invoked by LoadG
208
+ def _handle_WrTmpData(self, tmp, data):
209
+ if data is None:
210
+ return
211
+ self.tmps[tmp] = data
212
+
213
+ def _handle_Dirty(self, stmt):
214
+ if self.l is not None:
215
+ self.l.error("Unimplemented Dirty node for current architecture.")
216
+
217
+ def _handle_Put(self, stmt):
218
+ raise NotImplementedError("Please implement the Put handler with your own logic.")
219
+
220
+ def _handle_Store(self, stmt):
221
+ raise NotImplementedError("Please implement the Store handler with your own logic.")
222
+
223
+ def _handle_StoreG(self, stmt):
224
+ raise NotImplementedError("Please implement the StoreG handler with your own logic.")
225
+
226
+ def _handle_LLSC(self, stmt: pyvex.IRStmt.LLSC):
227
+ raise NotImplementedError("Please implement the LLSC handler with your own logic.")
228
+
229
+ #
230
+ # Expression handlers
231
+ #
232
+
233
+ def _expr(self, expr):
234
+ handler = "_handle_%s" % type(expr).__name__
235
+ if hasattr(self, handler):
236
+ return getattr(self, handler)(expr)
237
+ elif self.l is not None:
238
+ self.l.error("Unsupported expression type %s.", type(expr).__name__)
239
+ return None
240
+
241
+ def _handle_Triop(self, expr: pyvex.IRExpr.Triop): # pylint: disable=useless-return
242
+ handler = None
243
+ if expr.op.startswith("Iop_AddF"):
244
+ handler = "_handle_AddF"
245
+ elif expr.op.startswith("Iop_SubF"):
246
+ handler = "_handle_AddF"
247
+ elif expr.op.startswith("Iop_MulF"):
248
+ handler = "_handle_MulF"
249
+ elif expr.op.startswith("Iop_DivF"):
250
+ handler = "_handle_DivF"
251
+ elif expr.op.startswith("Iop_SinF"):
252
+ handler = "_handle_SinF"
253
+ elif expr.op.startswith("Iop_ScaleF"):
254
+ handler = "_handle_ScaleF"
255
+
256
+ if handler is not None and hasattr(self, handler):
257
+ return getattr(self, handler)(expr)
258
+
259
+ if once(expr.op) and self.l is not None:
260
+ self.l.error("Unsupported Triop %s.", expr.op)
261
+
262
+ return None
263
+
264
+ def _handle_AddF(self, expr):
265
+ return self._top(expr.result_size(self.tyenv))
266
+
267
+ def _handle_SubF(self, expr):
268
+ return self._top(expr.result_size(self.tyenv))
269
+
270
+ def _handle_MulF(self, expr):
271
+ return self._top(expr.result_size(self.tyenv))
272
+
273
+ def _handle_DivF(self, expr):
274
+ return self._top(expr.result_size(self.tyenv))
275
+
276
+ def _handle_NegF(self, expr):
277
+ return self._top(expr.result_size(self.tyenv))
278
+
279
+ def _handle_AbsF(self, expr):
280
+ return self._top(expr.result_size(self.tyenv))
281
+
282
+ def _handle_SinF(self, expr):
283
+ return self._top(expr.result_size(self.tyenv))
284
+
285
+ def _handle_CosF(self, expr):
286
+ return self._top(expr.result_size(self.tyenv))
287
+
288
+ def _handle_ScaleF(self, expr):
289
+ return self._top(expr.result_size(self.tyenv))
290
+
291
+ def _handle_RdTmp(self, expr):
292
+ tmp = expr.tmp
293
+
294
+ if tmp in self.tmps:
295
+ return self.tmps[tmp]
296
+ return None
297
+
298
+ def _handle_Get(self, expr):
299
+ raise NotImplementedError("Please implement the Get handler with your own logic.")
300
+
301
+ def _handle_Load(self, expr):
302
+ raise NotImplementedError("Please implement the Load handler with your own logic.")
303
+
304
+ def _handle_LoadG(self, stmt):
305
+ raise NotImplementedError("Please implement the LoadG handler with your own logic.")
306
+
307
+ def _handle_Exit(self, stmt):
308
+ self._expr(stmt.guard)
309
+ self._expr(stmt.dst)
310
+
311
+ def _handle_ITE(self, expr):
312
+ # EDG says: Not sure how generic this is.
313
+ cond = self._expr(expr.cond)
314
+ if cond is True:
315
+ return self._expr(expr.iftrue)
316
+ elif cond is False:
317
+ return self._expr(expr.iffalse)
318
+ else:
319
+ return None
320
+
321
+ def _handle_Unop(self, expr):
322
+ handler = None
323
+
324
+ # All conversions are handled by the Conversion handler
325
+ simop = None
326
+ try:
327
+ simop = vexop_to_simop(expr.op)
328
+ except (UnsupportedIROpError, SimOperationError):
329
+ pass
330
+
331
+ if simop is not None and simop.op_attrs.get("conversion", None):
332
+ handler = "_handle_Conversion"
333
+ # Notice order of "Not" comparisons
334
+ elif expr.op == "Iop_Not1":
335
+ handler = "_handle_Not1"
336
+ elif expr.op.startswith("Iop_Not"):
337
+ handler = "_handle_Not"
338
+ elif expr.op.startswith("Iop_Clz"):
339
+ handler = "_handle_Clz"
340
+ elif expr.op.startswith("Iop_Ctz"):
341
+ handler = "_handle_Ctz"
342
+ elif expr.op.startswith("Iop_NegF"):
343
+ handler = "_handle_NegF"
344
+ elif expr.op.startswith("Iop_AbsF"):
345
+ handler = "_handle_AbsF"
346
+
347
+ if handler is not None and hasattr(self, handler):
348
+ return getattr(self, handler)(expr)
349
+ else:
350
+ if self.l is not None:
351
+ self.l.error("Unsupported Unop %s.", expr.op)
352
+ return None
353
+
354
+ def _handle_Binop(self, expr: pyvex.IRExpr.Binop):
355
+ handler = None
356
+ if expr.op.startswith("Iop_And"):
357
+ handler = "_handle_And"
358
+ elif expr.op.startswith("Iop_Mod"):
359
+ handler = "_handle_Mod"
360
+ elif expr.op.startswith("Iop_Or"):
361
+ handler = "_handle_Or"
362
+ elif expr.op.startswith("Iop_Add"):
363
+ handler = "_handle_Add"
364
+ elif expr.op.startswith("Iop_HAdd"):
365
+ handler = "_handle_HAdd"
366
+ elif expr.op.startswith("Iop_Sub"):
367
+ handler = "_handle_Sub"
368
+ elif expr.op.startswith("Iop_QSub"):
369
+ handler = "_handle_QSub"
370
+ elif expr.op.startswith("Iop_Mull"):
371
+ handler = "_handle_Mull"
372
+ elif expr.op.startswith("Iop_Mul"):
373
+ handler = "_handle_Mul"
374
+ elif expr.op.startswith("Iop_DivMod"):
375
+ handler = "_handle_DivMod"
376
+ elif expr.op.startswith("Iop_Div"):
377
+ handler = "_handle_Div"
378
+ elif expr.op.startswith("Iop_Xor"):
379
+ handler = "_handle_Xor"
380
+ elif expr.op.startswith("Iop_Shl"):
381
+ handler = "_handle_Shl"
382
+ elif expr.op.startswith("Iop_Shr"):
383
+ handler = "_handle_Shr"
384
+ elif expr.op.startswith("Iop_Sal"):
385
+ # intended use of SHL
386
+ handler = "_handle_Shl"
387
+ elif expr.op.startswith("Iop_Sar"):
388
+ handler = "_handle_Sar"
389
+ elif expr.op.startswith("Iop_CmpEQ"):
390
+ handler = "_handle_CmpEQ"
391
+ elif expr.op.startswith("Iop_CmpNE"):
392
+ handler = "_handle_CmpNE"
393
+ elif expr.op.startswith("Iop_CmpLT"):
394
+ handler = "_handle_CmpLT"
395
+ elif expr.op.startswith("Iop_CmpLE"):
396
+ handler = "_handle_CmpLE"
397
+ elif expr.op.startswith("Iop_CmpGE"):
398
+ handler = "_handle_CmpGE"
399
+ elif expr.op.startswith("Iop_CmpGT"):
400
+ handler = "_handle_CmpGT"
401
+ elif expr.op.startswith("Iop_CmpORD"):
402
+ handler = "_handle_CmpORD"
403
+ elif expr.op.startswith("Iop_CmpF"):
404
+ handler = "_handle_CmpF"
405
+ elif expr.op == "Iop_32HLto64":
406
+ handler = "_handle_32HLto64"
407
+ elif expr.op.startswith("Const"):
408
+ handler = "_handle_Const"
409
+ elif expr.op.startswith("Iop_16HLto32"):
410
+ handler = "_handle_16HLto32"
411
+ elif expr.op.startswith("Iop_ExpCmpNE64"):
412
+ handler = "_handle_ExpCmpNE64"
413
+ elif expr.op.startswith("Iop_SinF"):
414
+ handler = "_handle_SinF"
415
+ elif expr.op.startswith("Iop_CosF"):
416
+ handler = "_handle_CosF"
417
+
418
+ vector_size, vector_count = None, None
419
+ if handler is not None:
420
+ # vector information
421
+ m = re.match(r"Iop_[^\d]+(\d+)U{0,1}x(\d+)", expr.op)
422
+ if m is not None:
423
+ vector_size = int(m.group(1))
424
+ vector_count = int(m.group(2))
425
+ handler += "_v"
426
+
427
+ if handler is not None and hasattr(self, handler):
428
+ if vector_size is not None and vector_count is not None:
429
+ return getattr(self, handler)(expr, vector_size, vector_count)
430
+ return getattr(self, handler)(expr)
431
+ else:
432
+ if once(expr.op) and self.l is not None:
433
+ self.l.warning("Unsupported Binop %s.", expr.op)
434
+
435
+ return None
436
+
437
+ def _handle_CCall(self, expr): # pylint:disable=useless-return
438
+ if self.l is not None:
439
+ self.l.warning("Unsupported expression type CCall with callee %s.", str(expr.cee))
440
+ return None
441
+
442
+ #
443
+ # Unary operation handlers
444
+ #
445
+
446
+ def _handle_U64(self, expr):
447
+ return claripy.BVV(expr.value, 64)
448
+
449
+ def _handle_U32(self, expr):
450
+ return claripy.BVV(expr.value, 32)
451
+
452
+ def _handle_U16(self, expr):
453
+ return claripy.BVV(expr.value, 16)
454
+
455
+ def _handle_U8(self, expr):
456
+ return claripy.BVV(expr.value, 8)
457
+
458
+ def _handle_U1(self, expr):
459
+ return claripy.BVV(expr.value, 1)
460
+
461
+ def _handle_Const(self, expr): # pylint:disable=no-self-use
462
+ return claripy_value(expr.con.type, expr.con.value)
463
+
464
+ def _handle_Conversion(self, expr):
465
+ expr_ = self._expr(expr.args[0])
466
+ if expr_ is None:
467
+ return None
468
+ to_size = expr.result_size(self.tyenv)
469
+ if self._is_top(expr_):
470
+ return self._top(to_size)
471
+
472
+ if isinstance(expr_, claripy.ast.Base) and expr_.op == "BVV":
473
+ if expr_.size() > to_size:
474
+ # truncation
475
+ return expr_[to_size - 1 : 0]
476
+ elif expr_.size() < to_size:
477
+ # extension
478
+ return claripy.ZeroExt(to_size - expr_.size(), expr_)
479
+ else:
480
+ return expr_
481
+
482
+ return self._top(to_size)
483
+
484
+ #
485
+ # Binary operation handlers
486
+ #
487
+
488
+ def _binop_get_args(self, expr) -> tuple[Any, Any] | None | Any | None:
489
+ arg0, arg1 = expr.args
490
+ expr_0 = self._expr(arg0)
491
+ if expr_0 is None:
492
+ return None, None
493
+ if self._is_top(expr_0):
494
+ return None, self._top(expr_0.size())
495
+
496
+ expr_1 = self._expr(arg1)
497
+ if expr_1 is None:
498
+ return None, None
499
+ if self._is_top(expr_1):
500
+ return None, self._top(expr_0.size()) # always use the size of expr_0
501
+
502
+ return (expr_0, expr_1), None
503
+
504
+ def _handle_And(self, expr):
505
+ args, r = self._binop_get_args(expr)
506
+ if args is None:
507
+ return r
508
+ expr_0, expr_1 = args
509
+
510
+ if self._is_top(expr_0) or self._is_top(expr_1):
511
+ return self._top(expr_0.size())
512
+
513
+ return expr_0 & expr_1
514
+
515
+ def _handle_Or(self, expr):
516
+ args, r = self._binop_get_args(expr)
517
+ if args is None:
518
+ return r
519
+ expr_0, expr_1 = args
520
+
521
+ if self._is_top(expr_0) or self._is_top(expr_1):
522
+ return self._top(expr_0.size())
523
+
524
+ return expr_0 | expr_1
525
+
526
+ def _handle_Not1(self, expr):
527
+ return self._handle_Not(expr)
528
+
529
+ def _handle_Not(self, expr):
530
+ arg0 = expr.args[0]
531
+ expr_0 = self._expr(arg0)
532
+ if expr_0 is None:
533
+ return None
534
+ if self._is_top(expr_0):
535
+ return self._top(expr_0.size())
536
+
537
+ try:
538
+ return ~expr_0 # pylint:disable=invalid-unary-operand-type
539
+ except TypeError as e:
540
+ if self.l is not None:
541
+ self.l.exception(e)
542
+ return None
543
+
544
+ def _handle_Clz(self, expr):
545
+ arg0 = expr.args[0]
546
+ expr_0 = self._expr(arg0)
547
+ if expr_0 is None:
548
+ return None
549
+ if self._is_top(expr_0):
550
+ return self._top(expr_0.size())
551
+ return self._top(expr_0.size())
552
+
553
+ def _handle_Ctz(self, expr):
554
+ arg0 = expr.args[0]
555
+ expr_0 = self._expr(arg0)
556
+ if expr_0 is None:
557
+ return None
558
+ if self._is_top(expr_0):
559
+ return self._top(expr_0.size())
560
+ return self._top(expr_0.size())
561
+
562
+ def _handle_Add(self, expr):
563
+ args, r = self._binop_get_args(expr)
564
+ if args is None:
565
+ return r
566
+ expr_0, expr_1 = args
567
+
568
+ if self._is_top(expr_0) or self._is_top(expr_1):
569
+ return self._top(expr_0.size())
570
+
571
+ return expr_0 + expr_1
572
+
573
+ def _handle_Sub(self, expr):
574
+ args, r = self._binop_get_args(expr)
575
+ if args is None:
576
+ return r
577
+ expr_0, expr_1 = args
578
+
579
+ if self._is_top(expr_0) or self._is_top(expr_1):
580
+ return self._top(expr_0.size())
581
+
582
+ return expr_0 - expr_1
583
+
584
+ def _handle_Mul(self, expr):
585
+ args, r = self._binop_get_args(expr)
586
+ if args is None:
587
+ return r
588
+ expr_0, expr_1 = args
589
+
590
+ if self._is_top(expr_0) or self._is_top(expr_1):
591
+ return self._top(expr_0.size())
592
+
593
+ return expr_0 * expr_1
594
+
595
+ def _handle_Mull(self, expr):
596
+ self._binop_get_args(expr)
597
+ return self._top(expr.result_size(self.tyenv))
598
+
599
+ def _handle_DivMod(self, expr):
600
+ args, r = self._binop_get_args(expr)
601
+ if args is None:
602
+ return r
603
+ expr_0, expr_1 = args
604
+
605
+ if self._is_top(expr_0) or self._is_top(expr_1):
606
+ return self._top(expr.result_size(self.tyenv))
607
+
608
+ signed = "U" in expr.op # Iop_DivModU64to32 vs Iop_DivMod
609
+ from_size = expr_0.size()
610
+ to_size = expr_1.size()
611
+ if signed:
612
+ quotient = expr_0.SDiv(claripy.SignExt(from_size - to_size, expr_1))
613
+ remainder = expr_0.SMod(claripy.SignExt(from_size - to_size, expr_1))
614
+ quotient_size = to_size
615
+ remainder_size = to_size
616
+ return claripy.Concat(
617
+ claripy.Extract(remainder_size - 1, 0, remainder), claripy.Extract(quotient_size - 1, 0, quotient)
618
+ )
619
+ else:
620
+ quotient = expr_0 // claripy.ZeroExt(from_size - to_size, expr_1)
621
+ remainder = expr_0 % claripy.ZeroExt(from_size - to_size, expr_1)
622
+ quotient_size = to_size
623
+ remainder_size = to_size
624
+ return claripy.Concat(
625
+ claripy.Extract(remainder_size - 1, 0, remainder), claripy.Extract(quotient_size - 1, 0, quotient)
626
+ )
627
+
628
+ def _handle_Div(self, expr):
629
+ args, r = self._binop_get_args(expr)
630
+ if args is None:
631
+ return r
632
+ expr_0, expr_1 = args
633
+
634
+ if self._is_top(expr_0) or self._is_top(expr_1):
635
+ return self._top(expr_0.size())
636
+
637
+ try:
638
+ return expr_0 / expr_1
639
+ except ZeroDivisionError:
640
+ return self._top(expr_0.size())
641
+
642
+ def _handle_Mod(self, expr):
643
+ args, r = self._binop_get_args(expr)
644
+ if args is None:
645
+ return r
646
+ expr_0, expr_1 = args
647
+
648
+ if self._is_top(expr_0) or self._is_top(expr_1):
649
+ return self._top(expr_0.size())
650
+
651
+ try:
652
+ return expr_0 - (expr_1 // expr_1) * expr_1
653
+ except ZeroDivisionError:
654
+ return self._top(expr_0.size())
655
+
656
+ def _handle_Xor(self, expr):
657
+ args, r = self._binop_get_args(expr)
658
+ if args is None:
659
+ return r
660
+ expr_0, expr_1 = args
661
+
662
+ if self._is_top(expr_0) or self._is_top(expr_1):
663
+ return self._top(expr_0.size())
664
+
665
+ try:
666
+ return expr_0 ^ expr_1
667
+ except TypeError as e:
668
+ if self.l is not None:
669
+ self.l.warning(e)
670
+ return None
671
+
672
+ def _handle_Shl(self, expr):
673
+ args, r = self._binop_get_args(expr)
674
+ if args is None:
675
+ return r
676
+ expr_0, expr_1 = args
677
+
678
+ if self._is_top(expr_0) or self._is_top(expr_1):
679
+ return self._top(expr_0.size())
680
+
681
+ if isinstance(expr_1, claripy.ast.Base) and expr_1.op == "BVV":
682
+ # convert it to an int when possible
683
+ expr_1 = expr_1.args[0]
684
+ else:
685
+ # make sure the sizes are the same - VEX does not care about it
686
+ if expr_1.size() < expr_0.size():
687
+ expr_1 = claripy.ZeroExt(expr_0.size() - expr_1.size(), expr_1)
688
+ elif expr_1.size() > expr_0.size():
689
+ expr_1 = claripy.Extract(expr_0.size() - 1, 0, expr_1)
690
+
691
+ return expr_0 << expr_1
692
+
693
+ def _handle_Shr(self, expr):
694
+ args, r = self._binop_get_args(expr)
695
+ if args is None:
696
+ return r
697
+ expr_0, expr_1 = args
698
+
699
+ if self._is_top(expr_0) or self._is_top(expr_1):
700
+ return self._top(expr_0.size())
701
+
702
+ if isinstance(expr_1, claripy.ast.Base) and expr_1.op == "BVV":
703
+ # convert it to an int when possible
704
+ expr_1 = expr_1.args[0]
705
+ else:
706
+ # make sure the sizes are the same - VEX does not care about it
707
+ if expr_1.size() < expr_0.size():
708
+ expr_1 = claripy.ZeroExt(expr_0.size() - expr_1.size(), expr_1)
709
+ elif expr_1.size() > expr_0.size():
710
+ expr_1 = claripy.Extract(expr_0.size() - 1, 0, expr_1)
711
+
712
+ return claripy.LShR(expr_0, expr_1)
713
+
714
+ def _handle_Sar(self, expr):
715
+ # EDG asks: is this right?
716
+ args, r = self._binop_get_args(expr)
717
+ if args is None:
718
+ return r
719
+ expr_0, expr_1 = args
720
+
721
+ if self._is_top(expr_0) or self._is_top(expr_1):
722
+ return self._top(expr_0.size())
723
+
724
+ if isinstance(expr_1, claripy.ast.Base) and expr_1.op == "BVV":
725
+ # convert it to an int when possible
726
+ expr_1 = expr_1.args[0]
727
+ else:
728
+ # make sure the sizes are the same - VEX does not care about it
729
+ if expr_1.size() < expr_0.size():
730
+ expr_1 = claripy.ZeroExt(expr_0.size() - expr_1.size(), expr_1)
731
+ elif expr_1.size() > expr_0.size():
732
+ expr_1 = claripy.Extract(expr_0.size() - 1, 0, expr_1)
733
+
734
+ return expr_0 >> expr_1
735
+
736
+ def _handle_CmpEQ(self, expr):
737
+ args, r = self._binop_get_args(expr)
738
+ if args is None:
739
+ return r
740
+ expr_0, expr_1 = args
741
+
742
+ if self._is_top(expr_0) or self._is_top(expr_1):
743
+ return self._top(1)
744
+
745
+ return expr_0 == expr_1
746
+
747
+ def _handle_CmpNE(self, expr):
748
+ args, r = self._binop_get_args(expr)
749
+ if args is None:
750
+ return r
751
+ expr_0, expr_1 = args
752
+
753
+ if self._is_top(expr_0) or self._is_top(expr_1):
754
+ return self._top(1)
755
+
756
+ return expr_0 != expr_1
757
+
758
+ def _handle_CmpLE(self, expr):
759
+ args, r = self._binop_get_args(expr)
760
+ if args is None:
761
+ return r
762
+ expr_0, expr_1 = args
763
+
764
+ if self._is_top(expr_0) or self._is_top(expr_1):
765
+ return self._top(1)
766
+
767
+ return expr_0 <= expr_1
768
+
769
+ def _handle_CmpGE(self, expr):
770
+ args, r = self._binop_get_args(expr)
771
+ if args is None:
772
+ return r
773
+ expr_0, expr_1 = args
774
+
775
+ if self._is_top(expr_0) or self._is_top(expr_1):
776
+ return self._top(1)
777
+
778
+ return expr_0 >= expr_1
779
+
780
+ def _handle_CmpLT(self, expr):
781
+ args, r = self._binop_get_args(expr)
782
+ if args is None:
783
+ return r
784
+ expr_0, expr_1 = args
785
+
786
+ if self._is_top(expr_0) or self._is_top(expr_1):
787
+ return self._top(1)
788
+
789
+ return expr_0 < expr_1
790
+
791
+ def _handle_CmpGT(self, expr):
792
+ args, r = self._binop_get_args(expr)
793
+ if args is None:
794
+ return r
795
+ expr_0, expr_1 = args
796
+
797
+ if self._is_top(expr_0) or self._is_top(expr_1):
798
+ return self._top(1)
799
+
800
+ return expr_0 > expr_1
801
+
802
+ def _handle_CmpEQ_v(self, expr, _vector_size, _vector_count):
803
+ _, _ = self._binop_get_args(expr)
804
+ return self._top(expr.result_size(self.tyenv))
805
+
806
+ def _handle_CmpNE_v(self, expr, _vector_size, _vector_count):
807
+ _, _ = self._binop_get_args(expr)
808
+ return self._top(expr.result_size(self.tyenv))
809
+
810
+ def _handle_CmpLE_v(self, expr, _vector_size, _vector_count):
811
+ _, _ = self._binop_get_args(expr)
812
+ return self._top(expr.result_size(self.tyenv))
813
+
814
+ def _handle_CmpGE_v(self, expr, _vector_size, _vector_count):
815
+ _, _ = self._binop_get_args(expr)
816
+ return self._top(expr.result_size(self.tyenv))
817
+
818
+ def _handle_CmpLT_v(self, expr, _vector_size, _vector_count):
819
+ _, _ = self._binop_get_args(expr)
820
+ return self._top(expr.result_size(self.tyenv))
821
+
822
+ def _handle_CmpGT_v(self, expr, _vector_size, _vector_count):
823
+ _, _ = self._binop_get_args(expr)
824
+ return self._top(expr.result_size(self.tyenv))
825
+
826
+ def _handle_MBE(self, _expr: pyvex.IRStmt.MBE):
827
+ # Yeah.... no.
828
+ return None
829
+
830
+ def _handle_32HLto64(self, expr):
831
+ args, r = self._binop_get_args(expr)
832
+ if args is None:
833
+ if r is not None:
834
+ # the size of r should be 32 but we need to return a 64-bit expression
835
+ assert r.size() == 32
836
+ r = claripy.ZeroExt(32, r)
837
+ return r
838
+
839
+ return None
840
+
841
+ def _handle_16HLto32(self, expr):
842
+ _, _ = self._binop_get_args(expr)
843
+ return self._top(expr.result_size(self.tyenv))
844
+
845
+ def _handle_ExpCmpNE64(self, expr):
846
+ _, _ = self._expr(expr.args[0]), self._expr(expr.args[1])
847
+ return self._top(expr.result_size(self.tyenv))
848
+
849
+
850
+ # noinspection PyPep8Naming
851
+ class SimEngineLightAILMixin(SimEngineLightMixin):
852
+ """
853
+ A mixin for doing static analysis on AIL
854
+ """
855
+
856
+ def _process(
857
+ self, state, successors, *args, block=None, whitelist=None, **kwargs
858
+ ): # pylint:disable=arguments-differ
859
+ self.tmps = {}
860
+ self.block: ailment.Block = block
861
+ self.state = state
862
+ self.arch = state.arch
863
+
864
+ self._process_Stmt(whitelist=whitelist)
865
+
866
+ self.stmt_idx = None
867
+ self.ins_addr = None
868
+
869
+ def _process_Stmt(self, whitelist=None):
870
+ if whitelist is not None:
871
+ whitelist = set(whitelist)
872
+
873
+ for stmt_idx, stmt in enumerate(self.block.statements):
874
+ if whitelist is not None and stmt_idx not in whitelist:
875
+ continue
876
+
877
+ self.stmt_idx = stmt_idx
878
+ self.ins_addr = stmt.ins_addr
879
+
880
+ self._handle_Stmt(stmt)
881
+
882
+ def _expr(self, expr):
883
+ expr_type_name = type(expr).__name__
884
+ if isinstance(expr, ailment.Stmt.Call):
885
+ # Call can be both an expression and a statement. Add a suffix to make sure we are working on the expression
886
+ # variant.
887
+ expr_type_name += "Expr"
888
+
889
+ h = None
890
+ handler = "_handle_%s" % expr_type_name
891
+ if hasattr(self, handler):
892
+ h = getattr(self, handler)
893
+
894
+ if h is None:
895
+ handler = "_ail_handle_%s" % expr_type_name
896
+ if hasattr(self, handler):
897
+ h = getattr(self, handler)
898
+
899
+ if h is not None:
900
+ return h(expr)
901
+ if self.l is not None:
902
+ self.l.warning("Unsupported expression type %s.", type(expr).__name__)
903
+ return None
904
+
905
+ #
906
+ # Helper methods
907
+ #
908
+
909
+ def _codeloc(self, block_only=False, context=None):
910
+ return CodeLocation(
911
+ self.block.addr,
912
+ None if block_only else self.stmt_idx,
913
+ ins_addr=None if block_only else self.ins_addr,
914
+ context=context,
915
+ block_idx=self.block.idx,
916
+ )
917
+
918
+ #
919
+ # Statement handlers
920
+ #
921
+
922
+ def _handle_Stmt(self, stmt):
923
+ handler = "_handle_%s" % type(stmt).__name__
924
+ if hasattr(self, handler):
925
+ getattr(self, handler)(stmt)
926
+ return
927
+
928
+ # compatibility
929
+ old_handler = "_ail_handle_%s" % type(stmt).__name__
930
+ if hasattr(self, old_handler):
931
+ getattr(self, old_handler)(stmt)
932
+ return
933
+
934
+ if self.l is not None:
935
+ self.l.warning("Unsupported statement type %s.", type(stmt).__name__)
936
+
937
+ def _ail_handle_Label(self, stmt):
938
+ pass
939
+
940
+ def _ail_handle_Jump(self, stmt):
941
+ raise NotImplementedError("Please implement the Jump handler with your own logic.")
942
+
943
+ def _ail_handle_Call(self, stmt):
944
+ raise NotImplementedError("Please implement the Call handler with your own logic.")
945
+
946
+ def _ail_handle_Return(self, stmt):
947
+ raise NotImplementedError("Please implement the Return handler with your own logic.")
948
+
949
+ #
950
+ # Expression handlers
951
+ #
952
+
953
+ def _ail_handle_BV(self, expr: claripy.ast.Base):
954
+ return expr
955
+
956
+ def _ail_handle_Const(self, expr): # pylint:disable=no-self-use
957
+ return expr.value
958
+
959
+ def _ail_handle_Tmp(self, expr):
960
+ tmp_idx = expr.tmp_idx
961
+
962
+ try:
963
+ return self.tmps[tmp_idx]
964
+ except KeyError:
965
+ return None
966
+
967
+ def _ail_handle_Load(self, expr):
968
+ raise NotImplementedError("Please implement the Load handler with your own logic.")
969
+
970
+ def _ail_handle_CallExpr(self, expr):
971
+ raise NotImplementedError("Please implement the CallExpr handler with your own logic.")
972
+
973
+ def _ail_handle_Reinterpret(self, expr: ailment.Expr.Reinterpret):
974
+ arg = self._expr(expr.operand)
975
+
976
+ if isinstance(arg, int) and (
977
+ expr.from_bits == 32 and expr.from_type == "I" and expr.to_bits == 32 and expr.to_type == "F"
978
+ ):
979
+ # int -> float
980
+ b = struct.pack("<I", arg)
981
+ f = struct.unpack("<f", b)[0]
982
+ return f
983
+ elif (
984
+ isinstance(arg, float)
985
+ and expr.from_bits == 32
986
+ and expr.from_type == "F"
987
+ and expr.to_bits == 32
988
+ and expr.to_type == "I"
989
+ ):
990
+ # float -> int
991
+ b = struct.pack("<f", arg)
992
+ v = struct.unpack("<I", b)[0]
993
+ return v
994
+
995
+ return expr
996
+
997
+ def _ail_handle_UnaryOp(self, expr):
998
+ handler_name = f"_handle_{expr.op}"
999
+ try:
1000
+ handler = getattr(self, handler_name)
1001
+ except AttributeError:
1002
+ handler_name = "_ail_handle_%s" % expr.op
1003
+ try:
1004
+ handler = getattr(self, handler_name)
1005
+ except AttributeError:
1006
+ if self.l is not None:
1007
+ self.l.warning("Unsupported UnaryOp %s.", expr.op)
1008
+ return None
1009
+
1010
+ return handler(expr)
1011
+
1012
+ def _ail_handle_BinaryOp(self, expr):
1013
+ handler_name = f"_handle_{expr.op}"
1014
+ try:
1015
+ handler = getattr(self, handler_name)
1016
+ except AttributeError:
1017
+ handler_name = "_ail_handle_%s" % expr.op
1018
+ try:
1019
+ handler = getattr(self, handler_name)
1020
+ except AttributeError:
1021
+ if self.l is not None:
1022
+ self.l.warning("Unsupported BinaryOp %s.", expr.op)
1023
+ return None
1024
+
1025
+ return handler(expr)
1026
+
1027
+ def _ail_handle_TernaryOp(self, expr):
1028
+ handler_name = f"_handle_{expr.op}"
1029
+ try:
1030
+ handler = getattr(self, handler_name)
1031
+ except AttributeError:
1032
+ handler_name = "_ail_handle_%s" % expr.op
1033
+ try:
1034
+ handler = getattr(self, handler_name)
1035
+ except AttributeError:
1036
+ if self.l is not None:
1037
+ self.l.warning("Unsupported Ternary %s.", expr.op)
1038
+ return None
1039
+
1040
+ return handler(expr)
1041
+
1042
+ #
1043
+ # Binary operation handlers
1044
+ #
1045
+
1046
+ def _ail_handle_CmpEQ(self, expr):
1047
+ arg0, arg1 = expr.operands
1048
+
1049
+ expr_0 = self._expr(arg0)
1050
+ expr_1 = self._expr(arg1)
1051
+ if expr_0 is None:
1052
+ expr_0 = arg0
1053
+ if expr_1 is None:
1054
+ expr_1 = arg1
1055
+
1056
+ try:
1057
+ if isinstance(expr_0, ailment.Expr.Const) and isinstance(expr_1, ailment.Expr.Const):
1058
+ if expr_0.value == expr_1.value:
1059
+ return ailment.Expr.Const(None, None, 1, 1)
1060
+ return ailment.Expr.Const(None, None, 0, 1)
1061
+ except TypeError:
1062
+ pass
1063
+ return ailment.Expr.BinaryOp(expr.idx, "CmpEQ", [expr_0, expr_1], expr.signed, **expr.tags)
1064
+
1065
+ def _ail_handle_CmpNE(self, expr):
1066
+ arg0, arg1 = expr.operands
1067
+
1068
+ expr_0 = self._expr(arg0)
1069
+ expr_1 = self._expr(arg1)
1070
+ if expr_0 is None:
1071
+ expr_0 = arg0
1072
+ if expr_1 is None:
1073
+ expr_1 = arg1
1074
+
1075
+ try:
1076
+ if isinstance(expr_0, ailment.Expr.Const) and isinstance(expr_1, ailment.Expr.Const):
1077
+ if expr_0.value != expr_1.value:
1078
+ return ailment.Expr.Const(None, None, 1, 1)
1079
+ return ailment.Expr.Const(None, None, 0, 1)
1080
+ except TypeError:
1081
+ pass
1082
+ return ailment.Expr.BinaryOp(expr.idx, "CmpNE", [expr_0, expr_1], expr.signed, **expr.tags)
1083
+
1084
+ def _ail_handle_CmpLT(self, expr):
1085
+ arg0, arg1 = expr.operands
1086
+
1087
+ expr_0 = self._expr(arg0)
1088
+ expr_1 = self._expr(arg1)
1089
+ if expr_0 is None:
1090
+ expr_0 = arg0
1091
+ if expr_1 is None:
1092
+ expr_1 = arg1
1093
+
1094
+ try:
1095
+ if isinstance(expr_0, ailment.Expr.Const) and isinstance(expr_1, ailment.Expr.Const):
1096
+ if expr_0.value < expr_1.value:
1097
+ return ailment.Expr.Const(None, None, 1, 1)
1098
+ return ailment.Expr.Const(None, None, 0, 1)
1099
+ except TypeError:
1100
+ pass
1101
+ return ailment.Expr.BinaryOp(expr.idx, "CmpLT", [expr_0, expr_1], expr.signed, **expr.tags)
1102
+
1103
+ def _ail_handle_Add(self, expr):
1104
+ arg0, arg1 = expr.operands
1105
+
1106
+ expr_0 = self._expr(arg0)
1107
+ expr_1 = self._expr(arg1)
1108
+ if expr_0 is None:
1109
+ expr_0 = arg0
1110
+ if expr_1 is None:
1111
+ expr_1 = arg1
1112
+
1113
+ try:
1114
+ return expr_0 + expr_1
1115
+ except TypeError:
1116
+ return ailment.Expr.BinaryOp(
1117
+ expr.idx,
1118
+ "Add",
1119
+ [expr_0, expr_1],
1120
+ expr.signed,
1121
+ floating_point=expr.floating_point,
1122
+ rounding_mode=expr.rounding_mode,
1123
+ **expr.tags,
1124
+ )
1125
+
1126
+ def _ail_handle_Sub(self, expr):
1127
+ arg0, arg1 = expr.operands
1128
+
1129
+ if not isinstance(arg0, claripy.ast.Base):
1130
+ expr_0 = self._expr(arg0)
1131
+ else:
1132
+ expr_0 = arg0
1133
+ if not isinstance(arg1, claripy.ast.Base):
1134
+ expr_1 = self._expr(arg1)
1135
+ else:
1136
+ expr_1 = self._expr(arg1)
1137
+
1138
+ if expr_0 is None:
1139
+ expr_0 = arg0
1140
+ if expr_1 is None:
1141
+ expr_1 = arg1
1142
+
1143
+ try:
1144
+ return expr_0 - expr_1
1145
+ except TypeError:
1146
+ return ailment.Expr.BinaryOp(
1147
+ expr.idx,
1148
+ "Sub",
1149
+ [expr_0, expr_1],
1150
+ expr.signed,
1151
+ floating_point=expr.floating_point,
1152
+ rounding_mode=expr.rounding_mode,
1153
+ **expr.tags,
1154
+ )
1155
+
1156
+ def _ail_handle_Div(self, expr):
1157
+ arg0, arg1 = expr.operands
1158
+
1159
+ expr_0 = self._expr(arg0)
1160
+ expr_1 = self._expr(arg1)
1161
+
1162
+ if expr_0 is None:
1163
+ expr_0 = arg0
1164
+ if expr_1 is None:
1165
+ expr_1 = arg1
1166
+
1167
+ try:
1168
+ return expr_0 // expr_1
1169
+ except TypeError:
1170
+ return ailment.Expr.BinaryOp(
1171
+ expr.idx,
1172
+ "Div",
1173
+ [expr_0, expr_1],
1174
+ expr.signed,
1175
+ floating_point=expr.floating_point,
1176
+ rounding_mode=expr.rounding_mode,
1177
+ **expr.tags,
1178
+ )
1179
+
1180
+ def _ail_handle_DivMod(self, expr):
1181
+ arg0, arg1 = expr.operands
1182
+
1183
+ expr_0 = self._expr(arg0)
1184
+ expr_1 = self._expr(arg1)
1185
+
1186
+ if expr_0 is None:
1187
+ expr_0 = arg0
1188
+ if expr_1 is None:
1189
+ expr_1 = arg1
1190
+
1191
+ return ailment.Expr.BinaryOp(
1192
+ expr.idx,
1193
+ "DivMod",
1194
+ [expr_0, expr_1],
1195
+ expr.signed,
1196
+ bits=expr.bits,
1197
+ from_bits=expr.from_bits,
1198
+ to_bits=expr.to_bits,
1199
+ **expr.tags,
1200
+ )
1201
+
1202
+ def _ail_handle_Mod(self, expr):
1203
+ arg0, arg1 = expr.operands
1204
+
1205
+ expr_0 = self._expr(arg0)
1206
+ expr_1 = self._expr(arg1)
1207
+
1208
+ if expr_0 is None:
1209
+ expr_0 = arg0
1210
+ if expr_1 is None:
1211
+ expr_1 = arg1
1212
+
1213
+ try:
1214
+ return expr_0 % expr_1
1215
+ except TypeError:
1216
+ return ailment.Expr.BinaryOp(expr.idx, "Mod", [expr_0, expr_1], expr.signed, **expr.tags)
1217
+
1218
+ def _ail_handle_Mul(self, expr):
1219
+ arg0, arg1 = expr.operands
1220
+
1221
+ expr_0 = self._expr(arg0)
1222
+ expr_1 = self._expr(arg1)
1223
+
1224
+ if expr_0 is None:
1225
+ expr_0 = arg0
1226
+ if expr_1 is None:
1227
+ expr_1 = arg1
1228
+
1229
+ try:
1230
+ return expr_0 * expr_1
1231
+ except TypeError:
1232
+ return ailment.Expr.BinaryOp(
1233
+ expr.idx,
1234
+ "Mul",
1235
+ [expr_0, expr_1],
1236
+ expr.signed,
1237
+ bits=expr.bits,
1238
+ floating_point=expr.floating_point,
1239
+ rounding_mode=expr.rounding_mode,
1240
+ **expr.tags,
1241
+ )
1242
+
1243
+ def _ail_handle_Mull(self, expr):
1244
+ arg0, arg1 = expr.operands
1245
+
1246
+ expr_0 = self._expr(arg0)
1247
+ expr_1 = self._expr(arg1)
1248
+
1249
+ if expr_0 is None:
1250
+ expr_0 = arg0
1251
+ if expr_1 is None:
1252
+ expr_1 = arg1
1253
+
1254
+ try:
1255
+ return expr_0 * expr_1
1256
+ except TypeError:
1257
+ return ailment.Expr.BinaryOp(
1258
+ expr.idx,
1259
+ "Mull",
1260
+ [expr_0, expr_1],
1261
+ expr.signed,
1262
+ bits=expr.bits,
1263
+ floating_point=expr.floating_point,
1264
+ rounding_mode=expr.rounding_mode,
1265
+ **expr.tags,
1266
+ )
1267
+
1268
+ def _ail_handle_And(self, expr):
1269
+ arg0, arg1 = expr.operands
1270
+
1271
+ expr_0 = self._expr(arg0)
1272
+ expr_1 = self._expr(arg1)
1273
+
1274
+ if expr_0 is None:
1275
+ expr_0 = arg0
1276
+ if expr_1 is None:
1277
+ expr_1 = arg1
1278
+
1279
+ try:
1280
+ return expr_0 & expr_1
1281
+ except TypeError:
1282
+ return ailment.Expr.BinaryOp(expr.idx, "And", [expr_0, expr_1], expr.signed, **expr.tags)
1283
+
1284
+ def _ail_handle_Or(self, expr):
1285
+ arg0, arg1 = expr.operands
1286
+
1287
+ expr_0 = self._expr(arg0)
1288
+ expr_1 = self._expr(arg1)
1289
+
1290
+ if expr_0 is None:
1291
+ expr_0 = arg0
1292
+ if expr_1 is None:
1293
+ expr_1 = arg1
1294
+
1295
+ try:
1296
+ return expr_0 | expr_1
1297
+ except TypeError:
1298
+ return ailment.Expr.BinaryOp(expr.idx, "Or", [expr_0, expr_1], expr.signed, **expr.tags)
1299
+
1300
+ def _ail_handle_Xor(self, expr):
1301
+ arg0, arg1 = expr.operands
1302
+
1303
+ expr_0 = self._expr(arg0)
1304
+ expr_1 = self._expr(arg1)
1305
+
1306
+ if expr_0 is None:
1307
+ expr_0 = arg0
1308
+ if expr_1 is None:
1309
+ expr_1 = arg1
1310
+
1311
+ try:
1312
+ return expr_0 ^ expr_1
1313
+ except TypeError:
1314
+ return ailment.Expr.BinaryOp(expr.idx, "Xor", [expr_0, expr_1], expr.signed, **expr.tags)
1315
+
1316
+ def _ail_handle_Shr(self, expr):
1317
+ arg0, arg1 = expr.operands
1318
+ expr_0 = self._expr(arg0)
1319
+ expr_1 = self._expr(arg1)
1320
+
1321
+ if expr_0 is None:
1322
+ expr_0 = arg0
1323
+ if expr_1 is None:
1324
+ expr_1 = arg1
1325
+
1326
+ try:
1327
+ if isinstance(expr_1, claripy.ast.BV) and expr_1.concrete:
1328
+ return expr_0 >> expr_1.concrete_value
1329
+ except TypeError:
1330
+ pass
1331
+
1332
+ return ailment.Expr.BinaryOp(expr.idx, "Shr", [expr_0, expr_1], expr.signed, **expr.tags)
1333
+
1334
+ def _ail_handle_Shl(self, expr):
1335
+ arg0, arg1 = expr.operands
1336
+ expr_0 = self._expr(arg0)
1337
+ expr_1 = self._expr(arg1)
1338
+
1339
+ if expr_0 is None:
1340
+ expr_0 = arg0
1341
+ if expr_1 is None:
1342
+ expr_1 = arg1
1343
+
1344
+ try:
1345
+ if isinstance(expr_1, claripy.ast.BV) and expr_1.concrete:
1346
+ return expr_0 << expr_1.concrete_value
1347
+ except TypeError:
1348
+ pass
1349
+
1350
+ return ailment.Expr.BinaryOp(expr.idx, "Shl", [expr_0, expr_1], expr.signed, **expr.tags)
1351
+
1352
+ def _ail_handle_Sal(self, expr):
1353
+ return self._ail_handle_Shl(expr)
1354
+
1355
+ def _ail_handle_Rol(self, expr):
1356
+ arg0, arg1 = expr.operands
1357
+ expr_0 = self._expr(arg0)
1358
+ expr_1 = self._expr(arg1)
1359
+
1360
+ if expr_0 is None:
1361
+ expr_0 = arg0
1362
+ if expr_1 is None:
1363
+ expr_1 = arg1
1364
+
1365
+ return ailment.Expr.BinaryOp(expr.idx, "Rol", [expr_0, expr_1], expr.signed, **expr.tags)
1366
+
1367
+ def _ail_handle_Ror(self, expr):
1368
+ arg0, arg1 = expr.operands
1369
+ expr_0 = self._expr(arg0)
1370
+ expr_1 = self._expr(arg1)
1371
+
1372
+ if expr_0 is None:
1373
+ expr_0 = arg0
1374
+ if expr_1 is None:
1375
+ expr_1 = arg1
1376
+
1377
+ return ailment.Expr.BinaryOp(expr.idx, "Ror", [expr_0, expr_1], expr.signed, **expr.tags)
1378
+
1379
+ def _ail_handle_Sar(self, expr):
1380
+ arg0, arg1 = expr.operands
1381
+ expr_0 = self._expr(arg0)
1382
+ expr_1 = self._expr(arg1)
1383
+
1384
+ if expr_0 is None:
1385
+ expr_0 = arg0
1386
+ if expr_1 is None:
1387
+ expr_1 = arg1
1388
+
1389
+ try:
1390
+ return expr_0 >> expr_1
1391
+ except TypeError:
1392
+ return ailment.Expr.BinaryOp(expr.idx, "Sar", [expr_0, expr_1], expr.signed, **expr.tags)
1393
+
1394
+ def _ail_handle_Concat(self, expr):
1395
+ arg0, arg1 = expr.operands
1396
+ expr_0 = self._expr(arg0)
1397
+ expr_1 = self._expr(arg1)
1398
+
1399
+ if expr_0 is None:
1400
+ expr_0 = arg0
1401
+ if expr_1 is None:
1402
+ expr_1 = arg1
1403
+
1404
+ return ailment.Expr.BinaryOp(expr.idx, "Concat", [expr_0, expr_1], expr.signed, **expr.tags)
1405
+
1406
+ #
1407
+ # Unary operation handlers
1408
+ #
1409
+
1410
+ def _ail_handle_Convert(self, expr):
1411
+ data = self._expr(expr.operand)
1412
+ if data is not None:
1413
+ if type(data) is int:
1414
+ return data
1415
+ return None
1416
+
1417
+ def _ail_handle_Not(self, expr):
1418
+ data = self._expr(expr.operand)
1419
+ if data is None:
1420
+ return None
1421
+
1422
+ return ailment.Expr.UnaryOp(expr.idx, "Not", data, **expr.tags)
1423
+
1424
+ def _ail_handle_Neg(self, expr):
1425
+ data = self._expr(expr.operand)
1426
+ if data is None:
1427
+ return None
1428
+
1429
+ return ailment.Expr.UnaryOp(expr.idx, "Neg", data, **expr.tags)
1430
+
1431
+ def _ail_handle_BitwiseNeg(self, expr):
1432
+ data = self._expr(expr.operand)
1433
+ if data is None:
1434
+ return None
1435
+
1436
+ return ailment.Expr.UnaryOp(expr.idx, "BitwiseNeg", data, **expr.tags)
1437
+
1438
+
1439
+ # Compatibility
1440
+ SimEngineLightVEX = SimEngineLightVEXMixin
1441
+ SimEngineLightAIL = SimEngineLightAILMixin