angr 9.2.120__py3-none-win_amd64.whl → 9.2.121__py3-none-win_amd64.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.
- angr/__init__.py +1 -1
- angr/analyses/cfg/cfg_fast.py +2 -1
- angr/analyses/cfg/indirect_jump_resolvers/__init__.py +2 -0
- angr/analyses/cfg/indirect_jump_resolvers/default_resolvers.py +2 -0
- angr/analyses/cfg/indirect_jump_resolvers/jumptable.py +10 -6
- angr/analyses/cfg/indirect_jump_resolvers/mips_elf_fast.py +138 -367
- angr/analyses/cfg/indirect_jump_resolvers/mips_elf_got.py +148 -0
- angr/analyses/decompiler/ccall_rewriters/amd64_ccalls.py +20 -0
- angr/analyses/typehoon/typevars.py +37 -16
- angr/angrdb/db.py +1 -1
- angr/block.py +9 -1
- angr/calling_conventions.py +1 -1
- angr/engines/engine.py +8 -15
- angr/engines/pcode/lifter.py +8 -0
- angr/engines/successors.py +1 -1
- angr/engines/vex/claripy/ccall.py +1 -1
- angr/engines/vex/claripy/datalayer.py +7 -10
- angr/engines/vex/heavy/actions.py +19 -24
- angr/engines/vex/heavy/heavy.py +7 -1
- angr/engines/vex/lifter.py +3 -1
- angr/engines/vex/light/light.py +2 -2
- angr/factory.py +5 -0
- angr/knowledge_plugins/cfg/memory_data.py +1 -0
- angr/lib/angr_native.dll +0 -0
- angr/protos/cfg_pb2.py +23 -15
- angr/protos/function_pb2.py +19 -21
- angr/protos/primitives_pb2.py +46 -112
- angr/protos/variables_pb2.py +38 -114
- angr/protos/xrefs_pb2.py +17 -18
- angr/sim_state.py +2 -78
- angr/state_plugins/solver.py +72 -15
- angr/storage/__init__.py +1 -2
- angr/storage/memory_mixins/__init__.py +5 -160
- angr/storage/memory_mixins/actions_mixin.py +1 -1
- angr/storage/memory_mixins/address_concretization_mixin.py +1 -1
- angr/storage/memory_mixins/bvv_conversion_mixin.py +1 -1
- angr/storage/memory_mixins/clouseau_mixin.py +2 -1
- angr/storage/memory_mixins/conditional_store_mixin.py +1 -1
- angr/storage/memory_mixins/convenient_mappings_mixin.py +1 -1
- angr/storage/memory_mixins/default_filler_mixin.py +1 -1
- angr/storage/memory_mixins/dirty_addrs_mixin.py +2 -1
- angr/storage/memory_mixins/hex_dumper_mixin.py +1 -1
- angr/storage/memory_mixins/javavm_memory_mixin.py +1 -1
- angr/storage/memory_mixins/keyvalue_memory_mixin.py +1 -1
- angr/storage/memory_mixins/label_merger_mixin.py +1 -1
- angr/storage/memory_mixins/memory_mixin.py +163 -0
- angr/storage/memory_mixins/multi_value_merger_mixin.py +1 -1
- angr/storage/memory_mixins/name_resolution_mixin.py +3 -1
- angr/storage/memory_mixins/paged_memory/paged_memory_mixin.py +1 -1
- angr/storage/memory_mixins/paged_memory/paged_memory_multivalue_mixin.py +2 -1
- angr/storage/memory_mixins/paged_memory/pages/__init__.py +1 -1
- angr/storage/memory_mixins/paged_memory/pages/history_tracking_mixin.py +1 -1
- angr/storage/memory_mixins/paged_memory/pages/ispo_mixin.py +2 -1
- angr/storage/memory_mixins/paged_memory/pages/permissions_mixin.py +1 -1
- angr/storage/memory_mixins/paged_memory/pages/refcount_mixin.py +2 -1
- angr/storage/memory_mixins/paged_memory/pages/ultra_page.py +1 -1
- angr/storage/memory_mixins/regioned_memory/abstract_merger_mixin.py +1 -2
- angr/storage/memory_mixins/regioned_memory/region_category_mixin.py +2 -1
- angr/storage/memory_mixins/regioned_memory/region_meta_mixin.py +1 -1
- angr/storage/memory_mixins/regioned_memory/regioned_address_concretization_mixin.py +1 -1
- angr/storage/memory_mixins/regioned_memory/regioned_memory_mixin.py +2 -2
- angr/storage/memory_mixins/simple_interface_mixin.py +2 -1
- angr/storage/memory_mixins/simplification_mixin.py +2 -1
- angr/storage/memory_mixins/size_resolution_mixin.py +1 -1
- angr/storage/memory_mixins/slotted_memory.py +2 -2
- angr/storage/memory_mixins/smart_find_mixin.py +1 -1
- angr/storage/memory_mixins/symbolic_merger_mixin.py +2 -1
- angr/storage/memory_mixins/top_merger_mixin.py +3 -2
- angr/storage/memory_mixins/underconstrained_mixin.py +4 -2
- angr/storage/memory_mixins/unwrapper_mixin.py +2 -1
- {angr-9.2.120.dist-info → angr-9.2.121.dist-info}/METADATA +7 -7
- {angr-9.2.120.dist-info → angr-9.2.121.dist-info}/RECORD +76 -74
- {angr-9.2.120.dist-info → angr-9.2.121.dist-info}/LICENSE +0 -0
- {angr-9.2.120.dist-info → angr-9.2.121.dist-info}/WHEEL +0 -0
- {angr-9.2.120.dist-info → angr-9.2.121.dist-info}/entry_points.txt +0 -0
- {angr-9.2.120.dist-info → angr-9.2.121.dist-info}/top_level.txt +0 -0
angr/__init__.py
CHANGED
angr/analyses/cfg/cfg_fast.py
CHANGED
|
@@ -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
|
|
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
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
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
|
|
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
|
|