Skip to main content

Real pointers and some memory utilities for python

Project description

pyptrs

This library provides real pointers (as in languages like C) and some memory access utilites.

Installation

pip install pyptrs

Creating A Pointer

You should never create pointers directly. Instead, use the functions below:

pyptrs.pointer_to_object(obj, c_object = False)

Return a pointer to obj. c_object specifies whether to treat the obj as a python object or a C object. If c_object is True, obj must be an instance of a ctypes C data type. You can learn more information about these data types from here, here and here

pyptrs.pointer_to_address(address, ctype = None)

Return a pointer that points to the given address. If ctype is None, a python object is assumed to be living in that address. Otherwise, ctype must be the ctypes C data type corresponding to the type of the object living in address. You can learn more information about these data types from here, here and here

Pointer Objects

Pointer.get_size()

Return the number of bytes occupied by the pointed object in memory.

Pointer.get_mem()

Return a bytes object representing the pointed object.

Pointer.temp_value(value, force_write = False)

Return a context manager that dereferences and assigns value to the pointed object at __enter__ and reverts this assignment at __exit__. If size of value is bigger than the pointed object, a MemoryError will be raised. In order to prevent this, pass True to force_write.

Simulated Operators

pyptrs.dereference(pointer, *value, force_write = False)

If value is not given, it just dereferences the pointer. If value is given, it must be a single argument and it dereferences the pointed object and assigns value to it then returns a backup_id that can be passed to pyptrs.mem_restore(). If size of value is bigger than the pointed object, a MemoryError will be raised. In order to prevent this, pass True to force_write. Type of value can be anything if the pointed object is a python object. If the type of the pointed object is a C type, type of value must be the corresponding ctypes C data type.

pyptrs.address_of(obj, c_object = False)

Return address of the obj. If c_object is True type of obj must be a ctypes C data type. You can learn more information about these data types from here, here and here If c_object is True, address of the actual C object is returned, not the address of its ctypes wrapper.

Utils

pyptrs.mem_read(address, amount = 1)

Read amount bytes starting from address and return them as a bytes object.

pyptrs.mem_write(address, data = b"")

Write the bytes represented by data to address and return a backup_id that can be passed to pyptrs.mem_restore().

pyptrs.mem_restore(backup_id)

Revert the changes done to memory by the function that returned backup_id.

pyptrs.mem_restore_last()

Revert the last change done to memory either by pyptrs.dereference() or pyptrs.mem_write().

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyptrs-1.0.0.post4.tar.gz (4.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyptrs-1.0.0.post4-py2.py3-none-any.whl (4.7 kB view details)

Uploaded Python 2Python 3

File details

Details for the file pyptrs-1.0.0.post4.tar.gz.

File metadata

  • Download URL: pyptrs-1.0.0.post4.tar.gz
  • Upload date:
  • Size: 4.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.0

File hashes

Hashes for pyptrs-1.0.0.post4.tar.gz
Algorithm Hash digest
SHA256 3f2abd1d232ceedc14b940a7c2fcdd64a893e4a4cd79e79a45ff2185b1a0b54e
MD5 4c5c6aeb95308a441c45d5373d3efa17
BLAKE2b-256 1425c97d5ec04eb4e80b533393af457c67a6471b008eae85a5a49b97f1df576a

See more details on using hashes here.

File details

Details for the file pyptrs-1.0.0.post4-py2.py3-none-any.whl.

File metadata

  • Download URL: pyptrs-1.0.0.post4-py2.py3-none-any.whl
  • Upload date:
  • Size: 4.7 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.0

File hashes

Hashes for pyptrs-1.0.0.post4-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 e96993a9e68ea5fefaff0fd9e252f407534f53c1f19458fc15584478c7118f67
MD5 28ca86206e25dda7afb220a3318f7710
BLAKE2b-256 4a013d4f502c74e8b25609ba163dbe88418957a18bdde65fac1d9bdae142ae3b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page