angr 9.2.117__py3-none-manylinux2014_x86_64.whl → 9.2.119__py3-none-manylinux2014_x86_64.whl

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

Potentially problematic release.


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

Files changed (1317) hide show
  1. angr/__init__.py +2 -1
  2. angr/__main__.py +21 -1
  3. angr/analyses/__init__.py +4 -0
  4. angr/analyses/analysis.py +88 -46
  5. angr/analyses/backward_slice.py +15 -18
  6. angr/analyses/binary_optimizer.py +29 -34
  7. angr/analyses/bindiff.py +35 -44
  8. angr/analyses/boyscout.py +1 -0
  9. angr/analyses/callee_cleanup_finder.py +3 -4
  10. angr/analyses/calling_convention.py +98 -98
  11. angr/analyses/cdg.py +5 -12
  12. angr/analyses/cfg/__init__.py +1 -0
  13. angr/analyses/cfg/cfb.py +14 -20
  14. angr/analyses/cfg/cfg.py +2 -1
  15. angr/analyses/cfg/cfg_arch_options.py +4 -1
  16. angr/analyses/cfg/cfg_base.py +122 -165
  17. angr/analyses/cfg/cfg_emulated.py +60 -92
  18. angr/analyses/cfg/cfg_fast.py +406 -335
  19. angr/analyses/cfg/cfg_fast_soot.py +10 -17
  20. angr/analyses/cfg/cfg_job_base.py +6 -7
  21. angr/analyses/cfg/indirect_jump_resolvers/__init__.py +1 -0
  22. angr/analyses/cfg/indirect_jump_resolvers/amd64_elf_got.py +2 -3
  23. angr/analyses/cfg/indirect_jump_resolvers/amd64_pe_iat.py +2 -3
  24. angr/analyses/cfg/indirect_jump_resolvers/arm_elf_fast.py +6 -8
  25. angr/analyses/cfg/indirect_jump_resolvers/const_resolver.py +3 -5
  26. angr/analyses/cfg/indirect_jump_resolvers/default_resolvers.py +1 -0
  27. angr/analyses/cfg/indirect_jump_resolvers/jumptable.py +97 -112
  28. angr/analyses/cfg/indirect_jump_resolvers/mips_elf_fast.py +26 -32
  29. angr/analyses/cfg/indirect_jump_resolvers/propagator_utils.py +1 -0
  30. angr/analyses/cfg/indirect_jump_resolvers/resolver.py +7 -7
  31. angr/analyses/cfg/indirect_jump_resolvers/x86_elf_pic_plt.py +3 -8
  32. angr/analyses/cfg/indirect_jump_resolvers/x86_pe_iat.py +2 -3
  33. angr/analyses/cfg_slice_to_sink/__init__.py +1 -0
  34. angr/analyses/cfg_slice_to_sink/cfg_slice_to_sink.py +4 -4
  35. angr/analyses/cfg_slice_to_sink/graph.py +4 -1
  36. angr/analyses/cfg_slice_to_sink/transitions.py +4 -2
  37. angr/analyses/class_identifier.py +1 -0
  38. angr/analyses/code_tagging.py +9 -9
  39. angr/analyses/complete_calling_conventions.py +28 -36
  40. angr/analyses/congruency_check.py +6 -11
  41. angr/analyses/data_dep/__init__.py +1 -0
  42. angr/analyses/data_dep/data_dependency_analysis.py +38 -48
  43. angr/analyses/data_dep/dep_nodes.py +13 -12
  44. angr/analyses/data_dep/sim_act_location.py +3 -0
  45. angr/analyses/datagraph_meta.py +7 -7
  46. angr/analyses/ddg.py +48 -69
  47. angr/analyses/decompiler/__init__.py +3 -0
  48. angr/analyses/decompiler/ail_simplifier.py +929 -400
  49. angr/analyses/decompiler/ailgraph_walker.py +1 -0
  50. angr/analyses/decompiler/block_io_finder.py +13 -4
  51. angr/analyses/decompiler/block_similarity.py +28 -18
  52. angr/analyses/decompiler/block_simplifier.py +40 -104
  53. angr/analyses/decompiler/callsite_maker.py +124 -82
  54. angr/analyses/decompiler/ccall_rewriters/__init__.py +1 -0
  55. angr/analyses/decompiler/ccall_rewriters/amd64_ccalls.py +115 -105
  56. angr/analyses/decompiler/ccall_rewriters/rewriter_base.py +2 -1
  57. angr/analyses/decompiler/clinic.py +371 -184
  58. angr/analyses/decompiler/condition_processor.py +127 -116
  59. angr/analyses/decompiler/counters/__init__.py +5 -0
  60. angr/analyses/decompiler/counters/boolean_counter.py +27 -0
  61. angr/analyses/decompiler/{call_counter.py → counters/call_counter.py} +5 -4
  62. angr/analyses/decompiler/{expression_counters.py → counters/expression_counters.py} +5 -4
  63. angr/analyses/decompiler/counters/seq_cf_structure_counter.py +63 -0
  64. angr/analyses/decompiler/decompilation_cache.py +2 -1
  65. angr/analyses/decompiler/decompilation_options.py +1 -0
  66. angr/analyses/decompiler/decompiler.py +50 -27
  67. angr/analyses/decompiler/dephication/__init__.py +6 -0
  68. angr/analyses/decompiler/dephication/dephication_base.py +87 -0
  69. angr/analyses/decompiler/dephication/graph_dephication.py +63 -0
  70. angr/analyses/decompiler/dephication/graph_rewriting.py +116 -0
  71. angr/analyses/decompiler/dephication/graph_vvar_mapping.py +313 -0
  72. angr/analyses/decompiler/dephication/rewriting_engine.py +247 -0
  73. angr/analyses/decompiler/dephication/seqnode_dephication.py +106 -0
  74. angr/analyses/decompiler/empty_node_remover.py +1 -0
  75. angr/analyses/decompiler/expression_narrower.py +12 -17
  76. angr/analyses/decompiler/goto_manager.py +43 -4
  77. angr/analyses/decompiler/graph_region.py +19 -31
  78. angr/analyses/decompiler/jump_target_collector.py +1 -0
  79. angr/analyses/decompiler/jumptable_entry_condition_rewriter.py +2 -1
  80. angr/analyses/decompiler/optimization_passes/__init__.py +7 -3
  81. angr/analyses/decompiler/optimization_passes/base_ptr_save_simplifier.py +23 -18
  82. angr/analyses/decompiler/optimization_passes/call_stmt_rewriter.py +46 -0
  83. angr/analyses/decompiler/optimization_passes/code_motion.py +4 -2
  84. angr/analyses/decompiler/optimization_passes/const_derefs.py +36 -36
  85. angr/analyses/decompiler/optimization_passes/const_prop_reverter.py +6 -9
  86. angr/analyses/decompiler/optimization_passes/cross_jump_reverter.py +4 -3
  87. angr/analyses/decompiler/optimization_passes/deadblock_remover.py +1 -0
  88. angr/analyses/decompiler/optimization_passes/div_simplifier.py +78 -72
  89. angr/analyses/decompiler/optimization_passes/duplication_reverter/__init__.py +2 -0
  90. angr/analyses/decompiler/optimization_passes/duplication_reverter/ail_merge_graph.py +503 -0
  91. angr/analyses/decompiler/optimization_passes/duplication_reverter/duplication_reverter.py +1215 -0
  92. angr/analyses/decompiler/optimization_passes/duplication_reverter/errors.py +16 -0
  93. angr/analyses/decompiler/optimization_passes/duplication_reverter/similarity.py +126 -0
  94. angr/analyses/decompiler/optimization_passes/duplication_reverter/utils.py +169 -0
  95. angr/analyses/decompiler/optimization_passes/engine_base.py +60 -63
  96. angr/analyses/decompiler/optimization_passes/expr_op_swapper.py +6 -7
  97. angr/analyses/decompiler/optimization_passes/flip_boolean_cmp.py +1 -0
  98. angr/analyses/decompiler/optimization_passes/inlined_string_transformation_simplifier.py +102 -37
  99. angr/analyses/decompiler/optimization_passes/ite_expr_converter.py +8 -10
  100. angr/analyses/decompiler/optimization_passes/ite_region_converter.py +128 -18
  101. angr/analyses/decompiler/optimization_passes/lowered_switch_simplifier.py +142 -145
  102. angr/analyses/decompiler/optimization_passes/mod_simplifier.py +27 -23
  103. angr/analyses/decompiler/optimization_passes/multi_simplifier.py +30 -34
  104. angr/analyses/decompiler/optimization_passes/optimization_pass.py +108 -47
  105. angr/analyses/decompiler/optimization_passes/register_save_area_simplifier.py +10 -3
  106. angr/analyses/decompiler/optimization_passes/ret_addr_save_simplifier.py +5 -6
  107. angr/analyses/decompiler/optimization_passes/ret_deduplicator.py +3 -2
  108. angr/analyses/decompiler/optimization_passes/return_duplicator_base.py +125 -13
  109. angr/analyses/decompiler/optimization_passes/return_duplicator_high.py +1 -0
  110. angr/analyses/decompiler/optimization_passes/return_duplicator_low.py +3 -2
  111. angr/analyses/decompiler/optimization_passes/stack_canary_simplifier.py +52 -21
  112. angr/analyses/decompiler/optimization_passes/switch_default_case_duplicator.py +3 -2
  113. angr/analyses/decompiler/optimization_passes/win_stack_canary_simplifier.py +47 -36
  114. angr/analyses/decompiler/optimization_passes/x86_gcc_getpc_simplifier.py +2 -1
  115. angr/analyses/decompiler/peephole_optimizations/__init__.py +2 -0
  116. angr/analyses/decompiler/peephole_optimizations/a_div_const_add_a_mul_n_div_const.py +26 -22
  117. angr/analyses/decompiler/peephole_optimizations/a_mul_const_div_shr_const.py +2 -2
  118. angr/analyses/decompiler/peephole_optimizations/a_shl_const_sub_a.py +1 -0
  119. angr/analyses/decompiler/peephole_optimizations/a_sub_a_div.py +2 -2
  120. angr/analyses/decompiler/peephole_optimizations/a_sub_a_div_const_mul_const.py +1 -0
  121. angr/analyses/decompiler/peephole_optimizations/a_sub_a_sub_n.py +8 -4
  122. angr/analyses/decompiler/peephole_optimizations/arm_cmpf.py +28 -27
  123. angr/analyses/decompiler/peephole_optimizations/base.py +17 -20
  124. angr/analyses/decompiler/peephole_optimizations/basepointeroffset_add_n.py +1 -0
  125. angr/analyses/decompiler/peephole_optimizations/basepointeroffset_and_mask.py +1 -0
  126. angr/analyses/decompiler/peephole_optimizations/bitwise_or_to_logical_or.py +2 -2
  127. angr/analyses/decompiler/peephole_optimizations/bool_expr_xor_1.py +2 -2
  128. angr/analyses/decompiler/peephole_optimizations/bswap.py +29 -22
  129. angr/analyses/decompiler/peephole_optimizations/cmpord_rewriter.py +3 -4
  130. angr/analyses/decompiler/peephole_optimizations/coalesce_adjacent_shrs.py +39 -0
  131. angr/analyses/decompiler/peephole_optimizations/coalesce_same_cascading_ifs.py +2 -1
  132. angr/analyses/decompiler/peephole_optimizations/const_mull_a_shift.py +94 -29
  133. angr/analyses/decompiler/peephole_optimizations/constant_derefs.py +1 -0
  134. angr/analyses/decompiler/peephole_optimizations/conv_a_sub0_shr_and.py +48 -49
  135. angr/analyses/decompiler/peephole_optimizations/conv_shl_shr.py +1 -0
  136. angr/analyses/decompiler/peephole_optimizations/eager_eval.py +41 -34
  137. angr/analyses/decompiler/peephole_optimizations/extended_byte_and_mask.py +2 -1
  138. angr/analyses/decompiler/peephole_optimizations/inlined_strcpy.py +28 -18
  139. angr/analyses/decompiler/peephole_optimizations/inlined_strcpy_consolidation.py +8 -4
  140. angr/analyses/decompiler/peephole_optimizations/inlined_wstrcpy.py +28 -18
  141. angr/analyses/decompiler/peephole_optimizations/invert_negated_logical_conjuction_disjunction.py +32 -32
  142. angr/analyses/decompiler/peephole_optimizations/one_sub_bool.py +2 -2
  143. angr/analyses/decompiler/peephole_optimizations/remove_cascading_conversions.py +23 -3
  144. angr/analyses/decompiler/peephole_optimizations/remove_empty_if_body.py +2 -1
  145. angr/analyses/decompiler/peephole_optimizations/remove_noop_conversions.py +4 -0
  146. angr/analyses/decompiler/peephole_optimizations/remove_redundant_bitmasks.py +1 -0
  147. angr/analyses/decompiler/peephole_optimizations/remove_redundant_conversions.py +4 -6
  148. angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_branch.py +14 -13
  149. angr/analyses/decompiler/peephole_optimizations/remove_redundant_ite_comparisons.py +2 -2
  150. angr/analyses/decompiler/peephole_optimizations/remove_redundant_nots.py +1 -0
  151. angr/analyses/decompiler/peephole_optimizations/remove_redundant_reinterprets.py +3 -2
  152. angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts.py +2 -2
  153. angr/analyses/decompiler/peephole_optimizations/remove_redundant_shifts_around_comparators.py +20 -16
  154. angr/analyses/decompiler/peephole_optimizations/rewrite_bit_extractions.py +3 -3
  155. angr/analyses/decompiler/peephole_optimizations/rewrite_mips_gp_loads.py +4 -2
  156. angr/analyses/decompiler/peephole_optimizations/rol_ror.py +66 -40
  157. angr/analyses/decompiler/peephole_optimizations/sar_to_signed_div.py +64 -57
  158. angr/analyses/decompiler/peephole_optimizations/simplify_pc_relative_loads.py +14 -14
  159. angr/analyses/decompiler/peephole_optimizations/single_bit_cond_to_boolexpr.py +1 -0
  160. angr/analyses/decompiler/peephole_optimizations/single_bit_xor.py +8 -5
  161. angr/analyses/decompiler/peephole_optimizations/tidy_stack_addr.py +4 -6
  162. angr/analyses/decompiler/redundant_label_remover.py +20 -19
  163. angr/analyses/decompiler/region_identifier.py +64 -77
  164. angr/analyses/decompiler/region_simplifiers/__init__.py +1 -0
  165. angr/analyses/decompiler/region_simplifiers/cascading_cond_transformer.py +2 -1
  166. angr/analyses/decompiler/region_simplifiers/cascading_ifs.py +1 -0
  167. angr/analyses/decompiler/region_simplifiers/expr_folding.py +43 -29
  168. angr/analyses/decompiler/region_simplifiers/goto.py +1 -0
  169. angr/analyses/decompiler/region_simplifiers/if_.py +29 -36
  170. angr/analyses/decompiler/region_simplifiers/ifelse.py +1 -0
  171. angr/analyses/decompiler/region_simplifiers/loop.py +27 -13
  172. angr/analyses/decompiler/region_simplifiers/node_address_finder.py +1 -0
  173. angr/analyses/decompiler/region_simplifiers/region_simplifier.py +1 -0
  174. angr/analyses/decompiler/region_simplifiers/switch_cluster_simplifier.py +12 -16
  175. angr/analyses/decompiler/region_simplifiers/switch_expr_simplifier.py +36 -32
  176. angr/analyses/decompiler/region_walker.py +1 -0
  177. angr/analyses/decompiler/return_maker.py +1 -0
  178. angr/analyses/decompiler/seq_to_blocks.py +1 -0
  179. angr/analyses/decompiler/sequence_walker.py +5 -10
  180. angr/analyses/decompiler/ssailification/__init__.py +4 -0
  181. angr/analyses/decompiler/ssailification/rewriting.py +325 -0
  182. angr/analyses/decompiler/ssailification/rewriting_engine.py +601 -0
  183. angr/analyses/decompiler/ssailification/rewriting_state.py +60 -0
  184. angr/analyses/decompiler/ssailification/ssailification.py +213 -0
  185. angr/analyses/decompiler/ssailification/traversal.py +97 -0
  186. angr/analyses/decompiler/ssailification/traversal_engine.py +131 -0
  187. angr/analyses/decompiler/ssailification/traversal_state.py +42 -0
  188. angr/analyses/decompiler/structured_codegen/__init__.py +1 -0
  189. angr/analyses/decompiler/structured_codegen/base.py +2 -2
  190. angr/analyses/decompiler/structured_codegen/c.py +172 -160
  191. angr/analyses/decompiler/structured_codegen/dummy.py +1 -0
  192. angr/analyses/decompiler/structured_codegen/dwarf_import.py +1 -0
  193. angr/analyses/decompiler/structuring/__init__.py +1 -0
  194. angr/analyses/decompiler/structuring/dream.py +27 -43
  195. angr/analyses/decompiler/structuring/phoenix.py +201 -201
  196. angr/analyses/decompiler/structuring/recursive_structurer.py +4 -3
  197. angr/analyses/decompiler/structuring/sailr.py +5 -4
  198. angr/analyses/decompiler/structuring/structurer_base.py +26 -23
  199. angr/analyses/decompiler/structuring/structurer_nodes.py +14 -24
  200. angr/analyses/decompiler/utils.py +112 -52
  201. angr/analyses/disassembly.py +75 -77
  202. angr/analyses/disassembly_utils.py +10 -13
  203. angr/analyses/dominance_frontier.py +25 -7
  204. angr/analyses/find_objects_static.py +3 -2
  205. angr/analyses/flirt.py +7 -10
  206. angr/analyses/forward_analysis/__init__.py +1 -0
  207. angr/analyses/forward_analysis/forward_analysis.py +9 -6
  208. angr/analyses/forward_analysis/job_info.py +3 -3
  209. angr/analyses/forward_analysis/visitors/__init__.py +1 -0
  210. angr/analyses/forward_analysis/visitors/call_graph.py +1 -0
  211. angr/analyses/forward_analysis/visitors/function_graph.py +3 -2
  212. angr/analyses/forward_analysis/visitors/graph.py +9 -9
  213. angr/analyses/forward_analysis/visitors/loop.py +1 -0
  214. angr/analyses/forward_analysis/visitors/single_node_graph.py +2 -2
  215. angr/analyses/identifier/__init__.py +1 -0
  216. angr/analyses/identifier/custom_callable.py +2 -2
  217. angr/analyses/identifier/errors.py +1 -0
  218. angr/analyses/identifier/func.py +6 -3
  219. angr/analyses/identifier/functions/__init__.py +2 -1
  220. angr/analyses/identifier/functions/atoi.py +2 -4
  221. angr/analyses/identifier/functions/based_atoi.py +3 -6
  222. angr/analyses/identifier/functions/fdprintf.py +1 -0
  223. angr/analyses/identifier/functions/free.py +3 -5
  224. angr/analyses/identifier/functions/int2str.py +11 -26
  225. angr/analyses/identifier/functions/malloc.py +4 -6
  226. angr/analyses/identifier/functions/memcmp.py +2 -4
  227. angr/analyses/identifier/functions/memcpy.py +2 -2
  228. angr/analyses/identifier/functions/memset.py +2 -2
  229. angr/analyses/identifier/functions/printf.py +1 -0
  230. angr/analyses/identifier/functions/recv_until.py +3 -6
  231. angr/analyses/identifier/functions/skip_calloc.py +2 -1
  232. angr/analyses/identifier/functions/skip_realloc.py +4 -6
  233. angr/analyses/identifier/functions/skip_recv_n.py +4 -6
  234. angr/analyses/identifier/functions/snprintf.py +2 -4
  235. angr/analyses/identifier/functions/sprintf.py +1 -0
  236. angr/analyses/identifier/functions/strcasecmp.py +1 -0
  237. angr/analyses/identifier/functions/strcmp.py +2 -1
  238. angr/analyses/identifier/functions/strcpy.py +2 -2
  239. angr/analyses/identifier/functions/strlen.py +1 -0
  240. angr/analyses/identifier/functions/strncmp.py +2 -1
  241. angr/analyses/identifier/functions/strncpy.py +2 -2
  242. angr/analyses/identifier/functions/strtol.py +2 -4
  243. angr/analyses/identifier/identify.py +35 -54
  244. angr/analyses/identifier/runner.py +6 -5
  245. angr/analyses/init_finder.py +17 -17
  246. angr/analyses/loop_analysis.py +10 -14
  247. angr/analyses/loopfinder.py +9 -13
  248. angr/analyses/propagator/__init__.py +1 -0
  249. angr/analyses/propagator/engine_ail.py +161 -166
  250. angr/analyses/propagator/engine_base.py +3 -2
  251. angr/analyses/propagator/engine_vex.py +47 -48
  252. angr/analyses/propagator/outdated_definition_walker.py +18 -23
  253. angr/analyses/propagator/propagator.py +8 -12
  254. angr/analyses/propagator/tmpvar_finder.py +1 -0
  255. angr/analyses/propagator/top_checker_mixin.py +2 -4
  256. angr/analyses/propagator/values.py +1 -0
  257. angr/analyses/propagator/vex_vars.py +3 -2
  258. angr/analyses/proximity_graph.py +12 -20
  259. angr/analyses/reaching_definitions/__init__.py +5 -4
  260. angr/analyses/reaching_definitions/call_trace.py +7 -6
  261. angr/analyses/reaching_definitions/dep_graph.py +18 -23
  262. angr/analyses/reaching_definitions/engine_ail.py +89 -121
  263. angr/analyses/reaching_definitions/engine_vex.py +20 -32
  264. angr/analyses/reaching_definitions/function_handler.py +38 -35
  265. angr/analyses/reaching_definitions/function_handler_library/__init__.py +1 -0
  266. angr/analyses/reaching_definitions/function_handler_library/stdio.py +4 -6
  267. angr/analyses/reaching_definitions/function_handler_library/stdlib.py +1 -2
  268. angr/analyses/reaching_definitions/function_handler_library/string.py +2 -4
  269. angr/analyses/reaching_definitions/function_handler_library/unistd.py +1 -0
  270. angr/analyses/reaching_definitions/heap_allocator.py +7 -6
  271. angr/analyses/reaching_definitions/rd_initializer.py +27 -25
  272. angr/analyses/reaching_definitions/rd_state.py +14 -16
  273. angr/analyses/reaching_definitions/reaching_definitions.py +27 -36
  274. angr/analyses/reaching_definitions/subject.py +3 -2
  275. angr/analyses/reassembler.py +189 -253
  276. angr/analyses/s_liveness/__init__.py +2 -0
  277. angr/analyses/s_liveness/s_liveness.py +153 -0
  278. angr/analyses/s_propagator/__init__.py +2 -0
  279. angr/analyses/s_propagator/s_propagator.py +250 -0
  280. angr/analyses/s_reaching_definitions/__init__.py +2 -0
  281. angr/analyses/s_reaching_definitions/s_rda.py +479 -0
  282. angr/analyses/soot_class_hierarchy.py +15 -24
  283. angr/analyses/stack_pointer_tracker.py +106 -98
  284. angr/analyses/static_hooker.py +3 -2
  285. angr/analyses/typehoon/__init__.py +1 -0
  286. angr/analyses/typehoon/dfa.py +5 -5
  287. angr/analyses/typehoon/lifter.py +5 -4
  288. angr/analyses/typehoon/simple_solver.py +80 -64
  289. angr/analyses/typehoon/translator.py +26 -16
  290. angr/analyses/typehoon/typeconsts.py +22 -12
  291. angr/analyses/typehoon/typehoon.py +8 -10
  292. angr/analyses/typehoon/typevars.py +37 -49
  293. angr/analyses/typehoon/variance.py +1 -0
  294. angr/analyses/variable_recovery/__init__.py +1 -0
  295. angr/analyses/variable_recovery/annotations.py +1 -0
  296. angr/analyses/variable_recovery/engine_ail.py +78 -32
  297. angr/analyses/variable_recovery/engine_base.py +233 -59
  298. angr/analyses/variable_recovery/engine_vex.py +17 -21
  299. angr/analyses/variable_recovery/irsb_scanner.py +1 -0
  300. angr/analyses/variable_recovery/variable_recovery.py +14 -16
  301. angr/analyses/variable_recovery/variable_recovery_base.py +12 -14
  302. angr/analyses/variable_recovery/variable_recovery_fast.py +67 -47
  303. angr/analyses/veritesting.py +10 -16
  304. angr/analyses/vfg.py +102 -148
  305. angr/analyses/vsa_ddg.py +3 -5
  306. angr/analyses/vtable.py +6 -6
  307. angr/analyses/xrefs.py +9 -13
  308. angr/angrdb/__init__.py +4 -2
  309. angr/angrdb/db.py +51 -53
  310. angr/angrdb/models.py +1 -0
  311. angr/angrdb/serializers/__init__.py +1 -0
  312. angr/angrdb/serializers/cfg_model.py +2 -2
  313. angr/angrdb/serializers/comments.py +1 -0
  314. angr/angrdb/serializers/funcs.py +4 -3
  315. angr/angrdb/serializers/kb.py +3 -2
  316. angr/angrdb/serializers/labels.py +1 -0
  317. angr/angrdb/serializers/structured_code.py +5 -10
  318. angr/angrdb/serializers/variables.py +6 -6
  319. angr/angrdb/serializers/xrefs.py +2 -2
  320. angr/annocfg.py +17 -25
  321. angr/blade.py +19 -23
  322. angr/block.py +11 -13
  323. angr/callable.py +4 -3
  324. angr/calling_conventions.py +147 -147
  325. angr/code_location.py +12 -13
  326. angr/codenode.py +2 -1
  327. angr/concretization_strategies/__init__.py +6 -6
  328. angr/concretization_strategies/any.py +5 -4
  329. angr/concretization_strategies/any_named.py +1 -0
  330. angr/concretization_strategies/controlled_data.py +1 -0
  331. angr/concretization_strategies/eval.py +2 -2
  332. angr/concretization_strategies/logging.py +1 -0
  333. angr/concretization_strategies/max.py +6 -6
  334. angr/concretization_strategies/nonzero.py +1 -0
  335. angr/concretization_strategies/nonzero_range.py +4 -3
  336. angr/concretization_strategies/norepeats.py +5 -4
  337. angr/concretization_strategies/norepeats_range.py +1 -0
  338. angr/concretization_strategies/range.py +1 -0
  339. angr/concretization_strategies/signed_add.py +13 -9
  340. angr/concretization_strategies/single.py +2 -0
  341. angr/concretization_strategies/solutions.py +1 -0
  342. angr/concretization_strategies/unlimited_range.py +1 -0
  343. angr/distributed/__init__.py +1 -0
  344. angr/distributed/server.py +2 -2
  345. angr/distributed/worker.py +3 -3
  346. angr/engines/__init__.py +1 -0
  347. angr/engines/concrete.py +2 -1
  348. angr/engines/engine.py +4 -6
  349. angr/engines/failure.py +2 -1
  350. angr/engines/hook.py +1 -0
  351. angr/engines/light/__init__.py +1 -0
  352. angr/engines/light/data.py +221 -255
  353. angr/engines/light/engine.py +72 -85
  354. angr/engines/pcode/__init__.py +1 -0
  355. angr/engines/pcode/behavior.py +3 -3
  356. angr/engines/pcode/cc.py +1 -0
  357. angr/engines/pcode/emulate.py +13 -16
  358. angr/engines/pcode/engine.py +7 -5
  359. angr/engines/pcode/lifter.py +62 -79
  360. angr/engines/procedure.py +1 -0
  361. angr/engines/soot/__init__.py +1 -0
  362. angr/engines/soot/engine.py +46 -52
  363. angr/engines/soot/exceptions.py +3 -0
  364. angr/engines/soot/expressions/__init__.py +1 -0
  365. angr/engines/soot/expressions/arrayref.py +1 -0
  366. angr/engines/soot/expressions/base.py +4 -5
  367. angr/engines/soot/expressions/binop.py +1 -0
  368. angr/engines/soot/expressions/cast.py +1 -0
  369. angr/engines/soot/expressions/condition.py +2 -1
  370. angr/engines/soot/expressions/constants.py +1 -0
  371. angr/engines/soot/expressions/instanceOf.py +1 -0
  372. angr/engines/soot/expressions/instancefieldref.py +1 -0
  373. angr/engines/soot/expressions/invoke.py +7 -9
  374. angr/engines/soot/expressions/length.py +1 -0
  375. angr/engines/soot/expressions/local.py +1 -0
  376. angr/engines/soot/expressions/new.py +1 -0
  377. angr/engines/soot/expressions/newArray.py +1 -0
  378. angr/engines/soot/expressions/newMultiArray.py +3 -3
  379. angr/engines/soot/expressions/paramref.py +1 -0
  380. angr/engines/soot/expressions/phi.py +1 -0
  381. angr/engines/soot/expressions/staticfieldref.py +1 -0
  382. angr/engines/soot/expressions/thisref.py +1 -0
  383. angr/engines/soot/expressions/unsupported.py +1 -0
  384. angr/engines/soot/field_dispatcher.py +5 -8
  385. angr/engines/soot/method_dispatcher.py +4 -7
  386. angr/engines/soot/statements/__init__.py +4 -4
  387. angr/engines/soot/statements/assign.py +1 -0
  388. angr/engines/soot/statements/base.py +6 -7
  389. angr/engines/soot/statements/goto.py +2 -1
  390. angr/engines/soot/statements/identity.py +1 -0
  391. angr/engines/soot/statements/if_.py +2 -1
  392. angr/engines/soot/statements/invoke.py +1 -0
  393. angr/engines/soot/statements/return_.py +1 -0
  394. angr/engines/soot/statements/switch.py +1 -0
  395. angr/engines/soot/statements/throw.py +2 -1
  396. angr/engines/soot/values/__init__.py +4 -2
  397. angr/engines/soot/values/arrayref.py +8 -10
  398. angr/engines/soot/values/base.py +4 -1
  399. angr/engines/soot/values/constants.py +1 -0
  400. angr/engines/soot/values/instancefieldref.py +1 -0
  401. angr/engines/soot/values/local.py +1 -0
  402. angr/engines/soot/values/paramref.py +1 -0
  403. angr/engines/soot/values/staticfieldref.py +1 -0
  404. angr/engines/soot/values/strref.py +3 -2
  405. angr/engines/soot/values/thisref.py +1 -0
  406. angr/engines/successors.py +21 -24
  407. angr/engines/syscall.py +9 -9
  408. angr/engines/unicorn.py +14 -9
  409. angr/engines/vex/__init__.py +1 -0
  410. angr/engines/vex/claripy/__init__.py +1 -0
  411. angr/engines/vex/claripy/ccall.py +86 -112
  412. angr/engines/vex/claripy/datalayer.py +12 -16
  413. angr/engines/vex/claripy/irop.py +85 -104
  414. angr/engines/vex/heavy/__init__.py +1 -0
  415. angr/engines/vex/heavy/actions.py +1 -0
  416. angr/engines/vex/heavy/concretizers.py +8 -9
  417. angr/engines/vex/heavy/dirty.py +6 -5
  418. angr/engines/vex/heavy/heavy.py +15 -14
  419. angr/engines/vex/heavy/inspect.py +1 -0
  420. angr/engines/vex/heavy/resilience.py +2 -2
  421. angr/engines/vex/heavy/super_fastpath.py +2 -2
  422. angr/engines/vex/lifter.py +28 -35
  423. angr/engines/vex/light/__init__.py +1 -0
  424. angr/engines/vex/light/light.py +2 -4
  425. angr/engines/vex/light/resilience.py +1 -0
  426. angr/engines/vex/light/slicing.py +1 -0
  427. angr/errors.py +6 -1
  428. angr/exploration_techniques/__init__.py +3 -2
  429. angr/exploration_techniques/bucketizer.py +2 -3
  430. angr/exploration_techniques/common.py +3 -3
  431. angr/exploration_techniques/dfs.py +1 -0
  432. angr/exploration_techniques/director.py +17 -19
  433. angr/exploration_techniques/driller_core.py +3 -7
  434. angr/exploration_techniques/explorer.py +7 -3
  435. angr/exploration_techniques/lengthlimiter.py +1 -0
  436. angr/exploration_techniques/local_loop_seer.py +2 -2
  437. angr/exploration_techniques/loop_seer.py +11 -14
  438. angr/exploration_techniques/manual_mergepoint.py +3 -2
  439. angr/exploration_techniques/memory_watcher.py +1 -0
  440. angr/exploration_techniques/oppologist.py +4 -4
  441. angr/exploration_techniques/slicecutor.py +1 -0
  442. angr/exploration_techniques/spiller.py +8 -8
  443. angr/exploration_techniques/spiller_db.py +1 -0
  444. angr/exploration_techniques/stochastic.py +3 -4
  445. angr/exploration_techniques/stub_stasher.py +1 -0
  446. angr/exploration_techniques/suggestions.py +5 -4
  447. angr/exploration_techniques/symbion.py +1 -0
  448. angr/exploration_techniques/tech_builder.py +1 -0
  449. angr/exploration_techniques/threading.py +1 -0
  450. angr/exploration_techniques/timeout.py +1 -0
  451. angr/exploration_techniques/tracer.py +34 -39
  452. angr/exploration_techniques/unique.py +1 -0
  453. angr/exploration_techniques/veritesting.py +1 -0
  454. angr/factory.py +9 -9
  455. angr/flirt/__init__.py +1 -0
  456. angr/flirt/build_sig.py +8 -12
  457. angr/keyed_region.py +10 -17
  458. angr/knowledge_base/__init__.py +1 -0
  459. angr/knowledge_base/knowledge_base.py +17 -17
  460. angr/knowledge_plugins/__init__.py +1 -0
  461. angr/knowledge_plugins/callsite_prototypes.py +1 -0
  462. angr/knowledge_plugins/cfg/__init__.py +2 -0
  463. angr/knowledge_plugins/cfg/cfg_manager.py +2 -1
  464. angr/knowledge_plugins/cfg/cfg_model.py +27 -43
  465. angr/knowledge_plugins/cfg/cfg_node.py +8 -19
  466. angr/knowledge_plugins/cfg/indirect_jump.py +3 -5
  467. angr/knowledge_plugins/cfg/memory_data.py +4 -3
  468. angr/knowledge_plugins/comments.py +1 -0
  469. angr/knowledge_plugins/custom_strings.py +1 -0
  470. angr/knowledge_plugins/data.py +1 -0
  471. angr/knowledge_plugins/debug_variables.py +18 -23
  472. angr/knowledge_plugins/functions/__init__.py +1 -0
  473. angr/knowledge_plugins/functions/function.py +49 -53
  474. angr/knowledge_plugins/functions/function_manager.py +14 -14
  475. angr/knowledge_plugins/functions/function_parser.py +38 -42
  476. angr/knowledge_plugins/functions/soot_function.py +5 -6
  477. angr/knowledge_plugins/indirect_jumps.py +1 -0
  478. angr/knowledge_plugins/key_definitions/__init__.py +1 -0
  479. angr/knowledge_plugins/key_definitions/atoms.py +65 -17
  480. angr/knowledge_plugins/key_definitions/constants.py +6 -0
  481. angr/knowledge_plugins/key_definitions/definition.py +22 -25
  482. angr/knowledge_plugins/key_definitions/environment.py +18 -14
  483. angr/knowledge_plugins/key_definitions/heap_address.py +4 -3
  484. angr/knowledge_plugins/key_definitions/key_definition_manager.py +5 -4
  485. angr/knowledge_plugins/key_definitions/live_definitions.py +36 -45
  486. angr/knowledge_plugins/key_definitions/liveness.py +18 -23
  487. angr/knowledge_plugins/key_definitions/rd_model.py +29 -34
  488. angr/knowledge_plugins/key_definitions/tag.py +7 -6
  489. angr/knowledge_plugins/key_definitions/undefined.py +3 -0
  490. angr/knowledge_plugins/key_definitions/unknown_size.py +3 -0
  491. angr/knowledge_plugins/key_definitions/uses.py +21 -23
  492. angr/knowledge_plugins/labels.py +3 -2
  493. angr/knowledge_plugins/patches.py +2 -1
  494. angr/knowledge_plugins/plugin.py +2 -1
  495. angr/knowledge_plugins/propagations/__init__.py +1 -0
  496. angr/knowledge_plugins/propagations/prop_value.py +25 -27
  497. angr/knowledge_plugins/propagations/propagation_manager.py +2 -2
  498. angr/knowledge_plugins/propagations/propagation_model.py +5 -4
  499. angr/knowledge_plugins/propagations/states.py +71 -81
  500. angr/knowledge_plugins/structured_code/__init__.py +1 -0
  501. angr/knowledge_plugins/structured_code/manager.py +5 -4
  502. angr/knowledge_plugins/sync/__init__.py +1 -0
  503. angr/knowledge_plugins/sync/sync_controller.py +10 -15
  504. angr/knowledge_plugins/types.py +1 -0
  505. angr/knowledge_plugins/variables/__init__.py +1 -0
  506. angr/knowledge_plugins/variables/variable_access.py +9 -10
  507. angr/knowledge_plugins/variables/variable_manager.py +84 -55
  508. angr/knowledge_plugins/xrefs/__init__.py +1 -0
  509. angr/knowledge_plugins/xrefs/xref.py +7 -11
  510. angr/knowledge_plugins/xrefs/xref_manager.py +1 -0
  511. angr/knowledge_plugins/xrefs/xref_types.py +3 -0
  512. angr/misc/__init__.py +1 -0
  513. angr/misc/ansi.py +1 -0
  514. angr/misc/autoimport.py +3 -2
  515. angr/misc/bug_report.py +6 -5
  516. angr/misc/hookset.py +3 -2
  517. angr/misc/loggers.py +2 -2
  518. angr/misc/picklable_lock.py +1 -0
  519. angr/misc/plugins.py +11 -13
  520. angr/misc/range.py +3 -0
  521. angr/misc/telemetry.py +54 -0
  522. angr/misc/testing.py +2 -1
  523. angr/misc/ux.py +5 -5
  524. angr/misc/weakpatch.py +1 -0
  525. angr/procedures/__init__.py +1 -0
  526. angr/procedures/cgc/_terminate.py +1 -0
  527. angr/procedures/cgc/allocate.py +1 -0
  528. angr/procedures/cgc/deallocate.py +1 -0
  529. angr/procedures/cgc/fdwait.py +1 -0
  530. angr/procedures/cgc/random.py +1 -0
  531. angr/procedures/cgc/receive.py +26 -26
  532. angr/procedures/cgc/transmit.py +1 -0
  533. angr/procedures/definitions/__init__.py +9 -10
  534. angr/procedures/definitions/cgc.py +1 -0
  535. angr/procedures/definitions/glibc.py +1 -0
  536. angr/procedures/definitions/gnulib.py +1 -0
  537. angr/procedures/definitions/libstdcpp.py +1 -0
  538. angr/procedures/definitions/linux_kernel.py +1 -0
  539. angr/procedures/definitions/linux_loader.py +1 -0
  540. angr/procedures/definitions/msvcr.py +1 -0
  541. angr/procedures/definitions/parse_syscalls_from_local_system.py +2 -1
  542. angr/procedures/definitions/parse_win32json.py +27 -30
  543. angr/procedures/definitions/types_win32.py +1 -0
  544. angr/procedures/definitions/wdk_api-ms-win-dx-d3dkmt-l1-1-4.py +1 -0
  545. angr/procedures/definitions/wdk_api-ms-win-dx-d3dkmt-l1-1-6.py +1 -0
  546. angr/procedures/definitions/wdk_clfs.py +1 -0
  547. angr/procedures/definitions/wdk_fltmgr.py +1 -0
  548. angr/procedures/definitions/wdk_fwpkclnt.py +1 -0
  549. angr/procedures/definitions/wdk_fwpuclnt.py +1 -0
  550. angr/procedures/definitions/wdk_gdi32.py +1 -0
  551. angr/procedures/definitions/wdk_hal.py +1 -0
  552. angr/procedures/definitions/wdk_ksecdd.py +1 -0
  553. angr/procedures/definitions/wdk_ndis.py +1 -0
  554. angr/procedures/definitions/wdk_ntoskrnl.py +1 -0
  555. angr/procedures/definitions/wdk_offreg.py +1 -0
  556. angr/procedures/definitions/wdk_pshed.py +1 -0
  557. angr/procedures/definitions/wdk_secur32.py +1 -0
  558. angr/procedures/definitions/wdk_vhfum.py +1 -0
  559. angr/procedures/definitions/win32_aclui.py +1 -0
  560. angr/procedures/definitions/win32_activeds.py +1 -0
  561. angr/procedures/definitions/win32_advapi32.py +1 -0
  562. angr/procedures/definitions/win32_advpack.py +1 -0
  563. angr/procedures/definitions/win32_amsi.py +1 -0
  564. angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-1.py +1 -0
  565. angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-3.py +1 -0
  566. angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-6.py +1 -0
  567. angr/procedures/definitions/win32_api-ms-win-core-apiquery-l2-1-0.py +1 -0
  568. angr/procedures/definitions/win32_api-ms-win-core-backgroundtask-l1-1-0.py +1 -0
  569. angr/procedures/definitions/win32_api-ms-win-core-comm-l1-1-1.py +1 -0
  570. angr/procedures/definitions/win32_api-ms-win-core-comm-l1-1-2.py +1 -0
  571. angr/procedures/definitions/win32_api-ms-win-core-enclave-l1-1-1.py +1 -0
  572. angr/procedures/definitions/win32_api-ms-win-core-errorhandling-l1-1-3.py +1 -0
  573. angr/procedures/definitions/win32_api-ms-win-core-featurestaging-l1-1-0.py +1 -0
  574. angr/procedures/definitions/win32_api-ms-win-core-featurestaging-l1-1-1.py +1 -0
  575. angr/procedures/definitions/win32_api-ms-win-core-file-fromapp-l1-1-0.py +1 -0
  576. angr/procedures/definitions/win32_api-ms-win-core-handle-l1-1-0.py +1 -0
  577. angr/procedures/definitions/win32_api-ms-win-core-ioring-l1-1-0.py +1 -0
  578. angr/procedures/definitions/win32_api-ms-win-core-marshal-l1-1-0.py +1 -0
  579. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-3.py +1 -0
  580. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-4.py +1 -0
  581. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-5.py +1 -0
  582. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-6.py +1 -0
  583. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-7.py +1 -0
  584. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-8.py +1 -0
  585. angr/procedures/definitions/win32_api-ms-win-core-path-l1-1-0.py +1 -0
  586. angr/procedures/definitions/win32_api-ms-win-core-psm-appnotify-l1-1-0.py +1 -0
  587. angr/procedures/definitions/win32_api-ms-win-core-psm-appnotify-l1-1-1.py +1 -0
  588. angr/procedures/definitions/win32_api-ms-win-core-realtime-l1-1-1.py +1 -0
  589. angr/procedures/definitions/win32_api-ms-win-core-realtime-l1-1-2.py +1 -0
  590. angr/procedures/definitions/win32_api-ms-win-core-slapi-l1-1-0.py +1 -0
  591. angr/procedures/definitions/win32_api-ms-win-core-state-helpers-l1-1-0.py +1 -0
  592. angr/procedures/definitions/win32_api-ms-win-core-synch-l1-2-0.py +1 -0
  593. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-0.py +1 -0
  594. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-3.py +1 -0
  595. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-4.py +1 -0
  596. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-6.py +1 -0
  597. angr/procedures/definitions/win32_api-ms-win-core-util-l1-1-1.py +1 -0
  598. angr/procedures/definitions/win32_api-ms-win-core-winrt-error-l1-1-0.py +1 -0
  599. angr/procedures/definitions/win32_api-ms-win-core-winrt-error-l1-1-1.py +1 -0
  600. angr/procedures/definitions/win32_api-ms-win-core-winrt-l1-1-0.py +1 -0
  601. angr/procedures/definitions/win32_api-ms-win-core-winrt-registration-l1-1-0.py +1 -0
  602. angr/procedures/definitions/win32_api-ms-win-core-winrt-robuffer-l1-1-0.py +1 -0
  603. angr/procedures/definitions/win32_api-ms-win-core-winrt-roparameterizediid-l1-1-0.py +1 -0
  604. angr/procedures/definitions/win32_api-ms-win-core-winrt-string-l1-1-0.py +1 -0
  605. angr/procedures/definitions/win32_api-ms-win-core-winrt-string-l1-1-1.py +1 -0
  606. angr/procedures/definitions/win32_api-ms-win-core-wow64-l1-1-1.py +1 -0
  607. angr/procedures/definitions/win32_api-ms-win-devices-query-l1-1-0.py +1 -0
  608. angr/procedures/definitions/win32_api-ms-win-devices-query-l1-1-1.py +1 -0
  609. angr/procedures/definitions/win32_api-ms-win-dx-d3dkmt-l1-1-0.py +1 -0
  610. angr/procedures/definitions/win32_api-ms-win-gaming-deviceinformation-l1-1-0.py +1 -0
  611. angr/procedures/definitions/win32_api-ms-win-gaming-expandedresources-l1-1-0.py +1 -0
  612. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-0.py +1 -0
  613. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-1.py +1 -0
  614. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-2.py +1 -0
  615. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-3.py +1 -0
  616. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-4.py +1 -0
  617. angr/procedures/definitions/win32_api-ms-win-mm-misc-l1-1-1.py +1 -0
  618. angr/procedures/definitions/win32_api-ms-win-net-isolation-l1-1-0.py +1 -0
  619. angr/procedures/definitions/win32_api-ms-win-security-base-l1-2-2.py +1 -0
  620. angr/procedures/definitions/win32_api-ms-win-security-isolatedcontainer-l1-1-0.py +1 -0
  621. angr/procedures/definitions/win32_api-ms-win-security-isolatedcontainer-l1-1-1.py +1 -0
  622. angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-3.py +1 -0
  623. angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-4.py +1 -0
  624. angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-5.py +1 -0
  625. angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-0.py +1 -0
  626. angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-1.py +1 -0
  627. angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-2.py +1 -0
  628. angr/procedures/definitions/win32_api-ms-win-shcore-stream-winrt-l1-1-0.py +1 -0
  629. angr/procedures/definitions/win32_api-ms-win-wsl-api-l1-1-0.py +1 -0
  630. angr/procedures/definitions/win32_apphelp.py +1 -0
  631. angr/procedures/definitions/win32_authz.py +1 -0
  632. angr/procedures/definitions/win32_avicap32.py +1 -0
  633. angr/procedures/definitions/win32_avifil32.py +1 -0
  634. angr/procedures/definitions/win32_avrt.py +1 -0
  635. angr/procedures/definitions/win32_bcp47mrm.py +1 -0
  636. angr/procedures/definitions/win32_bcrypt.py +1 -0
  637. angr/procedures/definitions/win32_bcryptprimitives.py +1 -0
  638. angr/procedures/definitions/win32_bluetoothapis.py +1 -0
  639. angr/procedures/definitions/win32_bthprops.py +1 -0
  640. angr/procedures/definitions/win32_bthprops_cpl.py +1 -0
  641. angr/procedures/definitions/win32_cabinet.py +1 -0
  642. angr/procedures/definitions/win32_certadm.py +1 -0
  643. angr/procedures/definitions/win32_certpoleng.py +1 -0
  644. angr/procedures/definitions/win32_cfgmgr32.py +1 -0
  645. angr/procedures/definitions/win32_chakra.py +1 -0
  646. angr/procedures/definitions/win32_cldapi.py +1 -0
  647. angr/procedures/definitions/win32_clfsw32.py +1 -0
  648. angr/procedures/definitions/win32_clusapi.py +1 -0
  649. angr/procedures/definitions/win32_comctl32.py +1 -0
  650. angr/procedures/definitions/win32_comdlg32.py +1 -0
  651. angr/procedures/definitions/win32_compstui.py +1 -0
  652. angr/procedures/definitions/win32_computecore.py +1 -0
  653. angr/procedures/definitions/win32_computenetwork.py +1 -0
  654. angr/procedures/definitions/win32_computestorage.py +1 -0
  655. angr/procedures/definitions/win32_comsvcs.py +1 -0
  656. angr/procedures/definitions/win32_coremessaging.py +1 -0
  657. angr/procedures/definitions/win32_credui.py +1 -0
  658. angr/procedures/definitions/win32_crypt32.py +1 -0
  659. angr/procedures/definitions/win32_cryptnet.py +1 -0
  660. angr/procedures/definitions/win32_cryptui.py +1 -0
  661. angr/procedures/definitions/win32_cryptxml.py +1 -0
  662. angr/procedures/definitions/win32_cscapi.py +1 -0
  663. angr/procedures/definitions/win32_d2d1.py +1 -0
  664. angr/procedures/definitions/win32_d3d10.py +1 -0
  665. angr/procedures/definitions/win32_d3d10_1.py +1 -0
  666. angr/procedures/definitions/win32_d3d11.py +1 -0
  667. angr/procedures/definitions/win32_d3d12.py +1 -0
  668. angr/procedures/definitions/win32_d3d9.py +1 -0
  669. angr/procedures/definitions/win32_d3dcompiler_47.py +1 -0
  670. angr/procedures/definitions/win32_d3dcsx.py +1 -0
  671. angr/procedures/definitions/win32_davclnt.py +1 -0
  672. angr/procedures/definitions/win32_dbgeng.py +1 -0
  673. angr/procedures/definitions/win32_dbghelp.py +1 -0
  674. angr/procedures/definitions/win32_dbgmodel.py +1 -0
  675. angr/procedures/definitions/win32_dciman32.py +1 -0
  676. angr/procedures/definitions/win32_dcomp.py +1 -0
  677. angr/procedures/definitions/win32_ddraw.py +1 -0
  678. angr/procedures/definitions/win32_deviceaccess.py +1 -0
  679. angr/procedures/definitions/win32_dflayout.py +1 -0
  680. angr/procedures/definitions/win32_dhcpcsvc.py +1 -0
  681. angr/procedures/definitions/win32_dhcpcsvc6.py +1 -0
  682. angr/procedures/definitions/win32_dhcpsapi.py +1 -0
  683. angr/procedures/definitions/win32_diagnosticdataquery.py +1 -0
  684. angr/procedures/definitions/win32_dinput8.py +1 -0
  685. angr/procedures/definitions/win32_directml.py +1 -0
  686. angr/procedures/definitions/win32_dmprocessxmlfiltered.py +1 -0
  687. angr/procedures/definitions/win32_dnsapi.py +1 -0
  688. angr/procedures/definitions/win32_drt.py +1 -0
  689. angr/procedures/definitions/win32_drtprov.py +1 -0
  690. angr/procedures/definitions/win32_drttransport.py +1 -0
  691. angr/procedures/definitions/win32_dsound.py +1 -0
  692. angr/procedures/definitions/win32_dsparse.py +1 -0
  693. angr/procedures/definitions/win32_dsprop.py +1 -0
  694. angr/procedures/definitions/win32_dssec.py +1 -0
  695. angr/procedures/definitions/win32_dsuiext.py +1 -0
  696. angr/procedures/definitions/win32_dwmapi.py +1 -0
  697. angr/procedures/definitions/win32_dwrite.py +1 -0
  698. angr/procedures/definitions/win32_dxcompiler.py +1 -0
  699. angr/procedures/definitions/win32_dxcore.py +1 -0
  700. angr/procedures/definitions/win32_dxgi.py +1 -0
  701. angr/procedures/definitions/win32_dxva2.py +1 -0
  702. angr/procedures/definitions/win32_eappcfg.py +1 -0
  703. angr/procedures/definitions/win32_eappprxy.py +1 -0
  704. angr/procedures/definitions/win32_efswrt.py +1 -0
  705. angr/procedures/definitions/win32_elscore.py +1 -0
  706. angr/procedures/definitions/win32_esent.py +1 -0
  707. angr/procedures/definitions/win32_evr.py +1 -0
  708. angr/procedures/definitions/win32_faultrep.py +1 -0
  709. angr/procedures/definitions/win32_fhsvcctl.py +1 -0
  710. angr/procedures/definitions/win32_firewallapi.py +1 -0
  711. angr/procedures/definitions/win32_fltlib.py +1 -0
  712. angr/procedures/definitions/win32_fontsub.py +1 -0
  713. angr/procedures/definitions/win32_forceinline.py +1 -0
  714. angr/procedures/definitions/win32_fwpuclnt.py +1 -0
  715. angr/procedures/definitions/win32_fxsutility.py +1 -0
  716. angr/procedures/definitions/win32_gdi32.py +1 -0
  717. angr/procedures/definitions/win32_gdiplus.py +1 -0
  718. angr/procedures/definitions/win32_glu32.py +1 -0
  719. angr/procedures/definitions/win32_gpedit.py +1 -0
  720. angr/procedures/definitions/win32_hhctrl_ocx.py +1 -0
  721. angr/procedures/definitions/win32_hid.py +1 -0
  722. angr/procedures/definitions/win32_hlink.py +1 -0
  723. angr/procedures/definitions/win32_hrtfapo.py +1 -0
  724. angr/procedures/definitions/win32_httpapi.py +1 -0
  725. angr/procedures/definitions/win32_icm32.py +1 -0
  726. angr/procedures/definitions/win32_icmui.py +1 -0
  727. angr/procedures/definitions/win32_icu.py +1 -0
  728. angr/procedures/definitions/win32_ieframe.py +1 -0
  729. angr/procedures/definitions/win32_imagehlp.py +1 -0
  730. angr/procedures/definitions/win32_imgutil.py +1 -0
  731. angr/procedures/definitions/win32_imm32.py +1 -0
  732. angr/procedures/definitions/win32_infocardapi.py +1 -0
  733. angr/procedures/definitions/win32_inkobjcore.py +1 -0
  734. angr/procedures/definitions/win32_iphlpapi.py +1 -0
  735. angr/procedures/definitions/win32_iscsidsc.py +1 -0
  736. angr/procedures/definitions/win32_isolatedwindowsenvironmentutils.py +1 -0
  737. angr/procedures/definitions/win32_kernel32.py +1 -0
  738. angr/procedures/definitions/win32_kernelbase.py +1 -0
  739. angr/procedures/definitions/win32_keycredmgr.py +1 -0
  740. angr/procedures/definitions/win32_ksproxy_ax.py +1 -0
  741. angr/procedures/definitions/win32_ksuser.py +1 -0
  742. angr/procedures/definitions/win32_ktmw32.py +1 -0
  743. angr/procedures/definitions/win32_licenseprotection.py +1 -0
  744. angr/procedures/definitions/win32_loadperf.py +1 -0
  745. angr/procedures/definitions/win32_magnification.py +1 -0
  746. angr/procedures/definitions/win32_mapi32.py +1 -0
  747. angr/procedures/definitions/win32_mdmlocalmanagement.py +1 -0
  748. angr/procedures/definitions/win32_mdmregistration.py +1 -0
  749. angr/procedures/definitions/win32_mf.py +1 -0
  750. angr/procedures/definitions/win32_mfcore.py +1 -0
  751. angr/procedures/definitions/win32_mfplat.py +1 -0
  752. angr/procedures/definitions/win32_mfplay.py +1 -0
  753. angr/procedures/definitions/win32_mfreadwrite.py +1 -0
  754. angr/procedures/definitions/win32_mfsensorgroup.py +1 -0
  755. angr/procedures/definitions/win32_mfsrcsnk.py +1 -0
  756. angr/procedures/definitions/win32_mgmtapi.py +1 -0
  757. angr/procedures/definitions/win32_mi.py +1 -0
  758. angr/procedures/definitions/win32_mmdevapi.py +1 -0
  759. angr/procedures/definitions/win32_mpr.py +1 -0
  760. angr/procedures/definitions/win32_mprapi.py +1 -0
  761. angr/procedures/definitions/win32_mqrt.py +1 -0
  762. angr/procedures/definitions/win32_mrmsupport.py +1 -0
  763. angr/procedures/definitions/win32_msacm32.py +1 -0
  764. angr/procedures/definitions/win32_msajapi.py +1 -0
  765. angr/procedures/definitions/win32_mscms.py +1 -0
  766. angr/procedures/definitions/win32_mscoree.py +1 -0
  767. angr/procedures/definitions/win32_msctfmonitor.py +1 -0
  768. angr/procedures/definitions/win32_msdelta.py +1 -0
  769. angr/procedures/definitions/win32_msdmo.py +1 -0
  770. angr/procedures/definitions/win32_msdrm.py +1 -0
  771. angr/procedures/definitions/win32_msi.py +1 -0
  772. angr/procedures/definitions/win32_msimg32.py +1 -0
  773. angr/procedures/definitions/win32_mspatcha.py +1 -0
  774. angr/procedures/definitions/win32_mspatchc.py +1 -0
  775. angr/procedures/definitions/win32_msports.py +1 -0
  776. angr/procedures/definitions/win32_msrating.py +1 -0
  777. angr/procedures/definitions/win32_mssign32.py +1 -0
  778. angr/procedures/definitions/win32_mstask.py +1 -0
  779. angr/procedures/definitions/win32_msvfw32.py +1 -0
  780. angr/procedures/definitions/win32_mswsock.py +1 -0
  781. angr/procedures/definitions/win32_mtxdm.py +1 -0
  782. angr/procedures/definitions/win32_ncrypt.py +1 -0
  783. angr/procedures/definitions/win32_ndfapi.py +1 -0
  784. angr/procedures/definitions/win32_netapi32.py +1 -0
  785. angr/procedures/definitions/win32_netsh.py +1 -0
  786. angr/procedures/definitions/win32_netshell.py +1 -0
  787. angr/procedures/definitions/win32_newdev.py +1 -0
  788. angr/procedures/definitions/win32_ninput.py +1 -0
  789. angr/procedures/definitions/win32_normaliz.py +1 -0
  790. angr/procedures/definitions/win32_ntdll.py +1 -0
  791. angr/procedures/definitions/win32_ntdllk.py +1 -0
  792. angr/procedures/definitions/win32_ntdsapi.py +1 -0
  793. angr/procedures/definitions/win32_ntlanman.py +1 -0
  794. angr/procedures/definitions/win32_odbc32.py +1 -0
  795. angr/procedures/definitions/win32_odbcbcp.py +1 -0
  796. angr/procedures/definitions/win32_ole32.py +1 -0
  797. angr/procedures/definitions/win32_oleacc.py +1 -0
  798. angr/procedures/definitions/win32_oleaut32.py +1 -0
  799. angr/procedures/definitions/win32_oledlg.py +1 -0
  800. angr/procedures/definitions/win32_ondemandconnroutehelper.py +1 -0
  801. angr/procedures/definitions/win32_opengl32.py +1 -0
  802. angr/procedures/definitions/win32_opmxbox.py +1 -0
  803. angr/procedures/definitions/win32_p2p.py +1 -0
  804. angr/procedures/definitions/win32_p2pgraph.py +1 -0
  805. angr/procedures/definitions/win32_pdh.py +1 -0
  806. angr/procedures/definitions/win32_peerdist.py +1 -0
  807. angr/procedures/definitions/win32_powrprof.py +1 -0
  808. angr/procedures/definitions/win32_prntvpt.py +1 -0
  809. angr/procedures/definitions/win32_projectedfslib.py +1 -0
  810. angr/procedures/definitions/win32_propsys.py +1 -0
  811. angr/procedures/definitions/win32_psapi.py +1 -0
  812. angr/procedures/definitions/win32_quartz.py +1 -0
  813. angr/procedures/definitions/win32_query.py +1 -0
  814. angr/procedures/definitions/win32_qwave.py +1 -0
  815. angr/procedures/definitions/win32_rasapi32.py +1 -0
  816. angr/procedures/definitions/win32_rasdlg.py +1 -0
  817. angr/procedures/definitions/win32_resutils.py +1 -0
  818. angr/procedures/definitions/win32_rometadata.py +1 -0
  819. angr/procedures/definitions/win32_rpcns4.py +1 -0
  820. angr/procedures/definitions/win32_rpcproxy.py +1 -0
  821. angr/procedures/definitions/win32_rpcrt4.py +1 -0
  822. angr/procedures/definitions/win32_rstrtmgr.py +1 -0
  823. angr/procedures/definitions/win32_rtm.py +1 -0
  824. angr/procedures/definitions/win32_rtutils.py +1 -0
  825. angr/procedures/definitions/win32_rtworkq.py +1 -0
  826. angr/procedures/definitions/win32_sas.py +1 -0
  827. angr/procedures/definitions/win32_scarddlg.py +1 -0
  828. angr/procedures/definitions/win32_schannel.py +1 -0
  829. angr/procedures/definitions/win32_sechost.py +1 -0
  830. angr/procedures/definitions/win32_secur32.py +1 -0
  831. angr/procedures/definitions/win32_sensapi.py +1 -0
  832. angr/procedures/definitions/win32_sensorsutilsv2.py +1 -0
  833. angr/procedures/definitions/win32_setupapi.py +1 -0
  834. angr/procedures/definitions/win32_sfc.py +1 -0
  835. angr/procedures/definitions/win32_shdocvw.py +1 -0
  836. angr/procedures/definitions/win32_shell32.py +1 -0
  837. angr/procedures/definitions/win32_shlwapi.py +1 -0
  838. angr/procedures/definitions/win32_slc.py +1 -0
  839. angr/procedures/definitions/win32_slcext.py +1 -0
  840. angr/procedures/definitions/win32_slwga.py +1 -0
  841. angr/procedures/definitions/win32_snmpapi.py +1 -0
  842. angr/procedures/definitions/win32_spoolss.py +1 -0
  843. angr/procedures/definitions/win32_srclient.py +1 -0
  844. angr/procedures/definitions/win32_srpapi.py +1 -0
  845. angr/procedures/definitions/win32_sspicli.py +1 -0
  846. angr/procedures/definitions/win32_sti.py +1 -0
  847. angr/procedures/definitions/win32_t2embed.py +1 -0
  848. angr/procedures/definitions/win32_tapi32.py +1 -0
  849. angr/procedures/definitions/win32_tbs.py +1 -0
  850. angr/procedures/definitions/win32_tdh.py +1 -0
  851. angr/procedures/definitions/win32_tokenbinding.py +1 -0
  852. angr/procedures/definitions/win32_traffic.py +1 -0
  853. angr/procedures/definitions/win32_txfw32.py +1 -0
  854. angr/procedures/definitions/win32_ualapi.py +1 -0
  855. angr/procedures/definitions/win32_uiautomationcore.py +1 -0
  856. angr/procedures/definitions/win32_urlmon.py +1 -0
  857. angr/procedures/definitions/win32_user32.py +1 -0
  858. angr/procedures/definitions/win32_userenv.py +1 -0
  859. angr/procedures/definitions/win32_usp10.py +1 -0
  860. angr/procedures/definitions/win32_uxtheme.py +1 -0
  861. angr/procedures/definitions/win32_verifier.py +1 -0
  862. angr/procedures/definitions/win32_version.py +1 -0
  863. angr/procedures/definitions/win32_vertdll.py +1 -0
  864. angr/procedures/definitions/win32_virtdisk.py +1 -0
  865. angr/procedures/definitions/win32_vmdevicehost.py +1 -0
  866. angr/procedures/definitions/win32_vmsavedstatedumpprovider.py +1 -0
  867. angr/procedures/definitions/win32_vssapi.py +1 -0
  868. angr/procedures/definitions/win32_wcmapi.py +1 -0
  869. angr/procedures/definitions/win32_wdsbp.py +1 -0
  870. angr/procedures/definitions/win32_wdsclientapi.py +1 -0
  871. angr/procedures/definitions/win32_wdsmc.py +1 -0
  872. angr/procedures/definitions/win32_wdspxe.py +1 -0
  873. angr/procedures/definitions/win32_wdstptc.py +1 -0
  874. angr/procedures/definitions/win32_webauthn.py +1 -0
  875. angr/procedures/definitions/win32_webservices.py +1 -0
  876. angr/procedures/definitions/win32_websocket.py +1 -0
  877. angr/procedures/definitions/win32_wecapi.py +1 -0
  878. angr/procedures/definitions/win32_wer.py +1 -0
  879. angr/procedures/definitions/win32_wevtapi.py +1 -0
  880. angr/procedures/definitions/win32_winbio.py +1 -0
  881. angr/procedures/definitions/win32_windows_ai_machinelearning.py +1 -0
  882. angr/procedures/definitions/win32_windows_data_pdf.py +1 -0
  883. angr/procedures/definitions/win32_windows_media_mediacontrol.py +1 -0
  884. angr/procedures/definitions/win32_windows_networking.py +1 -0
  885. angr/procedures/definitions/win32_windows_ui_xaml.py +1 -0
  886. angr/procedures/definitions/win32_windowscodecs.py +1 -0
  887. angr/procedures/definitions/win32_winfax.py +1 -0
  888. angr/procedures/definitions/win32_winhttp.py +1 -0
  889. angr/procedures/definitions/win32_winhvemulation.py +1 -0
  890. angr/procedures/definitions/win32_winhvplatform.py +1 -0
  891. angr/procedures/definitions/win32_wininet.py +1 -0
  892. angr/procedures/definitions/win32_winml.py +1 -0
  893. angr/procedures/definitions/win32_winmm.py +1 -0
  894. angr/procedures/definitions/win32_winscard.py +1 -0
  895. angr/procedures/definitions/win32_winspool.py +1 -0
  896. angr/procedures/definitions/win32_winspool_drv.py +1 -0
  897. angr/procedures/definitions/win32_wintrust.py +1 -0
  898. angr/procedures/definitions/win32_winusb.py +1 -0
  899. angr/procedures/definitions/win32_wlanapi.py +1 -0
  900. angr/procedures/definitions/win32_wlanui.py +1 -0
  901. angr/procedures/definitions/win32_wldap32.py +1 -0
  902. angr/procedures/definitions/win32_wldp.py +1 -0
  903. angr/procedures/definitions/win32_wmvcore.py +1 -0
  904. angr/procedures/definitions/win32_wnvapi.py +1 -0
  905. angr/procedures/definitions/win32_wofutil.py +1 -0
  906. angr/procedures/definitions/win32_ws2_32.py +1 -0
  907. angr/procedures/definitions/win32_wscapi.py +1 -0
  908. angr/procedures/definitions/win32_wsclient.py +1 -0
  909. angr/procedures/definitions/win32_wsdapi.py +1 -0
  910. angr/procedures/definitions/win32_wsmsvc.py +1 -0
  911. angr/procedures/definitions/win32_wsnmp32.py +1 -0
  912. angr/procedures/definitions/win32_wtsapi32.py +1 -0
  913. angr/procedures/definitions/win32_xaudio2_8.py +1 -0
  914. angr/procedures/definitions/win32_xinput1_4.py +1 -0
  915. angr/procedures/definitions/win32_xinputuap.py +1 -0
  916. angr/procedures/definitions/win32_xmllite.py +1 -0
  917. angr/procedures/definitions/win32_xolehlp.py +1 -0
  918. angr/procedures/definitions/win32_xpsprint.py +1 -0
  919. angr/procedures/glibc/__ctype_b_loc.py +2 -3
  920. angr/procedures/glibc/__ctype_tolower_loc.py +2 -3
  921. angr/procedures/glibc/__ctype_toupper_loc.py +2 -3
  922. angr/procedures/glibc/__errno_location.py +1 -0
  923. angr/procedures/glibc/__libc_init.py +1 -0
  924. angr/procedures/glibc/__libc_start_main.py +2 -3
  925. angr/procedures/glibc/dynamic_loading.py +1 -0
  926. angr/procedures/glibc/scanf.py +1 -0
  927. angr/procedures/glibc/sscanf.py +1 -0
  928. angr/procedures/gnulib/xalloc_die.py +1 -0
  929. angr/procedures/gnulib/xstrtol_fatal.py +1 -0
  930. angr/procedures/java/__init__.py +1 -0
  931. angr/procedures/java/unconstrained.py +4 -3
  932. angr/procedures/java_io/read.py +1 -0
  933. angr/procedures/java_io/write.py +1 -0
  934. angr/procedures/java_jni/__init__.py +25 -18
  935. angr/procedures/java_jni/array_operations.py +1 -0
  936. angr/procedures/java_jni/class_and_interface_operations.py +3 -3
  937. angr/procedures/java_jni/field_access.py +3 -6
  938. angr/procedures/java_jni/global_and_local_refs.py +1 -0
  939. angr/procedures/java_jni/method_calls.py +3 -2
  940. angr/procedures/java_jni/not_implemented.py +2 -1
  941. angr/procedures/java_jni/object_operations.py +3 -4
  942. angr/procedures/java_jni/string_operations.py +2 -1
  943. angr/procedures/java_jni/version_information.py +1 -0
  944. angr/procedures/java_lang/character.py +2 -3
  945. angr/procedures/java_lang/double.py +2 -2
  946. angr/procedures/java_lang/exit.py +1 -0
  947. angr/procedures/java_lang/getsimplename.py +2 -2
  948. angr/procedures/java_lang/integer.py +1 -0
  949. angr/procedures/java_lang/load_library.py +1 -0
  950. angr/procedures/java_lang/math.py +1 -0
  951. angr/procedures/java_lang/string.py +3 -3
  952. angr/procedures/java_lang/stringbuilder.py +1 -0
  953. angr/procedures/java_lang/system.py +1 -0
  954. angr/procedures/java_util/collection.py +1 -0
  955. angr/procedures/java_util/iterator.py +1 -0
  956. angr/procedures/java_util/list.py +1 -0
  957. angr/procedures/java_util/map.py +3 -4
  958. angr/procedures/java_util/random.py +1 -0
  959. angr/procedures/java_util/scanner_nextline.py +2 -1
  960. angr/procedures/libc/abort.py +1 -0
  961. angr/procedures/libc/access.py +1 -0
  962. angr/procedures/libc/atoi.py +2 -2
  963. angr/procedures/libc/atol.py +1 -0
  964. angr/procedures/libc/calloc.py +1 -0
  965. angr/procedures/libc/closelog.py +1 -0
  966. angr/procedures/libc/err.py +1 -0
  967. angr/procedures/libc/error.py +2 -3
  968. angr/procedures/libc/exit.py +1 -0
  969. angr/procedures/libc/fclose.py +2 -3
  970. angr/procedures/libc/feof.py +1 -0
  971. angr/procedures/libc/fflush.py +1 -0
  972. angr/procedures/libc/fgetc.py +1 -0
  973. angr/procedures/libc/fgets.py +19 -19
  974. angr/procedures/libc/fopen.py +6 -8
  975. angr/procedures/libc/fprintf.py +1 -0
  976. angr/procedures/libc/fputc.py +1 -0
  977. angr/procedures/libc/fputs.py +1 -0
  978. angr/procedures/libc/fread.py +1 -0
  979. angr/procedures/libc/free.py +1 -0
  980. angr/procedures/libc/fscanf.py +2 -2
  981. angr/procedures/libc/fseek.py +3 -2
  982. angr/procedures/libc/ftell.py +1 -0
  983. angr/procedures/libc/fwrite.py +1 -0
  984. angr/procedures/libc/getchar.py +2 -2
  985. angr/procedures/libc/getdelim.py +25 -25
  986. angr/procedures/libc/getegid.py +1 -0
  987. angr/procedures/libc/geteuid.py +1 -0
  988. angr/procedures/libc/getgid.py +1 -0
  989. angr/procedures/libc/gets.py +18 -18
  990. angr/procedures/libc/getuid.py +1 -0
  991. angr/procedures/libc/malloc.py +1 -0
  992. angr/procedures/libc/memcmp.py +3 -6
  993. angr/procedures/libc/memcpy.py +1 -0
  994. angr/procedures/libc/memset.py +1 -0
  995. angr/procedures/libc/openlog.py +1 -0
  996. angr/procedures/libc/perror.py +1 -0
  997. angr/procedures/libc/printf.py +1 -0
  998. angr/procedures/libc/putchar.py +1 -0
  999. angr/procedures/libc/puts.py +1 -0
  1000. angr/procedures/libc/rand.py +1 -0
  1001. angr/procedures/libc/realloc.py +1 -0
  1002. angr/procedures/libc/rewind.py +2 -1
  1003. angr/procedures/libc/scanf.py +2 -2
  1004. angr/procedures/libc/setbuf.py +1 -0
  1005. angr/procedures/libc/setvbuf.py +1 -0
  1006. angr/procedures/libc/snprintf.py +1 -0
  1007. angr/procedures/libc/sprintf.py +1 -0
  1008. angr/procedures/libc/srand.py +1 -0
  1009. angr/procedures/libc/sscanf.py +2 -2
  1010. angr/procedures/libc/stpcpy.py +2 -2
  1011. angr/procedures/libc/strcat.py +1 -0
  1012. angr/procedures/libc/strchr.py +1 -0
  1013. angr/procedures/libc/strcmp.py +1 -0
  1014. angr/procedures/libc/strcpy.py +2 -2
  1015. angr/procedures/libc/strlen.py +35 -31
  1016. angr/procedures/libc/strncat.py +1 -0
  1017. angr/procedures/libc/strncmp.py +9 -11
  1018. angr/procedures/libc/strncpy.py +1 -0
  1019. angr/procedures/libc/strnlen.py +2 -2
  1020. angr/procedures/libc/strstr.py +8 -4
  1021. angr/procedures/libc/strtol.py +9 -9
  1022. angr/procedures/libc/strtoul.py +2 -2
  1023. angr/procedures/libc/system.py +1 -0
  1024. angr/procedures/libc/time.py +2 -2
  1025. angr/procedures/libc/tmpnam.py +1 -0
  1026. angr/procedures/libc/tolower.py +1 -0
  1027. angr/procedures/libc/toupper.py +1 -0
  1028. angr/procedures/libc/ungetc.py +1 -0
  1029. angr/procedures/libc/vsnprintf.py +1 -0
  1030. angr/procedures/libc/wchar.py +1 -0
  1031. angr/procedures/libstdcpp/_unwind_resume.py +1 -0
  1032. angr/procedures/libstdcpp/std____throw_bad_alloc.py +1 -0
  1033. angr/procedures/libstdcpp/std____throw_bad_cast.py +1 -0
  1034. angr/procedures/libstdcpp/std____throw_length_error.py +1 -0
  1035. angr/procedures/libstdcpp/std____throw_logic_error.py +1 -0
  1036. angr/procedures/libstdcpp/std__terminate.py +1 -0
  1037. angr/procedures/linux_kernel/access.py +1 -0
  1038. angr/procedures/linux_kernel/arch_prctl.py +1 -0
  1039. angr/procedures/linux_kernel/arm_user_helpers.py +1 -0
  1040. angr/procedures/linux_kernel/brk.py +1 -0
  1041. angr/procedures/linux_kernel/cwd.py +1 -0
  1042. angr/procedures/linux_kernel/fstat.py +2 -1
  1043. angr/procedures/linux_kernel/fstat64.py +2 -1
  1044. angr/procedures/linux_kernel/futex.py +3 -3
  1045. angr/procedures/linux_kernel/getegid.py +1 -0
  1046. angr/procedures/linux_kernel/geteuid.py +1 -0
  1047. angr/procedures/linux_kernel/getgid.py +1 -0
  1048. angr/procedures/linux_kernel/getpid.py +1 -0
  1049. angr/procedures/linux_kernel/getrlimit.py +3 -3
  1050. angr/procedures/linux_kernel/gettid.py +1 -0
  1051. angr/procedures/linux_kernel/getuid.py +1 -0
  1052. angr/procedures/linux_kernel/iovec.py +1 -0
  1053. angr/procedures/linux_kernel/lseek.py +1 -0
  1054. angr/procedures/linux_kernel/mmap.py +1 -0
  1055. angr/procedures/linux_kernel/mprotect.py +7 -6
  1056. angr/procedures/linux_kernel/munmap.py +1 -0
  1057. angr/procedures/linux_kernel/openat.py +3 -5
  1058. angr/procedures/linux_kernel/set_tid_address.py +1 -0
  1059. angr/procedures/linux_kernel/sigaction.py +1 -0
  1060. angr/procedures/linux_kernel/sigprocmask.py +1 -0
  1061. angr/procedures/linux_kernel/stat.py +3 -2
  1062. angr/procedures/linux_kernel/sysinfo.py +1 -0
  1063. angr/procedures/linux_kernel/tgkill.py +1 -0
  1064. angr/procedures/linux_kernel/time.py +2 -1
  1065. angr/procedures/linux_kernel/uid.py +1 -0
  1066. angr/procedures/linux_kernel/uname.py +1 -0
  1067. angr/procedures/linux_kernel/unlink.py +2 -2
  1068. angr/procedures/linux_kernel/vsyscall.py +2 -1
  1069. angr/procedures/linux_loader/_dl_initial_error_catch_tsd.py +1 -0
  1070. angr/procedures/linux_loader/_dl_rtld_lock.py +1 -0
  1071. angr/procedures/linux_loader/sim_loader.py +1 -0
  1072. angr/procedures/linux_loader/tls.py +2 -2
  1073. angr/procedures/msvcr/__getmainargs.py +1 -0
  1074. angr/procedures/msvcr/_initterm.py +1 -0
  1075. angr/procedures/msvcr/fmode.py +1 -0
  1076. angr/procedures/ntdll/exceptions.py +4 -3
  1077. angr/procedures/posix/accept.py +2 -2
  1078. angr/procedures/posix/bind.py +1 -0
  1079. angr/procedures/posix/bzero.py +1 -0
  1080. angr/procedures/posix/chroot.py +1 -0
  1081. angr/procedures/posix/close.py +2 -2
  1082. angr/procedures/posix/closedir.py +1 -0
  1083. angr/procedures/posix/dup.py +4 -3
  1084. angr/procedures/posix/fcntl.py +1 -0
  1085. angr/procedures/posix/fdopen.py +16 -19
  1086. angr/procedures/posix/fileno.py +1 -0
  1087. angr/procedures/posix/fork.py +1 -0
  1088. angr/procedures/posix/getenv.py +1 -0
  1089. angr/procedures/posix/gethostbyname.py +1 -0
  1090. angr/procedures/posix/getpass.py +1 -0
  1091. angr/procedures/posix/getsockopt.py +1 -0
  1092. angr/procedures/posix/htonl.py +2 -2
  1093. angr/procedures/posix/htons.py +2 -2
  1094. angr/procedures/posix/inet_ntoa.py +3 -5
  1095. angr/procedures/posix/listen.py +1 -0
  1096. angr/procedures/posix/mmap.py +2 -1
  1097. angr/procedures/posix/open.py +1 -0
  1098. angr/procedures/posix/opendir.py +1 -0
  1099. angr/procedures/posix/poll.py +3 -3
  1100. angr/procedures/posix/pread64.py +1 -0
  1101. angr/procedures/posix/pthread.py +3 -3
  1102. angr/procedures/posix/pwrite64.py +1 -0
  1103. angr/procedures/posix/read.py +1 -0
  1104. angr/procedures/posix/readdir.py +1 -1
  1105. angr/procedures/posix/recv.py +1 -0
  1106. angr/procedures/posix/recvfrom.py +1 -0
  1107. angr/procedures/posix/select.py +7 -7
  1108. angr/procedures/posix/send.py +2 -2
  1109. angr/procedures/posix/setsockopt.py +1 -0
  1110. angr/procedures/posix/sigaction.py +1 -0
  1111. angr/procedures/posix/sim_time.py +1 -0
  1112. angr/procedures/posix/sleep.py +1 -0
  1113. angr/procedures/posix/socket.py +2 -2
  1114. angr/procedures/posix/strcasecmp.py +1 -0
  1115. angr/procedures/posix/strdup.py +1 -0
  1116. angr/procedures/posix/strtok_r.py +32 -36
  1117. angr/procedures/posix/syslog.py +1 -0
  1118. angr/procedures/posix/tz.py +1 -0
  1119. angr/procedures/posix/unlink.py +1 -0
  1120. angr/procedures/posix/usleep.py +1 -0
  1121. angr/procedures/posix/write.py +1 -0
  1122. angr/procedures/procedure_dict.py +1 -0
  1123. angr/procedures/stubs/CallReturn.py +1 -0
  1124. angr/procedures/stubs/NoReturnUnconstrained.py +1 -0
  1125. angr/procedures/stubs/Nop.py +1 -0
  1126. angr/procedures/stubs/PathTerminator.py +1 -0
  1127. angr/procedures/stubs/Redirect.py +3 -2
  1128. angr/procedures/stubs/ReturnChar.py +1 -0
  1129. angr/procedures/stubs/ReturnUnconstrained.py +2 -1
  1130. angr/procedures/stubs/UnresolvableCallTarget.py +1 -0
  1131. angr/procedures/stubs/UnresolvableJumpTarget.py +1 -0
  1132. angr/procedures/stubs/UserHook.py +2 -1
  1133. angr/procedures/stubs/b64_decode.py +1 -0
  1134. angr/procedures/stubs/caller.py +1 -0
  1135. angr/procedures/stubs/crazy_scanf.py +1 -0
  1136. angr/procedures/stubs/format_parser.py +12 -16
  1137. angr/procedures/stubs/syscall_stub.py +6 -7
  1138. angr/procedures/testing/manyargs.py +1 -0
  1139. angr/procedures/testing/retreg.py +2 -2
  1140. angr/procedures/tracer/random.py +1 -0
  1141. angr/procedures/tracer/receive.py +4 -4
  1142. angr/procedures/tracer/transmit.py +4 -4
  1143. angr/procedures/uclibc/__uClibc_main.py +1 -0
  1144. angr/procedures/win32/EncodePointer.py +1 -0
  1145. angr/procedures/win32/ExitProcess.py +1 -0
  1146. angr/procedures/win32/GetCommandLine.py +1 -0
  1147. angr/procedures/win32/GetCurrentProcessId.py +1 -0
  1148. angr/procedures/win32/GetCurrentThreadId.py +1 -0
  1149. angr/procedures/win32/GetLastInputInfo.py +1 -0
  1150. angr/procedures/win32/GetModuleHandle.py +3 -4
  1151. angr/procedures/win32/GetProcessAffinityMask.py +1 -0
  1152. angr/procedures/win32/InterlockedExchange.py +2 -1
  1153. angr/procedures/win32/IsProcessorFeaturePresent.py +1 -0
  1154. angr/procedures/win32/VirtualAlloc.py +2 -1
  1155. angr/procedures/win32/VirtualProtect.py +1 -0
  1156. angr/procedures/win32/critical_section.py +1 -0
  1157. angr/procedures/win32/dynamic_loading.py +2 -1
  1158. angr/procedures/win32/file_handles.py +4 -4
  1159. angr/procedures/win32/gethostbyname.py +2 -2
  1160. angr/procedures/win32/heap.py +1 -0
  1161. angr/procedures/win32/is_bad_ptr.py +1 -0
  1162. angr/procedures/win32/local_storage.py +7 -6
  1163. angr/procedures/win32/mutex.py +1 -0
  1164. angr/procedures/win32/sim_time.py +7 -10
  1165. angr/procedures/win32/system_paths.py +5 -4
  1166. angr/procedures/win32_kernel/ExAllocatePool.py +1 -0
  1167. angr/procedures/win32_kernel/ExFreePoolWithTag.py +1 -0
  1168. angr/procedures/win_user32/chars.py +1 -0
  1169. angr/procedures/win_user32/keyboard.py +1 -0
  1170. angr/procedures/win_user32/messagebox.py +2 -4
  1171. angr/project.py +15 -22
  1172. angr/protos/__init__.py +1 -0
  1173. angr/serializable.py +6 -3
  1174. angr/sim_manager.py +18 -18
  1175. angr/sim_options.py +5 -7
  1176. angr/sim_procedure.py +16 -15
  1177. angr/sim_state.py +61 -88
  1178. angr/sim_state_options.py +9 -15
  1179. angr/sim_type.py +135 -123
  1180. angr/sim_variable.py +23 -38
  1181. angr/simos/__init__.py +3 -1
  1182. angr/simos/cgc.py +2 -1
  1183. angr/simos/javavm.py +84 -95
  1184. angr/simos/linux.py +54 -64
  1185. angr/simos/simos.py +14 -23
  1186. angr/simos/snimmuc_nxp.py +3 -6
  1187. angr/simos/userland.py +6 -6
  1188. angr/simos/windows.py +14 -11
  1189. angr/slicer.py +13 -11
  1190. angr/state_hierarchy.py +4 -4
  1191. angr/state_plugins/__init__.py +1 -0
  1192. angr/state_plugins/callstack.py +19 -18
  1193. angr/state_plugins/cgc.py +5 -4
  1194. angr/state_plugins/concrete.py +7 -8
  1195. angr/state_plugins/debug_variables.py +15 -17
  1196. angr/state_plugins/filesystem.py +13 -19
  1197. angr/state_plugins/gdb.py +3 -2
  1198. angr/state_plugins/globals.py +5 -1
  1199. angr/state_plugins/heap/__init__.py +1 -0
  1200. angr/state_plugins/heap/heap_base.py +1 -0
  1201. angr/state_plugins/heap/heap_brk.py +9 -6
  1202. angr/state_plugins/heap/heap_freelist.py +12 -9
  1203. angr/state_plugins/heap/heap_libc.py +1 -0
  1204. angr/state_plugins/heap/heap_ptmalloc.py +27 -36
  1205. angr/state_plugins/heap/utils.py +1 -0
  1206. angr/state_plugins/history.py +7 -10
  1207. angr/state_plugins/inspect.py +1 -0
  1208. angr/state_plugins/javavm_classloader.py +3 -2
  1209. angr/state_plugins/jni_references.py +2 -1
  1210. angr/state_plugins/libc.py +4 -4
  1211. angr/state_plugins/light_registers.py +6 -8
  1212. angr/state_plugins/log.py +1 -0
  1213. angr/state_plugins/loop_data.py +1 -0
  1214. angr/state_plugins/plugin.py +7 -8
  1215. angr/state_plugins/posix.py +14 -22
  1216. angr/state_plugins/preconstrainer.py +4 -3
  1217. angr/state_plugins/scratch.py +6 -5
  1218. angr/state_plugins/sim_action.py +15 -20
  1219. angr/state_plugins/sim_action_object.py +205 -82
  1220. angr/state_plugins/sim_event.py +1 -0
  1221. angr/state_plugins/solver.py +65 -93
  1222. angr/state_plugins/symbolizer.py +5 -6
  1223. angr/state_plugins/trace_additions.py +32 -42
  1224. angr/state_plugins/uc_manager.py +16 -9
  1225. angr/state_plugins/unicorn_engine.py +21 -37
  1226. angr/state_plugins/view.py +20 -19
  1227. angr/storage/__init__.py +1 -0
  1228. angr/storage/file.py +31 -33
  1229. angr/storage/memory_mixins/__init__.py +12 -15
  1230. angr/storage/memory_mixins/__init__.pyi +13 -14
  1231. angr/storage/memory_mixins/actions_mixin.py +2 -1
  1232. angr/storage/memory_mixins/address_concretization_mixin.py +11 -15
  1233. angr/storage/memory_mixins/bvv_conversion_mixin.py +10 -11
  1234. angr/storage/memory_mixins/clouseau_mixin.py +1 -0
  1235. angr/storage/memory_mixins/conditional_store_mixin.py +1 -0
  1236. angr/storage/memory_mixins/convenient_mappings_mixin.py +7 -8
  1237. angr/storage/memory_mixins/default_filler_mixin.py +12 -14
  1238. angr/storage/memory_mixins/dirty_addrs_mixin.py +1 -0
  1239. angr/storage/memory_mixins/hex_dumper_mixin.py +6 -9
  1240. angr/storage/memory_mixins/javavm_memory/__init__.py +1 -0
  1241. angr/storage/memory_mixins/javavm_memory/javavm_memory_mixin.py +16 -23
  1242. angr/storage/memory_mixins/keyvalue_memory/__init__.py +1 -0
  1243. angr/storage/memory_mixins/keyvalue_memory/keyvalue_memory_mixin.py +2 -1
  1244. angr/storage/memory_mixins/label_merger_mixin.py +2 -2
  1245. angr/storage/memory_mixins/multi_value_merger_mixin.py +6 -5
  1246. angr/storage/memory_mixins/name_resolution_mixin.py +12 -15
  1247. angr/storage/memory_mixins/paged_memory/page_backer_mixins.py +6 -6
  1248. angr/storage/memory_mixins/paged_memory/paged_memory_mixin.py +22 -36
  1249. angr/storage/memory_mixins/paged_memory/paged_memory_multivalue_mixin.py +1 -0
  1250. angr/storage/memory_mixins/paged_memory/pages/__init__.py +1 -2
  1251. angr/storage/memory_mixins/paged_memory/pages/cooperation.py +4 -3
  1252. angr/storage/memory_mixins/paged_memory/pages/history_tracking_mixin.py +4 -4
  1253. angr/storage/memory_mixins/paged_memory/pages/ispo_mixin.py +1 -0
  1254. angr/storage/memory_mixins/paged_memory/pages/list_page.py +12 -20
  1255. angr/storage/memory_mixins/paged_memory/pages/multi_values.py +14 -19
  1256. angr/storage/memory_mixins/paged_memory/pages/mv_list_page.py +26 -32
  1257. angr/storage/memory_mixins/paged_memory/pages/permissions_mixin.py +1 -0
  1258. angr/storage/memory_mixins/paged_memory/pages/refcount_mixin.py +2 -2
  1259. angr/storage/memory_mixins/paged_memory/pages/ultra_page.py +38 -42
  1260. angr/storage/memory_mixins/paged_memory/privileged_mixin.py +1 -0
  1261. angr/storage/memory_mixins/paged_memory/stack_allocation_mixin.py +1 -0
  1262. angr/storage/memory_mixins/regioned_memory/__init__.py +1 -0
  1263. angr/storage/memory_mixins/regioned_memory/abstract_address_descriptor.py +5 -4
  1264. angr/storage/memory_mixins/regioned_memory/abstract_merger_mixin.py +6 -21
  1265. angr/storage/memory_mixins/regioned_memory/region_category_mixin.py +1 -0
  1266. angr/storage/memory_mixins/regioned_memory/region_data.py +4 -5
  1267. angr/storage/memory_mixins/regioned_memory/region_meta_mixin.py +129 -13
  1268. angr/storage/memory_mixins/regioned_memory/regioned_address_concretization_mixin.py +2 -1
  1269. angr/storage/memory_mixins/regioned_memory/regioned_memory_mixin.py +34 -44
  1270. angr/storage/memory_mixins/regioned_memory/static_find_mixin.py +7 -9
  1271. angr/storage/memory_mixins/simple_interface_mixin.py +8 -11
  1272. angr/storage/memory_mixins/simplification_mixin.py +1 -0
  1273. angr/storage/memory_mixins/size_resolution_mixin.py +5 -4
  1274. angr/storage/memory_mixins/slotted_memory.py +3 -3
  1275. angr/storage/memory_mixins/smart_find_mixin.py +3 -2
  1276. angr/storage/memory_mixins/symbolic_merger_mixin.py +1 -0
  1277. angr/storage/memory_mixins/top_merger_mixin.py +2 -2
  1278. angr/storage/memory_mixins/underconstrained_mixin.py +12 -14
  1279. angr/storage/memory_mixins/unwrapper_mixin.py +1 -0
  1280. angr/storage/memory_object.py +35 -35
  1281. angr/storage/pcap.py +3 -3
  1282. angr/tablespecs.py +1 -0
  1283. angr/utils/__init__.py +1 -0
  1284. angr/utils/ail.py +30 -0
  1285. angr/utils/algo.py +1 -0
  1286. angr/utils/bits.py +12 -0
  1287. angr/utils/constants.py +2 -0
  1288. angr/utils/cowdict.py +3 -4
  1289. angr/utils/dynamic_dictlist.py +4 -7
  1290. angr/utils/endness.py +1 -0
  1291. angr/utils/enums_conv.py +1 -0
  1292. angr/utils/env.py +1 -0
  1293. angr/utils/formatting.py +1 -0
  1294. angr/utils/funcid.py +15 -14
  1295. angr/utils/graph.py +52 -19
  1296. angr/utils/lazy_import.py +1 -0
  1297. angr/utils/library.py +10 -13
  1298. angr/utils/loader.py +6 -6
  1299. angr/utils/mp.py +4 -3
  1300. angr/utils/orderedset.py +1 -0
  1301. angr/utils/segment_list.py +7 -9
  1302. angr/utils/ssa/__init__.py +198 -0
  1303. angr/utils/ssa/tmp_uses_collector.py +23 -0
  1304. angr/utils/ssa/vvar_uses_collector.py +37 -0
  1305. angr/utils/timing.py +32 -20
  1306. angr/utils/typing.py +1 -0
  1307. angr/vaults.py +7 -8
  1308. {angr-9.2.117.dist-info → angr-9.2.119.dist-info}/METADATA +9 -8
  1309. angr-9.2.119.dist-info/RECORD +1345 -0
  1310. {angr-9.2.117.dist-info → angr-9.2.119.dist-info}/WHEEL +1 -1
  1311. angr/analyses/decompiler/optimization_passes/spilled_register_finder.py +0 -18
  1312. angr/analyses/decompiler/seq_cf_structure_counter.py +0 -37
  1313. angr/service.py +0 -35
  1314. angr-9.2.117.dist-info/RECORD +0 -1310
  1315. {angr-9.2.117.dist-info → angr-9.2.119.dist-info}/LICENSE +0 -0
  1316. {angr-9.2.117.dist-info → angr-9.2.119.dist-info}/entry_points.txt +0 -0
  1317. {angr-9.2.117.dist-info → angr-9.2.119.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,7 @@
1
1
  # pylint:disable=abstract-method,ungrouped-imports
2
+ from __future__ import annotations
2
3
 
3
- from typing import Optional, TYPE_CHECKING
4
+ from typing import Any, TYPE_CHECKING
4
5
  import re
5
6
  import logging
6
7
  from collections import defaultdict
@@ -14,6 +15,7 @@ from ..knowledge_plugins import Function
14
15
  from ..block import BlockNode
15
16
  from ..errors import SimTranslationError
16
17
  from .analysis import Analysis
18
+ import contextlib
17
19
 
18
20
  try:
19
21
  import pypcode
@@ -64,14 +66,12 @@ class Constant:
64
66
  def __add__(self, other):
65
67
  if type(self) is type(other):
66
68
  return Constant(self.val + other.val)
67
- else:
68
- return other + self
69
+ return other + self
69
70
 
70
71
  def __sub__(self, other):
71
72
  if type(self) is type(other):
72
73
  return Constant(self.val - other.val)
73
- else:
74
- raise CouldNotResolveException
74
+ raise CouldNotResolveException
75
75
 
76
76
 
77
77
  class Register:
@@ -122,8 +122,7 @@ class OffsetVal:
122
122
  def __add__(self, other):
123
123
  if type(other) is Constant:
124
124
  return OffsetVal(self._reg, (self._offset + other.val) & (2**self.reg.bitlen - 1))
125
- else:
126
- raise CouldNotResolveException
125
+ raise CouldNotResolveException
127
126
 
128
127
  def __radd__(self, other):
129
128
  return self.__add__(other)
@@ -131,8 +130,7 @@ class OffsetVal:
131
130
  def __sub__(self, other):
132
131
  if type(other) is Constant:
133
132
  return OffsetVal(self._reg, self._offset - other.val & (2**self.reg.bitlen - 1))
134
- else:
135
- raise CouldNotResolveException
133
+ raise CouldNotResolveException
136
134
 
137
135
  def __rsub__(self, other):
138
136
  raise CouldNotResolveException
@@ -142,6 +140,16 @@ class OffsetVal:
142
140
  return self.reg == other.reg and self.offset == other.offset
143
141
  return False
144
142
 
143
+ def __lt__(self, other):
144
+ if isinstance(other, OffsetVal):
145
+ return self.reg == other.reg and self.offset < other.offset
146
+ return False
147
+
148
+ def __le__(self, other):
149
+ if isinstance(other, OffsetVal):
150
+ return self.reg == other.reg and self.offset <= other.offset
151
+ return False
152
+
145
153
  def __hash__(self):
146
154
  return hash((type(self), self._reg, self._offset))
147
155
 
@@ -169,24 +177,32 @@ class FrozenStackPointerTrackerState:
169
177
  Abstract state for StackPointerTracker analysis with registers and memory values being in frozensets.
170
178
  """
171
179
 
172
- __slots__ = "regs", "memory", "is_tracking_memory"
180
+ __slots__ = "regs", "memory", "is_tracking_memory", "resilient"
173
181
 
174
- def __init__(self, regs, memory, is_tracking_memory):
182
+ def __init__(
183
+ self,
184
+ regs,
185
+ memory,
186
+ is_tracking_memory,
187
+ resilient,
188
+ ):
175
189
  self.regs = regs
176
190
  self.memory = memory
177
191
  self.is_tracking_memory = is_tracking_memory
192
+ self.resilient = resilient
178
193
 
179
194
  def unfreeze(self):
180
- return StackPointerTrackerState(dict(self.regs), dict(self.memory), self.is_tracking_memory)
195
+ return StackPointerTrackerState(dict(self.regs), dict(self.memory), self.is_tracking_memory, self.resilient)
181
196
 
182
197
  def __hash__(self):
183
198
  if self.is_tracking_memory:
184
199
  return hash((FrozenStackPointerTrackerState, self.regs, self.memory, self.is_tracking_memory))
185
- else:
186
- return hash((FrozenStackPointerTrackerState, self.regs, self.is_tracking_memory))
200
+ return hash((FrozenStackPointerTrackerState, self.regs, self.is_tracking_memory))
187
201
 
188
- def merge(self, other):
189
- return self.unfreeze().merge(other.unfreeze()).freeze()
202
+ def merge(
203
+ self, other, addr: int, reg_merge_cache: dict[tuple[int, int], Any], mem_merge_cache: dict[tuple[int, int], Any]
204
+ ):
205
+ return self.unfreeze().merge(other.unfreeze(), addr, reg_merge_cache, mem_merge_cache).freeze()
190
206
 
191
207
  def __eq__(self, other):
192
208
  if type(other) is FrozenStackPointerTrackerState or isinstance(other, FrozenStackPointerTrackerState):
@@ -202,15 +218,16 @@ class StackPointerTrackerState:
202
218
  Abstract state for StackPointerTracker analysis.
203
219
  """
204
220
 
205
- __slots__ = "regs", "memory", "is_tracking_memory"
221
+ __slots__ = "regs", "memory", "is_tracking_memory", "resilient"
206
222
 
207
- def __init__(self, regs, memory, is_tracking_memory):
223
+ def __init__(self, regs, memory, is_tracking_memory, resilient: bool):
208
224
  self.regs = regs
209
225
  if is_tracking_memory:
210
226
  self.memory = memory
211
227
  else:
212
228
  self.memory = {}
213
229
  self.is_tracking_memory = is_tracking_memory
230
+ self.resilient = resilient
214
231
 
215
232
  def give_up_on_memory_tracking(self):
216
233
  self.memory = {}
@@ -249,11 +266,11 @@ class StackPointerTrackerState:
249
266
  self.regs[reg] = val
250
267
 
251
268
  def copy(self):
252
- return StackPointerTrackerState(self.regs.copy(), self.memory.copy(), self.is_tracking_memory)
269
+ return StackPointerTrackerState(self.regs.copy(), self.memory.copy(), self.is_tracking_memory, self.resilient)
253
270
 
254
271
  def freeze(self):
255
272
  return FrozenStackPointerTrackerState(
256
- frozenset(self.regs.items()), frozenset(self.memory.items()), self.is_tracking_memory
273
+ frozenset(self.regs.items()), frozenset(self.memory.items()), self.is_tracking_memory, self.resilient
257
274
  )
258
275
 
259
276
  def __eq__(self, other):
@@ -267,33 +284,39 @@ class StackPointerTrackerState:
267
284
  def __hash__(self):
268
285
  if self.is_tracking_memory:
269
286
  return hash((StackPointerTrackerState, self.regs, self.memory, self.is_tracking_memory))
270
- else:
271
- return hash((StackPointerTrackerState, self.regs, self.is_tracking_memory))
287
+ return hash((StackPointerTrackerState, self.regs, self.is_tracking_memory))
272
288
 
273
- def merge(self, other):
289
+ def merge(
290
+ self, other, addr: int, reg_merge_cache: dict[tuple[int, int], Any], mem_merge_cache: dict[tuple[int, int], Any]
291
+ ):
274
292
  return StackPointerTrackerState(
275
- regs=_dict_merge(self.regs, other.regs),
276
- memory=_dict_merge(self.memory, other.memory),
293
+ regs=_dict_merge(self.regs, other.regs, self.resilient, addr, reg_merge_cache),
294
+ memory=_dict_merge(self.memory, other.memory, self.resilient, addr, mem_merge_cache),
277
295
  is_tracking_memory=self.is_tracking_memory and other.is_tracking_memory,
296
+ resilient=self.resilient or other.resilient,
278
297
  )
279
298
 
280
299
 
281
- def _dict_merge(d1, d2):
300
+ def _dict_merge(d1, d2, resilient: bool, addr: int, merge_cache: dict[tuple[int, int], Any]):
282
301
  all_keys = set(d1.keys()) | set(d2.keys())
283
302
  merged = {}
284
303
  for k in all_keys:
285
- if k not in d1 or d1[k] is TOP:
286
- merged[k] = TOP
287
- elif k not in d2 or d2[k] is TOP:
304
+ if k not in d1 or d1[k] is TOP or (k not in d2 or d2[k] is TOP):
288
305
  merged[k] = TOP
289
306
  elif d1[k] is BOTTOM:
290
307
  merged[k] = d2[k]
291
- elif d2[k] is BOTTOM:
292
- merged[k] = d1[k]
293
- elif d1[k] == d2[k]:
308
+ elif d2[k] is BOTTOM or d1[k] == d2[k]:
294
309
  merged[k] = d1[k]
295
310
  else: # d1[k] != d2[k]
296
- merged[k] = TOP
311
+ if resilient and isinstance(d1[k], OffsetVal) and isinstance(d2[k], OffsetVal):
312
+ if (addr, k) in merge_cache:
313
+ merged[k] = merge_cache[(addr, k)]
314
+ else:
315
+ v = min(d1[k], d2[k])
316
+ merge_cache[(addr, k)] = v
317
+ merged[k] = v
318
+ else:
319
+ merged[k] = TOP
297
320
  return merged
298
321
 
299
322
 
@@ -315,10 +338,11 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
315
338
  self,
316
339
  func: Function | None,
317
340
  reg_offsets: set[int],
318
- block: Optional["Block"] = None,
341
+ block: Block | None = None,
319
342
  track_memory=True,
320
343
  cross_insn_opt=True,
321
344
  initial_reg_values=None,
345
+ resilient: bool = True,
322
346
  ):
323
347
  if func is not None:
324
348
  if not func.normalized:
@@ -340,6 +364,10 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
340
364
  self._blocks = {}
341
365
  self._reg_value_at_block_start = defaultdict(dict)
342
366
  self.cross_insn_opt = cross_insn_opt
367
+ self._resilient = resilient
368
+ # in resilience mode, cache previously merged values to ensure we reach a fixed point
369
+ self._reg_merge_cache = {}
370
+ self._mem_merge_cache = {}
343
371
 
344
372
  if initial_reg_values:
345
373
  self._reg_value_at_block_start[func.addr if func is not None else block.addr] = initial_reg_values
@@ -367,11 +395,10 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
367
395
  return TOP
368
396
  if regval is TOP or type(regval) is Constant:
369
397
  return TOP
370
- elif regval is BOTTOM:
398
+ if regval is BOTTOM:
371
399
  # we don't really know what it should be. return TOP instead.
372
400
  return TOP
373
- else:
374
- return regval.offset
401
+ return regval.offset
375
402
 
376
403
  def offset_after(self, addr, reg):
377
404
  return self._offset_for(addr, "post", reg)
@@ -385,8 +412,7 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
385
412
  instr_addrs = self._blocks[block_addr].instruction_addrs
386
413
  if len(instr_addrs) == 0:
387
414
  return TOP
388
- else:
389
- return self.offset_after(instr_addrs[-1], reg)
415
+ return self.offset_after(instr_addrs[-1], reg)
390
416
 
391
417
  def offset_before_block(self, block_addr, reg):
392
418
  if block_addr not in self._blocks:
@@ -394,8 +420,7 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
394
420
  instr_addrs = self._blocks[block_addr].instruction_addrs
395
421
  if len(instr_addrs) == 0:
396
422
  return TOP
397
- else:
398
- return self.offset_before(instr_addrs[0], reg)
423
+ return self.offset_before(instr_addrs[0], reg)
399
424
 
400
425
  def _constant_for(self, addr, pre_or_post, reg):
401
426
  try:
@@ -421,8 +446,7 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
421
446
  instr_addrs = self._blocks[block_addr].instruction_addrs
422
447
  if len(instr_addrs) == 0:
423
448
  return TOP
424
- else:
425
- return self.constant_after(instr_addrs[-1], reg)
449
+ return self.constant_after(instr_addrs[-1], reg)
426
450
 
427
451
  def constant_before_block(self, block_addr, reg):
428
452
  if block_addr not in self._blocks:
@@ -430,18 +454,14 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
430
454
  instr_addrs = self._blocks[block_addr].instruction_addrs
431
455
  if len(instr_addrs) == 0:
432
456
  return TOP
433
- else:
434
- return self.constant_before(instr_addrs[0], reg)
457
+ return self.constant_before(instr_addrs[0], reg)
435
458
 
436
459
  @property
437
460
  def inconsistent(self):
438
461
  return any(self.inconsistent_for(r) for r in self.reg_offsets)
439
462
 
440
463
  def inconsistent_for(self, reg):
441
- for endpoint in self._func.endpoints:
442
- if self.offset_after_block(endpoint.addr, reg) is TOP:
443
- return True
444
- return False
464
+ return any(self.offset_after_block(endpoint.addr, reg) is TOP for endpoint in self._func.endpoints)
445
465
 
446
466
  def offsets_for(self, reg):
447
467
  return [
@@ -483,12 +503,14 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
483
503
  # a merge with normal blocks happen.
484
504
  initial_regs = {r: BOTTOM for r in self.reg_offsets}
485
505
 
486
- return StackPointerTrackerState(regs=initial_regs, memory={}, is_tracking_memory=self.track_mem).freeze()
506
+ return StackPointerTrackerState(
507
+ regs=initial_regs, memory={}, is_tracking_memory=self.track_mem, resilient=self._resilient
508
+ ).freeze()
487
509
 
488
510
  def _set_state(self, addr, new_val, pre_or_post):
489
511
  previous_val = self._state_for(addr, pre_or_post)
490
512
  if previous_val is not None:
491
- new_val = previous_val.merge(new_val)
513
+ new_val = previous_val.merge(new_val, addr, self._reg_merge_cache, self._mem_merge_cache)
492
514
  if addr not in self.states:
493
515
  self.states[addr] = {}
494
516
  self.states[addr][pre_or_post] = new_val
@@ -510,10 +532,8 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
510
532
  curr_stmt_start_addr = None
511
533
 
512
534
  vex_block = None
513
- try:
535
+ with contextlib.suppress(SimTranslationError):
514
536
  vex_block = block.vex
515
- except SimTranslationError:
516
- pass
517
537
 
518
538
  if node.addr in self._reg_value_at_block_start:
519
539
  for reg, val in self._reg_value_at_block_start[node.addr].items():
@@ -547,28 +567,28 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
547
567
  if expr.op.startswith("Iop_Add"):
548
568
  arg0_expr = _resolve_expr(arg0)
549
569
  if arg0_expr is None:
550
- raise CouldNotResolveException()
570
+ raise CouldNotResolveException
551
571
  if arg0_expr is BOTTOM:
552
572
  return BOTTOM
553
573
  arg1_expr = _resolve_expr(arg1)
554
574
  if arg1_expr is None:
555
- raise CouldNotResolveException()
575
+ raise CouldNotResolveException
556
576
  if arg1_expr is BOTTOM:
557
577
  return BOTTOM
558
578
  return arg0_expr + arg1_expr
559
- elif expr.op.startswith("Iop_Sub"):
579
+ if expr.op.startswith("Iop_Sub"):
560
580
  arg0_expr = _resolve_expr(arg0)
561
581
  if arg0_expr is None:
562
- raise CouldNotResolveException()
582
+ raise CouldNotResolveException
563
583
  if arg0_expr is BOTTOM:
564
584
  return BOTTOM
565
585
  arg1_expr = _resolve_expr(arg1)
566
586
  if arg1_expr is None:
567
- raise CouldNotResolveException()
587
+ raise CouldNotResolveException
568
588
  if arg1_expr is BOTTOM:
569
589
  return BOTTOM
570
590
  return arg0_expr - arg1_expr
571
- elif expr.op.startswith("Iop_And"):
591
+ if expr.op.startswith("Iop_And"):
572
592
  # handle stack pointer alignments
573
593
  arg0_expr = _resolve_expr(arg0)
574
594
  arg1_expr = _resolve_expr(arg1)
@@ -589,14 +609,14 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
589
609
  arg1_expr = _resolve_expr(arg1)
590
610
  if isinstance(arg0_expr, (Register, OffsetVal)) and isinstance(arg1_expr, (Register, OffsetVal)):
591
611
  return Eq(arg0_expr, arg1_expr)
592
- raise CouldNotResolveException()
593
- elif type(expr) is pyvex.IRExpr.RdTmp and expr.tmp in tmps and tmps[expr.tmp] is not None:
612
+ raise CouldNotResolveException
613
+ if type(expr) is pyvex.IRExpr.RdTmp and expr.tmp in tmps and tmps[expr.tmp] is not None:
594
614
  return tmps[expr.tmp]
595
- elif type(expr) is pyvex.IRExpr.Const:
615
+ if type(expr) is pyvex.IRExpr.Const:
596
616
  return Constant(expr.con.value)
597
- elif type(expr) is pyvex.IRExpr.Get:
617
+ if type(expr) is pyvex.IRExpr.Get:
598
618
  return state.get(expr.offset)
599
- elif type(expr) is pyvex.IRExpr.Unop:
619
+ if type(expr) is pyvex.IRExpr.Unop:
600
620
  m = IROP_CONVERT_REGEX.match(expr.op)
601
621
  if m is not None:
602
622
  from_bits = int(m.group(1))
@@ -610,12 +630,12 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
610
630
  mask = (1 << to_bits) - 1
611
631
  return Constant(v.val & mask)
612
632
  return v
613
- elif isinstance(v, Eq):
633
+ if isinstance(v, Eq):
614
634
  return v
615
635
  return TOP
616
636
  elif self.track_mem and type(expr) is pyvex.IRExpr.Load:
617
637
  return state.load(_resolve_expr(expr.addr))
618
- raise CouldNotResolveException()
638
+ raise CouldNotResolveException
619
639
 
620
640
  def resolve_expr(expr):
621
641
  try:
@@ -633,7 +653,7 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
633
653
  return
634
654
  state.put(stmt.offset, resolve_expr(stmt.data))
635
655
  else:
636
- raise CouldNotResolveException()
656
+ raise CouldNotResolveException
637
657
 
638
658
  exit_observed = False
639
659
  for stmt in vex_block.statements:
@@ -666,10 +686,8 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
666
686
  if cond is not None:
667
687
  self._reg_value_at_block_start[stmt.dst.value][reg] = cond
668
688
  else:
669
- try:
689
+ with contextlib.suppress(CouldNotResolveException):
670
690
  resolve_stmt(stmt)
671
- except CouldNotResolveException:
672
- pass
673
691
 
674
692
  # stack pointer adjustment
675
693
  if self.project.arch.sp_offset in self.reg_offsets and vex_block.jumpkind == "Ijk_Call":
@@ -677,10 +695,7 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
677
695
  # pop the return address on the stack
678
696
  try:
679
697
  v = state.get(self.project.arch.sp_offset)
680
- if v is BOTTOM:
681
- incremented = BOTTOM
682
- else:
683
- incremented = v + Constant(self.project.arch.bytes)
698
+ incremented = BOTTOM if v is BOTTOM else v + Constant(self.project.arch.bytes)
684
699
  state.put(self.project.arch.sp_offset, incremented)
685
700
  except CouldNotResolveException:
686
701
  pass
@@ -707,30 +722,29 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
707
722
 
708
723
  return curr_stmt_start_addr
709
724
 
710
- def _process_pcode_irsb(self, node, pcode_irsb: "pcode.lifter.IRSB", state: StackPointerTrackerState) -> int:
725
+ def _process_pcode_irsb(self, node, pcode_irsb: pcode.lifter.IRSB, state: StackPointerTrackerState) -> int:
711
726
  unique = {}
712
727
  curr_stmt_start_addr = None
713
728
 
714
- def _resolve_expr(varnode: "pypcode.Varnode"):
729
+ def _resolve_expr(varnode: pypcode.Varnode):
715
730
  if varnode.space.name == "register":
716
731
  return state.get(varnode.offset)
717
- elif varnode.space.name == "unique":
732
+ if varnode.space.name == "unique":
718
733
  key = (varnode.offset, varnode.size)
719
734
  if key not in unique:
720
- raise CouldNotResolveException()
735
+ raise CouldNotResolveException
721
736
  return unique[key]
722
- elif varnode.space.name == "const":
737
+ if varnode.space.name == "const":
723
738
  return Constant(varnode.offset)
724
- else:
725
- raise CouldNotResolveException()
739
+ raise CouldNotResolveException
726
740
 
727
- def resolve_expr(varnode: "pypcode.Varnode"):
741
+ def resolve_expr(varnode: pypcode.Varnode):
728
742
  try:
729
743
  return _resolve_expr(varnode)
730
744
  except CouldNotResolveException:
731
745
  return TOP
732
746
 
733
- def resolve_op(op: "pypcode.PcodeOp"):
747
+ def resolve_op(op: pypcode.PcodeOp):
734
748
  if op.opcode == pypcode.OpCode.INT_ADD and len(op.inputs) == 2:
735
749
  input0, input1 = op.inputs
736
750
  input0_v = resolve_expr(input0)
@@ -738,12 +752,12 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
738
752
  if isinstance(input0_v, (Register, OffsetVal)) and isinstance(input1_v, Constant):
739
753
  v = input0_v + input1_v
740
754
  else:
741
- raise CouldNotResolveException()
755
+ raise CouldNotResolveException
742
756
  elif op.opcode == pypcode.OpCode.COPY:
743
757
  v = resolve_expr(op.inputs[0])
744
758
  else:
745
759
  # unsupported opcode
746
- raise CouldNotResolveException()
760
+ raise CouldNotResolveException
747
761
 
748
762
  # write the output
749
763
  if op.output.space.name == "unique":
@@ -752,7 +766,7 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
752
766
  elif op.output.space.name == "register":
753
767
  state.put(op.output.offset, v)
754
768
  else:
755
- raise CouldNotResolveException()
769
+ raise CouldNotResolveException
756
770
 
757
771
  is_call = False
758
772
  for op in pcode_irsb._ops:
@@ -763,10 +777,8 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
763
777
  curr_stmt_start_addr = op.inputs[0].offset
764
778
  self._set_pre_state(curr_stmt_start_addr, state.freeze())
765
779
  else:
766
- try:
780
+ with contextlib.suppress(CouldNotResolveException):
767
781
  resolve_op(op)
768
- except CouldNotResolveException:
769
- pass
770
782
 
771
783
  is_call |= op.opcode == pypcode.OpCode.CALL
772
784
 
@@ -776,10 +788,7 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
776
788
  # pop the return address on the stack
777
789
  try:
778
790
  v = state.get(self.project.arch.sp_offset)
779
- if v is BOTTOM:
780
- incremented = BOTTOM
781
- else:
782
- incremented = v + Constant(self.project.arch.bytes)
791
+ incremented = BOTTOM if v is BOTTOM else v + Constant(self.project.arch.bytes)
783
792
  state.put(self.project.arch.sp_offset, incremented)
784
793
  except CouldNotResolveException:
785
794
  pass
@@ -817,15 +826,14 @@ class StackPointerTracker(Analysis, ForwardAnalysis):
817
826
  def _merge_states(self, node, *states: StackPointerTrackerState):
818
827
  merged_state = states[0]
819
828
  for other in states[1:]:
820
- merged_state = merged_state.merge(other)
829
+ merged_state = merged_state.merge(other, node.addr, self._reg_merge_cache, self._mem_merge_cache)
821
830
  return merged_state, merged_state == states[0]
822
831
 
823
832
  def _find_callees(self, node) -> list[Function]:
824
833
  callees: list[Function] = []
825
834
  for _, dst, data in self._func.transition_graph.out_edges(node, data=True):
826
- if data.get("type") == "call":
827
- if isinstance(dst, Function):
828
- callees.append(dst)
835
+ if data.get("type") == "call" and isinstance(dst, Function):
836
+ callees.append(dst)
829
837
  return callees
830
838
 
831
839
 
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  import logging
2
3
 
3
4
  from . import Analysis
@@ -20,8 +21,8 @@ class StaticHooker(Analysis):
20
21
  self.results = {}
21
22
  try:
22
23
  lib = SIM_LIBRARIES[library]
23
- except KeyError:
24
- raise AngrValueError("No such library %s" % library)
24
+ except KeyError as err:
25
+ raise AngrValueError(f"No such library {library}") from err
25
26
 
26
27
  if binary is None:
27
28
  binary = self.project.loader.main_object
@@ -1 +1,2 @@
1
+ from __future__ import annotations
1
2
  from .typehoon import Typehoon
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  from typing import TYPE_CHECKING
2
3
 
3
4
  import networkx
@@ -59,12 +60,12 @@ class DFAConstraintSolver:
59
60
  # networkx.drawing.nx_pydot.write_dot(graph, "d:/enfa.dot")
60
61
 
61
62
  if enfa.is_empty():
62
- raise EmptyEpsilonNFAError()
63
+ raise EmptyEpsilonNFAError
63
64
  return enfa
64
65
 
65
66
  def generate_constraints_between(self, graph: networkx.DiGraph, starts: set, ends: set) -> set:
66
67
  epsilon_nfa = self.graph_to_epsilon_nfa(graph, starts, ends)
67
- min_dfa: "DeterministicFiniteAutomaton" = epsilon_nfa.minimize()
68
+ min_dfa: DeterministicFiniteAutomaton = epsilon_nfa.minimize()
68
69
  dfa_graph: networkx.MultiDiGraph = min_dfa.to_networkx()
69
70
 
70
71
  constraints = set()
@@ -102,7 +103,6 @@ class DFAConstraintSolver:
102
103
  for forget in reversed(forgets):
103
104
  rhs = rhs.recall(forget)
104
105
 
105
- if lhs.variance == Variance.COVARIANT and rhs.variance == Variance.COVARIANT:
106
- if lhs.typevar != rhs.typevar:
107
- return Subtype(lhs.typevar, rhs.typevar)
106
+ if lhs.variance == Variance.COVARIANT and rhs.variance == Variance.COVARIANT and lhs.typevar != rhs.typevar:
107
+ return Subtype(lhs.typevar, rhs.typevar)
108
108
  return None
@@ -1,4 +1,5 @@
1
- from typing import Union, TYPE_CHECKING
1
+ from __future__ import annotations
2
+ from typing import TYPE_CHECKING
2
3
 
3
4
  from ...sim_type import (
4
5
  SimType,
@@ -52,11 +53,11 @@ class TypeLifter:
52
53
  def _lift_SimTypePointer(self, ty: SimTypePointer):
53
54
  if self.bits == 32:
54
55
  return Pointer32(self.lift(ty.pts_to))
55
- elif self.bits == 64:
56
+ if self.bits == 64:
56
57
  return Pointer64(self.lift(ty.pts_to))
57
- raise ValueError("Unsupported bits %s." % self.bits)
58
+ raise ValueError(f"Unsupported bits {self.bits}.")
58
59
 
59
- def _lift_SimStruct(self, ty: SimStruct) -> Union["TypeConstant", BottomType]:
60
+ def _lift_SimStruct(self, ty: SimStruct) -> TypeConstant | BottomType:
60
61
  if ty in self.memo:
61
62
  return BottomType()
62
63