angr 9.2.116__py3-none-manylinux2014_aarch64.whl → 9.2.118__py3-none-manylinux2014_aarch64.whl

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

Potentially problematic release.


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

Files changed (1316) 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 +45 -45
  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 +64 -96
  18. angr/analyses/cfg/cfg_fast.py +273 -314
  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 +104 -119
  28. angr/analyses/cfg/indirect_jump_resolvers/mips_elf_fast.py +29 -34
  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 +348 -172
  58. angr/analyses/decompiler/condition_processor.py +86 -100
  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 +47 -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 +1 -0
  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 +500 -0
  91. angr/analyses/decompiler/optimization_passes/duplication_reverter/duplication_reverter.py +1211 -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 +88 -23
  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 +163 -158
  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 +19 -36
  195. angr/analyses/decompiler/structuring/phoenix.py +199 -199
  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 +6 -6
  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 +46 -67
  244. angr/analyses/identifier/runner.py +8 -7
  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 +159 -165
  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 +32 -33
  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 +83 -93
  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 +7 -14
  290. angr/analyses/typehoon/typeconsts.py +14 -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 +10 -11
  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 +105 -151
  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 +80 -123
  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 +4 -1
  330. angr/concretization_strategies/controlled_data.py +5 -2
  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 +2 -1
  337. angr/concretization_strategies/norepeats_range.py +1 -0
  338. angr/concretization_strategies/range.py +1 -0
  339. angr/concretization_strategies/signed_add.py +15 -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 +4 -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 +66 -74
  354. angr/engines/pcode/__init__.py +1 -0
  355. angr/engines/pcode/behavior.py +5 -3
  356. angr/engines/pcode/cc.py +1 -0
  357. angr/engines/pcode/emulate.py +16 -19
  358. angr/engines/pcode/engine.py +8 -10
  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 +48 -53
  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 +1 -0
  370. angr/engines/soot/expressions/constants.py +7 -5
  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 +4 -1
  378. angr/engines/soot/expressions/newMultiArray.py +6 -4
  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 +4 -1
  390. angr/engines/soot/statements/identity.py +1 -0
  391. angr/engines/soot/statements/if_.py +4 -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 +4 -1
  395. angr/engines/soot/statements/throw.py +5 -2
  396. angr/engines/soot/values/__init__.py +4 -2
  397. angr/engines/soot/values/arrayref.py +13 -15
  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 +20 -23
  407. angr/engines/syscall.py +9 -9
  408. angr/engines/unicorn.py +20 -14
  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 +14 -15
  417. angr/engines/vex/heavy/dirty.py +20 -21
  418. angr/engines/vex/heavy/heavy.py +17 -20
  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 +2 -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 +18 -20
  433. angr/exploration_techniques/driller_core.py +5 -6
  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 +3 -2
  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 +36 -40
  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 +25 -42
  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 +3 -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/testing.py +2 -1
  522. angr/misc/ux.py +5 -5
  523. angr/misc/weakpatch.py +1 -0
  524. angr/procedures/__init__.py +1 -0
  525. angr/procedures/cgc/_terminate.py +1 -0
  526. angr/procedures/cgc/allocate.py +9 -10
  527. angr/procedures/cgc/deallocate.py +11 -3
  528. angr/procedures/cgc/fdwait.py +16 -13
  529. angr/procedures/cgc/random.py +12 -5
  530. angr/procedures/cgc/receive.py +30 -28
  531. angr/procedures/cgc/transmit.py +6 -4
  532. angr/procedures/definitions/__init__.py +9 -10
  533. angr/procedures/definitions/cgc.py +1 -0
  534. angr/procedures/definitions/glibc.py +1 -0
  535. angr/procedures/definitions/gnulib.py +1 -0
  536. angr/procedures/definitions/libstdcpp.py +1 -0
  537. angr/procedures/definitions/linux_kernel.py +1 -0
  538. angr/procedures/definitions/linux_loader.py +1 -0
  539. angr/procedures/definitions/msvcr.py +1 -0
  540. angr/procedures/definitions/parse_syscalls_from_local_system.py +2 -1
  541. angr/procedures/definitions/parse_win32json.py +27 -30
  542. angr/procedures/definitions/types_win32.py +1 -0
  543. angr/procedures/definitions/wdk_api-ms-win-dx-d3dkmt-l1-1-4.py +1 -0
  544. angr/procedures/definitions/wdk_api-ms-win-dx-d3dkmt-l1-1-6.py +1 -0
  545. angr/procedures/definitions/wdk_clfs.py +1 -0
  546. angr/procedures/definitions/wdk_fltmgr.py +1 -0
  547. angr/procedures/definitions/wdk_fwpkclnt.py +1 -0
  548. angr/procedures/definitions/wdk_fwpuclnt.py +1 -0
  549. angr/procedures/definitions/wdk_gdi32.py +1 -0
  550. angr/procedures/definitions/wdk_hal.py +1 -0
  551. angr/procedures/definitions/wdk_ksecdd.py +1 -0
  552. angr/procedures/definitions/wdk_ndis.py +1 -0
  553. angr/procedures/definitions/wdk_ntoskrnl.py +1 -0
  554. angr/procedures/definitions/wdk_offreg.py +1 -0
  555. angr/procedures/definitions/wdk_pshed.py +1 -0
  556. angr/procedures/definitions/wdk_secur32.py +1 -0
  557. angr/procedures/definitions/wdk_vhfum.py +1 -0
  558. angr/procedures/definitions/win32_aclui.py +1 -0
  559. angr/procedures/definitions/win32_activeds.py +1 -0
  560. angr/procedures/definitions/win32_advapi32.py +1 -0
  561. angr/procedures/definitions/win32_advpack.py +1 -0
  562. angr/procedures/definitions/win32_amsi.py +1 -0
  563. angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-1.py +1 -0
  564. angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-3.py +1 -0
  565. angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-6.py +1 -0
  566. angr/procedures/definitions/win32_api-ms-win-core-apiquery-l2-1-0.py +1 -0
  567. angr/procedures/definitions/win32_api-ms-win-core-backgroundtask-l1-1-0.py +1 -0
  568. angr/procedures/definitions/win32_api-ms-win-core-comm-l1-1-1.py +1 -0
  569. angr/procedures/definitions/win32_api-ms-win-core-comm-l1-1-2.py +1 -0
  570. angr/procedures/definitions/win32_api-ms-win-core-enclave-l1-1-1.py +1 -0
  571. angr/procedures/definitions/win32_api-ms-win-core-errorhandling-l1-1-3.py +1 -0
  572. angr/procedures/definitions/win32_api-ms-win-core-featurestaging-l1-1-0.py +1 -0
  573. angr/procedures/definitions/win32_api-ms-win-core-featurestaging-l1-1-1.py +1 -0
  574. angr/procedures/definitions/win32_api-ms-win-core-file-fromapp-l1-1-0.py +1 -0
  575. angr/procedures/definitions/win32_api-ms-win-core-handle-l1-1-0.py +1 -0
  576. angr/procedures/definitions/win32_api-ms-win-core-ioring-l1-1-0.py +1 -0
  577. angr/procedures/definitions/win32_api-ms-win-core-marshal-l1-1-0.py +1 -0
  578. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-3.py +1 -0
  579. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-4.py +1 -0
  580. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-5.py +1 -0
  581. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-6.py +1 -0
  582. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-7.py +1 -0
  583. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-8.py +1 -0
  584. angr/procedures/definitions/win32_api-ms-win-core-path-l1-1-0.py +1 -0
  585. angr/procedures/definitions/win32_api-ms-win-core-psm-appnotify-l1-1-0.py +1 -0
  586. angr/procedures/definitions/win32_api-ms-win-core-psm-appnotify-l1-1-1.py +1 -0
  587. angr/procedures/definitions/win32_api-ms-win-core-realtime-l1-1-1.py +1 -0
  588. angr/procedures/definitions/win32_api-ms-win-core-realtime-l1-1-2.py +1 -0
  589. angr/procedures/definitions/win32_api-ms-win-core-slapi-l1-1-0.py +1 -0
  590. angr/procedures/definitions/win32_api-ms-win-core-state-helpers-l1-1-0.py +1 -0
  591. angr/procedures/definitions/win32_api-ms-win-core-synch-l1-2-0.py +1 -0
  592. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-0.py +1 -0
  593. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-3.py +1 -0
  594. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-4.py +1 -0
  595. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-6.py +1 -0
  596. angr/procedures/definitions/win32_api-ms-win-core-util-l1-1-1.py +1 -0
  597. angr/procedures/definitions/win32_api-ms-win-core-winrt-error-l1-1-0.py +1 -0
  598. angr/procedures/definitions/win32_api-ms-win-core-winrt-error-l1-1-1.py +1 -0
  599. angr/procedures/definitions/win32_api-ms-win-core-winrt-l1-1-0.py +1 -0
  600. angr/procedures/definitions/win32_api-ms-win-core-winrt-registration-l1-1-0.py +1 -0
  601. angr/procedures/definitions/win32_api-ms-win-core-winrt-robuffer-l1-1-0.py +1 -0
  602. angr/procedures/definitions/win32_api-ms-win-core-winrt-roparameterizediid-l1-1-0.py +1 -0
  603. angr/procedures/definitions/win32_api-ms-win-core-winrt-string-l1-1-0.py +1 -0
  604. angr/procedures/definitions/win32_api-ms-win-core-winrt-string-l1-1-1.py +1 -0
  605. angr/procedures/definitions/win32_api-ms-win-core-wow64-l1-1-1.py +1 -0
  606. angr/procedures/definitions/win32_api-ms-win-devices-query-l1-1-0.py +1 -0
  607. angr/procedures/definitions/win32_api-ms-win-devices-query-l1-1-1.py +1 -0
  608. angr/procedures/definitions/win32_api-ms-win-dx-d3dkmt-l1-1-0.py +1 -0
  609. angr/procedures/definitions/win32_api-ms-win-gaming-deviceinformation-l1-1-0.py +1 -0
  610. angr/procedures/definitions/win32_api-ms-win-gaming-expandedresources-l1-1-0.py +1 -0
  611. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-0.py +1 -0
  612. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-1.py +1 -0
  613. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-2.py +1 -0
  614. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-3.py +1 -0
  615. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-4.py +1 -0
  616. angr/procedures/definitions/win32_api-ms-win-mm-misc-l1-1-1.py +1 -0
  617. angr/procedures/definitions/win32_api-ms-win-net-isolation-l1-1-0.py +1 -0
  618. angr/procedures/definitions/win32_api-ms-win-security-base-l1-2-2.py +1 -0
  619. angr/procedures/definitions/win32_api-ms-win-security-isolatedcontainer-l1-1-0.py +1 -0
  620. angr/procedures/definitions/win32_api-ms-win-security-isolatedcontainer-l1-1-1.py +1 -0
  621. angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-3.py +1 -0
  622. angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-4.py +1 -0
  623. angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-5.py +1 -0
  624. angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-0.py +1 -0
  625. angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-1.py +1 -0
  626. angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-2.py +1 -0
  627. angr/procedures/definitions/win32_api-ms-win-shcore-stream-winrt-l1-1-0.py +1 -0
  628. angr/procedures/definitions/win32_api-ms-win-wsl-api-l1-1-0.py +1 -0
  629. angr/procedures/definitions/win32_apphelp.py +1 -0
  630. angr/procedures/definitions/win32_authz.py +1 -0
  631. angr/procedures/definitions/win32_avicap32.py +1 -0
  632. angr/procedures/definitions/win32_avifil32.py +1 -0
  633. angr/procedures/definitions/win32_avrt.py +1 -0
  634. angr/procedures/definitions/win32_bcp47mrm.py +1 -0
  635. angr/procedures/definitions/win32_bcrypt.py +1 -0
  636. angr/procedures/definitions/win32_bcryptprimitives.py +1 -0
  637. angr/procedures/definitions/win32_bluetoothapis.py +1 -0
  638. angr/procedures/definitions/win32_bthprops.py +1 -0
  639. angr/procedures/definitions/win32_bthprops_cpl.py +1 -0
  640. angr/procedures/definitions/win32_cabinet.py +1 -0
  641. angr/procedures/definitions/win32_certadm.py +1 -0
  642. angr/procedures/definitions/win32_certpoleng.py +1 -0
  643. angr/procedures/definitions/win32_cfgmgr32.py +1 -0
  644. angr/procedures/definitions/win32_chakra.py +1 -0
  645. angr/procedures/definitions/win32_cldapi.py +1 -0
  646. angr/procedures/definitions/win32_clfsw32.py +1 -0
  647. angr/procedures/definitions/win32_clusapi.py +1 -0
  648. angr/procedures/definitions/win32_comctl32.py +1 -0
  649. angr/procedures/definitions/win32_comdlg32.py +1 -0
  650. angr/procedures/definitions/win32_compstui.py +1 -0
  651. angr/procedures/definitions/win32_computecore.py +1 -0
  652. angr/procedures/definitions/win32_computenetwork.py +1 -0
  653. angr/procedures/definitions/win32_computestorage.py +1 -0
  654. angr/procedures/definitions/win32_comsvcs.py +1 -0
  655. angr/procedures/definitions/win32_coremessaging.py +1 -0
  656. angr/procedures/definitions/win32_credui.py +1 -0
  657. angr/procedures/definitions/win32_crypt32.py +1 -0
  658. angr/procedures/definitions/win32_cryptnet.py +1 -0
  659. angr/procedures/definitions/win32_cryptui.py +1 -0
  660. angr/procedures/definitions/win32_cryptxml.py +1 -0
  661. angr/procedures/definitions/win32_cscapi.py +1 -0
  662. angr/procedures/definitions/win32_d2d1.py +1 -0
  663. angr/procedures/definitions/win32_d3d10.py +1 -0
  664. angr/procedures/definitions/win32_d3d10_1.py +1 -0
  665. angr/procedures/definitions/win32_d3d11.py +1 -0
  666. angr/procedures/definitions/win32_d3d12.py +1 -0
  667. angr/procedures/definitions/win32_d3d9.py +1 -0
  668. angr/procedures/definitions/win32_d3dcompiler_47.py +1 -0
  669. angr/procedures/definitions/win32_d3dcsx.py +1 -0
  670. angr/procedures/definitions/win32_davclnt.py +1 -0
  671. angr/procedures/definitions/win32_dbgeng.py +1 -0
  672. angr/procedures/definitions/win32_dbghelp.py +1 -0
  673. angr/procedures/definitions/win32_dbgmodel.py +1 -0
  674. angr/procedures/definitions/win32_dciman32.py +1 -0
  675. angr/procedures/definitions/win32_dcomp.py +1 -0
  676. angr/procedures/definitions/win32_ddraw.py +1 -0
  677. angr/procedures/definitions/win32_deviceaccess.py +1 -0
  678. angr/procedures/definitions/win32_dflayout.py +1 -0
  679. angr/procedures/definitions/win32_dhcpcsvc.py +1 -0
  680. angr/procedures/definitions/win32_dhcpcsvc6.py +1 -0
  681. angr/procedures/definitions/win32_dhcpsapi.py +1 -0
  682. angr/procedures/definitions/win32_diagnosticdataquery.py +1 -0
  683. angr/procedures/definitions/win32_dinput8.py +1 -0
  684. angr/procedures/definitions/win32_directml.py +1 -0
  685. angr/procedures/definitions/win32_dmprocessxmlfiltered.py +1 -0
  686. angr/procedures/definitions/win32_dnsapi.py +1 -0
  687. angr/procedures/definitions/win32_drt.py +1 -0
  688. angr/procedures/definitions/win32_drtprov.py +1 -0
  689. angr/procedures/definitions/win32_drttransport.py +1 -0
  690. angr/procedures/definitions/win32_dsound.py +1 -0
  691. angr/procedures/definitions/win32_dsparse.py +1 -0
  692. angr/procedures/definitions/win32_dsprop.py +1 -0
  693. angr/procedures/definitions/win32_dssec.py +1 -0
  694. angr/procedures/definitions/win32_dsuiext.py +1 -0
  695. angr/procedures/definitions/win32_dwmapi.py +1 -0
  696. angr/procedures/definitions/win32_dwrite.py +1 -0
  697. angr/procedures/definitions/win32_dxcompiler.py +1 -0
  698. angr/procedures/definitions/win32_dxcore.py +1 -0
  699. angr/procedures/definitions/win32_dxgi.py +1 -0
  700. angr/procedures/definitions/win32_dxva2.py +1 -0
  701. angr/procedures/definitions/win32_eappcfg.py +1 -0
  702. angr/procedures/definitions/win32_eappprxy.py +1 -0
  703. angr/procedures/definitions/win32_efswrt.py +1 -0
  704. angr/procedures/definitions/win32_elscore.py +1 -0
  705. angr/procedures/definitions/win32_esent.py +1 -0
  706. angr/procedures/definitions/win32_evr.py +1 -0
  707. angr/procedures/definitions/win32_faultrep.py +1 -0
  708. angr/procedures/definitions/win32_fhsvcctl.py +1 -0
  709. angr/procedures/definitions/win32_firewallapi.py +1 -0
  710. angr/procedures/definitions/win32_fltlib.py +1 -0
  711. angr/procedures/definitions/win32_fontsub.py +1 -0
  712. angr/procedures/definitions/win32_forceinline.py +1 -0
  713. angr/procedures/definitions/win32_fwpuclnt.py +1 -0
  714. angr/procedures/definitions/win32_fxsutility.py +1 -0
  715. angr/procedures/definitions/win32_gdi32.py +1 -0
  716. angr/procedures/definitions/win32_gdiplus.py +1 -0
  717. angr/procedures/definitions/win32_glu32.py +1 -0
  718. angr/procedures/definitions/win32_gpedit.py +1 -0
  719. angr/procedures/definitions/win32_hhctrl_ocx.py +1 -0
  720. angr/procedures/definitions/win32_hid.py +1 -0
  721. angr/procedures/definitions/win32_hlink.py +1 -0
  722. angr/procedures/definitions/win32_hrtfapo.py +1 -0
  723. angr/procedures/definitions/win32_httpapi.py +1 -0
  724. angr/procedures/definitions/win32_icm32.py +1 -0
  725. angr/procedures/definitions/win32_icmui.py +1 -0
  726. angr/procedures/definitions/win32_icu.py +1 -0
  727. angr/procedures/definitions/win32_ieframe.py +1 -0
  728. angr/procedures/definitions/win32_imagehlp.py +1 -0
  729. angr/procedures/definitions/win32_imgutil.py +1 -0
  730. angr/procedures/definitions/win32_imm32.py +1 -0
  731. angr/procedures/definitions/win32_infocardapi.py +1 -0
  732. angr/procedures/definitions/win32_inkobjcore.py +1 -0
  733. angr/procedures/definitions/win32_iphlpapi.py +1 -0
  734. angr/procedures/definitions/win32_iscsidsc.py +1 -0
  735. angr/procedures/definitions/win32_isolatedwindowsenvironmentutils.py +1 -0
  736. angr/procedures/definitions/win32_kernel32.py +1 -0
  737. angr/procedures/definitions/win32_kernelbase.py +1 -0
  738. angr/procedures/definitions/win32_keycredmgr.py +1 -0
  739. angr/procedures/definitions/win32_ksproxy_ax.py +1 -0
  740. angr/procedures/definitions/win32_ksuser.py +1 -0
  741. angr/procedures/definitions/win32_ktmw32.py +1 -0
  742. angr/procedures/definitions/win32_licenseprotection.py +1 -0
  743. angr/procedures/definitions/win32_loadperf.py +1 -0
  744. angr/procedures/definitions/win32_magnification.py +1 -0
  745. angr/procedures/definitions/win32_mapi32.py +1 -0
  746. angr/procedures/definitions/win32_mdmlocalmanagement.py +1 -0
  747. angr/procedures/definitions/win32_mdmregistration.py +1 -0
  748. angr/procedures/definitions/win32_mf.py +1 -0
  749. angr/procedures/definitions/win32_mfcore.py +1 -0
  750. angr/procedures/definitions/win32_mfplat.py +1 -0
  751. angr/procedures/definitions/win32_mfplay.py +1 -0
  752. angr/procedures/definitions/win32_mfreadwrite.py +1 -0
  753. angr/procedures/definitions/win32_mfsensorgroup.py +1 -0
  754. angr/procedures/definitions/win32_mfsrcsnk.py +1 -0
  755. angr/procedures/definitions/win32_mgmtapi.py +1 -0
  756. angr/procedures/definitions/win32_mi.py +1 -0
  757. angr/procedures/definitions/win32_mmdevapi.py +1 -0
  758. angr/procedures/definitions/win32_mpr.py +1 -0
  759. angr/procedures/definitions/win32_mprapi.py +1 -0
  760. angr/procedures/definitions/win32_mqrt.py +1 -0
  761. angr/procedures/definitions/win32_mrmsupport.py +1 -0
  762. angr/procedures/definitions/win32_msacm32.py +1 -0
  763. angr/procedures/definitions/win32_msajapi.py +1 -0
  764. angr/procedures/definitions/win32_mscms.py +1 -0
  765. angr/procedures/definitions/win32_mscoree.py +1 -0
  766. angr/procedures/definitions/win32_msctfmonitor.py +1 -0
  767. angr/procedures/definitions/win32_msdelta.py +1 -0
  768. angr/procedures/definitions/win32_msdmo.py +1 -0
  769. angr/procedures/definitions/win32_msdrm.py +1 -0
  770. angr/procedures/definitions/win32_msi.py +1 -0
  771. angr/procedures/definitions/win32_msimg32.py +1 -0
  772. angr/procedures/definitions/win32_mspatcha.py +1 -0
  773. angr/procedures/definitions/win32_mspatchc.py +1 -0
  774. angr/procedures/definitions/win32_msports.py +1 -0
  775. angr/procedures/definitions/win32_msrating.py +1 -0
  776. angr/procedures/definitions/win32_mssign32.py +1 -0
  777. angr/procedures/definitions/win32_mstask.py +1 -0
  778. angr/procedures/definitions/win32_msvfw32.py +1 -0
  779. angr/procedures/definitions/win32_mswsock.py +1 -0
  780. angr/procedures/definitions/win32_mtxdm.py +1 -0
  781. angr/procedures/definitions/win32_ncrypt.py +1 -0
  782. angr/procedures/definitions/win32_ndfapi.py +1 -0
  783. angr/procedures/definitions/win32_netapi32.py +1 -0
  784. angr/procedures/definitions/win32_netsh.py +1 -0
  785. angr/procedures/definitions/win32_netshell.py +1 -0
  786. angr/procedures/definitions/win32_newdev.py +1 -0
  787. angr/procedures/definitions/win32_ninput.py +1 -0
  788. angr/procedures/definitions/win32_normaliz.py +1 -0
  789. angr/procedures/definitions/win32_ntdll.py +1 -0
  790. angr/procedures/definitions/win32_ntdllk.py +1 -0
  791. angr/procedures/definitions/win32_ntdsapi.py +1 -0
  792. angr/procedures/definitions/win32_ntlanman.py +1 -0
  793. angr/procedures/definitions/win32_odbc32.py +1 -0
  794. angr/procedures/definitions/win32_odbcbcp.py +1 -0
  795. angr/procedures/definitions/win32_ole32.py +1 -0
  796. angr/procedures/definitions/win32_oleacc.py +1 -0
  797. angr/procedures/definitions/win32_oleaut32.py +1 -0
  798. angr/procedures/definitions/win32_oledlg.py +1 -0
  799. angr/procedures/definitions/win32_ondemandconnroutehelper.py +1 -0
  800. angr/procedures/definitions/win32_opengl32.py +1 -0
  801. angr/procedures/definitions/win32_opmxbox.py +1 -0
  802. angr/procedures/definitions/win32_p2p.py +1 -0
  803. angr/procedures/definitions/win32_p2pgraph.py +1 -0
  804. angr/procedures/definitions/win32_pdh.py +1 -0
  805. angr/procedures/definitions/win32_peerdist.py +1 -0
  806. angr/procedures/definitions/win32_powrprof.py +1 -0
  807. angr/procedures/definitions/win32_prntvpt.py +1 -0
  808. angr/procedures/definitions/win32_projectedfslib.py +1 -0
  809. angr/procedures/definitions/win32_propsys.py +1 -0
  810. angr/procedures/definitions/win32_psapi.py +1 -0
  811. angr/procedures/definitions/win32_quartz.py +1 -0
  812. angr/procedures/definitions/win32_query.py +1 -0
  813. angr/procedures/definitions/win32_qwave.py +1 -0
  814. angr/procedures/definitions/win32_rasapi32.py +1 -0
  815. angr/procedures/definitions/win32_rasdlg.py +1 -0
  816. angr/procedures/definitions/win32_resutils.py +1 -0
  817. angr/procedures/definitions/win32_rometadata.py +1 -0
  818. angr/procedures/definitions/win32_rpcns4.py +1 -0
  819. angr/procedures/definitions/win32_rpcproxy.py +1 -0
  820. angr/procedures/definitions/win32_rpcrt4.py +1 -0
  821. angr/procedures/definitions/win32_rstrtmgr.py +1 -0
  822. angr/procedures/definitions/win32_rtm.py +1 -0
  823. angr/procedures/definitions/win32_rtutils.py +1 -0
  824. angr/procedures/definitions/win32_rtworkq.py +1 -0
  825. angr/procedures/definitions/win32_sas.py +1 -0
  826. angr/procedures/definitions/win32_scarddlg.py +1 -0
  827. angr/procedures/definitions/win32_schannel.py +1 -0
  828. angr/procedures/definitions/win32_sechost.py +1 -0
  829. angr/procedures/definitions/win32_secur32.py +1 -0
  830. angr/procedures/definitions/win32_sensapi.py +1 -0
  831. angr/procedures/definitions/win32_sensorsutilsv2.py +1 -0
  832. angr/procedures/definitions/win32_setupapi.py +1 -0
  833. angr/procedures/definitions/win32_sfc.py +1 -0
  834. angr/procedures/definitions/win32_shdocvw.py +1 -0
  835. angr/procedures/definitions/win32_shell32.py +1 -0
  836. angr/procedures/definitions/win32_shlwapi.py +1 -0
  837. angr/procedures/definitions/win32_slc.py +1 -0
  838. angr/procedures/definitions/win32_slcext.py +1 -0
  839. angr/procedures/definitions/win32_slwga.py +1 -0
  840. angr/procedures/definitions/win32_snmpapi.py +1 -0
  841. angr/procedures/definitions/win32_spoolss.py +1 -0
  842. angr/procedures/definitions/win32_srclient.py +1 -0
  843. angr/procedures/definitions/win32_srpapi.py +1 -0
  844. angr/procedures/definitions/win32_sspicli.py +1 -0
  845. angr/procedures/definitions/win32_sti.py +1 -0
  846. angr/procedures/definitions/win32_t2embed.py +1 -0
  847. angr/procedures/definitions/win32_tapi32.py +1 -0
  848. angr/procedures/definitions/win32_tbs.py +1 -0
  849. angr/procedures/definitions/win32_tdh.py +1 -0
  850. angr/procedures/definitions/win32_tokenbinding.py +1 -0
  851. angr/procedures/definitions/win32_traffic.py +1 -0
  852. angr/procedures/definitions/win32_txfw32.py +1 -0
  853. angr/procedures/definitions/win32_ualapi.py +1 -0
  854. angr/procedures/definitions/win32_uiautomationcore.py +1 -0
  855. angr/procedures/definitions/win32_urlmon.py +1 -0
  856. angr/procedures/definitions/win32_user32.py +1 -0
  857. angr/procedures/definitions/win32_userenv.py +1 -0
  858. angr/procedures/definitions/win32_usp10.py +1 -0
  859. angr/procedures/definitions/win32_uxtheme.py +1 -0
  860. angr/procedures/definitions/win32_verifier.py +1 -0
  861. angr/procedures/definitions/win32_version.py +1 -0
  862. angr/procedures/definitions/win32_vertdll.py +1 -0
  863. angr/procedures/definitions/win32_virtdisk.py +1 -0
  864. angr/procedures/definitions/win32_vmdevicehost.py +1 -0
  865. angr/procedures/definitions/win32_vmsavedstatedumpprovider.py +1 -0
  866. angr/procedures/definitions/win32_vssapi.py +1 -0
  867. angr/procedures/definitions/win32_wcmapi.py +1 -0
  868. angr/procedures/definitions/win32_wdsbp.py +1 -0
  869. angr/procedures/definitions/win32_wdsclientapi.py +1 -0
  870. angr/procedures/definitions/win32_wdsmc.py +1 -0
  871. angr/procedures/definitions/win32_wdspxe.py +1 -0
  872. angr/procedures/definitions/win32_wdstptc.py +1 -0
  873. angr/procedures/definitions/win32_webauthn.py +1 -0
  874. angr/procedures/definitions/win32_webservices.py +1 -0
  875. angr/procedures/definitions/win32_websocket.py +1 -0
  876. angr/procedures/definitions/win32_wecapi.py +1 -0
  877. angr/procedures/definitions/win32_wer.py +1 -0
  878. angr/procedures/definitions/win32_wevtapi.py +1 -0
  879. angr/procedures/definitions/win32_winbio.py +1 -0
  880. angr/procedures/definitions/win32_windows_ai_machinelearning.py +1 -0
  881. angr/procedures/definitions/win32_windows_data_pdf.py +1 -0
  882. angr/procedures/definitions/win32_windows_media_mediacontrol.py +1 -0
  883. angr/procedures/definitions/win32_windows_networking.py +1 -0
  884. angr/procedures/definitions/win32_windows_ui_xaml.py +1 -0
  885. angr/procedures/definitions/win32_windowscodecs.py +1 -0
  886. angr/procedures/definitions/win32_winfax.py +1 -0
  887. angr/procedures/definitions/win32_winhttp.py +1 -0
  888. angr/procedures/definitions/win32_winhvemulation.py +1 -0
  889. angr/procedures/definitions/win32_winhvplatform.py +1 -0
  890. angr/procedures/definitions/win32_wininet.py +1 -0
  891. angr/procedures/definitions/win32_winml.py +1 -0
  892. angr/procedures/definitions/win32_winmm.py +1 -0
  893. angr/procedures/definitions/win32_winscard.py +1 -0
  894. angr/procedures/definitions/win32_winspool.py +1 -0
  895. angr/procedures/definitions/win32_winspool_drv.py +1 -0
  896. angr/procedures/definitions/win32_wintrust.py +1 -0
  897. angr/procedures/definitions/win32_winusb.py +1 -0
  898. angr/procedures/definitions/win32_wlanapi.py +1 -0
  899. angr/procedures/definitions/win32_wlanui.py +1 -0
  900. angr/procedures/definitions/win32_wldap32.py +1 -0
  901. angr/procedures/definitions/win32_wldp.py +1 -0
  902. angr/procedures/definitions/win32_wmvcore.py +1 -0
  903. angr/procedures/definitions/win32_wnvapi.py +1 -0
  904. angr/procedures/definitions/win32_wofutil.py +1 -0
  905. angr/procedures/definitions/win32_ws2_32.py +1 -0
  906. angr/procedures/definitions/win32_wscapi.py +1 -0
  907. angr/procedures/definitions/win32_wsclient.py +1 -0
  908. angr/procedures/definitions/win32_wsdapi.py +1 -0
  909. angr/procedures/definitions/win32_wsmsvc.py +1 -0
  910. angr/procedures/definitions/win32_wsnmp32.py +1 -0
  911. angr/procedures/definitions/win32_wtsapi32.py +1 -0
  912. angr/procedures/definitions/win32_xaudio2_8.py +1 -0
  913. angr/procedures/definitions/win32_xinput1_4.py +1 -0
  914. angr/procedures/definitions/win32_xinputuap.py +1 -0
  915. angr/procedures/definitions/win32_xmllite.py +1 -0
  916. angr/procedures/definitions/win32_xolehlp.py +1 -0
  917. angr/procedures/definitions/win32_xpsprint.py +1 -0
  918. angr/procedures/glibc/__ctype_b_loc.py +2 -3
  919. angr/procedures/glibc/__ctype_tolower_loc.py +2 -3
  920. angr/procedures/glibc/__ctype_toupper_loc.py +2 -3
  921. angr/procedures/glibc/__errno_location.py +1 -0
  922. angr/procedures/glibc/__libc_init.py +1 -0
  923. angr/procedures/glibc/__libc_start_main.py +7 -7
  924. angr/procedures/glibc/dynamic_loading.py +1 -0
  925. angr/procedures/glibc/scanf.py +1 -0
  926. angr/procedures/glibc/sscanf.py +1 -0
  927. angr/procedures/gnulib/xalloc_die.py +1 -0
  928. angr/procedures/gnulib/xstrtol_fatal.py +1 -0
  929. angr/procedures/java/__init__.py +1 -0
  930. angr/procedures/java/unconstrained.py +3 -2
  931. angr/procedures/java_io/read.py +1 -0
  932. angr/procedures/java_io/write.py +1 -0
  933. angr/procedures/java_jni/__init__.py +8 -9
  934. angr/procedures/java_jni/array_operations.py +4 -1
  935. angr/procedures/java_jni/class_and_interface_operations.py +3 -3
  936. angr/procedures/java_jni/field_access.py +3 -6
  937. angr/procedures/java_jni/global_and_local_refs.py +1 -0
  938. angr/procedures/java_jni/method_calls.py +3 -2
  939. angr/procedures/java_jni/not_implemented.py +2 -1
  940. angr/procedures/java_jni/object_operations.py +3 -4
  941. angr/procedures/java_jni/string_operations.py +1 -0
  942. angr/procedures/java_jni/version_information.py +1 -0
  943. angr/procedures/java_lang/character.py +2 -3
  944. angr/procedures/java_lang/double.py +2 -2
  945. angr/procedures/java_lang/exit.py +1 -0
  946. angr/procedures/java_lang/getsimplename.py +2 -2
  947. angr/procedures/java_lang/integer.py +1 -0
  948. angr/procedures/java_lang/load_library.py +1 -0
  949. angr/procedures/java_lang/math.py +1 -0
  950. angr/procedures/java_lang/string.py +3 -3
  951. angr/procedures/java_lang/stringbuilder.py +1 -0
  952. angr/procedures/java_lang/system.py +1 -0
  953. angr/procedures/java_util/collection.py +1 -0
  954. angr/procedures/java_util/iterator.py +1 -0
  955. angr/procedures/java_util/list.py +1 -0
  956. angr/procedures/java_util/map.py +3 -4
  957. angr/procedures/java_util/random.py +4 -1
  958. angr/procedures/java_util/scanner_nextline.py +1 -0
  959. angr/procedures/libc/abort.py +1 -0
  960. angr/procedures/libc/access.py +5 -2
  961. angr/procedures/libc/atoi.py +2 -2
  962. angr/procedures/libc/atol.py +1 -0
  963. angr/procedures/libc/calloc.py +1 -0
  964. angr/procedures/libc/closelog.py +1 -0
  965. angr/procedures/libc/err.py +1 -0
  966. angr/procedures/libc/error.py +2 -3
  967. angr/procedures/libc/exit.py +1 -0
  968. angr/procedures/libc/fclose.py +2 -3
  969. angr/procedures/libc/feof.py +5 -3
  970. angr/procedures/libc/fflush.py +1 -0
  971. angr/procedures/libc/fgetc.py +4 -1
  972. angr/procedures/libc/fgets.py +22 -22
  973. angr/procedures/libc/fopen.py +9 -10
  974. angr/procedures/libc/fprintf.py +1 -0
  975. angr/procedures/libc/fputc.py +1 -0
  976. angr/procedures/libc/fputs.py +1 -0
  977. angr/procedures/libc/fread.py +5 -3
  978. angr/procedures/libc/free.py +1 -0
  979. angr/procedures/libc/fscanf.py +2 -2
  980. angr/procedures/libc/fseek.py +7 -5
  981. angr/procedures/libc/ftell.py +1 -0
  982. angr/procedures/libc/fwrite.py +1 -0
  983. angr/procedures/libc/getchar.py +2 -2
  984. angr/procedures/libc/getdelim.py +30 -27
  985. angr/procedures/libc/getegid.py +1 -0
  986. angr/procedures/libc/geteuid.py +1 -0
  987. angr/procedures/libc/getgid.py +1 -0
  988. angr/procedures/libc/gets.py +20 -18
  989. angr/procedures/libc/getuid.py +1 -0
  990. angr/procedures/libc/malloc.py +1 -0
  991. angr/procedures/libc/memcmp.py +21 -21
  992. angr/procedures/libc/memcpy.py +1 -0
  993. angr/procedures/libc/memset.py +10 -7
  994. angr/procedures/libc/openlog.py +1 -0
  995. angr/procedures/libc/perror.py +1 -0
  996. angr/procedures/libc/printf.py +1 -0
  997. angr/procedures/libc/putchar.py +1 -0
  998. angr/procedures/libc/puts.py +4 -1
  999. angr/procedures/libc/rand.py +1 -0
  1000. angr/procedures/libc/realloc.py +1 -0
  1001. angr/procedures/libc/rewind.py +2 -1
  1002. angr/procedures/libc/scanf.py +2 -2
  1003. angr/procedures/libc/setbuf.py +1 -0
  1004. angr/procedures/libc/setvbuf.py +1 -0
  1005. angr/procedures/libc/snprintf.py +5 -2
  1006. angr/procedures/libc/sprintf.py +4 -1
  1007. angr/procedures/libc/srand.py +1 -0
  1008. angr/procedures/libc/sscanf.py +2 -2
  1009. angr/procedures/libc/stpcpy.py +2 -2
  1010. angr/procedures/libc/strcat.py +1 -0
  1011. angr/procedures/libc/strchr.py +7 -3
  1012. angr/procedures/libc/strcmp.py +6 -3
  1013. angr/procedures/libc/strcpy.py +2 -2
  1014. angr/procedures/libc/strlen.py +38 -34
  1015. angr/procedures/libc/strncat.py +1 -0
  1016. angr/procedures/libc/strncmp.py +34 -36
  1017. angr/procedures/libc/strncpy.py +6 -2
  1018. angr/procedures/libc/strnlen.py +2 -2
  1019. angr/procedures/libc/strstr.py +17 -10
  1020. angr/procedures/libc/strtol.py +39 -41
  1021. angr/procedures/libc/strtoul.py +2 -2
  1022. angr/procedures/libc/system.py +1 -0
  1023. angr/procedures/libc/time.py +2 -2
  1024. angr/procedures/libc/tmpnam.py +1 -0
  1025. angr/procedures/libc/tolower.py +4 -1
  1026. angr/procedures/libc/toupper.py +4 -1
  1027. angr/procedures/libc/ungetc.py +1 -0
  1028. angr/procedures/libc/vsnprintf.py +1 -0
  1029. angr/procedures/libc/wchar.py +1 -0
  1030. angr/procedures/libstdcpp/_unwind_resume.py +1 -0
  1031. angr/procedures/libstdcpp/std____throw_bad_alloc.py +1 -0
  1032. angr/procedures/libstdcpp/std____throw_bad_cast.py +1 -0
  1033. angr/procedures/libstdcpp/std____throw_length_error.py +1 -0
  1034. angr/procedures/libstdcpp/std____throw_logic_error.py +1 -0
  1035. angr/procedures/libstdcpp/std__terminate.py +1 -0
  1036. angr/procedures/linux_kernel/access.py +1 -0
  1037. angr/procedures/linux_kernel/arch_prctl.py +1 -0
  1038. angr/procedures/linux_kernel/arm_user_helpers.py +1 -0
  1039. angr/procedures/linux_kernel/brk.py +1 -0
  1040. angr/procedures/linux_kernel/cwd.py +1 -0
  1041. angr/procedures/linux_kernel/fstat.py +15 -14
  1042. angr/procedures/linux_kernel/fstat64.py +17 -16
  1043. angr/procedures/linux_kernel/futex.py +3 -3
  1044. angr/procedures/linux_kernel/getegid.py +1 -0
  1045. angr/procedures/linux_kernel/geteuid.py +1 -0
  1046. angr/procedures/linux_kernel/getgid.py +1 -0
  1047. angr/procedures/linux_kernel/getpid.py +1 -0
  1048. angr/procedures/linux_kernel/getrlimit.py +3 -3
  1049. angr/procedures/linux_kernel/gettid.py +1 -0
  1050. angr/procedures/linux_kernel/getuid.py +1 -0
  1051. angr/procedures/linux_kernel/iovec.py +1 -0
  1052. angr/procedures/linux_kernel/lseek.py +6 -3
  1053. angr/procedures/linux_kernel/mmap.py +1 -0
  1054. angr/procedures/linux_kernel/mprotect.py +7 -6
  1055. angr/procedures/linux_kernel/munmap.py +1 -0
  1056. angr/procedures/linux_kernel/openat.py +3 -5
  1057. angr/procedures/linux_kernel/set_tid_address.py +1 -0
  1058. angr/procedures/linux_kernel/sigaction.py +5 -2
  1059. angr/procedures/linux_kernel/sigprocmask.py +6 -3
  1060. angr/procedures/linux_kernel/stat.py +3 -2
  1061. angr/procedures/linux_kernel/sysinfo.py +1 -0
  1062. angr/procedures/linux_kernel/tgkill.py +4 -1
  1063. angr/procedures/linux_kernel/time.py +7 -3
  1064. angr/procedures/linux_kernel/uid.py +1 -0
  1065. angr/procedures/linux_kernel/uname.py +1 -0
  1066. angr/procedures/linux_kernel/unlink.py +2 -2
  1067. angr/procedures/linux_kernel/vsyscall.py +1 -0
  1068. angr/procedures/linux_loader/_dl_initial_error_catch_tsd.py +1 -0
  1069. angr/procedures/linux_loader/_dl_rtld_lock.py +1 -0
  1070. angr/procedures/linux_loader/sim_loader.py +1 -0
  1071. angr/procedures/linux_loader/tls.py +2 -2
  1072. angr/procedures/msvcr/__getmainargs.py +1 -0
  1073. angr/procedures/msvcr/_initterm.py +1 -0
  1074. angr/procedures/msvcr/fmode.py +4 -1
  1075. angr/procedures/ntdll/exceptions.py +7 -4
  1076. angr/procedures/posix/accept.py +2 -2
  1077. angr/procedures/posix/bind.py +1 -0
  1078. angr/procedures/posix/bzero.py +4 -1
  1079. angr/procedures/posix/chroot.py +1 -0
  1080. angr/procedures/posix/close.py +2 -2
  1081. angr/procedures/posix/closedir.py +1 -0
  1082. angr/procedures/posix/dup.py +4 -3
  1083. angr/procedures/posix/fcntl.py +1 -0
  1084. angr/procedures/posix/fdopen.py +19 -20
  1085. angr/procedures/posix/fileno.py +1 -0
  1086. angr/procedures/posix/fork.py +7 -4
  1087. angr/procedures/posix/getenv.py +1 -0
  1088. angr/procedures/posix/gethostbyname.py +1 -0
  1089. angr/procedures/posix/getpass.py +1 -0
  1090. angr/procedures/posix/getsockopt.py +1 -0
  1091. angr/procedures/posix/htonl.py +2 -2
  1092. angr/procedures/posix/htons.py +2 -2
  1093. angr/procedures/posix/inet_ntoa.py +3 -5
  1094. angr/procedures/posix/listen.py +1 -0
  1095. angr/procedures/posix/mmap.py +8 -4
  1096. angr/procedures/posix/open.py +1 -0
  1097. angr/procedures/posix/opendir.py +1 -0
  1098. angr/procedures/posix/poll.py +8 -7
  1099. angr/procedures/posix/pread64.py +1 -0
  1100. angr/procedures/posix/pthread.py +3 -3
  1101. angr/procedures/posix/pwrite64.py +1 -0
  1102. angr/procedures/posix/read.py +1 -0
  1103. angr/procedures/posix/readdir.py +11 -8
  1104. angr/procedures/posix/recv.py +1 -0
  1105. angr/procedures/posix/recvfrom.py +1 -0
  1106. angr/procedures/posix/select.py +10 -8
  1107. angr/procedures/posix/send.py +6 -5
  1108. angr/procedures/posix/setsockopt.py +1 -0
  1109. angr/procedures/posix/sigaction.py +5 -2
  1110. angr/procedures/posix/sim_time.py +4 -1
  1111. angr/procedures/posix/sleep.py +1 -0
  1112. angr/procedures/posix/socket.py +2 -2
  1113. angr/procedures/posix/strcasecmp.py +4 -1
  1114. angr/procedures/posix/strdup.py +1 -0
  1115. angr/procedures/posix/strtok_r.py +38 -39
  1116. angr/procedures/posix/syslog.py +1 -0
  1117. angr/procedures/posix/tz.py +1 -0
  1118. angr/procedures/posix/unlink.py +1 -0
  1119. angr/procedures/posix/usleep.py +1 -0
  1120. angr/procedures/posix/write.py +1 -0
  1121. angr/procedures/procedure_dict.py +1 -0
  1122. angr/procedures/stubs/CallReturn.py +1 -0
  1123. angr/procedures/stubs/NoReturnUnconstrained.py +1 -0
  1124. angr/procedures/stubs/Nop.py +1 -0
  1125. angr/procedures/stubs/PathTerminator.py +1 -0
  1126. angr/procedures/stubs/Redirect.py +5 -2
  1127. angr/procedures/stubs/ReturnChar.py +4 -3
  1128. angr/procedures/stubs/ReturnUnconstrained.py +2 -1
  1129. angr/procedures/stubs/UnresolvableCallTarget.py +1 -0
  1130. angr/procedures/stubs/UnresolvableJumpTarget.py +1 -0
  1131. angr/procedures/stubs/UserHook.py +4 -1
  1132. angr/procedures/stubs/b64_decode.py +4 -1
  1133. angr/procedures/stubs/caller.py +1 -0
  1134. angr/procedures/stubs/crazy_scanf.py +7 -4
  1135. angr/procedures/stubs/format_parser.py +24 -30
  1136. angr/procedures/stubs/syscall_stub.py +6 -7
  1137. angr/procedures/testing/manyargs.py +1 -0
  1138. angr/procedures/testing/retreg.py +2 -2
  1139. angr/procedures/tracer/random.py +1 -0
  1140. angr/procedures/tracer/receive.py +6 -4
  1141. angr/procedures/tracer/transmit.py +6 -4
  1142. angr/procedures/uclibc/__uClibc_main.py +1 -0
  1143. angr/procedures/win32/EncodePointer.py +1 -0
  1144. angr/procedures/win32/ExitProcess.py +1 -0
  1145. angr/procedures/win32/GetCommandLine.py +1 -0
  1146. angr/procedures/win32/GetCurrentProcessId.py +1 -0
  1147. angr/procedures/win32/GetCurrentThreadId.py +1 -0
  1148. angr/procedures/win32/GetLastInputInfo.py +5 -2
  1149. angr/procedures/win32/GetModuleHandle.py +3 -4
  1150. angr/procedures/win32/GetProcessAffinityMask.py +5 -2
  1151. angr/procedures/win32/InterlockedExchange.py +2 -1
  1152. angr/procedures/win32/IsProcessorFeaturePresent.py +1 -0
  1153. angr/procedures/win32/VirtualAlloc.py +2 -1
  1154. angr/procedures/win32/VirtualProtect.py +1 -0
  1155. angr/procedures/win32/critical_section.py +1 -0
  1156. angr/procedures/win32/dynamic_loading.py +2 -1
  1157. angr/procedures/win32/file_handles.py +4 -4
  1158. angr/procedures/win32/gethostbyname.py +5 -3
  1159. angr/procedures/win32/heap.py +4 -1
  1160. angr/procedures/win32/is_bad_ptr.py +1 -0
  1161. angr/procedures/win32/local_storage.py +11 -8
  1162. angr/procedures/win32/mutex.py +1 -0
  1163. angr/procedures/win32/sim_time.py +9 -9
  1164. angr/procedures/win32/system_paths.py +5 -4
  1165. angr/procedures/win32_kernel/ExAllocatePool.py +1 -0
  1166. angr/procedures/win32_kernel/ExFreePoolWithTag.py +1 -0
  1167. angr/procedures/win_user32/chars.py +5 -2
  1168. angr/procedures/win_user32/keyboard.py +1 -0
  1169. angr/procedures/win_user32/messagebox.py +5 -5
  1170. angr/project.py +15 -22
  1171. angr/protos/__init__.py +1 -0
  1172. angr/serializable.py +6 -3
  1173. angr/sim_manager.py +18 -18
  1174. angr/sim_options.py +5 -7
  1175. angr/sim_procedure.py +18 -17
  1176. angr/sim_state.py +48 -59
  1177. angr/sim_state_options.py +9 -15
  1178. angr/sim_type.py +96 -126
  1179. angr/sim_variable.py +23 -38
  1180. angr/simos/__init__.py +3 -1
  1181. angr/simos/cgc.py +4 -3
  1182. angr/simos/javavm.py +77 -83
  1183. angr/simos/linux.py +53 -63
  1184. angr/simos/simos.py +16 -24
  1185. angr/simos/snimmuc_nxp.py +3 -6
  1186. angr/simos/userland.py +6 -6
  1187. angr/simos/windows.py +18 -15
  1188. angr/slicer.py +13 -11
  1189. angr/state_hierarchy.py +3 -3
  1190. angr/state_plugins/__init__.py +1 -0
  1191. angr/state_plugins/callstack.py +19 -18
  1192. angr/state_plugins/cgc.py +5 -4
  1193. angr/state_plugins/concrete.py +7 -8
  1194. angr/state_plugins/debug_variables.py +15 -17
  1195. angr/state_plugins/filesystem.py +13 -19
  1196. angr/state_plugins/gdb.py +3 -2
  1197. angr/state_plugins/globals.py +5 -1
  1198. angr/state_plugins/heap/__init__.py +1 -0
  1199. angr/state_plugins/heap/heap_base.py +1 -0
  1200. angr/state_plugins/heap/heap_brk.py +14 -9
  1201. angr/state_plugins/heap/heap_freelist.py +12 -9
  1202. angr/state_plugins/heap/heap_libc.py +1 -0
  1203. angr/state_plugins/heap/heap_ptmalloc.py +32 -40
  1204. angr/state_plugins/heap/utils.py +1 -0
  1205. angr/state_plugins/history.py +14 -15
  1206. angr/state_plugins/inspect.py +1 -0
  1207. angr/state_plugins/javavm_classloader.py +3 -2
  1208. angr/state_plugins/jni_references.py +2 -1
  1209. angr/state_plugins/libc.py +4 -4
  1210. angr/state_plugins/light_registers.py +8 -10
  1211. angr/state_plugins/log.py +1 -0
  1212. angr/state_plugins/loop_data.py +1 -0
  1213. angr/state_plugins/plugin.py +9 -10
  1214. angr/state_plugins/posix.py +39 -45
  1215. angr/state_plugins/preconstrainer.py +4 -2
  1216. angr/state_plugins/scratch.py +5 -4
  1217. angr/state_plugins/sim_action.py +15 -20
  1218. angr/state_plugins/sim_action_object.py +205 -82
  1219. angr/state_plugins/sim_event.py +1 -0
  1220. angr/state_plugins/solver.py +73 -117
  1221. angr/state_plugins/symbolizer.py +5 -6
  1222. angr/state_plugins/trace_additions.py +33 -47
  1223. angr/state_plugins/uc_manager.py +20 -11
  1224. angr/state_plugins/unicorn_engine.py +22 -38
  1225. angr/state_plugins/view.py +21 -20
  1226. angr/storage/__init__.py +1 -0
  1227. angr/storage/file.py +40 -47
  1228. angr/storage/memory_mixins/__init__.py +12 -15
  1229. angr/storage/memory_mixins/__init__.pyi +13 -14
  1230. angr/storage/memory_mixins/actions_mixin.py +5 -2
  1231. angr/storage/memory_mixins/address_concretization_mixin.py +13 -17
  1232. angr/storage/memory_mixins/bvv_conversion_mixin.py +10 -11
  1233. angr/storage/memory_mixins/clouseau_mixin.py +1 -0
  1234. angr/storage/memory_mixins/conditional_store_mixin.py +1 -0
  1235. angr/storage/memory_mixins/convenient_mappings_mixin.py +1 -0
  1236. angr/storage/memory_mixins/default_filler_mixin.py +16 -16
  1237. angr/storage/memory_mixins/dirty_addrs_mixin.py +1 -0
  1238. angr/storage/memory_mixins/hex_dumper_mixin.py +6 -9
  1239. angr/storage/memory_mixins/javavm_memory/__init__.py +1 -0
  1240. angr/storage/memory_mixins/javavm_memory/javavm_memory_mixin.py +23 -28
  1241. angr/storage/memory_mixins/keyvalue_memory/__init__.py +1 -0
  1242. angr/storage/memory_mixins/keyvalue_memory/keyvalue_memory_mixin.py +2 -1
  1243. angr/storage/memory_mixins/label_merger_mixin.py +2 -2
  1244. angr/storage/memory_mixins/multi_value_merger_mixin.py +1 -0
  1245. angr/storage/memory_mixins/name_resolution_mixin.py +12 -15
  1246. angr/storage/memory_mixins/paged_memory/page_backer_mixins.py +6 -6
  1247. angr/storage/memory_mixins/paged_memory/paged_memory_mixin.py +23 -37
  1248. angr/storage/memory_mixins/paged_memory/paged_memory_multivalue_mixin.py +1 -0
  1249. angr/storage/memory_mixins/paged_memory/pages/__init__.py +1 -2
  1250. angr/storage/memory_mixins/paged_memory/pages/cooperation.py +4 -3
  1251. angr/storage/memory_mixins/paged_memory/pages/history_tracking_mixin.py +4 -4
  1252. angr/storage/memory_mixins/paged_memory/pages/ispo_mixin.py +1 -0
  1253. angr/storage/memory_mixins/paged_memory/pages/list_page.py +12 -20
  1254. angr/storage/memory_mixins/paged_memory/pages/multi_values.py +14 -19
  1255. angr/storage/memory_mixins/paged_memory/pages/mv_list_page.py +26 -32
  1256. angr/storage/memory_mixins/paged_memory/pages/permissions_mixin.py +1 -0
  1257. angr/storage/memory_mixins/paged_memory/pages/refcount_mixin.py +2 -2
  1258. angr/storage/memory_mixins/paged_memory/pages/ultra_page.py +37 -41
  1259. angr/storage/memory_mixins/paged_memory/privileged_mixin.py +1 -0
  1260. angr/storage/memory_mixins/paged_memory/stack_allocation_mixin.py +1 -0
  1261. angr/storage/memory_mixins/regioned_memory/__init__.py +1 -0
  1262. angr/storage/memory_mixins/regioned_memory/abstract_address_descriptor.py +5 -4
  1263. angr/storage/memory_mixins/regioned_memory/abstract_merger_mixin.py +6 -21
  1264. angr/storage/memory_mixins/regioned_memory/region_category_mixin.py +1 -0
  1265. angr/storage/memory_mixins/regioned_memory/region_data.py +7 -6
  1266. angr/storage/memory_mixins/regioned_memory/region_meta_mixin.py +130 -14
  1267. angr/storage/memory_mixins/regioned_memory/regioned_address_concretization_mixin.py +2 -1
  1268. angr/storage/memory_mixins/regioned_memory/regioned_memory_mixin.py +38 -47
  1269. angr/storage/memory_mixins/regioned_memory/static_find_mixin.py +7 -9
  1270. angr/storage/memory_mixins/simple_interface_mixin.py +10 -13
  1271. angr/storage/memory_mixins/simplification_mixin.py +1 -0
  1272. angr/storage/memory_mixins/size_resolution_mixin.py +7 -4
  1273. angr/storage/memory_mixins/slotted_memory.py +4 -4
  1274. angr/storage/memory_mixins/smart_find_mixin.py +3 -2
  1275. angr/storage/memory_mixins/symbolic_merger_mixin.py +6 -3
  1276. angr/storage/memory_mixins/top_merger_mixin.py +2 -2
  1277. angr/storage/memory_mixins/underconstrained_mixin.py +12 -14
  1278. angr/storage/memory_mixins/unwrapper_mixin.py +1 -0
  1279. angr/storage/memory_object.py +30 -28
  1280. angr/storage/pcap.py +3 -3
  1281. angr/tablespecs.py +4 -3
  1282. angr/utils/__init__.py +1 -0
  1283. angr/utils/ail.py +30 -0
  1284. angr/utils/algo.py +1 -0
  1285. angr/utils/bits.py +12 -0
  1286. angr/utils/constants.py +2 -0
  1287. angr/utils/cowdict.py +3 -4
  1288. angr/utils/dynamic_dictlist.py +4 -7
  1289. angr/utils/endness.py +1 -0
  1290. angr/utils/enums_conv.py +1 -0
  1291. angr/utils/env.py +1 -0
  1292. angr/utils/formatting.py +1 -0
  1293. angr/utils/funcid.py +15 -14
  1294. angr/utils/graph.py +52 -19
  1295. angr/utils/lazy_import.py +1 -0
  1296. angr/utils/library.py +10 -13
  1297. angr/utils/loader.py +6 -6
  1298. angr/utils/mp.py +4 -3
  1299. angr/utils/orderedset.py +1 -0
  1300. angr/utils/segment_list.py +7 -9
  1301. angr/utils/ssa/__init__.py +198 -0
  1302. angr/utils/ssa/tmp_uses_collector.py +23 -0
  1303. angr/utils/ssa/vvar_uses_collector.py +37 -0
  1304. angr/utils/timing.py +2 -2
  1305. angr/utils/typing.py +1 -0
  1306. angr/vaults.py +7 -8
  1307. {angr-9.2.116.dist-info → angr-9.2.118.dist-info}/METADATA +7 -8
  1308. angr-9.2.118.dist-info/RECORD +1344 -0
  1309. {angr-9.2.116.dist-info → angr-9.2.118.dist-info}/WHEEL +1 -1
  1310. angr/analyses/decompiler/optimization_passes/spilled_register_finder.py +0 -18
  1311. angr/analyses/decompiler/seq_cf_structure_counter.py +0 -37
  1312. angr/service.py +0 -35
  1313. angr-9.2.116.dist-info/RECORD +0 -1310
  1314. {angr-9.2.116.dist-info → angr-9.2.118.dist-info}/LICENSE +0 -0
  1315. {angr-9.2.116.dist-info → angr-9.2.118.dist-info}/entry_points.txt +0 -0
  1316. {angr-9.2.116.dist-info → angr-9.2.118.dist-info}/top_level.txt +0 -0
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  import logging
2
3
  from collections import defaultdict
3
4
  from typing import Union, Any
@@ -15,6 +16,7 @@ from ..utils.formatting import ansi_color_enabled, ansi_color, add_edge_to_buffe
15
16
  from ..block import DisassemblerInsn, CapstoneInsn, SootBlockNode
16
17
  from ..codenode import BlockNode
17
18
  from .disassembly_utils import decode_instruction
19
+ import contextlib
18
20
 
19
21
  try:
20
22
  from ..engines import pcode
@@ -40,8 +42,7 @@ class DisassemblyPiece:
40
42
  x = self._render(formatting)
41
43
  if len(x) == 1:
42
44
  return [self.highlight(x[0], formatting)]
43
- else:
44
- return x
45
+ return x
45
46
 
46
47
  def _render(self, formatting):
47
48
  raise NotImplementedError
@@ -272,11 +273,8 @@ class Instruction(DisassemblyPiece):
272
273
  self.operands.append(cur_operand)
273
274
 
274
275
  for i, opr in enumerate(self.operands):
275
- if i < len(self.insn.operands):
276
- op_type = self.insn.operands[i].type
277
- else:
278
- # set extra dummy operand type to default 0
279
- op_type = 0
276
+ # set extra dummy operand type to default 0
277
+ op_type = self.insn.operands[i].type if i < len(self.insn.operands) else 0
280
278
  self.operands[i] = Operand.build(op_type, i, opr, self)
281
279
 
282
280
  if len(self.operands) == 0 and len(self.insn.operands) != 0:
@@ -496,22 +494,21 @@ class SootStatement(DisassemblyPiece):
496
494
  return self.addr.stmt_idx
497
495
 
498
496
  def _parse(self):
499
- func = "_parse_%s" % self.raw_stmt.__class__.__name__
497
+ func = f"_parse_{self.raw_stmt.__class__.__name__}"
500
498
 
501
499
  if hasattr(self, func):
502
500
  getattr(self, func)()
503
501
  else:
504
502
  # print func
505
- self.components += ["NotImplemented: %s" % func]
503
+ self.components += [f"NotImplemented: {func}"]
506
504
 
507
505
  def _expr(self, expr):
508
- func = "_handle_%s" % expr.__class__.__name__
506
+ func = f"_handle_{expr.__class__.__name__}"
509
507
 
510
508
  if hasattr(self, func):
511
509
  return getattr(self, func)(expr)
512
- else:
513
- # print func
514
- return SootExpression(str(expr))
510
+ # print func
511
+ return SootExpression(str(expr))
515
512
 
516
513
  def _render(self, formatting=None):
517
514
  return [
@@ -639,9 +636,9 @@ class Operand(DisassemblyPiece):
639
636
  70: Operand, # ARM64 BARRIER
640
637
  }
641
638
 
642
- cls = MAPPING.get(operand_type, None)
639
+ cls = MAPPING.get(operand_type)
643
640
  if cls is None:
644
- raise ValueError("Unknown capstone operand type %s." % operand_type)
641
+ raise ValueError(f"Unknown capstone operand type {operand_type}.")
645
642
 
646
643
  operand = cls(op_num, children, parentinsn)
647
644
 
@@ -652,7 +649,7 @@ class Operand(DisassemblyPiece):
652
649
  # Indirect addressing in x86_64
653
650
  # 400520 push [rip+0x200782] ==> 400520 push [0x600ca8]
654
651
  absolute_addr = parentinsn.addr + parentinsn.size + op1.val
655
- return MemoryOperand(1, operand.prefix + ["[", Value(absolute_addr, False), "]"], parentinsn)
652
+ return MemoryOperand(1, [*operand.prefix, "[", Value(absolute_addr, False), "]"], parentinsn)
656
653
 
657
654
  return operand
658
655
 
@@ -669,15 +666,12 @@ class RegisterOperand(Operand):
669
666
  def _render(self, formatting):
670
667
  custom_value_str = None
671
668
  if formatting is not None:
672
- try:
669
+ with contextlib.suppress(KeyError):
673
670
  custom_value_str = formatting["custom_values_str"][self.ident]
674
- except KeyError:
675
- pass
676
671
 
677
672
  if custom_value_str:
678
673
  return [custom_value_str]
679
- else:
680
- return super()._render(formatting)
674
+ return super()._render(formatting)
681
675
 
682
676
 
683
677
  class MemoryOperand(Operand):
@@ -689,7 +683,7 @@ class MemoryOperand(Operand):
689
683
  # or
690
684
  # [ '[', Register, ']' ]
691
685
  # or
692
- # [ Value, '(', Regsiter, ')' ]
686
+ # [ Value, '(', Register, ')' ]
693
687
 
694
688
  # it will be converted into more meaningful and Pythonic properties
695
689
 
@@ -715,7 +709,7 @@ class MemoryOperand(Operand):
715
709
  elif "(" in self.children:
716
710
  self._parse_memop_paren()
717
711
  else:
718
- raise ValueError()
712
+ raise ValueError
719
713
 
720
714
  except ValueError:
721
715
  l.error("Failed to parse operand children %s. Please report to Fish.", self.children)
@@ -753,7 +747,7 @@ class MemoryOperand(Operand):
753
747
  self.suffix_str = "!"
754
748
  close_square_pos -= 1
755
749
  else:
756
- raise ValueError()
750
+ raise ValueError
757
751
 
758
752
  self.values = self.children[square_bracket_pos + 1 : close_square_pos]
759
753
 
@@ -789,43 +783,54 @@ class MemoryOperand(Operand):
789
783
  if self.prefix is None:
790
784
  # we failed in parsing. use the default rendering
791
785
  return super()._render(formatting)
792
- else:
793
- values_style = self.values_style
794
- show_prefix = True
795
- custom_values_str = None
786
+ values_style = self.values_style
787
+ show_prefix = True
788
+ custom_values_str = None
796
789
 
797
- if formatting is not None:
798
- try:
799
- values_style = formatting["values_style"][self.ident]
800
- except KeyError:
801
- pass
790
+ if formatting is not None:
791
+ with contextlib.suppress(KeyError):
792
+ values_style = formatting["values_style"][self.ident]
802
793
 
803
- try:
804
- show_prefix_str = formatting["show_prefix"][self.ident]
805
- if show_prefix_str in ("false", "False"):
806
- show_prefix = False
807
- except KeyError:
808
- pass
794
+ try:
795
+ show_prefix_str = formatting["show_prefix"][self.ident]
796
+ if show_prefix_str in ("false", "False"):
797
+ show_prefix = False
798
+ except KeyError:
799
+ pass
809
800
 
810
- try:
811
- custom_values_str = formatting["custom_values_str"][self.ident]
812
- except KeyError:
813
- pass
801
+ with contextlib.suppress(KeyError):
802
+ custom_values_str = formatting["custom_values_str"][self.ident]
814
803
 
815
- prefix_str = " ".join(self.prefix) + " " if show_prefix and self.prefix else ""
816
- if custom_values_str is not None:
817
- value_str = custom_values_str
818
- else:
819
- value_str = "".join(
820
- x.render(formatting)[0] if not isinstance(x, (bytes, str)) else x for x in self.values
821
- )
804
+ prefix_str = " ".join(self.prefix) + " " if show_prefix and self.prefix else ""
805
+ if custom_values_str is not None:
806
+ value_str = custom_values_str
807
+ else:
808
+ value_str = "".join(x.render(formatting)[0] if not isinstance(x, (bytes, str)) else x for x in self.values)
809
+
810
+ if values_style == "curly":
811
+ left_paren, right_paren = "{", "}"
812
+ elif values_style == "paren":
813
+ left_paren, right_paren = "(", ")"
814
+ else: # square
815
+ left_paren, right_paren = "[", "]"
816
+
817
+ if self.offset:
818
+ offset_str = "".join(x.render(formatting)[0] if not isinstance(x, (bytes, str)) else x for x in self.offset)
819
+
820
+ # combine values and offsets according to self.offset_location
821
+ if self.offset_location == "prefix":
822
+ value_str = f"{offset_str}{left_paren}{value_str}{right_paren}"
823
+ elif self.offset_location == "before_value":
824
+ value_str = f"{left_paren}{offset_str}{value_str}{right_paren}"
825
+ else: # after_value
826
+ value_str = f"{left_paren}{value_str}{offset_str}{right_paren}"
827
+ else:
828
+ value_str = left_paren + value_str + right_paren
829
+
830
+ segment_selector_str = "" if self.segment_selector is None else self.segment_selector
822
831
 
823
- if values_style == "curly":
824
- left_paren, right_paren = "{", "}"
825
- elif values_style == "paren":
826
- left_paren, right_paren = "(", ")"
827
- else: # square
828
- left_paren, right_paren = "[", "]"
832
+ if segment_selector_str and prefix_str:
833
+ prefix_str += " "
829
834
 
830
835
  if self.offset:
831
836
  offset_str = "".join(
@@ -847,7 +852,7 @@ class MemoryOperand(Operand):
847
852
  if segment_selector_str and prefix_str:
848
853
  prefix_str += " "
849
854
 
850
- return [f"{prefix_str}{segment_selector_str}{value_str}{self.suffix_str}"]
855
+ return [f"{prefix_str}{segment_selector_str}{value_str}{self.suffix_str}"]
851
856
 
852
857
 
853
858
  class OperandPiece(DisassemblyPiece): # pylint: disable=abstract-method
@@ -889,15 +894,13 @@ class Value(OperandPiece):
889
894
  style = formatting["int_styles"][self.ident]
890
895
  if style[0] == "hex":
891
896
  if self.render_with_sign:
892
- return ["%#+x" % self.val]
893
- else:
894
- return ["%#x" % self.val]
895
- elif style[0] == "dec":
897
+ return [f"{self.val:+#x}"]
898
+ return [f"{self.val:#x}"]
899
+ if style[0] == "dec":
896
900
  if self.render_with_sign:
897
901
  return ["%+d" % self.val]
898
- else:
899
- return [str(self.val)]
900
- elif style[0] == "label":
902
+ return [str(self.val)]
903
+ if style[0] == "label":
901
904
  labeloffset = style[1]
902
905
  if labeloffset == 0:
903
906
  lbl = self.project.kb.labels[self.val]
@@ -920,20 +923,17 @@ class Value(OperandPiece):
920
923
 
921
924
  if self.val in self.project.kb.labels:
922
925
  lbl = self.project.kb.labels[self.val]
923
- if func is not None:
926
+ if func is not None and lbl == func.name and func.name != func.demangled_name:
924
927
  # see if lbl == func.name and func.demangled_name != func.name. if so, we prioritize the
925
928
  # demangled name
926
- if lbl == func.name and func.name != func.demangled_name:
927
- normalized_name = get_cpp_function_name(func.demangled_name, specialized=False, qualified=True)
928
- return [normalized_name]
929
+ normalized_name = get_cpp_function_name(func.demangled_name, specialized=False, qualified=True)
930
+ return [normalized_name]
929
931
  return [("+" if self.render_with_sign else "") + lbl]
930
- elif func is not None:
932
+ if func is not None:
931
933
  return [func.demangled_name]
932
- else:
933
- if self.render_with_sign:
934
- return ["%#+x" % self.val]
935
- else:
936
- return ["%#x" % self.val]
934
+ if self.render_with_sign:
935
+ return [f"{self.val:+#x}"]
936
+ return [f"{self.val:#x}"]
937
937
 
938
938
 
939
939
  class Comment(DisassemblyPiece):
@@ -1083,13 +1083,11 @@ class Disassembly(Analysis):
1083
1083
  if irsb.statements is not None:
1084
1084
  if pcode is not None and isinstance(self.project.factory.default_engine, pcode.HeavyPcodeMixin):
1085
1085
  addr = None
1086
- stmt_idx = 0
1087
- for op in irsb._ops:
1086
+ for stmt_idx, op in enumerate(irsb._ops):
1088
1087
  if op.opcode == pypcode.OpCode.IMARK:
1089
1088
  addr = op.inputs[0].offset
1090
1089
  else:
1091
1090
  addr_to_ops_map[addr].append(IROp(addr, stmt_idx, op, irsb))
1092
- stmt_idx += 1
1093
1091
  else:
1094
1092
  for seq, stmt in enumerate(irsb.statements):
1095
1093
  if isinstance(stmt, pyvex.stmt.IMark):
@@ -1,6 +1,8 @@
1
- import capstone as cs
1
+ from __future__ import annotations
2
+
2
3
  import logging
3
4
 
5
+ import capstone as cs
4
6
  from archinfo.arch_arm import is_arm_arch
5
7
 
6
8
  from ..misc.ux import once
@@ -31,16 +33,11 @@ INS_GROUP_INFO["ARMHF"] = INS_GROUP_INFO["ARM"]
31
33
  INS_GROUP_INFO["ARMCortexM"] = INS_GROUP_INFO["ARM"]
32
34
 
33
35
 
34
- try:
35
- INS_GROUP_INFO["MIPS32"] = {
36
- cs.mips.MIPS_GRP_CALL: "call",
37
- cs.mips.MIPS_GRP_JUMP: "branch",
38
- cs.mips.MIPS_GRP_RET: "return",
39
- }
40
- except AttributeError:
41
- # The installed capstone is too old - it does not support cs.mips.MIPS_GRP_*
42
- pass
43
-
36
+ INS_GROUP_INFO["MIPS32"] = {
37
+ cs.mips.MIPS_GRP_CALL: "call",
38
+ cs.mips.MIPS_GRP_JUMP: "branch",
39
+ cs.mips.MIPS_GRP_RET: "return",
40
+ }
44
41
 
45
42
  INS_INFO = {
46
43
  "MIPS32": {
@@ -59,7 +56,7 @@ def decode_instruction(arch, instr):
59
56
 
60
57
  insn_info = None
61
58
 
62
- info = INS_GROUP_INFO.get(arch_name, None)
59
+ info = INS_GROUP_INFO.get(arch_name)
63
60
  if info is not None:
64
61
  for group in instr.insn.insn.groups:
65
62
  insn_info = info.get(group, None)
@@ -67,7 +64,7 @@ def decode_instruction(arch, instr):
67
64
  break
68
65
 
69
66
  if insn_info is None:
70
- info = INS_INFO.get(arch_name, None)
67
+ info = INS_INFO.get(arch_name)
71
68
  if info is not None:
72
69
  insn_info = info.get(instr.insn.insn.id, None)
73
70
 
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  from ..utils.graph import compute_dominance_frontier, Dominators
2
3
  from .analysis import Analysis
3
4
  from . import register_analysis
@@ -9,8 +10,10 @@ class DominanceFrontier(Analysis):
9
10
  querying the frontier information.
10
11
  """
11
12
 
12
- def __init__(self, func, exception_edges=False):
13
+ def __init__(self, func, func_graph=None, entry=None, exception_edges=False):
13
14
  self.function = func
15
+ self.func_graph = func_graph
16
+ self.entry = entry
14
17
  self._exception_edges = exception_edges
15
18
 
16
19
  self.frontiers = None
@@ -18,17 +21,32 @@ class DominanceFrontier(Analysis):
18
21
  self._compute()
19
22
 
20
23
  def _get_graph(self):
21
- g = self.function.graph_ex(exception_edges=self._exception_edges)
22
- return g
24
+ if self.func_graph is not None:
25
+ return self.func_graph
26
+ return self.function.graph_ex(exception_edges=self._exception_edges)
23
27
 
24
28
  def _compute(self):
25
29
  g = self._get_graph()
26
30
 
31
+ if self.entry is not None:
32
+ startpoint = self.entry
33
+ else:
34
+ if self.function.startpoint is None:
35
+ # The function might be empty or is corrupted (maybe the object is created manually)
36
+ raise TypeError(f"Startpoint of function {self.function!r} is None. Is this function empty?")
37
+
38
+ if self.function.startpoint not in g:
39
+ # find the actual start point
40
+ startpoint = next(iter(nn for nn in g if nn.addr == self.function.startpoint.addr), None)
41
+ if startpoint is None:
42
+ raise ValueError(
43
+ f"Cannot find the startpoint of function {self.function!r} in the given function graph."
44
+ )
45
+ else:
46
+ startpoint = self.function.startpoint
47
+
27
48
  # Compute the dominator tree
28
- if self.function.startpoint is None:
29
- # The function might be empty or is corrupted (maybe the object is created manually)
30
- raise TypeError("Startpoint of function %s is None. Is this function empty?" % repr(self.function))
31
- doms = Dominators(g, self.function.startpoint)
49
+ doms = Dominators(g, startpoint)
32
50
 
33
51
  # Compute the dominance frontier
34
52
  dom_frontiers = compute_dominance_frontier(g, doms.dom)
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  from typing import TYPE_CHECKING
2
3
  from collections import defaultdict
3
4
 
@@ -60,8 +61,8 @@ class NewFunctionHandler(FunctionHandler):
60
61
 
61
62
  def handle_local_function(
62
63
  self,
63
- state: "ReachingDefinitionsState",
64
- data: "FunctionCallData",
64
+ state: ReachingDefinitionsState,
65
+ data: FunctionCallData,
65
66
  ):
66
67
  function_address = data.address
67
68
  if function_address == self.new_func_addr:
angr/analyses/flirt.py CHANGED
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  from typing import TYPE_CHECKING
2
3
  from functools import partial
3
4
  from collections import defaultdict
@@ -10,6 +11,7 @@ from ..analyses import AnalysesHub
10
11
  from ..errors import AngrRuntimeError
11
12
  from ..flirt import FlirtSignature, STRING_TO_LIBRARIES, LIBRARY_TO_SIGNATURES, FLIRT_SIGNATURES_BY_ARCH
12
13
  from .analysis import Analysis
14
+ import contextlib
13
15
 
14
16
  if TYPE_CHECKING:
15
17
  from angr.knowledge_plugins.functions import Function
@@ -84,7 +86,7 @@ class FlirtAnalysis(Analysis):
84
86
  max_suggestions = len(suggestion)
85
87
 
86
88
  if max_suggestion_sig_path is not None:
87
- sig_ = path_to_sig.get(max_suggestion_sig_path, None)
89
+ sig_ = path_to_sig.get(max_suggestion_sig_path)
88
90
  _l.info("Applying FLIRT signature %s for library %s.", sig_, lib)
89
91
  self._apply_changes(
90
92
  sig_.sig_name if not self._temporary_sig else None, sig_to_suggestions[max_suggestion_sig_path]
@@ -117,7 +119,7 @@ class FlirtAnalysis(Analysis):
117
119
  with open(sig.sig_path, "rb") as sigfile:
118
120
  flirt = nampa.parse_flirt_file(sigfile)
119
121
  for func in self.project.kb.functions.values():
120
- func: "Function"
122
+ func: Function
121
123
  if func.is_simprocedure or func.is_plt:
122
124
  continue
123
125
  if not func.is_default_name:
@@ -140,7 +142,7 @@ class FlirtAnalysis(Analysis):
140
142
  _callback = partial(self._on_func_matched, func)
141
143
  nampa.match_function(flirt, func_bytes, start, _callback)
142
144
 
143
- def _on_func_matched(self, func: "Function", base_addr: int, flirt_func: "nampa.FlirtFunction"):
145
+ def _on_func_matched(self, func: Function, base_addr: int, flirt_func: nampa.FlirtFunction):
144
146
  func_addr = base_addr + flirt_func.offset
145
147
  _l.debug(
146
148
  "_on_func_matched() is called with func_addr %#x with a suggested name %s.", func_addr, flirt_func.name
@@ -153,10 +155,8 @@ class FlirtAnalysis(Analysis):
153
155
  except KeyError:
154
156
  # the function is not found. Try the THUMB version
155
157
  if self._is_arm:
156
- try:
158
+ with contextlib.suppress(KeyError):
157
159
  func = self.kb.functions.get_by_addr(func_addr + 1)
158
- except KeyError:
159
- pass
160
160
 
161
161
  if func is None:
162
162
  _l.debug(
@@ -168,10 +168,7 @@ class FlirtAnalysis(Analysis):
168
168
  # set the function name
169
169
  # TODO: Make sure function names do not conflict with existing ones
170
170
  _l.debug("Identified %s @ %#x (%#x-%#x)", flirt_func.name, func_addr, base_addr, flirt_func.offset)
171
- if flirt_func.name != "?":
172
- func_name = flirt_func.name
173
- else:
174
- func_name = f"unknown_function_{func.addr:x}"
171
+ func_name = flirt_func.name if flirt_func.name != "?" else f"unknown_function_{func.addr:x}"
175
172
  self._suggestions[func.addr] = func_name
176
173
 
177
174
  def _apply_changes(self, library_name: str | None, suggestion: dict[int, str]) -> None:
@@ -1,2 +1,3 @@
1
+ from __future__ import annotations
1
2
  from .forward_analysis import ForwardAnalysis
2
3
  from .visitors import CallGraphVisitor, FunctionGraphVisitor, LoopVisitor, SingleNodeGraphVisitor
@@ -1,5 +1,6 @@
1
+ from __future__ import annotations
1
2
  from collections import defaultdict
2
- from typing import Any, Optional, Generic, TypeVar, TYPE_CHECKING
3
+ from typing import Any, Generic, TypeVar, TYPE_CHECKING
3
4
  from collections.abc import Callable
4
5
 
5
6
  import networkx
@@ -42,8 +43,8 @@ class ForwardAnalysis(Generic[AnalysisState, NodeType, JobType, JobKey]):
42
43
  order_jobs=False,
43
44
  allow_merging=False,
44
45
  allow_widening=False,
45
- status_callback: Callable[[type["ForwardAnalysis"]], Any] | None = None,
46
- graph_visitor: "Optional[GraphVisitor[NodeType]]" = None,
46
+ status_callback: Callable[[type[ForwardAnalysis]], Any] | None = None,
47
+ graph_visitor: GraphVisitor[NodeType] | None = None,
47
48
  ):
48
49
  """
49
50
  Constructor
@@ -363,8 +364,10 @@ class ForwardAnalysis(Generic[AnalysisState, NodeType, JobType, JobKey]):
363
364
  all_input_states = self._input_states.get(self._node_key(node))
364
365
  if len(all_input_states) == 1:
365
366
  return all_input_states[0]
366
- merged_state, _ = self._merge_states(node, *all_input_states)
367
- return merged_state
367
+ if self._allow_merging:
368
+ merged_state, _ = self._merge_states(node, *all_input_states)
369
+ return merged_state
370
+ return all_input_states[0]
368
371
 
369
372
  def _analysis_core_baremetal(self) -> None:
370
373
  if not self._job_info_queue:
@@ -506,7 +509,7 @@ class ForwardAnalysis(Generic[AnalysisState, NodeType, JobType, JobKey]):
506
509
  if pos < len(self._job_info_queue):
507
510
  return self._job_info_queue[pos].job
508
511
 
509
- raise IndexError()
512
+ raise IndexError
510
513
 
511
514
  def _remove_job(self, predicate: Callable) -> None:
512
515
  """
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  from typing import Generic, TypeVar
2
3
 
3
4
  JobType = TypeVar("JobType")
@@ -16,14 +17,13 @@ class JobInfo(Generic[JobType, JobKey]):
16
17
  self.narrowing_count = 0 # not used
17
18
 
18
19
  def __hash__(self):
19
- return hash((self.key,) + tuple(self.jobs))
20
+ return hash((self.key, *tuple(self.jobs)))
20
21
 
21
22
  def __eq__(self, o):
22
23
  return type(self) == type(o) and self.key == o.key and self.job == o.job
23
24
 
24
25
  def __repr__(self):
25
- s = "<JobInfo %s>" % (str(self.key))
26
- return s
26
+ return f"<JobInfo {self.key!s}>"
27
27
 
28
28
  @property
29
29
  def job(self) -> JobType:
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  from .call_graph import CallGraphVisitor
2
3
  from .function_graph import FunctionGraphVisitor
3
4
  from .loop import LoopVisitor
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  from angr.utils.graph import GraphUtils
2
3
  from .graph import GraphVisitor
3
4
 
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  import logging
2
3
 
3
4
  import networkx
@@ -40,7 +41,7 @@ class FunctionGraphVisitor(GraphVisitor):
40
41
  if len(new_sorted_nodes) < len(self._sorted_nodes):
41
42
  must_restart = True
42
43
  else:
43
- must_restart = not new_sorted_nodes[: len(self._sorted_nodes)] == self._sorted_nodes
44
+ must_restart = new_sorted_nodes[: len(self._sorted_nodes)] != self._sorted_nodes
44
45
 
45
46
  if must_restart:
46
47
  _l.debug("Cannot resume for function %r with the new graph.", self.function)
@@ -79,7 +80,7 @@ class FunctionGraphVisitor(GraphVisitor):
79
80
  start_nodes = [node for node in self.graph if self.graph.in_degree(node) == 0]
80
81
 
81
82
  if not start_nodes:
82
- raise NotImplementedError()
83
+ raise NotImplementedError
83
84
 
84
85
  start_node = start_nodes[0]
85
86
  return list(dfs_back_edges(self.graph, start_node))
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  from typing import TypeVar, Generic
2
3
  from collections.abc import Collection, Iterator
3
4
  from collections import defaultdict
@@ -49,7 +50,7 @@ class GraphVisitor(Generic[NodeType]):
49
50
  :rtype: list
50
51
  """
51
52
 
52
- raise NotImplementedError()
53
+ raise NotImplementedError
53
54
 
54
55
  def predecessors(self, node: NodeType) -> list[NodeType]:
55
56
  """
@@ -59,7 +60,7 @@ class GraphVisitor(Generic[NodeType]):
59
60
  :return: A list of predecessors.
60
61
  """
61
62
 
62
- raise NotImplementedError()
63
+ raise NotImplementedError
63
64
 
64
65
  def sort_nodes(self, nodes: Collection[NodeType] | None = None) -> list[NodeType]:
65
66
  """
@@ -69,16 +70,16 @@ class GraphVisitor(Generic[NodeType]):
69
70
  :return: A list of sorted nodes.
70
71
  """
71
72
 
72
- raise NotImplementedError()
73
+ raise NotImplementedError
73
74
 
74
75
  def back_edges(self) -> list[tuple[NodeType, NodeType]]:
75
76
  """
76
- Get a list of back edges. This function is optional. If not overriden, the traverser cannot achieve an optimal
77
+ Get a list of back edges. This function is optional. If not overridden, the traverser cannot achieve an optimal
77
78
  graph traversal order.
78
79
 
79
80
  :return: A list of back edges (source -> destination).
80
81
  """
81
- raise NotImplementedError()
82
+ raise NotImplementedError
82
83
 
83
84
  #
84
85
  # Public methods
@@ -201,10 +202,9 @@ class GraphVisitor(Generic[NodeType]):
201
202
 
202
203
  successors = self.successors(node) # , skip_reached_fixedpoint=True)
203
204
 
204
- if include_self:
205
- if node not in self._nodes_set:
206
- binary_insert(self._worklist, node, lambda elem: self._node_to_index[elem])
207
- self._nodes_set.add(node)
205
+ if include_self and node not in self._nodes_set:
206
+ binary_insert(self._worklist, node, lambda elem: self._node_to_index[elem])
207
+ self._nodes_set.add(node)
208
208
 
209
209
  for succ in successors:
210
210
  if succ not in self._nodes_set:
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  from angr.utils.graph import GraphUtils
2
3
  from .graph import GraphVisitor
3
4
 
@@ -1,3 +1,4 @@
1
+ from __future__ import annotations
1
2
  from .graph import GraphVisitor
2
3
 
3
4
 
@@ -34,5 +35,4 @@ class SingleNodeGraphVisitor(GraphVisitor):
34
35
  def sort_nodes(self, nodes=None):
35
36
  if nodes:
36
37
  return nodes
37
- else:
38
- return [self.node]
38
+ return [self.node]
@@ -1 +1,2 @@
1
+ from __future__ import annotations
1
2
  from .identify import Identifier