2012-04-28 3 views
5

Позволяет сказать, что адрес памяти 0A7F03E4 сохраняет значение 124. Как изменить его на 300 с помощью python? Есть ли модуль для такого рода задач?Как изменить значение, сохраненное в адресе памяти?

+1

Возможно, вам придется иметь дело с защитой памяти. Если это код или данные только для чтения, вы не сможете писать на этот адрес. –

+0

Вы говорите об адресе виртуальной памяти или адресе физической памяти? –

ответ

8
>>> import ctypes 
>>> memfield = (ctypes.c_char).from_address(0x0A7F03E4) 

Теперь вы можете читать memfield, присваивать ему, делать все, что хотите. Конечно, если у вас есть доступ к этой ячейке памяти.

вы также можете получить memarray с

>>> memarray = (ctypes.c_char*memoryfieldlen).from_address(0x0A7F03E4) 

, который дает вам список memfields.

Обновление: я просто прочитал, что вы хотите получить целое число. в этом случае, конечно, используйте ctypes.c_int. В общем: используйте соответствующий CType;)

+0

Разве это не даст вам адрес виртуальной памяти процесса python, а не физический адрес? Последний, вероятно, будет недоступен в зависимости от операционной системы и привилегий процесса. –

+0

, когда вы хотите получить доступ к полю, отличному от данных, или к полю вне доступной памяти, вы получите, конечно, segfault. – ch3ka

1

Вы пробовали встроенный модуль ctypes? Он обеспечивает функцию memset, которая должна дать вам то, что вам нужно.

1

На UNIX, вы можете попробовать open() в /dev/mem устройство для доступа к физической памяти, а затем использовать seek() метод file объекта установить указатель файла на нужное место. Затем используйте метод write() для изменения значения. Не забудьте закодировать номер как необработанную строку!

В общем, только пользователь root имеет доступ к этому устройству.

Смежные вопросы