web-dev-qa-db-fra.com

Accéder à l'adresse mémoire en python

Ma question est: comment lire le contenu d'une adresse mémoire en python? exemple: ptr = id (7) Je veux lire le contenu de la mémoire pointé par ptr. Merci.

28
Academia

Jetez un oeil à ctypes.string_at . Voici un exemple. Il vide la structure des données brutes d'un entier Python 3. J'espère que vous ne faites cela que comme un exercice. Aucune raison de le faire 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))))

Production

b'02000000d8191e1e01000000ff7f'
36
Mark Tolonen

En Python, vous n'utilisez généralement pas de pointeurs pour accéder à la mémoire, sauf si vous vous connectez à une application C. Si c'est ce dont vous avez besoin, consultez le module ctypes pour les fonctions d'accesseur.

8
Raymond Hettinger

"Je veux lire le contenu de la mémoire pointé par ptr"

Écrivez le code en C. Utilisez le code de Python. http://docs.python.org/extending/extending.html

4
S.Lott

Essayez-vous de "renverser" id pour obtenir Python objet thing à partir du résultat de id(thing)? Je ne sais même pas savoir 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 le fait, cela signifie que vous avez effectivement des références aux choses (le id nombres) que le garbage collector ne connaît pas sont des références, il pourrait donc 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 renvoyé d'une extension C ou quelque chose, les autres réponses peuvent vous aider.

1
Ben