在python中写入内存中的特定地址

pkm*_*pkm 6 python python-2.7

我知道python是一种高级语言,可以管理内存分配等。它自己的用户/开发人员不必像c,c ++等其他语言那样担心太多。

但是有没有办法可以在python的特定内存地址中写入一些值

我知道id(),如果强制转换为十六进制类型可以给出十六进制的位置,但是我们如何在一个位置写。

Ami*_*ory 3

首先,正如评论中所指出的,你为什么要做这样的事情是一个很大的问题。你应该仔细考虑是否还有其他选择。

话虽如此,通过扩展来做到这一点非常容易。Python 本身的构建使得可以很容易地通过 C 或 C++ 对其进行扩展通过Cython做到这一点甚至更容易。

下面概述了如何构建一个采用整数p和 的Python 可调用函数v。它将把值写入v数字地址为 的内存地址p

注意再次注意,这只是一个技术答案。整个操作及其部分内容都是有问题的,您应该考虑您想要实现的目标。

创建一个文件modify.h,内容为:

void modify(int p, int v);
Run Code Online (Sandbox Code Playgroud)

创建一个文件modify.c,内容为:

#include "modify.h"

void modify(int p, int v)
{
    *(int *)(p) = v;
}
Run Code Online (Sandbox Code Playgroud)

创建一个文件modify.pyx,内容为:

cdef extern from "modify.h"
     void modify(int p, int v)

def py_modify(p, v):
    modify(p, v)
Run Code Online (Sandbox Code Playgroud)

最后,创建setup.py,内容如下:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

ext_modules = [Extension(
    name="modify",
    sources=["modify.pyx", "modify.c"])]

setup(
    name = 'modify',
    cmdclass = {'build_ext': build_ext},
    ext_modules = ext_modules,
    # ext_modules = cythonize(ext_modules)  ? not in 0.14.1
    # version=
    # description=
    # author=
    # author_email=
)
Run Code Online (Sandbox Code Playgroud)

我希望您仅将此答案用于学习目的。