angr 9.2.85__py3-none-win_amd64.whl → 9.2.87__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.

Files changed (39) hide show
  1. angr/__init__.py +1 -1
  2. angr/analyses/calling_convention.py +8 -6
  3. angr/analyses/data_dep/data_dependency_analysis.py +1 -0
  4. angr/analyses/decompiler/condition_processor.py +15 -9
  5. angr/analyses/decompiler/empty_node_remover.py +5 -3
  6. angr/analyses/decompiler/optimization_passes/optimization_pass.py +3 -3
  7. angr/analyses/decompiler/structured_codegen/c.py +17 -11
  8. angr/analyses/decompiler/structuring/phoenix.py +15 -9
  9. angr/analyses/disassembly.py +14 -12
  10. angr/analyses/reaching_definitions/dep_graph.py +10 -20
  11. angr/analyses/reaching_definitions/rd_state.py +4 -8
  12. angr/analyses/vfg.py +6 -6
  13. angr/calling_conventions.py +15 -7
  14. angr/engines/soot/expressions/condition.py +1 -1
  15. angr/engines/vex/claripy/irop.py +1 -0
  16. angr/engines/vex/heavy/heavy.py +3 -0
  17. angr/factory.py +2 -4
  18. angr/knowledge_plugins/key_definitions/live_definitions.py +4 -8
  19. angr/knowledge_plugins/key_definitions/rd_model.py +4 -4
  20. angr/knowledge_plugins/variables/variable_manager.py +3 -3
  21. angr/lib/angr_native.dll +0 -0
  22. angr/sim_procedure.py +3 -3
  23. angr/sim_type.py +9 -5
  24. angr/state_plugins/solver.py +36 -72
  25. angr/state_plugins/unicorn_engine.py +3 -3
  26. angr/storage/file.py +13 -9
  27. angr/storage/memory_mixins/paged_memory/pages/cooperation.py +10 -6
  28. angr/storage/memory_mixins/paged_memory/pages/multi_values.py +2 -10
  29. angr/storage/memory_mixins/regioned_memory/regioned_memory_mixin.py +12 -12
  30. angr/utils/graph.py +2 -1
  31. {angr-9.2.85.dist-info → angr-9.2.87.dist-info}/METADATA +6 -6
  32. {angr-9.2.85.dist-info → angr-9.2.87.dist-info}/RECORD +39 -37
  33. tests/analyses/decompiler/test_decompiler.py +1 -1
  34. tests/utils/__init__.py +0 -0
  35. tests/utils/test_graph.py +41 -0
  36. {angr-9.2.85.dist-info → angr-9.2.87.dist-info}/LICENSE +0 -0
  37. {angr-9.2.85.dist-info → angr-9.2.87.dist-info}/WHEEL +0 -0
  38. {angr-9.2.85.dist-info → angr-9.2.87.dist-info}/entry_points.txt +0 -0
  39. {angr-9.2.85.dist-info → angr-9.2.87.dist-info}/top_level.txt +0 -0
@@ -813,28 +813,22 @@ class SimSolver(SimStatePlugin):
813
813
  return solution
814
814
 
815
815
  @overload
816
- def eval_upto(self, e: claripy.ast.BV, n: int, cast_to: None = ..., **kwargs) -> List[int]:
817
- ...
816
+ def eval_upto(self, e: claripy.ast.BV, n: int, cast_to: None = ..., **kwargs) -> List[int]: ...
818
817
 
819
818
  @overload
820
- def eval_upto(self, e: claripy.ast.BV, n: int, cast_to: Type[CastType], **kwargs) -> List[CastType]:
821
- ...
819
+ def eval_upto(self, e: claripy.ast.BV, n: int, cast_to: Type[CastType], **kwargs) -> List[CastType]: ...
822
820
 
823
821
  @overload
824
- def eval_upto(self, e: claripy.ast.Bool, n: int, cast_to: None = ..., **kwargs) -> List[bool]:
825
- ...
822
+ def eval_upto(self, e: claripy.ast.Bool, n: int, cast_to: None = ..., **kwargs) -> List[bool]: ...
826
823
 
827
824
  @overload
828
- def eval_upto(self, e: claripy.ast.Bool, n: int, cast_to: Type[CastType], **kwargs) -> List[CastType]:
829
- ...
825
+ def eval_upto(self, e: claripy.ast.Bool, n: int, cast_to: Type[CastType], **kwargs) -> List[CastType]: ...
830
826
 
831
827
  @overload
832
- def eval_upto(self, e: claripy.ast.FP, n: int, cast_to: None = ..., **kwargs) -> List[float]:
833
- ...
828
+ def eval_upto(self, e: claripy.ast.FP, n: int, cast_to: None = ..., **kwargs) -> List[float]: ...
834
829
 
835
830
  @overload
836
- def eval_upto(self, e: claripy.ast.FP, n: int, cast_to: Type[CastType], **kwargs) -> List[CastType]:
837
- ...
831
+ def eval_upto(self, e: claripy.ast.FP, n: int, cast_to: Type[CastType], **kwargs) -> List[CastType]: ...
838
832
 
839
833
  def eval_upto(self, e, n, cast_to=None, **kwargs):
840
834
  """
@@ -859,28 +853,22 @@ class SimSolver(SimStatePlugin):
859
853
  return cast_vals
860
854
 
861
855
  @overload
862
- def eval(self, e: claripy.ast.BV, cast_to: None = ..., **kwargs) -> int:
863
- ...
856
+ def eval(self, e: claripy.ast.BV, cast_to: None = ..., **kwargs) -> int: ...
864
857
 
865
858
  @overload
866
- def eval(self, e: claripy.ast.BV, cast_to: Type[CastType], **kwargs) -> CastType:
867
- ...
859
+ def eval(self, e: claripy.ast.BV, cast_to: Type[CastType], **kwargs) -> CastType: ...
868
860
 
869
861
  @overload
870
- def eval(self, e: claripy.ast.Bool, cast_to: None = ..., **kwargs) -> bool:
871
- ...
862
+ def eval(self, e: claripy.ast.Bool, cast_to: None = ..., **kwargs) -> bool: ...
872
863
 
873
864
  @overload
874
- def eval(self, e: claripy.ast.Bool, cast_to: Type[CastType], **kwargs) -> CastType:
875
- ...
865
+ def eval(self, e: claripy.ast.Bool, cast_to: Type[CastType], **kwargs) -> CastType: ...
876
866
 
877
867
  @overload
878
- def eval(self, e: claripy.ast.FP, cast_to: None = ..., **kwargs) -> float:
879
- ...
868
+ def eval(self, e: claripy.ast.FP, cast_to: None = ..., **kwargs) -> float: ...
880
869
 
881
870
  @overload
882
- def eval(self, e: claripy.ast.FP, cast_to: Type[CastType], **kwargs) -> CastType:
883
- ...
871
+ def eval(self, e: claripy.ast.FP, cast_to: Type[CastType], **kwargs) -> CastType: ...
884
872
 
885
873
  def eval(self, e, cast_to=None, **kwargs):
886
874
  """
@@ -902,28 +890,22 @@ class SimSolver(SimStatePlugin):
902
890
  return self.eval_upto(e, 1, cast_to, **kwargs)[0]
903
891
 
904
892
  @overload
905
- def eval_one(self, e: claripy.ast.BV, cast_to: None = ..., **kwargs) -> int:
906
- ...
893
+ def eval_one(self, e: claripy.ast.BV, cast_to: None = ..., **kwargs) -> int: ...
907
894
 
908
895
  @overload
909
- def eval_one(self, e: claripy.ast.BV, cast_to: Type[CastType], **kwargs) -> CastType:
910
- ...
896
+ def eval_one(self, e: claripy.ast.BV, cast_to: Type[CastType], **kwargs) -> CastType: ...
911
897
 
912
898
  @overload
913
- def eval_one(self, e: claripy.ast.Bool, cast_to: None = ..., **kwargs) -> bool:
914
- ...
899
+ def eval_one(self, e: claripy.ast.Bool, cast_to: None = ..., **kwargs) -> bool: ...
915
900
 
916
901
  @overload
917
- def eval_one(self, e: claripy.ast.Bool, cast_to: Type[CastType], **kwargs) -> CastType:
918
- ...
902
+ def eval_one(self, e: claripy.ast.Bool, cast_to: Type[CastType], **kwargs) -> CastType: ...
919
903
 
920
904
  @overload
921
- def eval_one(self, e: claripy.ast.FP, cast_to: None = ..., **kwargs) -> float:
922
- ...
905
+ def eval_one(self, e: claripy.ast.FP, cast_to: None = ..., **kwargs) -> float: ...
923
906
 
924
907
  @overload
925
- def eval_one(self, e: claripy.ast.FP, cast_to: Type[CastType], **kwargs) -> CastType:
926
- ...
908
+ def eval_one(self, e: claripy.ast.FP, cast_to: Type[CastType], **kwargs) -> CastType: ...
927
909
 
928
910
  def eval_one(self, e, cast_to=None, **kwargs):
929
911
  """
@@ -946,28 +928,22 @@ class SimSolver(SimStatePlugin):
946
928
  raise
947
929
 
948
930
  @overload
949
- def eval_atmost(self, e: claripy.ast.BV, n: int, cast_to: None = ..., **kwargs) -> List[int]:
950
- ...
931
+ def eval_atmost(self, e: claripy.ast.BV, n: int, cast_to: None = ..., **kwargs) -> List[int]: ...
951
932
 
952
933
  @overload
953
- def eval_atmost(self, e: claripy.ast.BV, n: int, cast_to: Type[CastType], **kwargs) -> List[CastType]:
954
- ...
934
+ def eval_atmost(self, e: claripy.ast.BV, n: int, cast_to: Type[CastType], **kwargs) -> List[CastType]: ...
955
935
 
956
936
  @overload
957
- def eval_atmost(self, e: claripy.ast.Bool, n: int, cast_to: None = ..., **kwargs) -> List[bool]:
958
- ...
937
+ def eval_atmost(self, e: claripy.ast.Bool, n: int, cast_to: None = ..., **kwargs) -> List[bool]: ...
959
938
 
960
939
  @overload
961
- def eval_atmost(self, e: claripy.ast.Bool, n: int, cast_to: Type[CastType], **kwargs) -> List[CastType]:
962
- ...
940
+ def eval_atmost(self, e: claripy.ast.Bool, n: int, cast_to: Type[CastType], **kwargs) -> List[CastType]: ...
963
941
 
964
942
  @overload
965
- def eval_atmost(self, e: claripy.ast.FP, n: int, cast_to: None = ..., **kwargs) -> List[float]:
966
- ...
943
+ def eval_atmost(self, e: claripy.ast.FP, n: int, cast_to: None = ..., **kwargs) -> List[float]: ...
967
944
 
968
945
  @overload
969
- def eval_atmost(self, e: claripy.ast.FP, n: int, cast_to: Type[CastType], **kwargs) -> List[CastType]:
970
- ...
946
+ def eval_atmost(self, e: claripy.ast.FP, n: int, cast_to: Type[CastType], **kwargs) -> List[CastType]: ...
971
947
 
972
948
  def eval_atmost(self, e, n, cast_to=None, **kwargs):
973
949
  """
@@ -988,28 +964,22 @@ class SimSolver(SimStatePlugin):
988
964
  return r
989
965
 
990
966
  @overload
991
- def eval_atleast(self, e: claripy.ast.BV, n: int, cast_to: None = ..., **kwargs) -> List[int]:
992
- ...
967
+ def eval_atleast(self, e: claripy.ast.BV, n: int, cast_to: None = ..., **kwargs) -> List[int]: ...
993
968
 
994
969
  @overload
995
- def eval_atleast(self, e: claripy.ast.BV, n: int, cast_to: Type[CastType], **kwargs) -> List[CastType]:
996
- ...
970
+ def eval_atleast(self, e: claripy.ast.BV, n: int, cast_to: Type[CastType], **kwargs) -> List[CastType]: ...
997
971
 
998
972
  @overload
999
- def eval_atleast(self, e: claripy.ast.Bool, n: int, cast_to: None = ..., **kwargs) -> List[bool]:
1000
- ...
973
+ def eval_atleast(self, e: claripy.ast.Bool, n: int, cast_to: None = ..., **kwargs) -> List[bool]: ...
1001
974
 
1002
975
  @overload
1003
- def eval_atleast(self, e: claripy.ast.Bool, n: int, cast_to: Type[CastType], **kwargs) -> List[CastType]:
1004
- ...
976
+ def eval_atleast(self, e: claripy.ast.Bool, n: int, cast_to: Type[CastType], **kwargs) -> List[CastType]: ...
1005
977
 
1006
978
  @overload
1007
- def eval_atleast(self, e: claripy.ast.FP, n: int, cast_to: None = ..., **kwargs) -> List[float]:
1008
- ...
979
+ def eval_atleast(self, e: claripy.ast.FP, n: int, cast_to: None = ..., **kwargs) -> List[float]: ...
1009
980
 
1010
981
  @overload
1011
- def eval_atleast(self, e: claripy.ast.FP, n: int, cast_to: Type[CastType], **kwargs) -> List[CastType]:
1012
- ...
982
+ def eval_atleast(self, e: claripy.ast.FP, n: int, cast_to: Type[CastType], **kwargs) -> List[CastType]: ...
1013
983
 
1014
984
  def eval_atleast(self, e, n, cast_to=None, **kwargs):
1015
985
  """
@@ -1029,28 +999,22 @@ class SimSolver(SimStatePlugin):
1029
999
  return r
1030
1000
 
1031
1001
  @overload
1032
- def eval_exact(self, e: claripy.ast.BV, n: int, cast_to: None = ..., **kwargs) -> List[int]:
1033
- ...
1002
+ def eval_exact(self, e: claripy.ast.BV, n: int, cast_to: None = ..., **kwargs) -> List[int]: ...
1034
1003
 
1035
1004
  @overload
1036
- def eval_exact(self, e: claripy.ast.BV, n: int, cast_to: Type[CastType], **kwargs) -> List[CastType]:
1037
- ...
1005
+ def eval_exact(self, e: claripy.ast.BV, n: int, cast_to: Type[CastType], **kwargs) -> List[CastType]: ...
1038
1006
 
1039
1007
  @overload
1040
- def eval_exact(self, e: claripy.ast.Bool, n: int, cast_to: None = ..., **kwargs) -> List[bool]:
1041
- ...
1008
+ def eval_exact(self, e: claripy.ast.Bool, n: int, cast_to: None = ..., **kwargs) -> List[bool]: ...
1042
1009
 
1043
1010
  @overload
1044
- def eval_exact(self, e: claripy.ast.Bool, n: int, cast_to: Type[CastType], **kwargs) -> List[CastType]:
1045
- ...
1011
+ def eval_exact(self, e: claripy.ast.Bool, n: int, cast_to: Type[CastType], **kwargs) -> List[CastType]: ...
1046
1012
 
1047
1013
  @overload
1048
- def eval_exact(self, e: claripy.ast.FP, n: int, cast_to: None = ..., **kwargs) -> List[float]:
1049
- ...
1014
+ def eval_exact(self, e: claripy.ast.FP, n: int, cast_to: None = ..., **kwargs) -> List[float]: ...
1050
1015
 
1051
1016
  @overload
1052
- def eval_exact(self, e: claripy.ast.FP, n: int, cast_to: Type[CastType], **kwargs) -> List[CastType]:
1053
- ...
1017
+ def eval_exact(self, e: claripy.ast.FP, n: int, cast_to: Type[CastType], **kwargs) -> List[CastType]: ...
1054
1018
 
1055
1019
  def eval_exact(self, e, n, cast_to=None, **kwargs):
1056
1020
  """
@@ -170,9 +170,9 @@ class STOP:
170
170
  stop_message[STOP_VEX_LIFT_FAILED] = "Failed to lift block to VEX"
171
171
  stop_message[STOP_SYMBOLIC_PC] = "Instruction pointer became symbolic"
172
172
  stop_message[STOP_SYMBOLIC_READ_ADDR] = "Attempted to read from symbolic address"
173
- stop_message[
174
- STOP_SYMBOLIC_READ_SYMBOLIC_TRACKING_DISABLED
175
- ] = "Attempted to read symbolic data from memory but symbolic tracking is disabled"
173
+ stop_message[STOP_SYMBOLIC_READ_SYMBOLIC_TRACKING_DISABLED] = (
174
+ "Attempted to read symbolic data from memory but symbolic tracking is disabled"
175
+ )
176
176
  stop_message[STOP_SYMBOLIC_WRITE_ADDR] = "Attempted to write to symbolic address"
177
177
  stop_message[STOP_SYMBOLIC_BLOCK_EXIT_CONDITION] = "Guard condition of block's exit statement is symbolic"
178
178
  stop_message[STOP_SYMBOLIC_BLOCK_EXIT_TARGET] = "Target of default exit of block is symbolic"
angr/storage/file.py CHANGED
@@ -438,15 +438,19 @@ class SimPackets(SimFileBase):
438
438
  self.content = []
439
439
  else:
440
440
  self.content = [
441
- x
442
- if type(x) is tuple
443
- else (x, len(x) // 8)
444
- if isinstance(x, claripy.Bits)
445
- else (x.ast, len(x) // 8)
446
- if isinstance(x, SimActionObject)
447
- else (claripy.BVV(x), len(x))
448
- if type(x) is bytes
449
- else None
441
+ (
442
+ x
443
+ if type(x) is tuple
444
+ else (
445
+ (x, len(x) // 8)
446
+ if isinstance(x, claripy.Bits)
447
+ else (
448
+ (x.ast, len(x) // 8)
449
+ if isinstance(x, SimActionObject)
450
+ else (claripy.BVV(x), len(x)) if type(x) is bytes else None
451
+ )
452
+ )
453
+ )
450
454
  for x in self.content
451
455
  ]
452
456
  if any(x is None for x in self.content):
@@ -77,9 +77,11 @@ class MemoryObjectMixin(CooperationBase):
77
77
  elements = [
78
78
  o.bytes_at(
79
79
  a,
80
- ((c_objects[i + 1][0] - a) & mask)
81
- if i != len(c_objects) - 1
82
- else ((c_objects[0][0] + size - a) & mask),
80
+ (
81
+ ((c_objects[i + 1][0] - a) & mask)
82
+ if i != len(c_objects) - 1
83
+ else ((c_objects[0][0] + size - a) & mask)
84
+ ),
83
85
  endness=endness,
84
86
  )
85
87
  for i, (a, o) in enumerate(c_objects)
@@ -184,9 +186,11 @@ class MemoryObjectSetMixin(CooperationBase):
184
186
  if o.includes(a):
185
187
  chopped = o.bytes_at(
186
188
  a,
187
- ((c_objects[i + 1][0] - a) & mask)
188
- if i != len(c_objects) - 1
189
- else ((c_objects[0][0] + size - a) & mask),
189
+ (
190
+ ((c_objects[i + 1][0] - a) & mask)
191
+ if i != len(c_objects) - 1
192
+ else ((c_objects[0][0] + size - a) & mask)
193
+ ),
190
194
  endness=endness,
191
195
  )
192
196
  chopped_set.add(chopped)
@@ -33,20 +33,12 @@ class MultiValues:
33
33
  self._single_value = (
34
34
  None
35
35
  if v is None
36
- else v
37
- if isinstance(v, claripy.ast.Bits)
38
- else v._single_value
39
- if isinstance(v, MultiValues)
40
- else None
36
+ else v if isinstance(v, claripy.ast.Bits) else v._single_value if isinstance(v, MultiValues) else None
41
37
  )
42
38
  self._values = (
43
39
  offset_to_values
44
40
  if offset_to_values is not None
45
- else v
46
- if isinstance(v, dict)
47
- else v._values
48
- if isinstance(v, MultiValues)
49
- else None
41
+ else v if isinstance(v, dict) else v._values if isinstance(v, MultiValues) else None
50
42
  )
51
43
 
52
44
  if self._single_value is None and self._values is None:
@@ -307,12 +307,12 @@ class RegionedMemoryMixin(MemoryMixin):
307
307
  self.state,
308
308
  related_function_addr,
309
309
  self.endness,
310
- cle_memory_backer=self._cle_memory_backer.get(key, None)
311
- if self._cle_memory_backer is not None
312
- else None,
313
- dict_memory_backer=self._dict_memory_backer.get(key, None)
314
- if self._dict_memory_backer is not None
315
- else None,
310
+ cle_memory_backer=(
311
+ self._cle_memory_backer.get(key, None) if self._cle_memory_backer is not None else None
312
+ ),
313
+ dict_memory_backer=(
314
+ self._dict_memory_backer.get(key, None) if self._dict_memory_backer is not None else None
315
+ ),
316
316
  )
317
317
 
318
318
  return self._regions[key].load(addr, size, bbl_addr, stmt_id, ins_addr, **kwargs)
@@ -324,12 +324,12 @@ class RegionedMemoryMixin(MemoryMixin):
324
324
  self.state,
325
325
  related_function_addr,
326
326
  self.endness,
327
- cle_memory_backer=self._cle_memory_backer.get(key, None)
328
- if self._cle_memory_backer is not None
329
- else None,
330
- dict_memory_backer=self._dict_memory_backer.get(key, None)
331
- if self._dict_memory_backer is not None
332
- else None,
327
+ cle_memory_backer=(
328
+ self._cle_memory_backer.get(key, None) if self._cle_memory_backer is not None else None
329
+ ),
330
+ dict_memory_backer=(
331
+ self._dict_memory_backer.get(key, None) if self._dict_memory_backer is not None else None
332
+ ),
333
333
  )
334
334
 
335
335
  self._regions[key].store(
angr/utils/graph.py CHANGED
@@ -473,6 +473,8 @@ class Dominators:
473
473
  stack = [start_node]
474
474
  while len(stack) > 0:
475
475
  node = stack.pop()
476
+ if node in scanned_nodes:
477
+ continue
476
478
  counter += 1
477
479
 
478
480
  # Mark it as scanned
@@ -491,7 +493,6 @@ class Dominators:
491
493
  if s not in scanned_nodes:
492
494
  stack.append(s)
493
495
  parent[s] = node
494
- scanned_nodes.add(s)
495
496
 
496
497
  if counter >= all_nodes_count:
497
498
  break
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: angr
3
- Version: 9.2.85
3
+ Version: 9.2.87
4
4
  Summary: A multi-architecture binary analysis toolkit, with the ability to perform dynamic symbolic execution and various static analyses on binaries
5
5
  Home-page: https://github.com/angr/angr
6
6
  License: BSD-2-Clause
@@ -17,13 +17,13 @@ Description-Content-Type: text/markdown
17
17
  License-File: LICENSE
18
18
  Requires-Dist: CppHeaderParser
19
19
  Requires-Dist: GitPython
20
- Requires-Dist: ailment ==9.2.85
21
- Requires-Dist: archinfo ==9.2.85
20
+ Requires-Dist: ailment ==9.2.87
21
+ Requires-Dist: archinfo ==9.2.87
22
22
  Requires-Dist: cachetools
23
23
  Requires-Dist: capstone ==5.0.0.post1
24
24
  Requires-Dist: cffi >=1.14.0
25
- Requires-Dist: claripy ==9.2.85
26
- Requires-Dist: cle ==9.2.85
25
+ Requires-Dist: claripy ==9.2.87
26
+ Requires-Dist: cle ==9.2.87
27
27
  Requires-Dist: dpkt
28
28
  Requires-Dist: itanium-demangler
29
29
  Requires-Dist: mulpyplexer
@@ -32,7 +32,7 @@ Requires-Dist: networkx !=2.8.1,>=2.0
32
32
  Requires-Dist: protobuf >=3.19.0
33
33
  Requires-Dist: psutil
34
34
  Requires-Dist: pycparser >=2.18
35
- Requires-Dist: pyvex ==9.2.85
35
+ Requires-Dist: pyvex ==9.2.87
36
36
  Requires-Dist: rich >=13.1.0
37
37
  Requires-Dist: rpyc
38
38
  Requires-Dist: sortedcontainers