【发布时间】:2012-04-28 13:41:29
【问题描述】:
假设内存地址0A7F03E4 存储一个值124。如何使用 python 将其更改为300?是否为此类任务提供了模块?
【问题讨论】:
-
您可能需要处理内存保护。如果这是代码或只读数据,那么您将无法写入该地址。
-
你说的是虚拟内存地址还是物理内存地址?
假设内存地址0A7F03E4 存储一个值124。如何使用 python 将其更改为300?是否为此类任务提供了模块?
【问题讨论】:
>>> import ctypes
>>> memfield = (ctypes.c_char).from_address(0x0A7F03E4)
现在您可以读取 memfield,分配给它,做任何您想做的事情。当然,只要您可以访问该内存位置。
你也可以用
得到一个 memarray>>> memarray = (ctypes.c_char*memoryfieldlen).from_address(0x0A7F03E4)
它会为您提供一个 memfields 列表。
更新:我刚刚读到您想检索一个整数。在这种情况下,当然使用 ctypes.c_int。一般来说:使用适当的 ctype ;)
【讨论】:
您是否尝试过内置的 ctypes 模块? 它提供了一个 memset 函数,可以满足你的需要。
【讨论】:
在 UNIX 上,可以尝试通过open()/dev/mem 设备访问物理内存,然后使用file 对象的seek() 方法将文件指针设置到正确的位置。然后使用write() 方法更改值。不要忘记将数字编码为原始字符串!
不过,通常只有 root 用户可以访问此设备。
【讨论】: