angr 9.2.118__py3-none-manylinux2014_x86_64.whl → 9.2.120__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 (838) hide show
  1. angr/__init__.py +217 -2
  2. angr/__main__.py +14 -4
  3. angr/analyses/__init__.py +54 -0
  4. angr/analyses/analysis.py +47 -5
  5. angr/analyses/backward_slice.py +4 -4
  6. angr/analyses/bindiff.py +2 -2
  7. angr/analyses/callee_cleanup_finder.py +1 -1
  8. angr/analyses/calling_convention.py +21 -15
  9. angr/analyses/cdg.py +1 -1
  10. angr/analyses/cfg/__init__.py +12 -1
  11. angr/analyses/cfg/cfb.py +2 -2
  12. angr/analyses/cfg/cfg.py +1 -1
  13. angr/analyses/cfg/cfg_base.py +28 -11
  14. angr/analyses/cfg/cfg_emulated.py +18 -18
  15. angr/analyses/cfg/cfg_fast.py +136 -24
  16. angr/analyses/cfg/cfg_fast_soot.py +5 -5
  17. angr/analyses/cfg/cfg_job_base.py +3 -3
  18. angr/analyses/cfg/indirect_jump_resolvers/__init__.py +13 -0
  19. angr/analyses/cfg/indirect_jump_resolvers/amd64_pe_iat.py +1 -1
  20. angr/analyses/cfg/indirect_jump_resolvers/arm_elf_fast.py +2 -2
  21. angr/analyses/cfg/indirect_jump_resolvers/const_resolver.py +4 -4
  22. angr/analyses/cfg/indirect_jump_resolvers/jumptable.py +21 -18
  23. angr/analyses/cfg/indirect_jump_resolvers/mips_elf_fast.py +5 -5
  24. angr/analyses/cfg/indirect_jump_resolvers/resolver.py +2 -2
  25. angr/analyses/cfg/indirect_jump_resolvers/x86_pe_iat.py +1 -1
  26. angr/analyses/cfg_slice_to_sink/__init__.py +8 -0
  27. angr/analyses/class_identifier.py +2 -2
  28. angr/analyses/code_tagging.py +2 -2
  29. angr/analyses/complete_calling_conventions.py +3 -3
  30. angr/analyses/congruency_check.py +1 -2
  31. angr/analyses/data_dep/__init__.py +13 -0
  32. angr/analyses/data_dep/data_dependency_analysis.py +5 -5
  33. angr/analyses/datagraph_meta.py +1 -1
  34. angr/analyses/ddg.py +3 -3
  35. angr/analyses/decompiler/__init__.py +25 -0
  36. angr/analyses/decompiler/ail_simplifier.py +9 -9
  37. angr/analyses/decompiler/block_simplifier.py +3 -3
  38. angr/analyses/decompiler/callsite_maker.py +5 -3
  39. angr/analyses/decompiler/clinic.py +46 -36
  40. angr/analyses/decompiler/condition_processor.py +48 -21
  41. angr/analyses/decompiler/counters/__init__.py +11 -0
  42. angr/analyses/decompiler/decompiler.py +27 -10
  43. angr/analyses/decompiler/dephication/seqnode_dephication.py +19 -1
  44. angr/analyses/decompiler/jumptable_entry_condition_rewriter.py +1 -1
  45. angr/analyses/decompiler/optimization_passes/__init__.py +66 -54
  46. angr/analyses/decompiler/optimization_passes/const_derefs.py +1 -1
  47. angr/analyses/decompiler/optimization_passes/const_prop_reverter.py +3 -3
  48. angr/analyses/decompiler/optimization_passes/cross_jump_reverter.py +1 -1
  49. angr/analyses/decompiler/optimization_passes/duplication_reverter/__init__.py +3 -0
  50. angr/analyses/decompiler/optimization_passes/duplication_reverter/ail_merge_graph.py +7 -4
  51. angr/analyses/decompiler/optimization_passes/duplication_reverter/duplication_reverter.py +13 -9
  52. angr/analyses/decompiler/optimization_passes/duplication_reverter/similarity.py +1 -1
  53. angr/analyses/decompiler/optimization_passes/duplication_reverter/utils.py +1 -1
  54. angr/analyses/decompiler/optimization_passes/engine_base.py +2 -2
  55. angr/analyses/decompiler/optimization_passes/expr_op_swapper.py +2 -2
  56. angr/analyses/decompiler/optimization_passes/flip_boolean_cmp.py +4 -4
  57. angr/analyses/decompiler/optimization_passes/inlined_string_transformation_simplifier.py +19 -19
  58. angr/analyses/decompiler/optimization_passes/ite_expr_converter.py +6 -6
  59. angr/analyses/decompiler/optimization_passes/ite_region_converter.py +2 -2
  60. angr/analyses/decompiler/optimization_passes/lowered_switch_simplifier.py +7 -3
  61. angr/analyses/decompiler/optimization_passes/optimization_pass.py +34 -28
  62. angr/analyses/decompiler/optimization_passes/register_save_area_simplifier.py +2 -2
  63. angr/analyses/decompiler/optimization_passes/ret_addr_save_simplifier.py +1 -1
  64. angr/analyses/decompiler/optimization_passes/ret_deduplicator.py +3 -3
  65. angr/analyses/decompiler/optimization_passes/return_duplicator_base.py +5 -5
  66. angr/analyses/decompiler/optimization_passes/return_duplicator_high.py +1 -1
  67. angr/analyses/decompiler/peephole_optimizations/__init__.py +61 -19
  68. angr/analyses/decompiler/peephole_optimizations/simplify_pc_relative_loads.py +1 -1
  69. angr/analyses/decompiler/presets/__init__.py +20 -0
  70. angr/analyses/decompiler/presets/basic.py +30 -0
  71. angr/analyses/decompiler/presets/fast.py +54 -0
  72. angr/analyses/decompiler/presets/full.py +64 -0
  73. angr/analyses/decompiler/presets/preset.py +37 -0
  74. angr/analyses/decompiler/region_identifier.py +21 -7
  75. angr/analyses/decompiler/region_simplifiers/__init__.py +3 -0
  76. angr/analyses/decompiler/region_simplifiers/cascading_cond_transformer.py +3 -3
  77. angr/analyses/decompiler/region_simplifiers/cascading_ifs.py +3 -3
  78. angr/analyses/decompiler/region_simplifiers/expr_folding.py +2 -2
  79. angr/analyses/decompiler/region_simplifiers/goto.py +3 -3
  80. angr/analyses/decompiler/region_simplifiers/if_.py +2 -2
  81. angr/analyses/decompiler/region_simplifiers/ifelse.py +4 -4
  82. angr/analyses/decompiler/region_simplifiers/loop.py +4 -4
  83. angr/analyses/decompiler/region_simplifiers/node_address_finder.py +1 -1
  84. angr/analyses/decompiler/region_simplifiers/region_simplifier.py +6 -6
  85. angr/analyses/decompiler/region_simplifiers/switch_cluster_simplifier.py +12 -5
  86. angr/analyses/decompiler/region_simplifiers/switch_expr_simplifier.py +3 -3
  87. angr/analyses/decompiler/sequence_walker.py +11 -12
  88. angr/analyses/decompiler/structured_codegen/__init__.py +14 -0
  89. angr/analyses/decompiler/structured_codegen/base.py +1 -1
  90. angr/analyses/decompiler/structured_codegen/c.py +22 -15
  91. angr/analyses/decompiler/structured_codegen/dwarf_import.py +2 -2
  92. angr/analyses/decompiler/structuring/__init__.py +11 -1
  93. angr/analyses/decompiler/structuring/dream.py +16 -15
  94. angr/analyses/decompiler/structuring/phoenix.py +9 -9
  95. angr/analyses/decompiler/structuring/recursive_structurer.py +7 -7
  96. angr/analyses/decompiler/structuring/sailr.py +2 -2
  97. angr/analyses/decompiler/structuring/structurer_base.py +9 -4
  98. angr/analyses/decompiler/structuring/structurer_nodes.py +18 -9
  99. angr/analyses/decompiler/utils.py +4 -2
  100. angr/analyses/disassembly.py +6 -6
  101. angr/analyses/disassembly_utils.py +1 -1
  102. angr/analyses/dominance_frontier.py +1 -1
  103. angr/analyses/find_objects_static.py +5 -5
  104. angr/analyses/flirt.py +3 -3
  105. angr/analyses/forward_analysis/__init__.py +9 -0
  106. angr/analyses/forward_analysis/forward_analysis.py +4 -4
  107. angr/analyses/forward_analysis/job_info.py +1 -1
  108. angr/analyses/forward_analysis/visitors/__init__.py +9 -0
  109. angr/analyses/forward_analysis/visitors/graph.py +2 -2
  110. angr/analyses/identifier/__init__.py +3 -0
  111. angr/analyses/identifier/custom_callable.py +2 -3
  112. angr/analyses/identifier/errors.py +1 -1
  113. angr/analyses/identifier/functions/__init__.py +4 -4
  114. angr/analyses/identifier/functions/atoi.py +1 -1
  115. angr/analyses/identifier/functions/based_atoi.py +1 -1
  116. angr/analyses/identifier/functions/fdprintf.py +1 -1
  117. angr/analyses/identifier/functions/free.py +2 -2
  118. angr/analyses/identifier/functions/int2str.py +1 -1
  119. angr/analyses/identifier/functions/malloc.py +2 -2
  120. angr/analyses/identifier/functions/memcmp.py +1 -1
  121. angr/analyses/identifier/functions/memcpy.py +3 -3
  122. angr/analyses/identifier/functions/memset.py +1 -1
  123. angr/analyses/identifier/functions/printf.py +1 -1
  124. angr/analyses/identifier/functions/recv_until.py +2 -2
  125. angr/analyses/identifier/functions/skip_calloc.py +2 -2
  126. angr/analyses/identifier/functions/skip_realloc.py +2 -2
  127. angr/analyses/identifier/functions/skip_recv_n.py +1 -1
  128. angr/analyses/identifier/functions/snprintf.py +1 -1
  129. angr/analyses/identifier/functions/sprintf.py +1 -1
  130. angr/analyses/identifier/functions/strcmp.py +1 -1
  131. angr/analyses/identifier/functions/strcpy.py +1 -1
  132. angr/analyses/identifier/functions/strlen.py +1 -1
  133. angr/analyses/identifier/functions/strncmp.py +1 -1
  134. angr/analyses/identifier/functions/strncpy.py +1 -1
  135. angr/analyses/identifier/functions/strtol.py +1 -1
  136. angr/analyses/identifier/identify.py +3 -3
  137. angr/analyses/identifier/runner.py +6 -6
  138. angr/analyses/init_finder.py +1 -1
  139. angr/analyses/loop_analysis.py +2 -2
  140. angr/analyses/propagator/__init__.py +3 -0
  141. angr/analyses/propagator/engine_ail.py +6 -5
  142. angr/analyses/propagator/engine_base.py +2 -2
  143. angr/analyses/propagator/engine_vex.py +2 -2
  144. angr/analyses/propagator/outdated_definition_walker.py +3 -3
  145. angr/analyses/propagator/propagator.py +3 -3
  146. angr/analyses/propagator/top_checker_mixin.py +1 -1
  147. angr/analyses/proximity_graph.py +3 -3
  148. angr/analyses/reaching_definitions/__init__.py +6 -6
  149. angr/analyses/reaching_definitions/dep_graph.py +5 -5
  150. angr/analyses/reaching_definitions/engine_ail.py +8 -8
  151. angr/analyses/reaching_definitions/engine_vex.py +18 -13
  152. angr/analyses/reaching_definitions/function_handler.py +6 -2
  153. angr/analyses/reaching_definitions/heap_allocator.py +3 -3
  154. angr/analyses/reaching_definitions/rd_state.py +4 -10
  155. angr/analyses/reaching_definitions/reaching_definitions.py +11 -11
  156. angr/analyses/reaching_definitions/subject.py +3 -3
  157. angr/analyses/reassembler.py +5 -5
  158. angr/analyses/{s_propagator/s_propagator.py → s_propagator.py} +1 -1
  159. angr/analyses/s_reaching_definitions/__init__.py +11 -1
  160. angr/analyses/s_reaching_definitions/s_rda_model.py +117 -0
  161. angr/analyses/s_reaching_definitions/s_rda_view.py +213 -0
  162. angr/analyses/s_reaching_definitions/s_reaching_definitions.py +159 -0
  163. angr/analyses/stack_pointer_tracker.py +34 -16
  164. angr/analyses/static_hooker.py +2 -2
  165. angr/analyses/typehoon/__init__.py +3 -0
  166. angr/analyses/typehoon/lifter.py +1 -1
  167. angr/analyses/typehoon/translator.py +21 -4
  168. angr/analyses/typehoon/typeconsts.py +8 -0
  169. angr/analyses/typehoon/typehoon.py +3 -3
  170. angr/analyses/variable_recovery/__init__.py +6 -0
  171. angr/analyses/variable_recovery/engine_ail.py +5 -5
  172. angr/analyses/variable_recovery/engine_base.py +7 -7
  173. angr/analyses/variable_recovery/engine_vex.py +14 -17
  174. angr/analyses/variable_recovery/variable_recovery.py +5 -5
  175. angr/analyses/variable_recovery/variable_recovery_base.py +7 -7
  176. angr/analyses/variable_recovery/variable_recovery_fast.py +7 -7
  177. angr/analyses/veritesting.py +8 -8
  178. angr/analyses/vfg.py +13 -13
  179. angr/analyses/vsa_ddg.py +3 -3
  180. angr/analyses/vtable.py +1 -1
  181. angr/analyses/xrefs.py +3 -3
  182. angr/angrdb/__init__.py +3 -0
  183. angr/angrdb/db.py +2 -2
  184. angr/angrdb/serializers/__init__.py +7 -0
  185. angr/angrdb/serializers/cfg_model.py +2 -2
  186. angr/angrdb/serializers/comments.py +2 -2
  187. angr/angrdb/serializers/funcs.py +2 -2
  188. angr/angrdb/serializers/kb.py +2 -2
  189. angr/angrdb/serializers/labels.py +2 -2
  190. angr/angrdb/serializers/loader.py +2 -2
  191. angr/angrdb/serializers/structured_code.py +4 -4
  192. angr/angrdb/serializers/variables.py +3 -3
  193. angr/angrdb/serializers/xrefs.py +2 -2
  194. angr/calling_conventions.py +69 -24
  195. angr/concretization_strategies/__init__.py +17 -0
  196. angr/concretization_strategies/max.py +1 -1
  197. angr/concretization_strategies/norepeats.py +3 -3
  198. angr/concretization_strategies/norepeats_range.py +1 -1
  199. angr/distributed/__init__.py +6 -1
  200. angr/distributed/server.py +0 -1
  201. angr/distributed/worker.py +6 -4
  202. angr/engines/__init__.py +25 -0
  203. angr/engines/concrete.py +2 -3
  204. angr/engines/engine.py +3 -3
  205. angr/engines/failure.py +2 -2
  206. angr/engines/light/__init__.py +12 -0
  207. angr/engines/light/data.py +1 -1
  208. angr/engines/light/engine.py +12 -17
  209. angr/engines/pcode/__init__.py +7 -1
  210. angr/engines/pcode/behavior.py +1 -1
  211. angr/engines/pcode/cc.py +1 -1
  212. angr/engines/pcode/emulate.py +4 -4
  213. angr/engines/pcode/engine.py +5 -5
  214. angr/engines/pcode/lifter.py +7 -7
  215. angr/engines/procedure.py +3 -3
  216. angr/engines/soot/__init__.py +3 -0
  217. angr/engines/soot/engine.py +13 -13
  218. angr/engines/soot/expressions/__init__.py +33 -0
  219. angr/engines/soot/expressions/arrayref.py +1 -1
  220. angr/engines/soot/expressions/base.py +1 -1
  221. angr/engines/soot/expressions/cast.py +1 -1
  222. angr/engines/soot/expressions/condition.py +2 -2
  223. angr/engines/soot/expressions/constants.py +1 -1
  224. angr/engines/soot/expressions/invoke.py +2 -2
  225. angr/engines/soot/expressions/new.py +1 -1
  226. angr/engines/soot/expressions/newArray.py +1 -1
  227. angr/engines/soot/expressions/newMultiArray.py +1 -1
  228. angr/engines/soot/statements/__init__.py +16 -0
  229. angr/engines/soot/statements/assign.py +1 -1
  230. angr/engines/soot/statements/base.py +3 -3
  231. angr/engines/soot/statements/goto.py +1 -1
  232. angr/engines/soot/statements/if_.py +1 -1
  233. angr/engines/soot/statements/throw.py +1 -1
  234. angr/engines/soot/values/__init__.py +14 -0
  235. angr/engines/soot/values/arrayref.py +1 -1
  236. angr/engines/soot/values/instancefieldref.py +1 -1
  237. angr/engines/soot/values/staticfieldref.py +1 -1
  238. angr/engines/soot/values/thisref.py +2 -2
  239. angr/engines/successors.py +8 -8
  240. angr/engines/syscall.py +1 -1
  241. angr/engines/unicorn.py +13 -13
  242. angr/engines/vex/__init__.py +18 -3
  243. angr/engines/vex/claripy/__init__.py +3 -0
  244. angr/engines/vex/claripy/ccall.py +1 -2
  245. angr/engines/vex/claripy/datalayer.py +3 -3
  246. angr/engines/vex/heavy/__init__.py +11 -1
  247. angr/engines/vex/heavy/heavy.py +8 -8
  248. angr/engines/vex/heavy/inspect.py +2 -2
  249. angr/engines/vex/heavy/resilience.py +2 -2
  250. angr/engines/vex/heavy/super_fastpath.py +3 -3
  251. angr/engines/vex/lifter.py +5 -5
  252. angr/engines/vex/light/__init__.py +7 -0
  253. angr/engines/vex/light/light.py +2 -2
  254. angr/engines/vex/light/slicing.py +1 -1
  255. angr/errors.py +4 -4
  256. angr/exploration_techniques/__init__.py +0 -1
  257. angr/exploration_techniques/bucketizer.py +9 -10
  258. angr/exploration_techniques/common.py +2 -2
  259. angr/exploration_techniques/director.py +4 -4
  260. angr/exploration_techniques/driller_core.py +2 -3
  261. angr/exploration_techniques/explorer.py +3 -3
  262. angr/exploration_techniques/loop_seer.py +3 -3
  263. angr/exploration_techniques/oppologist.py +3 -3
  264. angr/exploration_techniques/slicecutor.py +1 -1
  265. angr/exploration_techniques/spiller.py +1 -1
  266. angr/exploration_techniques/suggestions.py +6 -6
  267. angr/exploration_techniques/symbion.py +0 -1
  268. angr/exploration_techniques/threading.py +2 -2
  269. angr/exploration_techniques/tracer.py +3 -3
  270. angr/exploration_techniques/veritesting.py +1 -1
  271. angr/flirt/__init__.py +0 -1
  272. angr/{knowledge_base/knowledge_base.py → knowledge_base.py} +13 -15
  273. angr/knowledge_plugins/__init__.py +23 -1
  274. angr/knowledge_plugins/callsite_prototypes.py +2 -2
  275. angr/knowledge_plugins/cfg/cfg_manager.py +1 -1
  276. angr/knowledge_plugins/cfg/cfg_model.py +8 -7
  277. angr/knowledge_plugins/cfg/indirect_jump.py +1 -1
  278. angr/knowledge_plugins/cfg/memory_data.py +3 -2
  279. angr/knowledge_plugins/debug_variables.py +2 -2
  280. angr/knowledge_plugins/functions/__init__.py +6 -0
  281. angr/knowledge_plugins/functions/function.py +21 -16
  282. angr/knowledge_plugins/functions/function_manager.py +2 -2
  283. angr/knowledge_plugins/functions/function_parser.py +3 -3
  284. angr/knowledge_plugins/functions/soot_function.py +2 -2
  285. angr/knowledge_plugins/key_definitions/atoms.py +2 -2
  286. angr/knowledge_plugins/key_definitions/definition.py +3 -3
  287. angr/knowledge_plugins/key_definitions/key_definition_manager.py +2 -2
  288. angr/knowledge_plugins/key_definitions/uses.py +2 -2
  289. angr/knowledge_plugins/propagations/__init__.py +7 -0
  290. angr/knowledge_plugins/propagations/prop_value.py +1 -1
  291. angr/knowledge_plugins/{structured_code/manager.py → structured_code.py} +6 -3
  292. angr/knowledge_plugins/types.py +1 -1
  293. angr/knowledge_plugins/variables/__init__.py +6 -0
  294. angr/knowledge_plugins/variables/variable_access.py +3 -3
  295. angr/knowledge_plugins/variables/variable_manager.py +7 -7
  296. angr/knowledge_plugins/xrefs/__init__.py +9 -1
  297. angr/knowledge_plugins/xrefs/xref.py +5 -5
  298. angr/knowledge_plugins/xrefs/xref_manager.py +3 -3
  299. angr/misc/__init__.py +12 -2
  300. angr/misc/loggers.py +2 -2
  301. angr/misc/telemetry.py +54 -0
  302. angr/procedures/__init__.py +9 -0
  303. angr/procedures/cgc/receive.py +2 -2
  304. angr/procedures/cgc/transmit.py +1 -1
  305. angr/procedures/definitions/__init__.py +8 -8
  306. angr/procedures/definitions/cgc.py +1 -1
  307. angr/procedures/definitions/glibc.py +2 -15
  308. angr/procedures/definitions/gnulib.py +2 -6
  309. angr/procedures/definitions/libstdcpp.py +2 -2
  310. angr/procedures/definitions/linux_kernel.py +2 -3
  311. angr/procedures/definitions/linux_loader.py +1 -1
  312. angr/procedures/definitions/msvcr.py +2 -2
  313. angr/procedures/definitions/wdk_api-ms-win-dx-d3dkmt-l1-1-4.py +3 -18
  314. angr/procedures/definitions/wdk_api-ms-win-dx-d3dkmt-l1-1-6.py +3 -18
  315. angr/procedures/definitions/wdk_clfs.py +3 -18
  316. angr/procedures/definitions/wdk_fltmgr.py +3 -18
  317. angr/procedures/definitions/wdk_fwpkclnt.py +3 -18
  318. angr/procedures/definitions/wdk_fwpuclnt.py +3 -18
  319. angr/procedures/definitions/wdk_gdi32.py +3 -18
  320. angr/procedures/definitions/wdk_hal.py +3 -18
  321. angr/procedures/definitions/wdk_ksecdd.py +3 -18
  322. angr/procedures/definitions/wdk_ndis.py +3 -18
  323. angr/procedures/definitions/wdk_ntoskrnl.py +3 -18
  324. angr/procedures/definitions/wdk_offreg.py +3 -18
  325. angr/procedures/definitions/wdk_pshed.py +3 -18
  326. angr/procedures/definitions/wdk_secur32.py +3 -18
  327. angr/procedures/definitions/wdk_vhfum.py +3 -18
  328. angr/procedures/definitions/win32_aclui.py +3 -18
  329. angr/procedures/definitions/win32_activeds.py +3 -18
  330. angr/procedures/definitions/win32_advapi32.py +3 -18
  331. angr/procedures/definitions/win32_advpack.py +3 -18
  332. angr/procedures/definitions/win32_amsi.py +3 -18
  333. angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-1.py +3 -18
  334. angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-3.py +3 -18
  335. angr/procedures/definitions/win32_api-ms-win-appmodel-runtime-l1-1-6.py +3 -18
  336. angr/procedures/definitions/win32_api-ms-win-core-apiquery-l2-1-0.py +3 -18
  337. angr/procedures/definitions/win32_api-ms-win-core-backgroundtask-l1-1-0.py +3 -18
  338. angr/procedures/definitions/win32_api-ms-win-core-comm-l1-1-1.py +3 -18
  339. angr/procedures/definitions/win32_api-ms-win-core-comm-l1-1-2.py +3 -18
  340. angr/procedures/definitions/win32_api-ms-win-core-enclave-l1-1-1.py +3 -18
  341. angr/procedures/definitions/win32_api-ms-win-core-errorhandling-l1-1-3.py +3 -18
  342. angr/procedures/definitions/win32_api-ms-win-core-featurestaging-l1-1-0.py +3 -18
  343. angr/procedures/definitions/win32_api-ms-win-core-featurestaging-l1-1-1.py +3 -18
  344. angr/procedures/definitions/win32_api-ms-win-core-file-fromapp-l1-1-0.py +3 -18
  345. angr/procedures/definitions/win32_api-ms-win-core-handle-l1-1-0.py +3 -18
  346. angr/procedures/definitions/win32_api-ms-win-core-ioring-l1-1-0.py +3 -18
  347. angr/procedures/definitions/win32_api-ms-win-core-marshal-l1-1-0.py +3 -18
  348. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-3.py +3 -18
  349. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-4.py +3 -18
  350. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-5.py +3 -18
  351. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-6.py +3 -18
  352. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-7.py +3 -18
  353. angr/procedures/definitions/win32_api-ms-win-core-memory-l1-1-8.py +3 -18
  354. angr/procedures/definitions/win32_api-ms-win-core-path-l1-1-0.py +3 -18
  355. angr/procedures/definitions/win32_api-ms-win-core-psm-appnotify-l1-1-0.py +3 -18
  356. angr/procedures/definitions/win32_api-ms-win-core-psm-appnotify-l1-1-1.py +3 -18
  357. angr/procedures/definitions/win32_api-ms-win-core-realtime-l1-1-1.py +3 -18
  358. angr/procedures/definitions/win32_api-ms-win-core-realtime-l1-1-2.py +3 -18
  359. angr/procedures/definitions/win32_api-ms-win-core-slapi-l1-1-0.py +3 -18
  360. angr/procedures/definitions/win32_api-ms-win-core-state-helpers-l1-1-0.py +3 -18
  361. angr/procedures/definitions/win32_api-ms-win-core-synch-l1-2-0.py +3 -18
  362. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-0.py +3 -18
  363. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-3.py +3 -18
  364. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-4.py +3 -18
  365. angr/procedures/definitions/win32_api-ms-win-core-sysinfo-l1-2-6.py +3 -18
  366. angr/procedures/definitions/win32_api-ms-win-core-util-l1-1-1.py +3 -18
  367. angr/procedures/definitions/win32_api-ms-win-core-winrt-error-l1-1-0.py +3 -3
  368. angr/procedures/definitions/win32_api-ms-win-core-winrt-error-l1-1-1.py +3 -3
  369. angr/procedures/definitions/win32_api-ms-win-core-winrt-l1-1-0.py +3 -3
  370. angr/procedures/definitions/win32_api-ms-win-core-winrt-registration-l1-1-0.py +3 -3
  371. angr/procedures/definitions/win32_api-ms-win-core-winrt-robuffer-l1-1-0.py +3 -3
  372. angr/procedures/definitions/win32_api-ms-win-core-winrt-roparameterizediid-l1-1-0.py +3 -3
  373. angr/procedures/definitions/win32_api-ms-win-core-winrt-string-l1-1-0.py +3 -3
  374. angr/procedures/definitions/win32_api-ms-win-core-winrt-string-l1-1-1.py +3 -3
  375. angr/procedures/definitions/win32_api-ms-win-core-wow64-l1-1-1.py +3 -18
  376. angr/procedures/definitions/win32_api-ms-win-devices-query-l1-1-0.py +3 -18
  377. angr/procedures/definitions/win32_api-ms-win-devices-query-l1-1-1.py +3 -18
  378. angr/procedures/definitions/win32_api-ms-win-dx-d3dkmt-l1-1-0.py +3 -18
  379. angr/procedures/definitions/win32_api-ms-win-gaming-deviceinformation-l1-1-0.py +3 -18
  380. angr/procedures/definitions/win32_api-ms-win-gaming-expandedresources-l1-1-0.py +3 -18
  381. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-0.py +3 -18
  382. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-1.py +3 -18
  383. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-2.py +3 -18
  384. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-3.py +3 -18
  385. angr/procedures/definitions/win32_api-ms-win-gaming-tcui-l1-1-4.py +3 -18
  386. angr/procedures/definitions/win32_api-ms-win-mm-misc-l1-1-1.py +3 -18
  387. angr/procedures/definitions/win32_api-ms-win-net-isolation-l1-1-0.py +3 -18
  388. angr/procedures/definitions/win32_api-ms-win-security-base-l1-2-2.py +3 -18
  389. angr/procedures/definitions/win32_api-ms-win-security-isolatedcontainer-l1-1-0.py +3 -18
  390. angr/procedures/definitions/win32_api-ms-win-security-isolatedcontainer-l1-1-1.py +3 -18
  391. angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-3.py +3 -18
  392. angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-4.py +3 -18
  393. angr/procedures/definitions/win32_api-ms-win-service-core-l1-1-5.py +3 -18
  394. angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-0.py +3 -18
  395. angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-1.py +3 -18
  396. angr/procedures/definitions/win32_api-ms-win-shcore-scaling-l1-1-2.py +3 -18
  397. angr/procedures/definitions/win32_api-ms-win-shcore-stream-winrt-l1-1-0.py +3 -3
  398. angr/procedures/definitions/win32_api-ms-win-wsl-api-l1-1-0.py +3 -18
  399. angr/procedures/definitions/win32_apphelp.py +3 -18
  400. angr/procedures/definitions/win32_authz.py +3 -18
  401. angr/procedures/definitions/win32_avicap32.py +3 -18
  402. angr/procedures/definitions/win32_avifil32.py +3 -18
  403. angr/procedures/definitions/win32_avrt.py +3 -18
  404. angr/procedures/definitions/win32_bcp47mrm.py +3 -18
  405. angr/procedures/definitions/win32_bcrypt.py +3 -18
  406. angr/procedures/definitions/win32_bcryptprimitives.py +3 -18
  407. angr/procedures/definitions/win32_bluetoothapis.py +3 -18
  408. angr/procedures/definitions/win32_bthprops.py +3 -3
  409. angr/procedures/definitions/win32_bthprops_cpl.py +3 -18
  410. angr/procedures/definitions/win32_cabinet.py +3 -18
  411. angr/procedures/definitions/win32_certadm.py +3 -18
  412. angr/procedures/definitions/win32_certpoleng.py +3 -18
  413. angr/procedures/definitions/win32_cfgmgr32.py +3 -18
  414. angr/procedures/definitions/win32_chakra.py +3 -18
  415. angr/procedures/definitions/win32_cldapi.py +3 -18
  416. angr/procedures/definitions/win32_clfsw32.py +3 -18
  417. angr/procedures/definitions/win32_clusapi.py +3 -18
  418. angr/procedures/definitions/win32_comctl32.py +3 -18
  419. angr/procedures/definitions/win32_comdlg32.py +3 -18
  420. angr/procedures/definitions/win32_compstui.py +3 -18
  421. angr/procedures/definitions/win32_computecore.py +3 -18
  422. angr/procedures/definitions/win32_computenetwork.py +3 -18
  423. angr/procedures/definitions/win32_computestorage.py +3 -18
  424. angr/procedures/definitions/win32_comsvcs.py +3 -18
  425. angr/procedures/definitions/win32_coremessaging.py +3 -3
  426. angr/procedures/definitions/win32_credui.py +3 -18
  427. angr/procedures/definitions/win32_crypt32.py +3 -18
  428. angr/procedures/definitions/win32_cryptnet.py +3 -18
  429. angr/procedures/definitions/win32_cryptui.py +3 -18
  430. angr/procedures/definitions/win32_cryptxml.py +3 -18
  431. angr/procedures/definitions/win32_cscapi.py +3 -18
  432. angr/procedures/definitions/win32_d2d1.py +3 -18
  433. angr/procedures/definitions/win32_d3d10.py +3 -18
  434. angr/procedures/definitions/win32_d3d10_1.py +3 -18
  435. angr/procedures/definitions/win32_d3d11.py +3 -18
  436. angr/procedures/definitions/win32_d3d12.py +3 -18
  437. angr/procedures/definitions/win32_d3d9.py +3 -18
  438. angr/procedures/definitions/win32_d3dcompiler_47.py +3 -18
  439. angr/procedures/definitions/win32_d3dcsx.py +3 -18
  440. angr/procedures/definitions/win32_davclnt.py +3 -18
  441. angr/procedures/definitions/win32_dbgeng.py +3 -18
  442. angr/procedures/definitions/win32_dbghelp.py +3 -18
  443. angr/procedures/definitions/win32_dbgmodel.py +3 -18
  444. angr/procedures/definitions/win32_dciman32.py +3 -18
  445. angr/procedures/definitions/win32_dcomp.py +3 -18
  446. angr/procedures/definitions/win32_ddraw.py +3 -18
  447. angr/procedures/definitions/win32_deviceaccess.py +3 -18
  448. angr/procedures/definitions/win32_dflayout.py +3 -18
  449. angr/procedures/definitions/win32_dhcpcsvc.py +3 -18
  450. angr/procedures/definitions/win32_dhcpcsvc6.py +3 -18
  451. angr/procedures/definitions/win32_dhcpsapi.py +3 -18
  452. angr/procedures/definitions/win32_diagnosticdataquery.py +3 -18
  453. angr/procedures/definitions/win32_dinput8.py +3 -18
  454. angr/procedures/definitions/win32_directml.py +3 -18
  455. angr/procedures/definitions/win32_dmprocessxmlfiltered.py +3 -18
  456. angr/procedures/definitions/win32_dnsapi.py +3 -18
  457. angr/procedures/definitions/win32_drt.py +3 -18
  458. angr/procedures/definitions/win32_drtprov.py +3 -18
  459. angr/procedures/definitions/win32_drttransport.py +3 -18
  460. angr/procedures/definitions/win32_dsound.py +3 -18
  461. angr/procedures/definitions/win32_dsparse.py +3 -18
  462. angr/procedures/definitions/win32_dsprop.py +3 -18
  463. angr/procedures/definitions/win32_dssec.py +3 -18
  464. angr/procedures/definitions/win32_dsuiext.py +3 -18
  465. angr/procedures/definitions/win32_dwmapi.py +3 -18
  466. angr/procedures/definitions/win32_dwrite.py +3 -18
  467. angr/procedures/definitions/win32_dxcompiler.py +3 -18
  468. angr/procedures/definitions/win32_dxcore.py +3 -18
  469. angr/procedures/definitions/win32_dxgi.py +3 -18
  470. angr/procedures/definitions/win32_dxva2.py +3 -18
  471. angr/procedures/definitions/win32_eappcfg.py +3 -18
  472. angr/procedures/definitions/win32_eappprxy.py +3 -18
  473. angr/procedures/definitions/win32_efswrt.py +3 -18
  474. angr/procedures/definitions/win32_elscore.py +3 -18
  475. angr/procedures/definitions/win32_esent.py +3 -18
  476. angr/procedures/definitions/win32_evr.py +3 -18
  477. angr/procedures/definitions/win32_faultrep.py +3 -18
  478. angr/procedures/definitions/win32_fhsvcctl.py +3 -18
  479. angr/procedures/definitions/win32_firewallapi.py +3 -18
  480. angr/procedures/definitions/win32_fltlib.py +3 -18
  481. angr/procedures/definitions/win32_fontsub.py +3 -18
  482. angr/procedures/definitions/win32_forceinline.py +3 -18
  483. angr/procedures/definitions/win32_fwpuclnt.py +3 -18
  484. angr/procedures/definitions/win32_fxsutility.py +3 -18
  485. angr/procedures/definitions/win32_gdi32.py +3 -18
  486. angr/procedures/definitions/win32_gdiplus.py +3 -18
  487. angr/procedures/definitions/win32_glu32.py +3 -18
  488. angr/procedures/definitions/win32_gpedit.py +3 -18
  489. angr/procedures/definitions/win32_hhctrl_ocx.py +3 -18
  490. angr/procedures/definitions/win32_hid.py +3 -18
  491. angr/procedures/definitions/win32_hlink.py +3 -18
  492. angr/procedures/definitions/win32_hrtfapo.py +3 -18
  493. angr/procedures/definitions/win32_httpapi.py +3 -18
  494. angr/procedures/definitions/win32_icm32.py +3 -18
  495. angr/procedures/definitions/win32_icmui.py +3 -18
  496. angr/procedures/definitions/win32_icu.py +3 -18
  497. angr/procedures/definitions/win32_ieframe.py +3 -18
  498. angr/procedures/definitions/win32_imagehlp.py +3 -18
  499. angr/procedures/definitions/win32_imgutil.py +3 -18
  500. angr/procedures/definitions/win32_imm32.py +3 -18
  501. angr/procedures/definitions/win32_infocardapi.py +3 -18
  502. angr/procedures/definitions/win32_inkobjcore.py +3 -18
  503. angr/procedures/definitions/win32_iphlpapi.py +3 -18
  504. angr/procedures/definitions/win32_iscsidsc.py +3 -18
  505. angr/procedures/definitions/win32_isolatedwindowsenvironmentutils.py +3 -18
  506. angr/procedures/definitions/win32_kernel32.py +3 -18
  507. angr/procedures/definitions/win32_kernelbase.py +3 -18
  508. angr/procedures/definitions/win32_keycredmgr.py +3 -18
  509. angr/procedures/definitions/win32_ksproxy_ax.py +3 -18
  510. angr/procedures/definitions/win32_ksuser.py +3 -18
  511. angr/procedures/definitions/win32_ktmw32.py +3 -18
  512. angr/procedures/definitions/win32_licenseprotection.py +3 -18
  513. angr/procedures/definitions/win32_loadperf.py +3 -18
  514. angr/procedures/definitions/win32_magnification.py +3 -18
  515. angr/procedures/definitions/win32_mapi32.py +3 -18
  516. angr/procedures/definitions/win32_mdmlocalmanagement.py +3 -18
  517. angr/procedures/definitions/win32_mdmregistration.py +3 -18
  518. angr/procedures/definitions/win32_mf.py +3 -18
  519. angr/procedures/definitions/win32_mfcore.py +3 -18
  520. angr/procedures/definitions/win32_mfplat.py +3 -18
  521. angr/procedures/definitions/win32_mfplay.py +3 -18
  522. angr/procedures/definitions/win32_mfreadwrite.py +3 -18
  523. angr/procedures/definitions/win32_mfsensorgroup.py +3 -18
  524. angr/procedures/definitions/win32_mfsrcsnk.py +3 -18
  525. angr/procedures/definitions/win32_mgmtapi.py +3 -18
  526. angr/procedures/definitions/win32_mi.py +3 -18
  527. angr/procedures/definitions/win32_mmdevapi.py +3 -18
  528. angr/procedures/definitions/win32_mpr.py +3 -18
  529. angr/procedures/definitions/win32_mprapi.py +3 -18
  530. angr/procedures/definitions/win32_mqrt.py +3 -18
  531. angr/procedures/definitions/win32_mrmsupport.py +3 -18
  532. angr/procedures/definitions/win32_msacm32.py +3 -18
  533. angr/procedures/definitions/win32_msajapi.py +3 -18
  534. angr/procedures/definitions/win32_mscms.py +3 -18
  535. angr/procedures/definitions/win32_mscoree.py +3 -18
  536. angr/procedures/definitions/win32_msctfmonitor.py +3 -18
  537. angr/procedures/definitions/win32_msdelta.py +3 -18
  538. angr/procedures/definitions/win32_msdmo.py +3 -18
  539. angr/procedures/definitions/win32_msdrm.py +3 -18
  540. angr/procedures/definitions/win32_msi.py +3 -18
  541. angr/procedures/definitions/win32_msimg32.py +3 -18
  542. angr/procedures/definitions/win32_mspatcha.py +3 -18
  543. angr/procedures/definitions/win32_mspatchc.py +3 -18
  544. angr/procedures/definitions/win32_msports.py +3 -18
  545. angr/procedures/definitions/win32_msrating.py +3 -18
  546. angr/procedures/definitions/win32_mssign32.py +3 -18
  547. angr/procedures/definitions/win32_mstask.py +3 -18
  548. angr/procedures/definitions/win32_msvfw32.py +3 -18
  549. angr/procedures/definitions/win32_mswsock.py +3 -18
  550. angr/procedures/definitions/win32_mtxdm.py +3 -18
  551. angr/procedures/definitions/win32_ncrypt.py +3 -18
  552. angr/procedures/definitions/win32_ndfapi.py +3 -18
  553. angr/procedures/definitions/win32_netapi32.py +3 -18
  554. angr/procedures/definitions/win32_netsh.py +3 -18
  555. angr/procedures/definitions/win32_netshell.py +3 -18
  556. angr/procedures/definitions/win32_newdev.py +3 -18
  557. angr/procedures/definitions/win32_ninput.py +3 -18
  558. angr/procedures/definitions/win32_normaliz.py +3 -18
  559. angr/procedures/definitions/win32_ntdll.py +3 -18
  560. angr/procedures/definitions/win32_ntdllk.py +3 -18
  561. angr/procedures/definitions/win32_ntdsapi.py +3 -18
  562. angr/procedures/definitions/win32_ntlanman.py +3 -18
  563. angr/procedures/definitions/win32_odbc32.py +3 -18
  564. angr/procedures/definitions/win32_odbcbcp.py +3 -18
  565. angr/procedures/definitions/win32_ole32.py +3 -18
  566. angr/procedures/definitions/win32_oleacc.py +3 -18
  567. angr/procedures/definitions/win32_oleaut32.py +3 -18
  568. angr/procedures/definitions/win32_oledlg.py +3 -18
  569. angr/procedures/definitions/win32_ondemandconnroutehelper.py +3 -18
  570. angr/procedures/definitions/win32_opengl32.py +3 -18
  571. angr/procedures/definitions/win32_opmxbox.py +3 -18
  572. angr/procedures/definitions/win32_p2p.py +3 -18
  573. angr/procedures/definitions/win32_p2pgraph.py +3 -18
  574. angr/procedures/definitions/win32_pdh.py +3 -18
  575. angr/procedures/definitions/win32_peerdist.py +3 -18
  576. angr/procedures/definitions/win32_powrprof.py +3 -18
  577. angr/procedures/definitions/win32_prntvpt.py +3 -18
  578. angr/procedures/definitions/win32_projectedfslib.py +3 -18
  579. angr/procedures/definitions/win32_propsys.py +3 -18
  580. angr/procedures/definitions/win32_psapi.py +3 -18
  581. angr/procedures/definitions/win32_quartz.py +3 -18
  582. angr/procedures/definitions/win32_query.py +3 -18
  583. angr/procedures/definitions/win32_qwave.py +3 -18
  584. angr/procedures/definitions/win32_rasapi32.py +3 -18
  585. angr/procedures/definitions/win32_rasdlg.py +3 -18
  586. angr/procedures/definitions/win32_resutils.py +3 -18
  587. angr/procedures/definitions/win32_rometadata.py +3 -3
  588. angr/procedures/definitions/win32_rpcns4.py +3 -18
  589. angr/procedures/definitions/win32_rpcproxy.py +3 -18
  590. angr/procedures/definitions/win32_rpcrt4.py +3 -18
  591. angr/procedures/definitions/win32_rstrtmgr.py +3 -18
  592. angr/procedures/definitions/win32_rtm.py +3 -18
  593. angr/procedures/definitions/win32_rtutils.py +3 -18
  594. angr/procedures/definitions/win32_rtworkq.py +3 -18
  595. angr/procedures/definitions/win32_sas.py +3 -18
  596. angr/procedures/definitions/win32_scarddlg.py +3 -18
  597. angr/procedures/definitions/win32_schannel.py +3 -18
  598. angr/procedures/definitions/win32_sechost.py +3 -18
  599. angr/procedures/definitions/win32_secur32.py +3 -18
  600. angr/procedures/definitions/win32_sensapi.py +3 -18
  601. angr/procedures/definitions/win32_sensorsutilsv2.py +3 -18
  602. angr/procedures/definitions/win32_setupapi.py +3 -18
  603. angr/procedures/definitions/win32_sfc.py +3 -18
  604. angr/procedures/definitions/win32_shdocvw.py +3 -18
  605. angr/procedures/definitions/win32_shell32.py +3 -18
  606. angr/procedures/definitions/win32_shlwapi.py +3 -18
  607. angr/procedures/definitions/win32_slc.py +3 -18
  608. angr/procedures/definitions/win32_slcext.py +3 -18
  609. angr/procedures/definitions/win32_slwga.py +3 -18
  610. angr/procedures/definitions/win32_snmpapi.py +3 -18
  611. angr/procedures/definitions/win32_spoolss.py +3 -18
  612. angr/procedures/definitions/win32_srclient.py +3 -18
  613. angr/procedures/definitions/win32_srpapi.py +3 -18
  614. angr/procedures/definitions/win32_sspicli.py +3 -18
  615. angr/procedures/definitions/win32_sti.py +3 -18
  616. angr/procedures/definitions/win32_t2embed.py +3 -18
  617. angr/procedures/definitions/win32_tapi32.py +3 -18
  618. angr/procedures/definitions/win32_tbs.py +3 -18
  619. angr/procedures/definitions/win32_tdh.py +3 -18
  620. angr/procedures/definitions/win32_tokenbinding.py +3 -18
  621. angr/procedures/definitions/win32_traffic.py +3 -18
  622. angr/procedures/definitions/win32_txfw32.py +3 -18
  623. angr/procedures/definitions/win32_ualapi.py +3 -18
  624. angr/procedures/definitions/win32_uiautomationcore.py +3 -18
  625. angr/procedures/definitions/win32_urlmon.py +3 -18
  626. angr/procedures/definitions/win32_user32.py +4 -19
  627. angr/procedures/definitions/win32_userenv.py +3 -18
  628. angr/procedures/definitions/win32_usp10.py +3 -18
  629. angr/procedures/definitions/win32_uxtheme.py +3 -18
  630. angr/procedures/definitions/win32_verifier.py +3 -18
  631. angr/procedures/definitions/win32_version.py +3 -18
  632. angr/procedures/definitions/win32_vertdll.py +3 -18
  633. angr/procedures/definitions/win32_virtdisk.py +3 -18
  634. angr/procedures/definitions/win32_vmdevicehost.py +3 -18
  635. angr/procedures/definitions/win32_vmsavedstatedumpprovider.py +3 -18
  636. angr/procedures/definitions/win32_vssapi.py +3 -18
  637. angr/procedures/definitions/win32_wcmapi.py +3 -18
  638. angr/procedures/definitions/win32_wdsbp.py +3 -18
  639. angr/procedures/definitions/win32_wdsclientapi.py +3 -18
  640. angr/procedures/definitions/win32_wdsmc.py +3 -18
  641. angr/procedures/definitions/win32_wdspxe.py +3 -18
  642. angr/procedures/definitions/win32_wdstptc.py +3 -18
  643. angr/procedures/definitions/win32_webauthn.py +3 -18
  644. angr/procedures/definitions/win32_webservices.py +3 -18
  645. angr/procedures/definitions/win32_websocket.py +3 -18
  646. angr/procedures/definitions/win32_wecapi.py +3 -18
  647. angr/procedures/definitions/win32_wer.py +3 -18
  648. angr/procedures/definitions/win32_wevtapi.py +3 -18
  649. angr/procedures/definitions/win32_winbio.py +3 -18
  650. angr/procedures/definitions/win32_windows_ai_machinelearning.py +3 -18
  651. angr/procedures/definitions/win32_windows_data_pdf.py +3 -3
  652. angr/procedures/definitions/win32_windows_media_mediacontrol.py +3 -18
  653. angr/procedures/definitions/win32_windows_networking.py +3 -18
  654. angr/procedures/definitions/win32_windows_ui_xaml.py +3 -18
  655. angr/procedures/definitions/win32_windowscodecs.py +3 -18
  656. angr/procedures/definitions/win32_winfax.py +3 -18
  657. angr/procedures/definitions/win32_winhttp.py +3 -18
  658. angr/procedures/definitions/win32_winhvemulation.py +3 -18
  659. angr/procedures/definitions/win32_winhvplatform.py +3 -18
  660. angr/procedures/definitions/win32_wininet.py +3 -18
  661. angr/procedures/definitions/win32_winml.py +3 -18
  662. angr/procedures/definitions/win32_winmm.py +3 -18
  663. angr/procedures/definitions/win32_winscard.py +3 -18
  664. angr/procedures/definitions/win32_winspool.py +3 -3
  665. angr/procedures/definitions/win32_winspool_drv.py +3 -18
  666. angr/procedures/definitions/win32_wintrust.py +3 -18
  667. angr/procedures/definitions/win32_winusb.py +3 -18
  668. angr/procedures/definitions/win32_wlanapi.py +3 -18
  669. angr/procedures/definitions/win32_wlanui.py +3 -18
  670. angr/procedures/definitions/win32_wldap32.py +3 -18
  671. angr/procedures/definitions/win32_wldp.py +3 -18
  672. angr/procedures/definitions/win32_wmvcore.py +3 -18
  673. angr/procedures/definitions/win32_wnvapi.py +3 -18
  674. angr/procedures/definitions/win32_wofutil.py +3 -18
  675. angr/procedures/definitions/win32_ws2_32.py +3 -18
  676. angr/procedures/definitions/win32_wscapi.py +3 -18
  677. angr/procedures/definitions/win32_wsclient.py +3 -18
  678. angr/procedures/definitions/win32_wsdapi.py +3 -18
  679. angr/procedures/definitions/win32_wsmsvc.py +3 -18
  680. angr/procedures/definitions/win32_wsnmp32.py +3 -18
  681. angr/procedures/definitions/win32_wtsapi32.py +3 -18
  682. angr/procedures/definitions/win32_xaudio2_8.py +3 -18
  683. angr/procedures/definitions/win32_xinput1_4.py +3 -18
  684. angr/procedures/definitions/win32_xinputuap.py +3 -3
  685. angr/procedures/definitions/win32_xmllite.py +3 -18
  686. angr/procedures/definitions/win32_xolehlp.py +3 -18
  687. angr/procedures/definitions/win32_xpsprint.py +3 -18
  688. angr/procedures/glibc/scanf.py +2 -2
  689. angr/procedures/glibc/sscanf.py +1 -1
  690. angr/procedures/java/__init__.py +6 -3
  691. angr/procedures/java/unconstrained.py +4 -4
  692. angr/procedures/java_io/read.py +1 -1
  693. angr/procedures/java_io/write.py +1 -1
  694. angr/procedures/java_jni/__init__.py +25 -17
  695. angr/procedures/java_jni/array_operations.py +2 -2
  696. angr/procedures/java_jni/field_access.py +3 -3
  697. angr/procedures/java_jni/method_calls.py +2 -2
  698. angr/procedures/java_jni/object_operations.py +1 -1
  699. angr/procedures/java_jni/string_operations.py +2 -2
  700. angr/procedures/java_lang/character.py +1 -1
  701. angr/procedures/java_lang/double.py +2 -2
  702. angr/procedures/java_lang/exit.py +1 -1
  703. angr/procedures/java_lang/getsimplename.py +1 -1
  704. angr/procedures/java_lang/integer.py +2 -2
  705. angr/procedures/java_lang/load_library.py +1 -1
  706. angr/procedures/java_lang/math.py +1 -1
  707. angr/procedures/java_lang/string.py +4 -4
  708. angr/procedures/java_lang/stringbuilder.py +2 -2
  709. angr/procedures/java_lang/system.py +1 -1
  710. angr/procedures/java_util/collection.py +2 -2
  711. angr/procedures/java_util/iterator.py +2 -2
  712. angr/procedures/java_util/list.py +3 -3
  713. angr/procedures/java_util/map.py +3 -3
  714. angr/procedures/java_util/random.py +1 -1
  715. angr/procedures/java_util/scanner_nextline.py +3 -3
  716. angr/procedures/libc/fseek.py +1 -1
  717. angr/procedures/libc/memcpy.py +1 -1
  718. angr/procedures/libc/strlen.py +12 -4
  719. angr/procedures/libc/strncmp.py +9 -4
  720. angr/procedures/linux_kernel/iovec.py +3 -3
  721. angr/procedures/linux_kernel/mmap.py +1 -1
  722. angr/procedures/linux_kernel/stat.py +1 -1
  723. angr/procedures/linux_kernel/sysinfo.py +1 -1
  724. angr/procedures/linux_kernel/vsyscall.py +1 -1
  725. angr/procedures/posix/bzero.py +1 -1
  726. angr/procedures/posix/mmap.py +1 -1
  727. angr/procedures/posix/send.py +1 -1
  728. angr/procedures/posix/syslog.py +2 -3
  729. angr/procedures/procedure_dict.py +2 -2
  730. angr/procedures/stubs/Redirect.py +1 -1
  731. angr/procedures/stubs/UserHook.py +1 -1
  732. angr/procedures/stubs/format_parser.py +6 -6
  733. angr/procedures/tracer/random.py +1 -1
  734. angr/procedures/tracer/receive.py +1 -1
  735. angr/procedures/tracer/transmit.py +1 -1
  736. angr/procedures/uclibc/__uClibc_main.py +1 -1
  737. angr/protos/__init__.py +8 -0
  738. angr/sim_options.py +0 -4
  739. angr/sim_procedure.py +5 -5
  740. angr/sim_state.py +21 -34
  741. angr/sim_type.py +51 -18
  742. angr/simos/__init__.py +12 -0
  743. angr/simos/cgc.py +5 -5
  744. angr/simos/javavm.py +18 -23
  745. angr/simos/linux.py +6 -6
  746. angr/simos/simos.py +12 -16
  747. angr/simos/userland.py +3 -3
  748. angr/simos/windows.py +6 -11
  749. angr/state_hierarchy.py +1 -1
  750. angr/state_plugins/__init__.py +84 -28
  751. angr/state_plugins/callstack.py +1 -1
  752. angr/state_plugins/concrete.py +3 -4
  753. angr/state_plugins/filesystem.py +3 -3
  754. angr/state_plugins/gdb.py +1 -1
  755. angr/state_plugins/heap/__init__.py +14 -5
  756. angr/state_plugins/heap/heap_base.py +5 -4
  757. angr/state_plugins/heap/heap_brk.py +1 -1
  758. angr/state_plugins/heap/heap_freelist.py +1 -1
  759. angr/state_plugins/heap/heap_ptmalloc.py +2 -20
  760. angr/state_plugins/heap/utils.py +1 -1
  761. angr/state_plugins/history.py +2 -2
  762. angr/state_plugins/javavm_classloader.py +3 -3
  763. angr/state_plugins/jni_references.py +1 -1
  764. angr/state_plugins/light_registers.py +3 -3
  765. angr/state_plugins/log.py +1 -1
  766. angr/state_plugins/plugin.py +3 -2
  767. angr/state_plugins/posix.py +3 -3
  768. angr/state_plugins/preconstrainer.py +6 -6
  769. angr/state_plugins/scratch.py +4 -4
  770. angr/state_plugins/sim_action_object.py +1 -1
  771. angr/state_plugins/solver.py +15 -19
  772. angr/state_plugins/symbolizer.py +2 -3
  773. angr/state_plugins/trace_additions.py +8 -8
  774. angr/state_plugins/uc_manager.py +1 -1
  775. angr/state_plugins/unicorn_engine.py +4 -4
  776. angr/state_plugins/view.py +1 -1
  777. angr/storage/__init__.py +9 -3
  778. angr/storage/file.py +16 -16
  779. angr/storage/memory_mixins/__init__.py +88 -6
  780. angr/storage/memory_mixins/actions_mixin.py +3 -3
  781. angr/storage/memory_mixins/address_concretization_mixin.py +6 -6
  782. angr/storage/memory_mixins/bvv_conversion_mixin.py +1 -1
  783. angr/storage/memory_mixins/clouseau_mixin.py +1 -1
  784. angr/storage/memory_mixins/convenient_mappings_mixin.py +8 -10
  785. angr/storage/memory_mixins/default_filler_mixin.py +3 -3
  786. angr/storage/memory_mixins/hex_dumper_mixin.py +1 -1
  787. angr/storage/memory_mixins/{javavm_memory/javavm_memory_mixin.py → javavm_memory_mixin.py} +15 -12
  788. angr/storage/memory_mixins/{keyvalue_memory/keyvalue_memory_mixin.py → keyvalue_memory_mixin.py} +11 -6
  789. angr/storage/memory_mixins/multi_value_merger_mixin.py +5 -5
  790. angr/storage/memory_mixins/name_resolution_mixin.py +2 -2
  791. angr/storage/memory_mixins/paged_memory/paged_memory_mixin.py +1 -1
  792. angr/storage/memory_mixins/paged_memory/paged_memory_multivalue_mixin.py +1 -1
  793. angr/storage/memory_mixins/paged_memory/pages/__init__.py +15 -0
  794. angr/storage/memory_mixins/paged_memory/pages/mv_list_page.py +1 -1
  795. angr/storage/memory_mixins/paged_memory/pages/ultra_page.py +2 -2
  796. angr/storage/memory_mixins/paged_memory/stack_allocation_mixin.py +2 -2
  797. angr/storage/memory_mixins/regioned_memory/__init__.py +10 -0
  798. angr/storage/memory_mixins/regioned_memory/abstract_merger_mixin.py +1 -1
  799. angr/storage/memory_mixins/regioned_memory/region_category_mixin.py +1 -1
  800. angr/storage/memory_mixins/regioned_memory/region_data.py +2 -2
  801. angr/storage/memory_mixins/regioned_memory/region_meta_mixin.py +1 -1
  802. angr/storage/memory_mixins/regioned_memory/regioned_address_concretization_mixin.py +4 -4
  803. angr/storage/memory_mixins/regioned_memory/regioned_memory_mixin.py +7 -19
  804. angr/storage/memory_mixins/regioned_memory/static_find_mixin.py +1 -1
  805. angr/storage/memory_mixins/simple_interface_mixin.py +1 -1
  806. angr/storage/memory_mixins/simplification_mixin.py +1 -1
  807. angr/storage/memory_mixins/size_resolution_mixin.py +2 -2
  808. angr/storage/memory_mixins/slotted_memory.py +1 -1
  809. angr/storage/memory_mixins/smart_find_mixin.py +3 -3
  810. angr/storage/memory_mixins/underconstrained_mixin.py +1 -1
  811. angr/storage/memory_mixins/unwrapper_mixin.py +1 -1
  812. angr/storage/memory_object.py +8 -10
  813. angr/utils/__init__.py +12 -0
  814. angr/utils/enums_conv.py +1 -1
  815. angr/utils/library.py +2 -2
  816. angr/utils/mp.py +1 -1
  817. angr/utils/timing.py +30 -18
  818. {angr-9.2.118.dist-info → angr-9.2.120.dist-info}/METADATA +8 -7
  819. angr-9.2.120.dist-info/RECORD +1340 -0
  820. angr/analyses/s_liveness/__init__.py +0 -2
  821. angr/analyses/s_propagator/__init__.py +0 -2
  822. angr/analyses/s_reaching_definitions/s_rda.py +0 -479
  823. angr/knowledge_base/__init__.py +0 -2
  824. angr/knowledge_plugins/structured_code/__init__.py +0 -2
  825. angr/knowledge_plugins/sync/__init__.py +0 -2
  826. angr/knowledge_plugins/sync/sync_controller.py +0 -324
  827. angr/misc/range.py +0 -24
  828. angr/misc/weakpatch.py +0 -59
  829. angr/storage/memory_mixins/javavm_memory/__init__.py +0 -2
  830. angr/storage/memory_mixins/keyvalue_memory/__init__.py +0 -2
  831. angr/storage/pcap.py +0 -65
  832. angr/utils/typing.py +0 -18
  833. angr-9.2.118.dist-info/RECORD +0 -1344
  834. /angr/analyses/{s_liveness/s_liveness.py → s_liveness.py} +0 -0
  835. {angr-9.2.118.dist-info → angr-9.2.120.dist-info}/LICENSE +0 -0
  836. {angr-9.2.118.dist-info → angr-9.2.120.dist-info}/WHEEL +0 -0
  837. {angr-9.2.118.dist-info → angr-9.2.120.dist-info}/entry_points.txt +0 -0
  838. {angr-9.2.118.dist-info → angr-9.2.120.dist-info}/top_level.txt +0 -0
@@ -8,17 +8,17 @@ import ailment
8
8
  import pyvex
9
9
 
10
10
  from angr.analyses import ForwardAnalysis
11
- from ...block import Block
12
- from ...knowledge_plugins.cfg.cfg_node import CFGNode
13
- from ...codenode import CodeNode
14
- from ...engines.light import SimEngineLight
15
- from ...knowledge_plugins.functions import Function
16
- from ...knowledge_plugins.key_definitions import ReachingDefinitionsModel, LiveDefinitions
17
- from ...knowledge_plugins.key_definitions.constants import OP_BEFORE, OP_AFTER, ObservationPointType, ObservationPoint
18
- from ...code_location import CodeLocation, ExternalCodeLocation
19
- from ...misc.ux import deprecated
20
- from ..forward_analysis.visitors.graph import NodeType
21
- from ..analysis import Analysis
11
+ from angr.block import Block
12
+ from angr.knowledge_plugins.cfg.cfg_node import CFGNode
13
+ from angr.codenode import CodeNode
14
+ from angr.engines.light import SimEngineLight
15
+ from angr.knowledge_plugins.functions import Function
16
+ from angr.knowledge_plugins.key_definitions import ReachingDefinitionsModel, LiveDefinitions
17
+ from angr.knowledge_plugins.key_definitions.constants import OP_BEFORE, OP_AFTER, ObservationPointType, ObservationPoint
18
+ from angr.code_location import CodeLocation, ExternalCodeLocation
19
+ from angr.misc.ux import deprecated
20
+ from angr.analyses.forward_analysis.visitors.graph import NodeType
21
+ from angr.analyses.analysis import Analysis
22
22
  from .engine_ail import SimEngineRDAIL
23
23
  from .engine_vex import SimEngineRDVEX
24
24
  from .rd_state import ReachingDefinitionsState
@@ -3,9 +3,9 @@ from enum import Enum
3
3
 
4
4
  import ailment
5
5
 
6
- from ...block import Block
7
- from ...knowledge_plugins.functions.function_manager import Function
8
- from ..forward_analysis import FunctionGraphVisitor, SingleNodeGraphVisitor
6
+ from angr.block import Block
7
+ from angr.knowledge_plugins.functions.function_manager import Function
8
+ from angr.analyses.forward_analysis import FunctionGraphVisitor, SingleNodeGraphVisitor
9
9
 
10
10
 
11
11
  class SubjectType(Enum):
@@ -16,11 +16,11 @@ from . import Analysis
16
16
  from .cfg.cfg_emulated import CFGEmulated
17
17
  from .ddg import DDG
18
18
  from .cfg.cfg_fast import CFGFast
19
- from ..codenode import CodeNode
20
- from ..knowledge_plugins.cfg.memory_data import MemoryDataSort
21
- from ..knowledge_plugins.functions import Function
22
- from ..knowledge_base import KnowledgeBase
23
- from ..sim_variable import SimMemoryVariable, SimTemporaryVariable
19
+ from angr.codenode import CodeNode
20
+ from angr.knowledge_plugins.cfg.memory_data import MemoryDataSort
21
+ from angr.knowledge_plugins.functions import Function
22
+ from angr.knowledge_base import KnowledgeBase
23
+ from angr.sim_variable import SimMemoryVariable, SimTemporaryVariable
24
24
 
25
25
  if TYPE_CHECKING:
26
26
  from .cfg import CFGNode
@@ -38,7 +38,7 @@ class SPropagatorAnalysis(Analysis):
38
38
  Constant and expression propagation that only supports SSA AIL graphs.
39
39
  """
40
40
 
41
- def __init__(
41
+ def __init__( # pylint: disable=too-many-positional-arguments
42
42
  self,
43
43
  subject,
44
44
  func_graph=None,
@@ -1,2 +1,12 @@
1
1
  from __future__ import annotations
2
- from .s_rda import SReachingDefinitionsAnalysis, SRDAModel, SRDAView
2
+
3
+ from .s_rda_model import SRDAModel
4
+ from .s_rda_view import SRDAView
5
+ from .s_reaching_definitions import SReachingDefinitionsAnalysis
6
+
7
+
8
+ __all__ = (
9
+ "SRDAModel",
10
+ "SRDAView",
11
+ "SReachingDefinitionsAnalysis",
12
+ )
@@ -0,0 +1,117 @@
1
+ from __future__ import annotations
2
+
3
+ from collections import defaultdict
4
+ from collections.abc import Generator
5
+ from typing import Any
6
+
7
+ from ailment.expression import VirtualVariable, Tmp
8
+
9
+ from angr.knowledge_plugins.key_definitions import atoms, Definition
10
+ from angr.code_location import CodeLocation
11
+
12
+
13
+ class SRDAModel:
14
+ """
15
+ The model for SRDA.
16
+ """
17
+
18
+ def __init__(self, func_graph, arch):
19
+ self.func_graph = func_graph
20
+ self.arch = arch
21
+ self.varid_to_vvar: dict[int, VirtualVariable] = {}
22
+ self.all_vvar_definitions: dict[VirtualVariable, CodeLocation] = {}
23
+ self.all_vvar_uses: dict[VirtualVariable, set[tuple[VirtualVariable | None, CodeLocation]]] = defaultdict(set)
24
+ self.all_tmp_definitions: dict[CodeLocation, dict[atoms.Tmp, int]] = defaultdict(dict)
25
+ self.all_tmp_uses: dict[CodeLocation, dict[atoms.Tmp, set[tuple[Tmp, int]]]] = defaultdict(dict)
26
+ self.phi_vvar_ids: set[int] = set()
27
+ self.phivarid_to_varids: dict[int, set[int]] = {}
28
+
29
+ @property
30
+ def all_definitions(self) -> Generator[Definition]:
31
+ for vvar, defloc in self.all_vvar_definitions.items():
32
+ yield Definition(atoms.VirtualVariable(vvar.varid, vvar.size, vvar.category, vvar.oident), defloc)
33
+
34
+ def is_phi_vvar_id(self, idx: int) -> bool:
35
+ return idx in self.phi_vvar_ids
36
+
37
+ def get_all_definitions(self, block_loc: CodeLocation) -> set[Definition]:
38
+ s = set()
39
+ for vvar, codeloc in self.all_vvar_definitions.items():
40
+ if codeloc.block_addr == block_loc.block_addr and codeloc.block_idx == block_loc.block_idx:
41
+ s.add(Definition(atoms.VirtualVariable(vvar.varid, vvar.size, vvar.category, vvar.oident), codeloc))
42
+ return s | self.get_all_tmp_definitions(block_loc)
43
+
44
+ def get_all_tmp_definitions(self, block_loc: CodeLocation) -> set[Definition]:
45
+ s = set()
46
+ for tmp_atom, stmt_idx in self.all_tmp_definitions[block_loc].items():
47
+ s.add(Definition(tmp_atom, CodeLocation(block_loc.block_addr, stmt_idx, block_idx=block_loc.block_idx)))
48
+ return s
49
+
50
+ def get_uses_by_location(
51
+ self, loc: CodeLocation, exprs: bool = False
52
+ ) -> set[Definition] | set[tuple[Definition, Any | None]]:
53
+ """
54
+ Retrieve all definitions that are used at a given location.
55
+
56
+ :param loc: The code location.
57
+ :return: A set of definitions that are used at the given location.
58
+ """
59
+ if exprs:
60
+ defs: set[tuple[Definition, Any]] = set()
61
+ for vvar, uses in self.all_vvar_uses.items():
62
+ for expr, loc_ in uses:
63
+ if loc_ == loc:
64
+ defs.add(
65
+ (
66
+ Definition(
67
+ atoms.VirtualVariable(vvar.varid, vvar.size, vvar.category, vvar.oident),
68
+ self.all_vvar_definitions[vvar],
69
+ ),
70
+ expr,
71
+ )
72
+ )
73
+ return defs
74
+
75
+ defs: set[Definition] = set()
76
+ for vvar, uses in self.all_vvar_uses.items():
77
+ for _, loc_ in uses:
78
+ if loc_ == loc:
79
+ defs.add(
80
+ Definition(
81
+ atoms.VirtualVariable(vvar.varid, vvar.size, vvar.category, vvar.oident),
82
+ self.all_vvar_definitions[vvar],
83
+ )
84
+ )
85
+ return defs
86
+
87
+ def get_vvar_uses(self, obj: atoms.VirtualVariable) -> set[CodeLocation]:
88
+ the_vvar = self.varid_to_vvar.get(obj.varid, None)
89
+ if the_vvar is not None:
90
+ return {loc for _, loc in self.all_vvar_uses[the_vvar]}
91
+ return set()
92
+
93
+ def get_vvar_uses_with_expr(self, obj: atoms.VirtualVariable) -> set[tuple[CodeLocation, VirtualVariable]]:
94
+ the_vvar = self.varid_to_vvar.get(obj.varid, None)
95
+ if the_vvar is not None:
96
+ return {(loc, expr) for expr, loc in self.all_vvar_uses[the_vvar]}
97
+ return set()
98
+
99
+ def get_tmp_uses(self, obj: atoms.Tmp, block_loc: CodeLocation) -> set[CodeLocation]:
100
+ if block_loc not in self.all_tmp_uses:
101
+ return set()
102
+ if obj not in self.all_tmp_uses[block_loc]:
103
+ return set()
104
+ s = set()
105
+ for _, stmt_idx in self.all_tmp_uses[block_loc][obj]:
106
+ s.add(CodeLocation(block_loc.block_addr, stmt_idx, block_idx=block_loc.block_idx))
107
+ return s
108
+
109
+ def get_uses_by_def(self, def_: Definition) -> set[CodeLocation]:
110
+ if isinstance(def_.atom, atoms.Tmp):
111
+ return self.get_tmp_uses(
112
+ def_.atom,
113
+ CodeLocation(def_.codeloc.block_addr, def_.codeloc.stmt_idx, block_idx=def_.codeloc.block_idx),
114
+ )
115
+ if isinstance(def_.atom, atoms.VirtualVariable):
116
+ return self.get_vvar_uses(def_.atom)
117
+ return set()
@@ -0,0 +1,213 @@
1
+ from __future__ import annotations
2
+
3
+ import logging
4
+ from collections import defaultdict
5
+
6
+ from ailment.statement import Assignment, Call, Label
7
+ from ailment.expression import VirtualVariable, Expression
8
+
9
+ from angr.utils.ail import is_phi_assignment
10
+ from angr.utils.graph import GraphUtils
11
+ from angr.knowledge_plugins.key_definitions.constants import ObservationPointType, ObservationPoint
12
+ from angr.utils.ssa import get_reg_offset_base
13
+ from angr.calling_conventions import SimRegArg, default_cc
14
+
15
+ from .s_rda_model import SRDAModel
16
+
17
+ log = logging.getLogger(__name__)
18
+
19
+
20
+ class SRDAView:
21
+ """
22
+ A view of SRDA model that provides various functionalities for querying the model.
23
+ """
24
+
25
+ def __init__(self, model: SRDAModel):
26
+ self.model = model
27
+
28
+ def _get_call_clobbered_regs(self, stmt: Call) -> set[int]:
29
+ cc = stmt.calling_convention
30
+ if cc is None:
31
+ # get the default calling convention
32
+ cc = default_cc(self.model.arch.name) # TODO: platform and language
33
+ if cc is not None:
34
+ reg_list = cc.CALLER_SAVED_REGS
35
+ if isinstance(cc.RETURN_VAL, SimRegArg):
36
+ reg_list.append(cc.RETURN_VAL.reg_name)
37
+ return {self.model.arch.registers[reg_name][0] for reg_name in reg_list}
38
+ log.warning("Cannot determine registers that are clobbered by call statement %r.", stmt)
39
+ return set()
40
+
41
+ def _get_vvar_by_insn(self, addr: int, op_type: ObservationPointType, predicate, block_idx: int | None = None):
42
+ # find the starting block
43
+ for block in self.model.func_graph:
44
+ if block.idx == block_idx and block.addr <= addr < block.addr + block.original_size:
45
+ the_block = block
46
+ break
47
+ else:
48
+ return
49
+
50
+ starting_stmt_idx = len(the_block.statements) if op_type == ObservationPointType.OP_AFTER else 0
51
+ for stmt_idx, stmt in enumerate(the_block.statements):
52
+ # skip all labels and phi assignments
53
+ if isinstance(stmt, Label) or is_phi_assignment(stmt):
54
+ if op_type == ObservationPointType.OP_BEFORE:
55
+ # ensure that we tick starting_stmt_idx forward
56
+ starting_stmt_idx = stmt_idx
57
+ continue
58
+
59
+ if (
60
+ op_type == ObservationPointType.OP_BEFORE
61
+ and stmt.ins_addr == addr
62
+ or op_type == ObservationPointType.OP_AFTER
63
+ and stmt.ins_addr > addr
64
+ ):
65
+ starting_stmt_idx = stmt_idx
66
+ break
67
+
68
+ traversed = set()
69
+ queue = [(the_block, starting_stmt_idx)]
70
+ while queue:
71
+ block, start_stmt_idx = queue.pop(0)
72
+ traversed.add(block)
73
+
74
+ stmts = block.statements[:start_stmt_idx] if start_stmt_idx is not None else block.statements
75
+
76
+ for stmt in reversed(stmts):
77
+ should_break = predicate(stmt)
78
+ if should_break:
79
+ break
80
+ else:
81
+ # not found
82
+ for pred in self.model.func_graph.predecessors(block):
83
+ if pred not in traversed:
84
+ traversed.add(pred)
85
+ queue.append((pred, None))
86
+
87
+ def get_reg_vvar_by_insn(
88
+ self, reg_offset: int, addr: int, op_type: ObservationPointType, block_idx: int | None = None
89
+ ) -> VirtualVariable | None:
90
+ reg_offset = get_reg_offset_base(reg_offset, self.model.arch)
91
+ vvars = set()
92
+
93
+ def _predicate(stmt) -> bool:
94
+ if (
95
+ isinstance(stmt, Assignment)
96
+ and isinstance(stmt.dst, VirtualVariable)
97
+ and stmt.dst.was_reg
98
+ and stmt.dst.reg_offset == reg_offset
99
+ ):
100
+ vvars.add(stmt.dst)
101
+ return True
102
+ if isinstance(stmt, Call):
103
+ if (
104
+ isinstance(stmt.ret_expr, VirtualVariable)
105
+ and stmt.ret_expr.was_reg
106
+ and stmt.ret_expr.reg_offset == reg_offset
107
+ ):
108
+ vvars.add(stmt.ret_expr)
109
+ return True
110
+ # is it clobbered maybe?
111
+ clobbered_regs = self._get_call_clobbered_regs(stmt)
112
+ if reg_offset in clobbered_regs:
113
+ return True
114
+ return False
115
+
116
+ self._get_vvar_by_insn(addr, op_type, _predicate, block_idx=block_idx)
117
+
118
+ assert len(vvars) <= 1
119
+ return next(iter(vvars), None)
120
+
121
+ def get_stack_vvar_by_insn( # pylint: disable=too-many-positional-arguments
122
+ self, stack_offset: int, size: int, addr: int, op_type: ObservationPointType, block_idx: int | None = None
123
+ ) -> VirtualVariable | None:
124
+ vvars = set()
125
+
126
+ def _predicate(stmt) -> bool:
127
+ if (
128
+ isinstance(stmt, Assignment)
129
+ and isinstance(stmt.dst, VirtualVariable)
130
+ and stmt.dst.was_stack
131
+ and stmt.dst.stack_offset == stack_offset
132
+ and stmt.dst.size == size
133
+ ):
134
+ vvars.add(stmt.dst)
135
+ return True
136
+ return False
137
+
138
+ self._get_vvar_by_insn(addr, op_type, _predicate, block_idx=block_idx)
139
+
140
+ assert len(vvars) <= 1
141
+ return next(iter(vvars), None)
142
+
143
+ def get_vvar_value(self, vvar: VirtualVariable) -> Expression | None:
144
+ if vvar not in self.model.all_vvar_definitions:
145
+ return None
146
+ codeloc = self.model.all_vvar_definitions[vvar]
147
+
148
+ for block in self.model.func_graph:
149
+ if block.addr == codeloc.block_addr and block.idx == codeloc.block_idx:
150
+ if codeloc.stmt_idx < len(block.statements):
151
+ stmt = block.statements[codeloc.stmt_idx]
152
+ if isinstance(stmt, Assignment) and stmt.dst.likes(vvar):
153
+ return stmt.src
154
+ break
155
+ return None
156
+
157
+ def observe(self, observation_points: list[ObservationPoint]):
158
+ insn_ops: dict[int, ObservationPointType] = {op[1]: op[2] for op in observation_points if op[0] == "insn"}
159
+ stmt_ops: dict[tuple[tuple[int, int | None], int], ObservationPointType] = {
160
+ op[1]: op[2] for op in observation_points if op[0] == "stmt"
161
+ }
162
+ node_ops: dict[tuple[int, int | None], ObservationPointType] = {
163
+ op[1]: op[2] for op in observation_points if op[0] == "node"
164
+ }
165
+ # TODO: Other types
166
+
167
+ traversal_order = GraphUtils.quasi_topological_sort_nodes(self.model.func_graph)
168
+ all_reg2vvarid: defaultdict[tuple[int, int | None], dict[int, int]] = defaultdict(dict)
169
+
170
+ observations = {}
171
+ for block in traversal_order:
172
+ reg2vvarid = all_reg2vvarid[block.addr, block.idx]
173
+
174
+ if (block.addr, block.idx) in node_ops and node_ops[
175
+ (block.addr, block.idx)
176
+ ] == ObservationPointType.OP_BEFORE:
177
+ observations[("block", (block.addr, block.idx), ObservationPointType.OP_BEFORE)] = reg2vvarid.copy()
178
+
179
+ last_insn_addr = None
180
+ for stmt_idx, stmt in enumerate(block.statements):
181
+ if last_insn_addr != stmt.ins_addr:
182
+ # observe
183
+ if last_insn_addr in insn_ops and insn_ops[last_insn_addr] == ObservationPointType.OP_AFTER:
184
+ observations[("insn", last_insn_addr, ObservationPointType.OP_AFTER)] = reg2vvarid.copy()
185
+ if stmt.ins_addr in insn_ops and insn_ops[stmt.ins_addr] == ObservationPointType.OP_BEFORE:
186
+ observations[("insn", last_insn_addr, ObservationPointType.OP_BEFORE)] = reg2vvarid.copy()
187
+ last_insn_addr = stmt.ins_addr
188
+
189
+ stmt_key = (block.addr, block.idx), stmt_idx
190
+ if stmt_key in stmt_ops and stmt_ops[stmt_key] == ObservationPointType.OP_BEFORE:
191
+ observations[("stmt", stmt_key, ObservationPointType.OP_BEFORE)] = reg2vvarid.copy()
192
+
193
+ if isinstance(stmt, Assignment) and isinstance(stmt.dst, VirtualVariable) and stmt.dst.was_reg:
194
+ base_offset = get_reg_offset_base(stmt.dst.reg_offset, self.model.arch)
195
+ reg2vvarid[base_offset] = stmt.dst.varid
196
+ elif isinstance(stmt, Call) and isinstance(stmt.ret_expr, VirtualVariable) and stmt.ret_expr.was_reg:
197
+ base_offset = get_reg_offset_base(stmt.ret_expr.reg_offset, self.model.arch)
198
+ reg2vvarid[base_offset] = stmt.ret_expr.varid
199
+
200
+ if stmt_key in stmt_ops and stmt_ops[stmt_key] == ObservationPointType.OP_AFTER:
201
+ observations[("stmt", stmt_key, ObservationPointType.OP_AFTER)] = reg2vvarid.copy()
202
+
203
+ if (block.addr, block.idx) in node_ops and node_ops[
204
+ (block.addr, block.idx)
205
+ ] == ObservationPointType.OP_AFTER:
206
+ observations[("block", (block.addr, block.idx), ObservationPointType.OP_AFTER)] = reg2vvarid.copy()
207
+
208
+ for succ in self.model.func_graph.successors(block):
209
+ if succ is block:
210
+ continue
211
+ all_reg2vvarid[succ.addr, succ.idx] = reg2vvarid.copy()
212
+
213
+ return observations
@@ -0,0 +1,159 @@
1
+ from __future__ import annotations
2
+
3
+ from ailment.block import Block
4
+ from ailment.statement import Assignment, Call, Return
5
+
6
+ from angr.knowledge_plugins.functions import Function
7
+ from angr.knowledge_plugins.key_definitions.constants import ObservationPointType
8
+ from angr.code_location import CodeLocation, ExternalCodeLocation
9
+ from angr.analyses import Analysis, register_analysis
10
+ from angr.utils.ssa import get_vvar_uselocs, get_vvar_deflocs, get_tmp_deflocs, get_tmp_uselocs
11
+ from angr.calling_conventions import default_cc
12
+ from .s_rda_model import SRDAModel
13
+ from .s_rda_view import SRDAView
14
+
15
+
16
+ class SReachingDefinitionsAnalysis(Analysis):
17
+ """
18
+ Constant and expression propagation that only supports SSA AIL graphs.
19
+ """
20
+
21
+ def __init__( # pylint: disable=too-many-positional-arguments
22
+ self,
23
+ subject,
24
+ func_addr: int | None = None,
25
+ func_graph=None,
26
+ track_tmps: bool = False,
27
+ stack_pointer_tracker=None,
28
+ ):
29
+ if isinstance(subject, Block):
30
+ self.block = subject
31
+ self.func = None
32
+ self.mode = "block"
33
+ elif isinstance(subject, Function):
34
+ self.block = None
35
+ self.func = subject
36
+ self.mode = "function"
37
+ else:
38
+ raise TypeError(f"Unsupported subject type {type(subject)}")
39
+
40
+ self.func_graph = func_graph
41
+ self.func_addr = func_addr if func_addr is not None else self.func.addr if self.func is not None else None
42
+ self._track_tmps = track_tmps
43
+ self._sp_tracker = stack_pointer_tracker # FIXME: Is it still used?
44
+
45
+ self._bp_as_gpr = False
46
+ if self.func is not None:
47
+ self._bp_as_gpr = self.func.info.get("bp_as_gpr", False)
48
+
49
+ self.model = SRDAModel(func_graph, self.project.arch)
50
+
51
+ self._analyze()
52
+
53
+ def _analyze(self):
54
+ match self.mode:
55
+ case "block":
56
+ blocks = {(self.block.addr, self.block.idx): self.block}
57
+ case "function":
58
+ blocks = {(block.addr, block.idx): block for block in self.func_graph}
59
+ case _:
60
+ raise NotImplementedError
61
+
62
+ phi_vvars = {}
63
+ # find all vvar definitions
64
+ vvar_deflocs = get_vvar_deflocs(blocks.values(), phi_vvars=phi_vvars)
65
+ # find all explicit vvar uses
66
+ vvar_uselocs = get_vvar_uselocs(blocks.values())
67
+
68
+ # update model
69
+ for vvar, defloc in vvar_deflocs.items():
70
+ self.model.varid_to_vvar[vvar.varid] = vvar
71
+ self.model.all_vvar_definitions[vvar] = defloc
72
+
73
+ for vvar_at_use, useloc in vvar_uselocs[vvar.varid]:
74
+ self.model.all_vvar_uses[vvar].add((vvar_at_use, useloc))
75
+
76
+ self.model.phi_vvar_ids = {vvar.varid for vvar in phi_vvars}
77
+ self.model.phivarid_to_varids = {}
78
+ for vvar, src_vvars in phi_vvars.items():
79
+ self.model.phivarid_to_varids[vvar.varid] = {
80
+ src_vvar.varid for src_vvar in src_vvars if src_vvar is not None
81
+ }
82
+
83
+ if self.mode == "function":
84
+ # fix register definitions for arguments
85
+ defined_vvarids = {vvar.varid for vvar in vvar_deflocs}
86
+ undefined_vvarids = set(vvar_uselocs.keys()).difference(defined_vvarids)
87
+ for vvar_id in undefined_vvarids:
88
+ used_vvar = next(iter(vvar_uselocs[vvar_id]))[0]
89
+ self.model.varid_to_vvar[used_vvar.varid] = used_vvar
90
+ self.model.all_vvar_definitions[used_vvar] = ExternalCodeLocation()
91
+ self.model.all_vvar_uses[used_vvar] |= vvar_uselocs[vvar_id]
92
+
93
+ srda_view = SRDAView(self.model)
94
+
95
+ # fix register uses at call sites
96
+
97
+ # find all implicit vvar uses
98
+ call_stmt_ids = []
99
+ for block in blocks.values():
100
+ for stmt_idx, stmt in enumerate(block.statements):
101
+ if ( # pylint:disable=too-many-boolean-expressions
102
+ (isinstance(stmt, Call) and stmt.args is None)
103
+ or (isinstance(stmt, Assignment) and isinstance(stmt.src, Call) and stmt.src.args is None)
104
+ or (isinstance(stmt, Return) and stmt.ret_exprs and isinstance(stmt.ret_exprs[0], Call))
105
+ ):
106
+ call_stmt_ids.append(((block.addr, block.idx), stmt_idx))
107
+
108
+ observations = srda_view.observe(
109
+ [("stmt", insn_stmt_id, ObservationPointType.OP_BEFORE) for insn_stmt_id in call_stmt_ids]
110
+ )
111
+ for key, reg_to_vvarids in observations.items():
112
+ _, ((block_addr, block_idx), stmt_idx), _ = key
113
+
114
+ block = blocks[(block_addr, block_idx)]
115
+ stmt = block.statements[stmt_idx]
116
+ assert isinstance(stmt, (Call, Assignment, Return))
117
+
118
+ call: Call = (
119
+ stmt if isinstance(stmt, Call) else stmt.src if isinstance(stmt, Assignment) else stmt.ret_exprs[0]
120
+ )
121
+ if call.prototype is None:
122
+ # without knowing the prototype, we must conservatively add uses to all registers that are
123
+ # potentially used here
124
+ if call.calling_convention is not None:
125
+ cc = call.calling_convention
126
+ else:
127
+ # just use all registers in the default calling convention because we don't know anything about
128
+ # the calling convention yet
129
+ cc = default_cc(self.project.arch.name)(self.project.arch)
130
+
131
+ codeloc = CodeLocation(block_addr, stmt_idx, block_idx=block_idx, ins_addr=stmt.ins_addr)
132
+ arg_locs = cc.ARG_REGS
133
+
134
+ for arg_reg_name in arg_locs:
135
+ reg_offset = self.project.arch.registers[arg_reg_name][0]
136
+ if reg_offset in reg_to_vvarids:
137
+ vvarid = reg_to_vvarids[reg_offset]
138
+ vvar = self.model.varid_to_vvar[vvarid]
139
+ self.model.all_vvar_uses[vvar].add((None, codeloc))
140
+
141
+ if self._track_tmps:
142
+ # track tmps
143
+ tmp_deflocs = get_tmp_deflocs(blocks.values())
144
+ # find all vvar uses
145
+ tmp_uselocs = get_tmp_uselocs(blocks.values())
146
+
147
+ # update model
148
+ for block_loc, d in tmp_deflocs.items():
149
+ for tmp_atom, stmt_idx in d.items():
150
+ self.model.all_tmp_definitions[block_loc][tmp_atom] = stmt_idx
151
+
152
+ if tmp_atom in tmp_uselocs[block_loc]:
153
+ for tmp_at_use, use_stmt_idx in tmp_uselocs[block_loc][tmp_atom]:
154
+ if tmp_atom not in self.model.all_tmp_uses[block_loc]:
155
+ self.model.all_tmp_uses[block_loc][tmp_atom] = set()
156
+ self.model.all_tmp_uses[block_loc][tmp_atom].add((tmp_at_use, use_stmt_idx))
157
+
158
+
159
+ register_analysis(SReachingDefinitionsAnalysis, "SReachingDefinitions")