Accéder à l'adresse mémoire en python
4 réponses
regardez ctypes.string_at. Voici un exemple. Il supprime la structure de données brutes d'un entier Python 3. J'espère que tu ne fais ça que comme un exercice. Aucune raison de faire ça avec du Python pur.
from ctypes import string_at
from sys import getsizeof
from binascii import hexlify
a = 0x7fff
print(hexlify(string_at(id(a), getsizeof(a))))
Sortie
b'02000000d8191e1e01000000ff7f'
en Python, vous n'utilisez généralement pas de pointeurs pour accéder à la mémoire à moins d'interfacer avec une application C. Si c'est ce dont vous avez besoin, regardez le module ctypes pour les fonctions d'accesseur.
"je veux lire le contenu de la mémoire pointé par ptr"
écrire du code en C. Utilisez le code de Python. http://docs.python.org/extending/extending.html
Êtes-vous essayer de "reverse" id
pour obtenir l'objet Python thing
du résultat de id(thing)
? Je ne sais même pas si cela peut être fait, et cela ne devrait certainement pas être fait; cela irait à l'encontre de la collecte des ordures et conduirait à un manque de sécurité de la mémoire. Si votre programme fait cela, cela signifie que vous avez effectivement des références à des choses (le id
nombres) que le collecteur d'ordures ne connaît pas sont des références, de sorte qu'il pourrait libérer des objets que vous utilisez toujours (selon ce qui se passe dans le reste du programme).
si vous essayez de lire la mémoire brute à partir d'un pointeur que vous avez récupéré d'une extension C ou quelque chose, alors les autres réponses peuvent vous aider.