在python中访问内存地址

问题描述 投票:28回答:5

我的问题是:如何在python中读取内存地址的内容?例:ptr = id(7)我想读取ptr指向的内存内容。谢谢。

python memory memory-address
5个回答
36
投票

看看ctypes.string_at。这是一个例子。它转储Python 3整数的原始数据结构。希望您只是在做练习。没有理由使用纯Python进行此操作。

from ctypes import string_at
from sys import getsizeof
from binascii import hexlify
a = 0x7fff 
print(hexlify(string_at(id(a), getsizeof(a))))

输出

b'02000000d8191e1e01000000ff7f'

8
投票

在Python中,除非与C应用程序接口,否则通常不使用指针来访问内存。如果需要,请查看访问器功能的ctypes module


4
投票

“我想读取ptr指向的内存的内容”

在C中编写代码。使用Python中的代码。 http://docs.python.org/extending/extending.html


1
投票

您是否正在尝试“反转” id以从thing的结果中获取Python对象id(thing)?我什至不知道是否可以做到,而且绝对不应该这样做。它会破坏垃圾收集并导致内存安全性不足。如果您的程序这样做,则意味着您有效地引用了垃圾收集器不知道的东西(id数字),因此它可以释放您仍在使用的对象(取决于其余部分的处理方式)该程序)。

如果您尝试从C扩展之类返回的指针中读取原始内存,那么其他答案可能会对您有所帮助。


0
投票

[如果您尝试访问较大的二进制文件,例如图像和视频,而不必永远需要它们在内存中,请考虑使用[weakref][1]

© www.soinside.com 2019 - 2024. All rights reserved.