【问题标题】:How to change the value stored in memory address?如何更改存储在内存地址中的值?
【发布时间】:2012-04-28 13:41:29
【问题描述】:

假设内存地址0A7F03E4 存储一个值124。如何使用 python 将其更改为300?是否为此类任务提供了模块?

【问题讨论】:

  • 您可能需要处理内存保护。如果这是代码或只读数据,那么您将无法写入该地址。
  • 你说的是虚拟内存地址还是物理内存地址?

标签: python memory


【解决方案1】:
>>> import ctypes
>>> memfield = (ctypes.c_char).from_address(0x0A7F03E4)

现在您可以读取 memfield,分配给它,做任何您想做的事情。当然,只要您可以访问该内存位置。

你也可以用

得到一个 memarray
>>> memarray = (ctypes.c_char*memoryfieldlen).from_address(0x0A7F03E4)

它会为您提供一个 memfields 列表。

更新:我刚刚读到您想检索一个整数。在这种情况下,当然使用 ctypes.c_int。一般来说:使用适当的 ctype ;)

【讨论】:

  • 这不是给你python进程的虚拟内存地址而不是物理地址吗?后者可能无法访问,具体取决于操作系统和进程权限。
  • 当你想访问一个非数据域,或者一个超出内存的域时,你当然会得到一个段错误。
【解决方案2】:

您是否尝试过内置的 ctypes 模块? 它提供了一个 memset 函数,可以满足你的需要。

【讨论】:

    【解决方案3】:

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

    不过,通常只有 root 用户可以访问此设备。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      • 2015-08-22
      • 1970-01-01
      • 2018-03-27
      • 1970-01-01
      相关资源
      最近更新 更多