Использование Python для возврата указателя на уже существующий адрес памяти - PullRequest
0 голосов
/ 01 февраля 2020

На Python, используя ctypes, если применимо, как я могу вернуть значение, на которое указывает адрес памяти?

Например, когда я загружаю свой x86 P C, скажем, адрес 0xfffff800 указывает на адрес памяти 0xffffffff

Используя Python, как мне извлечь значение 0xfffff800, указывающее на (0xffffffff), и сохранить его в переменной? Это вообще возможно? Я попытался использовать id, но я считаю, что он используется только для локальных экземпляров (если я создал переменную, присвоил ей значение и вернул это значение через id)

Спасибо

1 Ответ

1 голос
/ 01 февраля 2020

Исходя из вашей ссылки на содержимое памяти во время загрузки и идеи, подразумеваемой в вопросе о том, что по любому данному адресу есть только одно значение, я полагаю, что вы говорите о физической памяти. В этом случае нет, то, что вы спрашиваете, невозможно. Только ядро ​​операционной системы (или другая программа, работающая непосредственно на оборудовании) может получить доступ к физической памяти в любой системе, которая в настоящее время поддерживает Python, и, насколько мне известно, не существует реализации Python, которая работает на голом железе. .

Вместо этого операционная система предоставляет каждому работающему процессу свое собственное виртуальное пространство памяти для запуска, содержимое которого в любой момент времени может более или менее находиться где-либо в физической памяти или в режиме подкачки. устройства (дисковые файлы и / или разделы). Система очень старается изолировать процессы друг от друга и от основного физического хранилища, поэтому нет, Python не может получить к нему доступ.

Более того, процессы, работающие в ОС, также не могут вообще получить доступ к произвольным виртуальным адресам, независимо от языка программирования, на котором они написаны. Они могут получить доступ только к тем частям своих адресных пространств, которые ОС им установила. Следовательно, ctypes вам не поможет.

...