在Python中,读取内存通常有以下几种方法:
1. 使用`memoryview`对象:
data = bytearray('Hello World')mv = memoryview(data)print(mv) 输出72,对应ASCII码中的字符'H'print(mv) 输出87,对应ASCII码中的字符'W'
2. 使用`ctypes`模块:
import ctypesclass MyStruct(ctypes.Structure):_fields_ = [("x", ctypes.c_int), ("y", ctypes.c_int)]obj = MyStruct()obj.x = 10obj.y = 20data = ctypes.cast(ctypes.pointer(obj), ctypes.POINTER(ctypes.c_ubyte * ctypes.sizeof(obj))).contentsprint(data) 输出10,对应结构体中x的值print(data) 输出20,对应结构体中y的值
3. 使用`io.BytesIO`模块:

import iodata = b'Hello, World!'stream = io.BytesIO(data)print(stream.read()) b'Hello, World!'stream.seek(0)for line in stream:print(line) b'Hello, World!'stream.close()
4. 使用`id()`函数和`ctypes`模块读取特定对象的内存地址:
import ctypesnum = 42address = id(num)value = ctypes.cast(address, ctypes.py_object).valueprint(value)
5. 读取进程内存(需要Windows系统,使用`ctypes`模块):
import ctypespid = 1234process_handle = ctypes.windll.kernel32.OpenProcess(0x1F0FFF, 0, pid)buffer = ctypes.create_string_buffer(4)address = 0xnsize = ctypes.c_ulong(0)ctypes.windll.kernel32.ReadProcessMemory(process_handle, address, buffer, nSize, ctypes.byref(nsize))print(buffer.raw) 输出读取到的内存数据ctypes.windll.kernel32.CloseHandle(process_handle)
以上方法可以帮助你在Python中读取内存数据。请根据你的具体需求选择合适的方法
