2012-04-28 106 views
5

可以说内存地址0A7F03E4存储值124。如何使用python将其更改为300?有没有提供这种任务的模块?如何更改存储在内存地址中的值?

+1

您可能需要处理内存保护。如果这是代码或只读数据,那么您将无法写入该地址。 – 2012-04-28 13:54:05

+0

你是说虚拟内存地址还是物理内存地址? – 2012-04-28 14:05:42

回答

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进程的虚拟内存地址,而不是物理地址?后者可能无法使用,具体取决于操作系统和进程权限。 – 2012-04-28 14:01:37

+0

当你想要访问非数据字段或可访问内存外的字段时,当然会得到段错误。 – ch3ka 2012-04-28 14:06:02

1

你有没有试过内置ctypes模块?它提供了一个memset函数,它应该给你你需要的东西。

1

在UNIX上,你可以尝试open()/dev/mem设备访问物理内存,然后使用file对象的seek()方法设置文件指针到正确的位置。然后使用write()方法更改该值。不要忘记将数字编码为原始字符串!

但是,通常只有root用户才能访问此设备。