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

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

Potentially problematic release.


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

Files changed (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,5 +1,6 @@
1
1
  # pylint:disable=line-too-long,multiple-statements
2
- from typing import Optional, TYPE_CHECKING, Any
2
+ from __future__ import annotations
3
+ from typing import TYPE_CHECKING, Any
3
4
  import logging
4
5
  from collections import defaultdict
5
6
 
@@ -339,10 +340,10 @@ class CFGBase(Analysis):
339
340
 
340
341
  # pylint: disable=no-self-use
341
342
  def copy(self):
342
- raise NotImplementedError()
343
+ raise NotImplementedError
343
344
 
344
345
  def output(self):
345
- raise NotImplementedError()
346
+ raise NotImplementedError
346
347
 
347
348
  def generate_index(self):
348
349
  """
@@ -412,18 +413,18 @@ class CFGBase(Analysis):
412
413
  return self._model.get_exit_stmt_idx(src_block, dst_block)
413
414
 
414
415
  @property
415
- def graph(self) -> "networkx.DiGraph[CFGNode]":
416
- raise NotImplementedError()
416
+ def graph(self) -> networkx.DiGraph[CFGNode]:
417
+ raise NotImplementedError
417
418
 
418
419
  def remove_edge(self, block_from, block_to):
419
420
  if self.graph is None:
420
421
  raise TypeError("self.graph does not exist.")
421
422
 
422
423
  if block_from not in self.graph:
423
- raise ValueError("%r is not in CFG." % block_from)
424
+ raise ValueError(f"{block_from!r} is not in CFG.")
424
425
 
425
426
  if block_to not in self.graph:
426
- raise ValueError("%r is not in CFG." % block_to)
427
+ raise ValueError(f"{block_to!r} is not in CFG.")
427
428
 
428
429
  if block_to not in self.graph[block_from]:
429
430
  raise ValueError(f"Edge {block_from!r}->{block_to!r} does not exist.")
@@ -489,10 +490,7 @@ class CFGBase(Analysis):
489
490
 
490
491
  if cfg_node is not None:
491
492
  return BlockNode(addr, size, thumb=thumb, bytestr=cfg_node.byte_string) # pylint: disable=no-member
492
- else:
493
- return self.project.factory.snippet(
494
- addr, size=size, jumpkind=jumpkind, thumb=thumb, backup_state=base_state
495
- )
493
+ return self.project.factory.snippet(addr, size=size, jumpkind=jumpkind, thumb=thumb, backup_state=base_state)
496
494
 
497
495
  def is_thumb_addr(self, addr):
498
496
  return addr in self._thumb_addrs
@@ -578,36 +576,33 @@ class CFGBase(Analysis):
578
576
  val = stmt.data
579
577
  if val.tag == "Iex_Const":
580
578
  conc_temps[stmt.tmp] = val.con.value
581
- elif stmt.tag == "Ist_Put":
582
- if stmt.offset == self.project.arch.registers["itstate"][0]:
583
- val = stmt.data
584
- if val.tag == "Iex_RdTmp":
585
- if val.tmp in conc_temps:
586
- # We found an IT instruction!!
587
- # Determine how many instructions are conditional
588
- it_counter = 0
589
- itstate = conc_temps[val.tmp]
590
- while itstate != 0:
591
- it_counter += 1
592
- itstate >>= 8
593
- elif val.tag == "Iex_Const":
579
+ elif stmt.tag == "Ist_Put" and stmt.offset == self.project.arch.registers["itstate"][0]:
580
+ val = stmt.data
581
+ if val.tag == "Iex_RdTmp":
582
+ if val.tmp in conc_temps:
583
+ # We found an IT instruction!!
584
+ # Determine how many instructions are conditional
594
585
  it_counter = 0
595
- itstate = val.con.value
586
+ itstate = conc_temps[val.tmp]
596
587
  while itstate != 0:
597
588
  it_counter += 1
598
589
  itstate >>= 8
590
+ elif val.tag == "Iex_Const":
591
+ it_counter = 0
592
+ itstate = val.con.value
593
+ while itstate != 0:
594
+ it_counter += 1
595
+ itstate >>= 8
599
596
 
600
597
  if it_counter != 0:
601
598
  l.debug("Basic block ends before calculated IT block (%#x)", irsb.addr)
602
599
 
603
- successors_filtered = [
600
+ return [
604
601
  suc
605
602
  for suc in successors
606
603
  if get_ins_addr(suc) in can_produce_exits or get_exit_stmt_idx(suc) == DEFAULT_STATEMENT
607
604
  ]
608
605
 
609
- return successors_filtered
610
-
611
606
  # Methods for determining scanning scope
612
607
 
613
608
  def _inside_regions(self, address: int | None) -> bool:
@@ -655,7 +650,7 @@ class CFGBase(Analysis):
655
650
  except StopIteration:
656
651
  return None
657
652
 
658
- def _is_region_extremely_sparse(self, start: int, end: int, base_state: Optional["SimState"] = None) -> bool:
653
+ def _is_region_extremely_sparse(self, start: int, end: int, base_state: SimState | None = None) -> bool:
659
654
  """
660
655
  Check whether the given memory region is extremely sparse, i.e., all bytes are the same value.
661
656
 
@@ -738,10 +733,7 @@ class CFGBase(Analysis):
738
733
  :return: A sorted list of tuples (beginning_address, end_address)
739
734
  """
740
735
 
741
- if objects is None:
742
- binaries = self.project.loader.all_objects
743
- else:
744
- binaries = objects
736
+ binaries = self.project.loader.all_objects if objects is None else objects
745
737
 
746
738
  memory_regions = []
747
739
 
@@ -828,9 +820,7 @@ class CFGBase(Analysis):
828
820
  if not memory_regions:
829
821
  memory_regions = [(start, start + len(backer)) for start, backer in self.project.loader.memory.backers()]
830
822
 
831
- memory_regions = sorted(memory_regions, key=lambda x: x[0])
832
-
833
- return memory_regions
823
+ return sorted(memory_regions, key=lambda x: x[0])
834
824
 
835
825
  def _addr_in_exec_memory_regions(self, addr):
836
826
  """
@@ -841,10 +831,7 @@ class CFGBase(Analysis):
841
831
  :rtype: bool
842
832
  """
843
833
 
844
- for start, end in self._exec_mem_regions:
845
- if start <= addr < end:
846
- return True
847
- return False
834
+ return any(start <= addr < end for start, end in self._exec_mem_regions)
848
835
 
849
836
  def _addrs_belong_to_same_section(self, addr_a, addr_b):
850
837
  """
@@ -862,9 +849,7 @@ class CFGBase(Analysis):
862
849
  if obj is None:
863
850
  # test if addr_b also does not belong to any object
864
851
  obj_b = self.project.loader.find_object_containing(addr_b, membership_check=False)
865
- if obj_b is None:
866
- return True
867
- return False
852
+ return obj_b is None
868
853
 
869
854
  src_section = obj.find_section_containing(addr_a)
870
855
  if src_section is None:
@@ -892,17 +877,13 @@ class CFGBase(Analysis):
892
877
  if obj is None:
893
878
  # test if addr_b also does not belong to any object
894
879
  obj_b = self.project.loader.find_object_containing(addr_b, membership_check=False)
895
- if obj_b is None:
896
- return True
897
- return False
880
+ return obj_b is None
898
881
 
899
882
  src_segment = obj.find_segment_containing(addr_a)
900
883
  if src_segment is None:
901
884
  # test if addr_b also does not belong to any section
902
885
  dst_segment = obj.find_segment_containing(addr_b)
903
- if dst_segment is None:
904
- return True
905
- return False
886
+ return dst_segment is None
906
887
 
907
888
  return src_segment.contains_addr(addr_b)
908
889
 
@@ -1115,7 +1096,7 @@ class CFGBase(Analysis):
1115
1096
  target_func = self.kb.functions[goout_target.addr]
1116
1097
  if target_func.returning is True:
1117
1098
  return True
1118
- elif target_func.returning is None:
1099
+ if target_func.returning is None:
1119
1100
  # the returning status of at least one of the target functions is not decided yet.
1120
1101
  bail_out = True
1121
1102
 
@@ -1172,15 +1153,14 @@ class CFGBase(Analysis):
1172
1153
  func.returning = False
1173
1154
  changes["functions_do_not_return"].append(func)
1174
1155
 
1175
- if returning is not None:
1156
+ if returning is not None and func.addr in functions.callgraph:
1176
1157
  # Add all callers of this function to all_functions list
1177
- if func.addr in functions.callgraph:
1178
- callers = functions.callgraph.predecessors(func.addr)
1179
- for caller in callers:
1180
- if caller in analyzed_functions:
1181
- continue
1182
- if functions.contains_addr(caller):
1183
- all_functions.append(functions.get_by_addr(caller))
1158
+ callers = functions.callgraph.predecessors(func.addr)
1159
+ for caller in callers:
1160
+ if caller in analyzed_functions:
1161
+ continue
1162
+ if functions.contains_addr(caller):
1163
+ all_functions.append(functions.get_by_addr(caller))
1184
1164
 
1185
1165
  return changes
1186
1166
 
@@ -1266,7 +1246,7 @@ class CFGBase(Analysis):
1266
1246
  for k, node in smallest_nodes.items():
1267
1247
  _, callstack_key = k
1268
1248
  sorted_smallest_nodes[callstack_key].append(node)
1269
- for k in sorted_smallest_nodes.keys():
1249
+ for k in sorted_smallest_nodes:
1270
1250
  sorted_smallest_nodes[k] = sorted(sorted_smallest_nodes[k], key=lambda node: node.addr)
1271
1251
 
1272
1252
  for callstack_key, lst in sorted_smallest_nodes.items():
@@ -1302,7 +1282,7 @@ class CFGBase(Analysis):
1302
1282
 
1303
1283
  def _normalize_core(
1304
1284
  self,
1305
- graph: "networkx.DiGraph[CFGNode]",
1285
+ graph: networkx.DiGraph[CFGNode],
1306
1286
  callstack_key,
1307
1287
  smallest_node,
1308
1288
  other_nodes,
@@ -1328,9 +1308,8 @@ class CFGBase(Analysis):
1328
1308
  # when there are more than one node with that key.
1329
1309
  if key in end_addresses_to_nodes:
1330
1310
  new_node = next((i for i in end_addresses_to_nodes[key] if i.addr == n.addr), None)
1331
- if new_node is None:
1332
- if key in smallest_nodes and smallest_nodes[key].addr == n.addr:
1333
- new_node = smallest_nodes[key]
1311
+ if new_node is None and key in smallest_nodes and smallest_nodes[key].addr == n.addr:
1312
+ new_node = smallest_nodes[key]
1334
1313
 
1335
1314
  if new_node is None:
1336
1315
  # Create a new one
@@ -1356,7 +1335,7 @@ class CFGBase(Analysis):
1356
1335
  thumb=n.thumb,
1357
1336
  )
1358
1337
  else:
1359
- raise ValueError("Unknown tag %s." % self.tag)
1338
+ raise ValueError(f"Unknown tag {self.tag}.")
1360
1339
 
1361
1340
  # Copy instruction addresses
1362
1341
  new_node.instruction_addrs = [
@@ -1412,7 +1391,7 @@ class CFGBase(Analysis):
1412
1391
  graph.add_edge(p, new_node, **data)
1413
1392
 
1414
1393
  # We should find the correct successor
1415
- new_successors = [i for i in [smallest_node] + other_nodes if i.addr == smallest_node.addr]
1394
+ new_successors = [i for i in [smallest_node, *other_nodes] if i.addr == smallest_node.addr]
1416
1395
  if new_successors:
1417
1396
  new_successor = new_successors[0]
1418
1397
  graph.add_edge(
@@ -1533,7 +1512,7 @@ class CFGBase(Analysis):
1533
1512
  if not self.project.arch.capstone_support:
1534
1513
  return
1535
1514
 
1536
- for func_addr in self.kb.functions.keys():
1515
+ for func_addr in self.kb.functions:
1537
1516
  function = self.kb.functions[func_addr]
1538
1517
  if function.is_simprocedure or function.is_syscall:
1539
1518
  continue
@@ -1727,16 +1706,14 @@ class CFGBase(Analysis):
1727
1706
  if self._is_noop_block(arch_, block):
1728
1707
  # alignments
1729
1708
  return False
1730
- if (
1709
+
1710
+ # TODO: We may want to add support for filtering dummy PLT stubs for other architectures, but I haven't
1711
+ # TODO: seen any need for those.
1712
+ return not (
1731
1713
  arch_.name in {"X86", "AMD64"}
1732
1714
  and len(block.vex.instruction_addresses) == 2
1733
1715
  and block.vex.jumpkind == "Ijk_Boring"
1734
- ):
1735
- # push ordinal; jump _resolve
1736
- return False
1737
- # TODO: We may want to add support for filtering dummy PLT stubs for other architectures, but I haven't
1738
- # TODO: seen any need for those.
1739
- return True
1716
+ )
1740
1717
 
1741
1718
  to_remove = set()
1742
1719
 
@@ -1750,10 +1727,14 @@ class CFGBase(Analysis):
1750
1727
  for fn_addr in sorted_func_addrs:
1751
1728
  fn = functions.get_by_addr(fn_addr)
1752
1729
  addr = fn.addr - (fn.addr % 16)
1753
- if addr != fn.addr:
1754
- if addr in functions and functions[addr].is_plt and not _is_function_a_plt_stub(arch, fn):
1755
- to_remove.add(fn.addr)
1756
- continue
1730
+ if (
1731
+ addr != fn.addr
1732
+ and addr in functions
1733
+ and functions[addr].is_plt
1734
+ and not _is_function_a_plt_stub(arch, fn)
1735
+ ):
1736
+ to_remove.add(fn.addr)
1737
+ continue
1757
1738
 
1758
1739
  if fn.is_plt:
1759
1740
  met_plts = True
@@ -1950,7 +1931,7 @@ class CFGBase(Analysis):
1950
1931
  """
1951
1932
 
1952
1933
  addrs = sorted(
1953
- k for k in functions.keys() if not self.project.is_hooked(k) and not self.project.simos.is_syscall_addr(k)
1934
+ k for k in functions if not self.project.is_hooked(k) and not self.project.simos.is_syscall_addr(k)
1954
1935
  )
1955
1936
  functions_to_remove = set()
1956
1937
  adjusted_cfgnodes = set()
@@ -2086,7 +2067,7 @@ class CFGBase(Analysis):
2086
2067
 
2087
2068
  functions_to_remove = set()
2088
2069
 
2089
- for func_addr in functions.keys():
2070
+ for func_addr in functions:
2090
2071
  if func_addr in predetermined_function_addrs:
2091
2072
  continue
2092
2073
  if func_addr in jumptable_entries:
@@ -2131,10 +2112,7 @@ class CFGBase(Analysis):
2131
2112
  is_syscall = self.project.simos.is_syscall_addr(addr)
2132
2113
 
2133
2114
  n = self.model.get_any_node(addr, is_syscall=is_syscall)
2134
- if n is None:
2135
- node = addr
2136
- else:
2137
- node = self._to_snippet(n)
2115
+ node = addr if n is None else self._to_snippet(n)
2138
2116
 
2139
2117
  if isinstance(addr, SootAddressDescriptor):
2140
2118
  addr = addr.method
@@ -2146,22 +2124,20 @@ class CFGBase(Analysis):
2146
2124
  blockaddr_to_function[addr] = f
2147
2125
 
2148
2126
  function_is_returning = False
2149
- if addr in known_functions:
2150
- if known_functions.function(addr).returning:
2151
- f.returning = True
2152
- function_is_returning = True
2127
+ if addr in known_functions and known_functions.function(addr).returning:
2128
+ f.returning = True
2129
+ function_is_returning = True
2153
2130
 
2154
- if not function_is_returning:
2131
+ if not function_is_returning and self._updated_nonreturning_functions is not None:
2155
2132
  # We will rerun function feature analysis on this function later. Add it to
2156
2133
  # self._updated_nonreturning_functions so it can be picked up by function feature analysis later.
2157
- if self._updated_nonreturning_functions is not None:
2158
- self._updated_nonreturning_functions.add(addr)
2134
+ self._updated_nonreturning_functions.add(addr)
2159
2135
 
2160
2136
  return f
2161
2137
 
2162
2138
  def _is_tail_call_optimization(
2163
2139
  self,
2164
- g: "networkx.DiGraph[CFGNode]",
2140
+ g: networkx.DiGraph[CFGNode],
2165
2141
  src_addr,
2166
2142
  dst_addr,
2167
2143
  src_function,
@@ -2287,9 +2263,10 @@ class CFGBase(Analysis):
2287
2263
  callback(g, src, dst, data, blockaddr_to_function, known_functions, all_out_edges)
2288
2264
 
2289
2265
  jumpkind = data.get("jumpkind", "")
2290
- if not (jumpkind in ("Ijk_Call", "Ijk_Ret") or jumpkind.startswith("Ijk_Sys")):
2291
- if dst not in stack and dst not in traversed:
2292
- stack.add(dst)
2266
+ if (not (jumpkind in ("Ijk_Call", "Ijk_Ret") or jumpkind.startswith("Ijk_Sys"))) and (
2267
+ dst not in stack and dst not in traversed
2268
+ ):
2269
+ stack.add(dst)
2293
2270
 
2294
2271
  def _graph_traversal_handler(self, g, src, dst, data, blockaddr_to_function, known_functions, all_edges):
2295
2272
  """
@@ -2311,10 +2288,7 @@ class CFGBase(Analysis):
2311
2288
 
2312
2289
  if src_addr not in src_function.block_addrs_set:
2313
2290
  n = self.model.get_any_node(src_addr)
2314
- if n is None:
2315
- node = src_addr
2316
- else:
2317
- node = self._to_snippet(n)
2291
+ node = src_addr if n is None else self._to_snippet(n)
2318
2292
  self.kb.functions._add_node(src_function.addr, node)
2319
2293
 
2320
2294
  if data is None:
@@ -2325,10 +2299,7 @@ class CFGBase(Analysis):
2325
2299
 
2326
2300
  if jumpkind == "Ijk_Ret":
2327
2301
  n = self.model.get_any_node(src_addr)
2328
- if n is None:
2329
- from_node = src_addr
2330
- else:
2331
- from_node = self._to_snippet(n)
2302
+ from_node = src_addr if n is None else self._to_snippet(n)
2332
2303
  self.kb.functions._add_return_from(src_function.addr, from_node, None)
2333
2304
 
2334
2305
  if dst is None:
@@ -2356,15 +2327,12 @@ class CFGBase(Analysis):
2356
2327
  # For now, assume UnresolvedTarget returns if we're calling to it
2357
2328
 
2358
2329
  # If the function doesn't return, don't add a fakeret!
2359
- if not all_edges or (dst_function.returning is False and not dst_function.name == "UnresolvableCallTarget"):
2330
+ if not all_edges or (dst_function.returning is False and dst_function.name != "UnresolvableCallTarget"):
2360
2331
  fakeret_node = None
2361
2332
  else:
2362
2333
  fakeret_node = self._one_fakeret_node(all_edges)
2363
2334
 
2364
- if fakeret_node is None:
2365
- fakeret_snippet = None
2366
- else:
2367
- fakeret_snippet = self._to_snippet(cfg_node=fakeret_node)
2335
+ fakeret_snippet = None if fakeret_node is None else self._to_snippet(cfg_node=fakeret_node)
2368
2336
 
2369
2337
  if isinstance(dst_addr, SootAddressDescriptor):
2370
2338
  dst_addr = dst_addr.method
@@ -2407,16 +2375,10 @@ class CFGBase(Analysis):
2407
2375
  elif jumpkind in ("Ijk_Boring", "Ijk_InvalICache", "Ijk_Exception"):
2408
2376
  # convert src_addr and dst_addr to CodeNodes
2409
2377
  n = self.model.get_any_node(src_addr)
2410
- if n is None:
2411
- src_node = src_addr
2412
- else:
2413
- src_node = self._to_snippet(cfg_node=n)
2378
+ src_node = src_addr if n is None else self._to_snippet(cfg_node=n)
2414
2379
 
2415
2380
  n = self.model.get_any_node(dst_addr)
2416
- if n is None:
2417
- dst_node = dst_addr
2418
- else:
2419
- dst_node = self._to_snippet(cfg_node=n)
2381
+ dst_node = dst_addr if n is None else self._to_snippet(cfg_node=n)
2420
2382
 
2421
2383
  if self._skip_unmapped_addrs:
2422
2384
  # pre-check: if source and destination do not belong to the same section, it must be jumping to another
@@ -2425,19 +2387,18 @@ class CFGBase(Analysis):
2425
2387
  if not belong_to_same_section:
2426
2388
  _ = self._addr_to_function(dst_addr, blockaddr_to_function, known_functions)
2427
2389
 
2428
- if self._detect_tail_calls:
2429
- if self._is_tail_call_optimization(
2430
- g, src_addr, dst_addr, src_function, all_edges, known_functions, blockaddr_to_function
2431
- ):
2432
- l.debug("Possible tail-call optimization detected at function %#x.", dst_addr)
2433
- # it's (probably) a tail-call optimization. we should make the destination node a new function
2434
- # instead.
2435
- blockaddr_to_function.pop(dst_addr, None)
2436
- _ = self._addr_to_function(dst_addr, blockaddr_to_function, known_functions)
2437
- self.kb.functions._add_outside_transition_to(
2438
- src_function.addr, src_node, dst_node, to_function_addr=dst_addr
2439
- )
2440
- self._tail_calls.add(dst_addr)
2390
+ if self._detect_tail_calls and self._is_tail_call_optimization(
2391
+ g, src_addr, dst_addr, src_function, all_edges, known_functions, blockaddr_to_function
2392
+ ):
2393
+ l.debug("Possible tail-call optimization detected at function %#x.", dst_addr)
2394
+ # it's (probably) a tail-call optimization. we should make the destination node a new function
2395
+ # instead.
2396
+ blockaddr_to_function.pop(dst_addr, None)
2397
+ _ = self._addr_to_function(dst_addr, blockaddr_to_function, known_functions)
2398
+ self.kb.functions._add_outside_transition_to(
2399
+ src_function.addr, src_node, dst_node, to_function_addr=dst_addr
2400
+ )
2401
+ self._tail_calls.add(dst_addr)
2441
2402
 
2442
2403
  # is it a jump to another function?
2443
2404
  if isinstance(dst_addr, SootAddressDescriptor):
@@ -2483,16 +2444,10 @@ class CFGBase(Analysis):
2483
2444
  elif jumpkind == "Ijk_FakeRet":
2484
2445
  # convert src_addr and dst_addr to CodeNodes
2485
2446
  n = self.model.get_any_node(src_addr)
2486
- if n is None:
2487
- src_node = src_addr
2488
- else:
2489
- src_node = self._to_snippet(n)
2447
+ src_node = src_addr if n is None else self._to_snippet(n)
2490
2448
 
2491
2449
  n = self.model.get_any_node(dst_addr)
2492
- if n is None:
2493
- dst_node = dst_addr
2494
- else:
2495
- dst_node = self._to_snippet(n)
2450
+ dst_node = dst_addr if n is None else self._to_snippet(n)
2496
2451
 
2497
2452
  if dst_addr not in blockaddr_to_function:
2498
2453
  if isinstance(dst_addr, SootAddressDescriptor):
@@ -2517,11 +2472,10 @@ class CFGBase(Analysis):
2517
2472
  called_function_addr = None
2518
2473
  # Try to find the call that this fakeret goes with
2519
2474
  for _, d, e in all_edges:
2520
- if e["jumpkind"] == "Ijk_Call":
2521
- if d.addr in blockaddr_to_function:
2522
- called_function = blockaddr_to_function[d.addr]
2523
- called_function_addr = d.addr
2524
- break
2475
+ if e["jumpkind"] == "Ijk_Call" and d.addr in blockaddr_to_function:
2476
+ called_function = blockaddr_to_function[d.addr]
2477
+ called_function_addr = d.addr
2478
+ break
2525
2479
  # We may have since figured out that the called function doesn't ret.
2526
2480
  # It's important to assume that all unresolved targets do return
2527
2481
  if called_function is not None and called_function.returning is False:
@@ -2557,10 +2511,7 @@ class CFGBase(Analysis):
2557
2511
  :rtype: bool
2558
2512
  """
2559
2513
 
2560
- if arch.name == "X86":
2561
- if set(block.bytes) == {"b\x90"}:
2562
- return True
2563
- elif arch.name == "AMD64":
2514
+ if arch.name == "X86" or arch.name == "AMD64":
2564
2515
  if set(block.bytes) == {"b\x90"}:
2565
2516
  return True
2566
2517
  elif arch.name == "MIPS32":
@@ -2612,22 +2563,30 @@ class CFGBase(Analysis):
2612
2563
  # will generate such blocks when opt_level==1 and cross_insn_opt is True
2613
2564
  fallthrough_addr = block.addr + block.size
2614
2565
  next_ = block.vex.next
2615
- if isinstance(next_, pyvex.IRExpr.Const) and next_.con.value == fallthrough_addr:
2616
- if all((type(stmt) is pyvex.IRStmt.IMark) for stmt in block.vex.statements):
2617
- return True
2566
+ if (
2567
+ isinstance(next_, pyvex.IRExpr.Const)
2568
+ and next_.con.value == fallthrough_addr
2569
+ and all((type(stmt) is pyvex.IRStmt.IMark) for stmt in block.vex.statements)
2570
+ ):
2571
+ return True
2618
2572
 
2619
2573
  # the block is a noop block if it only has IMark statements and IP-setting statements that set the IP to the
2620
2574
  # next location. VEX will generate such blocks when opt_level==1 and cross_insn_opt is False
2621
2575
  ip_offset = arch.ip_offset
2622
- if all(
2623
- (type(stmt) is pyvex.IRStmt.IMark or (type(stmt) is pyvex.IRStmt.Put and stmt.offset == ip_offset))
2624
- for stmt in block.vex.statements
2576
+ if (
2577
+ all(
2578
+ (type(stmt) is pyvex.IRStmt.IMark or (type(stmt) is pyvex.IRStmt.Put and stmt.offset == ip_offset))
2579
+ for stmt in block.vex.statements
2580
+ )
2581
+ and block.vex.statements
2625
2582
  ):
2626
- if block.vex.statements:
2627
- last_stmt = block.vex.statements[-1]
2628
- if isinstance(last_stmt, pyvex.IRStmt.IMark):
2629
- if isinstance(next_, pyvex.IRExpr.Const) and next_.con.value == fallthrough_addr:
2630
- return True
2583
+ last_stmt = block.vex.statements[-1]
2584
+ if (
2585
+ isinstance(last_stmt, pyvex.IRStmt.IMark)
2586
+ and isinstance(next_, pyvex.IRExpr.Const)
2587
+ and next_.con.value == fallthrough_addr
2588
+ ):
2589
+ return True
2631
2590
  return False
2632
2591
 
2633
2592
  @staticmethod
@@ -2644,13 +2603,12 @@ class CFGBase(Analysis):
2644
2603
  if insn_name == "nop":
2645
2604
  # nops
2646
2605
  return True
2647
- elif insn_name == "lea":
2606
+ if insn_name == "lea":
2648
2607
  # lea reg, [reg + 0]
2649
2608
  op0, op1 = insn.operands
2650
- if op0.type == 1 and op1.type == 3:
2651
- # reg and mem
2652
- if op0.reg == op1.mem.base and op1.mem.index == 0 and op1.mem.disp == 0:
2653
- return True
2609
+ # reg and mem
2610
+ if op0.type == 1 and op1.type == 3 and op0.reg == op1.mem.base and op1.mem.index == 0 and op1.mem.disp == 0:
2611
+ return True
2654
2612
  elif insn_name == "mov":
2655
2613
  if len(insn.operands) > 2:
2656
2614
  # mov reg_a, imm1, shift imm2
@@ -2658,10 +2616,9 @@ class CFGBase(Analysis):
2658
2616
  return False
2659
2617
  # mov reg_a, reg_a
2660
2618
  op0, op1 = insn.operands
2661
- if op0.type == 1 and op1.type == 1:
2662
- # reg and reg
2663
- if op0.reg == op1.reg:
2664
- return True
2619
+ # reg and reg
2620
+ if op0.type == 1 and op1.type == 1 and op0.reg == op1.reg:
2621
+ return True
2665
2622
  elif insn_name in {"ud0", "ud1", "ud2"}:
2666
2623
  return True
2667
2624