PyMemoryEditor 3.4.0__py3-none-any.whl → 3.4.2__py3-none-any.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.
@@ -8,7 +8,7 @@ Supported platforms: Windows, Linux and macOS (32-bit and 64-bit).
8
8
  """
9
9
 
10
10
  __author__ = "Jean Loui Bernard Silva de Jesus"
11
- __version__ = "3.4.0"
11
+ __version__ = "3.4.2"
12
12
 
13
13
  import logging
14
14
  import sys
@@ -1946,9 +1946,13 @@ class MemoryToolset:
1946
1946
  # per region, so one whole multi-gigabyte heap would be
1947
1947
  # mapped however far past the budget that ran. Aligned
1948
1948
  # seams cut no pointer slot, and the map merges adjacent
1949
- # ranges back, so the result is unchanged.
1949
+ # ranges back, so the result is unchanged. Unreadable
1950
+ # regions are left out before cutting: the map skips them
1951
+ # anyway, and on Windows they are most of the address
1952
+ # space -- millions of pieces for nothing (#127).
1950
1953
  memory_regions=split_regions(
1951
- regions, self.config.scan_batch_bytes
1954
+ [region for region in regions if region.is_readable],
1955
+ self.config.scan_batch_bytes,
1952
1956
  ),
1953
1957
  progress_callback=progress,
1954
1958
  should_stop=should_stop,
@@ -2247,6 +2251,15 @@ class MemoryToolset:
2247
2251
  truncated = False
2248
2252
  timed_out = False
2249
2253
 
2254
+ # Only readable memory can hold a match, and the library drops the
2255
+ # rest itself -- but only once a batch reaches it, after the cutting
2256
+ # and batching here have been paid for. On Windows the snapshot spans
2257
+ # the whole address space, MEM_FREE and MEM_RESERVE included (~128 TiB
2258
+ # on a 64-bit target): cut into 64 MiB pieces, that was ~2 million
2259
+ # batches, and the scan spent its whole budget on them before it
2260
+ # reached the heap (#127).
2261
+ regions = [region for region in regions if region.is_readable]
2262
+
2250
2263
  if split_overlap is not None:
2251
2264
  regions = split_regions(
2252
2265
  regions, self.config.scan_batch_bytes, overlap=split_overlap
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: PyMemoryEditor
3
- Version: 3.4.0
3
+ Version: 3.4.2
4
4
  Summary: Read, write and scan process memory in a few lines of Python — Cheat Engine-style scans, pointer chains and AOB search on Windows, Linux and macOS.
5
5
  Project-URL: Homepage, https://github.com/JeanExtreme002/PyMemoryEditor
6
6
  Project-URL: Documentation, https://pymemoryeditor.readthedocs.io
@@ -38,7 +38,8 @@ Classifier: Typing :: Typed
38
38
  Requires-Python: >=3.10
39
39
  Provides-Extra: app
40
40
  Requires-Dist: psutil<8,>=5.9; extra == 'app'
41
- Requires-Dist: pyside6<7,>=6.5; extra == 'app'
41
+ Requires-Dist: pyside6<6.12,>=6.5; (python_version < '3.12') and extra == 'app'
42
+ Requires-Dist: pyside6<7,>=6.5; (python_version >= '3.12') and extra == 'app'
42
43
  Provides-Extra: dev
43
44
  Requires-Dist: build; extra == 'dev'
44
45
  Requires-Dist: flake8; extra == 'dev'
@@ -46,7 +47,8 @@ Requires-Dist: hypothesis; extra == 'dev'
46
47
  Requires-Dist: mcp<3,>=2; extra == 'dev'
47
48
  Requires-Dist: mypy; extra == 'dev'
48
49
  Requires-Dist: psutil<8,>=5.9; extra == 'dev'
49
- Requires-Dist: pyside6<7,>=6.5; extra == 'dev'
50
+ Requires-Dist: pyside6<6.12,>=6.5; (python_version < '3.12') and extra == 'dev'
51
+ Requires-Dist: pyside6<7,>=6.5; (python_version >= '3.12') and extra == 'dev'
50
52
  Requires-Dist: pytest; extra == 'dev'
51
53
  Requires-Dist: pytest-cov; extra == 'dev'
52
54
  Requires-Dist: pytest-qt; extra == 'dev'
@@ -60,7 +62,8 @@ Provides-Extra: tests
60
62
  Requires-Dist: hypothesis; extra == 'tests'
61
63
  Requires-Dist: mcp<3,>=2; extra == 'tests'
62
64
  Requires-Dist: psutil<8,>=5.9; extra == 'tests'
63
- Requires-Dist: pyside6<7,>=6.5; extra == 'tests'
65
+ Requires-Dist: pyside6<6.12,>=6.5; (python_version < '3.12') and extra == 'tests'
66
+ Requires-Dist: pyside6<7,>=6.5; (python_version >= '3.12') and extra == 'tests'
64
67
  Requires-Dist: pytest; extra == 'tests'
65
68
  Requires-Dist: pytest-cov; extra == 'tests'
66
69
  Requires-Dist: pytest-qt; extra == 'tests'
@@ -1,4 +1,4 @@
1
- PyMemoryEditor/__init__.py,sha256=xLgUi2R-C4CS8imhiSFr5bOQrYjqc-P1amRkKBBXChQ,3234
1
+ PyMemoryEditor/__init__.py,sha256=1c8lK8lbGxqpOECcbbgtr99xFf6m-_-doiQi0CROKUg,3234
2
2
  PyMemoryEditor/__main__.py,sha256=xukvvLjQ0BnYnnxMZda1cvyZ-BurSUk8dAGQybIqMD4,95
3
3
  PyMemoryEditor/enums.py,sha256=q_SWQYgh4F7yyAa7sZvNo2Sw91TSm3aTqPfTA7OqldM,322
4
4
  PyMemoryEditor/app/__init__.py,sha256=DGCYWpqGKPSeBa7cvzL7GmmhIfDDgF6vtim0VtLcfOo,357
@@ -40,7 +40,7 @@ PyMemoryEditor/mcp/policy.py,sha256=cfG1A-IR1kTe_neLZFtd-JAqkZ_vcE4QYrPgNUv3yb0,
40
40
  PyMemoryEditor/mcp/procinfo.py,sha256=ufT07yoffyfA7KiBrdaQm7Hkf1WbpGveZMwcSmR8NQQ,10136
41
41
  PyMemoryEditor/mcp/server.py,sha256=YBJDMM2pXaavG_o-CnO8yL6aFecdsNfv6wEIqqard-o,33564
42
42
  PyMemoryEditor/mcp/session.py,sha256=0gy629j8lJrq4VxqUTMbxJ-D-D1IJo47T-UwtAIEzZE,31645
43
- PyMemoryEditor/mcp/toolset.py,sha256=Po_qLROe9WfACNHoyn1OvmHKkzEOvNhZeP8R89PDqYg,118583
43
+ PyMemoryEditor/mcp/toolset.py,sha256=uLivIP1CIhFhVaXh2v8yjXrkNFiVwZAA8YRXrpA5LIU,119450
44
44
  PyMemoryEditor/process/__init__.py,sha256=Xh5jngBqZyNIA9y3uwE49LxK8uH8YYsu6qotx1mP_WE,213
45
45
  PyMemoryEditor/process/_guard.py,sha256=91TKDEpFthFn99QNOioMD9hp2kzAOHA_qtkEgW9tJtI,1471
46
46
  PyMemoryEditor/process/abstract.py,sha256=1cmPkKqZgb4RCZGlvEgYbL4D_RJUq6PXrB9v5YCGgoQ,75572
@@ -69,8 +69,8 @@ PyMemoryEditor/win32/enums/process_operations.py,sha256=wn-aMl01VVg-2rFavR9szBNR
69
69
  PyMemoryEditor/win32/enums/standard_access_rights.py,sha256=VGWlTagW4hvbm2AjZ4NK56ZrQwRmEl9Kz9GSCG8o-HI,738
70
70
  PyMemoryEditor/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
71
  PyMemoryEditor/app/assets/icon.svg,sha256=T7OqR7ldqC_dK2Ib2ntsH2rWO-Z5RzNK4WdD1wFwgM4,7132
72
- pymemoryeditor-3.4.0.dist-info/METADATA,sha256=ol6qiQvMO8L2cJBK-YAwXI1x6lwkvHnxxX8NzZeX6S4,11037
73
- pymemoryeditor-3.4.0.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
74
- pymemoryeditor-3.4.0.dist-info/entry_points.txt,sha256=qxto0CWCXsjLmE0jClEgz1Xriljr6IV6d3AySjIlw7E,127
75
- pymemoryeditor-3.4.0.dist-info/licenses/LICENSE,sha256=YkOx6Nvkavq36bgiAc3eF85SBG0Qu14KMAvxmv6Ssjc,1089
76
- pymemoryeditor-3.4.0.dist-info/RECORD,,
72
+ pymemoryeditor-3.4.2.dist-info/METADATA,sha256=Jq7RrtePHoFzLpPjMMhZYbP_MwoCk-VjzX57KLPRqm8,11372
73
+ pymemoryeditor-3.4.2.dist-info/WHEEL,sha256=2iZrJkDIkeDh0k9SikKMqFuRP-ua6mb4Ir1AsER4BEw,87
74
+ pymemoryeditor-3.4.2.dist-info/entry_points.txt,sha256=qxto0CWCXsjLmE0jClEgz1Xriljr6IV6d3AySjIlw7E,127
75
+ pymemoryeditor-3.4.2.dist-info/licenses/LICENSE,sha256=YkOx6Nvkavq36bgiAc3eF85SBG0Qu14KMAvxmv6Ssjc,1089
76
+ pymemoryeditor-3.4.2.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.32.4
2
+ Generator: hatchling 1.33.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any