我正在尝试使用python读取/写入并更新内存的内容。我发现有很多方法可以继续,比如mmap、memoryview、id((和ctypes。我选择了ctype库,通过使用它,我可以获得地址,但我不知道如何更新内存特定位置的值。不幸的是,我现在还没有写正确的代码。这就是为什么我没有分享。有人能指导我吗?提前感谢
您可以使用from_address
为一系列虚拟内存创建ctypes
缓冲区。
这是一个通常不可能的例子。它接受一个不可变的字符串,并使用ctypes缓冲区进行修改:
>>> from ctypes import *
>>> import sys
>>> s = 'xxxx'
>>> sys.getsizeof(s) # The size of the PyObject s represents
53
>>> id(s) # The address of the PyObject (implementation detail of CPython!)
2092123519664
>>> b=(c_char * sys.getsizeof(s)).from_address(id(s)) # A writeable ctypes buffer
>>> b.raw # Note xxxx in the last few bytes of the buffer.
b'x02x00x00x00x00x00x00x00x90xae7x88xfcx7fx00x00x04x00x00x00x00x00x00x00x91xb1xe4,xe4x8d</xe5x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00xxxxx00'
>>> b[-2]=ord('y') # reassign the last 'x'
>>> s # changed the "immutable" string.
'xxxy'
因此,使用模式(c_char * size).from_address(address)
在虚拟内存中创建一个可以读/写的窗口。