angr 9.2.120__py3-none-manylinux2014_aarch64.whl → 9.2.121__py3-none-manylinux2014_aarch64.whl

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

Potentially problematic release.


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

Files changed (76) hide show
  1. angr/__init__.py +1 -1
  2. angr/analyses/cfg/cfg_fast.py +2 -1
  3. angr/analyses/cfg/indirect_jump_resolvers/__init__.py +2 -0
  4. angr/analyses/cfg/indirect_jump_resolvers/default_resolvers.py +2 -0
  5. angr/analyses/cfg/indirect_jump_resolvers/jumptable.py +10 -6
  6. angr/analyses/cfg/indirect_jump_resolvers/mips_elf_fast.py +138 -367
  7. angr/analyses/cfg/indirect_jump_resolvers/mips_elf_got.py +148 -0
  8. angr/analyses/decompiler/ccall_rewriters/amd64_ccalls.py +20 -0
  9. angr/analyses/typehoon/typevars.py +37 -16
  10. angr/angrdb/db.py +1 -1
  11. angr/block.py +9 -1
  12. angr/calling_conventions.py +1 -1
  13. angr/engines/engine.py +8 -15
  14. angr/engines/pcode/lifter.py +8 -0
  15. angr/engines/successors.py +1 -1
  16. angr/engines/vex/claripy/ccall.py +1 -1
  17. angr/engines/vex/claripy/datalayer.py +7 -10
  18. angr/engines/vex/heavy/actions.py +19 -24
  19. angr/engines/vex/heavy/heavy.py +7 -1
  20. angr/engines/vex/lifter.py +3 -1
  21. angr/engines/vex/light/light.py +2 -2
  22. angr/factory.py +5 -0
  23. angr/knowledge_plugins/cfg/memory_data.py +1 -0
  24. angr/lib/angr_native.so +0 -0
  25. angr/protos/cfg_pb2.py +23 -15
  26. angr/protos/function_pb2.py +19 -21
  27. angr/protos/primitives_pb2.py +46 -112
  28. angr/protos/variables_pb2.py +38 -114
  29. angr/protos/xrefs_pb2.py +17 -18
  30. angr/sim_state.py +2 -78
  31. angr/state_plugins/solver.py +72 -15
  32. angr/storage/__init__.py +1 -2
  33. angr/storage/memory_mixins/__init__.py +5 -160
  34. angr/storage/memory_mixins/actions_mixin.py +1 -1
  35. angr/storage/memory_mixins/address_concretization_mixin.py +1 -1
  36. angr/storage/memory_mixins/bvv_conversion_mixin.py +1 -1
  37. angr/storage/memory_mixins/clouseau_mixin.py +2 -1
  38. angr/storage/memory_mixins/conditional_store_mixin.py +1 -1
  39. angr/storage/memory_mixins/convenient_mappings_mixin.py +1 -1
  40. angr/storage/memory_mixins/default_filler_mixin.py +1 -1
  41. angr/storage/memory_mixins/dirty_addrs_mixin.py +2 -1
  42. angr/storage/memory_mixins/hex_dumper_mixin.py +1 -1
  43. angr/storage/memory_mixins/javavm_memory_mixin.py +1 -1
  44. angr/storage/memory_mixins/keyvalue_memory_mixin.py +1 -1
  45. angr/storage/memory_mixins/label_merger_mixin.py +1 -1
  46. angr/storage/memory_mixins/memory_mixin.py +163 -0
  47. angr/storage/memory_mixins/multi_value_merger_mixin.py +1 -1
  48. angr/storage/memory_mixins/name_resolution_mixin.py +3 -1
  49. angr/storage/memory_mixins/paged_memory/paged_memory_mixin.py +1 -1
  50. angr/storage/memory_mixins/paged_memory/paged_memory_multivalue_mixin.py +2 -1
  51. angr/storage/memory_mixins/paged_memory/pages/__init__.py +1 -1
  52. angr/storage/memory_mixins/paged_memory/pages/history_tracking_mixin.py +1 -1
  53. angr/storage/memory_mixins/paged_memory/pages/ispo_mixin.py +2 -1
  54. angr/storage/memory_mixins/paged_memory/pages/permissions_mixin.py +1 -1
  55. angr/storage/memory_mixins/paged_memory/pages/refcount_mixin.py +2 -1
  56. angr/storage/memory_mixins/paged_memory/pages/ultra_page.py +1 -1
  57. angr/storage/memory_mixins/regioned_memory/abstract_merger_mixin.py +1 -2
  58. angr/storage/memory_mixins/regioned_memory/region_category_mixin.py +2 -1
  59. angr/storage/memory_mixins/regioned_memory/region_meta_mixin.py +1 -1
  60. angr/storage/memory_mixins/regioned_memory/regioned_address_concretization_mixin.py +1 -1
  61. angr/storage/memory_mixins/regioned_memory/regioned_memory_mixin.py +2 -2
  62. angr/storage/memory_mixins/simple_interface_mixin.py +2 -1
  63. angr/storage/memory_mixins/simplification_mixin.py +2 -1
  64. angr/storage/memory_mixins/size_resolution_mixin.py +1 -1
  65. angr/storage/memory_mixins/slotted_memory.py +2 -2
  66. angr/storage/memory_mixins/smart_find_mixin.py +1 -1
  67. angr/storage/memory_mixins/symbolic_merger_mixin.py +2 -1
  68. angr/storage/memory_mixins/top_merger_mixin.py +3 -2
  69. angr/storage/memory_mixins/underconstrained_mixin.py +4 -2
  70. angr/storage/memory_mixins/unwrapper_mixin.py +2 -1
  71. {angr-9.2.120.dist-info → angr-9.2.121.dist-info}/METADATA +7 -7
  72. {angr-9.2.120.dist-info → angr-9.2.121.dist-info}/RECORD +76 -74
  73. {angr-9.2.120.dist-info → angr-9.2.121.dist-info}/LICENSE +0 -0
  74. {angr-9.2.120.dist-info → angr-9.2.121.dist-info}/WHEEL +0 -0
  75. {angr-9.2.120.dist-info → angr-9.2.121.dist-info}/entry_points.txt +0 -0
  76. {angr-9.2.120.dist-info → angr-9.2.121.dist-info}/top_level.txt +0 -0
angr/__init__.py CHANGED
@@ -2,7 +2,7 @@
2
2
  # pylint: disable=wrong-import-position
3
3
  from __future__ import annotations
4
4
 
5
- __version__ = "9.2.120"
5
+ __version__ = "9.2.121"
6
6
 
7
7
  if bytes is str:
8
8
  raise Exception(
@@ -4131,7 +4131,8 @@ class CFGFast(ForwardAnalysis[CFGNode, CFGNode, CFGJob, int], CFGBase): # pylin
4131
4131
  if self.project.arch.name in {"MIPS64", "MIPS32"} or is_arm_arch(self.project.arch):
4132
4132
  self._ro_region_cdata_cache = []
4133
4133
  for segment in self.project.loader.main_object.segments:
4134
- if segment.is_readable and not segment.is_writable:
4134
+ if segment.is_readable and segment.memsize >= 8:
4135
+ # the gp area is sometimes writable, so we can't test for (not segment.is_writable)
4135
4136
  content = self.project.loader.memory.load(segment.vaddr, segment.memsize)
4136
4137
  content_buf = pyvex.ffi.from_buffer(content)
4137
4138
  self._ro_region_cdata_cache.append(content_buf)
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from .mips_elf_fast import MipsElfFastResolver
4
+ from .mips_elf_got import MipsElfGotResolver
4
5
  from .x86_elf_pic_plt import X86ElfPicPltResolver
5
6
  from .jumptable import JumpTableResolver
6
7
  from .x86_pe_iat import X86PeIatResolver
@@ -12,6 +13,7 @@ from .amd64_pe_iat import AMD64PeIatResolver
12
13
 
13
14
  __all__ = (
14
15
  "MipsElfFastResolver",
16
+ "MipsElfGotResolver",
15
17
  "X86ElfPicPltResolver",
16
18
  "JumpTableResolver",
17
19
  "X86PeIatResolver",
@@ -9,6 +9,7 @@ from . import AMD64ElfGotResolver
9
9
  from . import ConstantResolver
10
10
  from . import ArmElfFastResolver
11
11
  from . import AMD64PeIatResolver
12
+ from . import MipsElfGotResolver
12
13
 
13
14
  DEFAULT_RESOLVERS = {
14
15
  "X86": {
@@ -29,6 +30,7 @@ DEFAULT_RESOLVERS = {
29
30
  },
30
31
  "MIPS32": {
31
32
  cle.MetaELF: [
33
+ MipsElfGotResolver,
32
34
  MipsElfFastResolver,
33
35
  ],
34
36
  },
@@ -1723,21 +1723,25 @@ class JumpTableResolver(IndirectJumpResolver):
1723
1723
  all_targets = []
1724
1724
  jump_table = []
1725
1725
 
1726
- try:
1727
- jumptable_si = claripy.SI(bits=project.arch.bits, to_conv=jumptable_addr)
1728
- except claripy.errors.BackendError:
1729
- return None
1726
+ if jumptable_addr.op == "BVV":
1727
+ stride = 0
1728
+ else:
1729
+ try:
1730
+ jumptable_si = claripy.backends.vsa.simplify(jumptable_addr)
1731
+ si_annotation = jumptable_si.get_annotation(claripy.annotation.StridedIntervalAnnotation)
1732
+ stride = si_annotation.stride if si_annotation is not None else 0
1733
+ except claripy.errors.BackendError:
1734
+ return None
1730
1735
 
1731
1736
  # we may resolve a vtable (in C, e.g., the IO_JUMPS_FUNC in libc), but the stride of this load is usually 1
1732
1737
  # while the read statement reads a word size at a time.
1733
1738
  # we use this to differentiate between traditional jump tables (where each entry is some blocks that belong to
1734
1739
  # the current function) and vtables (where each entry is a function).
1735
- if jumptable_si.args[3] < load_size: # stride < load_size
1740
+ if stride < load_size:
1736
1741
  stride = load_size
1737
1742
  total_cases = jumptable_addr.cardinality // load_size
1738
1743
  sort = "vtable" # it's probably a vtable!
1739
1744
  else:
1740
- stride = jumptable_si.args[3]
1741
1745
  total_cases = jumptable_addr.cardinality
1742
1746
  sort = "jumptable"
1743
1747