Мой вопрос: как я могу прочитать содержимое адреса памяти в python? пример: ptr = id (7) Я хочу прочитать содержимое памяти, указанное ptr. Спасибо.
Доступ к адресу памяти в python
Ответ 1
Посмотрите 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'
Ответ 2
В Python вы обычно не используете указатели для доступа к памяти, если вы не взаимодействуете с приложением C. Если это то, что вам нужно, посмотрите на модуль ctypes для функций доступа.
Ответ 3
"Я хочу прочитать содержимое памяти, указанное ptr"
Введите код в C. Используйте код из Python. http://docs.python.org/extending/extending.html
Ответ 4
Вы пытаетесь "перевернуть" id
, чтобы получить объект Python thing
из результата id(thing)
? Я даже не знаю, можно ли это сделать, и это определенно не должно быть сделано; это победит сбор мусора и приведет к отсутствию безопасности памяти. Если ваша программа делает это, это означает, что вы действительно имеете ссылки на вещи (цифры id
), которые сборщик мусора не знает, это ссылки, поэтому он может освобождать объекты, которые вы все еще используете (в зависимости от того, что происходит в остальной части программа).
Если вы пытаетесь прочитать необработанную память из указателя, который вы вернули из расширения C или чего-то еще, тогда вам могут помочь другие ответы.