使用python从linux上的特定内存地址读取值

使用python从linux上的特定内存地址读取值,python,python-3.x,Python,Python 3.x,我需要python中的函数从Linux上的特定内存地址读取值。 我有一个PID进程和内存地址“4df0568”。 我尝试使用ctypes,ptrace 示例:地址“4df0568”上的int32值=3065 我需要一个循环函数来读取这个地址并返回一个int值 注意:这是一个游戏内存地址 编辑:这是一个解决方案 pid = 4563 address=0x4df0568 # top of stack (have a look at /proc/{pid}/maps for the interest

我需要python中的函数从Linux上的特定内存地址读取值。 我有一个PID进程和内存地址“4df0568”。 我尝试使用ctypes,ptrace

示例:地址“4df0568”上的int32值=3065

我需要一个循环函数来读取这个地址并返回一个int值

注意:这是一个游戏内存地址

编辑:这是一个解决方案

pid = 4563

address=0x4df0568 # top of stack (have a look at /proc/{pid}/maps for the interesting addresses)                                               

    fd = open(f"/proc/{pid}/mem", "rb")
    fd.seek(address)
    value = fd.read(4) # read an int32
    print(int.from_bytes(value, byteorder='little'))


这回答了你的问题吗?thx,但这在linux的外部进程上不起作用。我明白了。Python并不是真正围绕着低层次的构造而设计的。如果找不到纯Python的方法,我建议您用另一种语言编写一个库,并使用python中的FFI调用它。如果您试图读取操作系统未分配给进程的内存位置,我有理由相信这是不可能的——现代操作系统不喜欢软件试图触摸分配给其他进程的内存进程。我错误地删除了Previous注释,这是一个解决方案:address=0x4df0568#栈顶(查看/proc/{pid}/maps中感兴趣的地址)fd=open(f)/proc/{pid}/mem,“rb”)fd.seek(address)value=fd.read(4)#读取一个int32打印(int.from#字节)(value,byteorder='little'))这回答了你的问题吗?thx,但这在linux上的外部进程上不起作用。我明白了。Python并不是真正围绕着低级构造而设计的。如果你找不到纯Python的方法,我建议用另一种语言编写一个库,并使用Python中的FFI调用它。如果你试图读取内存位置这不是由操作系统分配给进程的,我有理由相信这是不可能的——现代操作系统不喜欢软件试图触摸分配给其他进程的内存。我错误地删除了Previous注释,这是一个解决方案:address=0x4df0568#top of stack(查看/proc/{pid}/感兴趣地址的映射)fd=open(f)/proc/{pid}/mem,“rb”)fd.seek(address)value=fd.read(4)#读取int32打印(int.from_字节(value,byteorder='little'))