首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python中写入内存中的特定地址

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

Stack Overflow用户
提问于 2016-08-01 18:30:35
回答 3查看 4.8K关注 0票数 8

我知道python是一种高级语言,它在自己的用户/开发人员身上管理内存分配等,不像c、c++等其他语言那样需要担心。

但是有没有一种方法可以让我们在python中的特定内存地址中写入一些值呢?

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

EN

回答 3

Stack Overflow用户

发布于 2021-04-13 11:17:26

在给定内存地址的情况下,可以使用ctype修改任何用户空间内存位置。

例如,numpy array暴露了数组缓冲区的原始地址,因此您可以像这样访问/修改该值:

代码语言:javascript
复制
import numpy as np
import ctypes

a=np.random.rand(2,3)
addr=a.__array_interface__['data'][0]
p=ctypes.c_void_p(addr)
pf=ctypes.cast(p, ctypes.POINTER(ctypes.c_double))
assert pf[0] == a[0,0]
assert pf[1] == a[0,1]
assert pf[3] == a[1,0]

但是你不能轻易地将这个技巧应用到像int这样的普通python变量上,因为id()返回的是python对象的起始地址,而不是存储值的确切位置,请检查以下内容:

代码语言:javascript
复制
from ctypes import *
a=123456
p=cast(c_void_p(id(a)), POINTER(c_int))
print(p[:10])

从结果中,我们可以看到值实际上位于偏移量6*4=24处

代码语言:javascript
复制
[1, 0, -1792371528, 127, 1, 0, 123456, 1, 1, 0]
票数 2
EN

Stack Overflow用户

发布于 2016-08-01 18:47:47

Python本身不包括任何允许程序员直接访问内存的工具。这意味着不幸的是(或高兴的是,取决于你的观点)你的问题的答案是“不”。

票数 1
EN

Stack Overflow用户

发布于 2018-07-29 01:20:25

我不知道是怎么回事,但我知道为什么。直接写入寄存器允许设置特定的微控制器。例如,配置端口或外围设备。这通常是用C(更接近硬件)完成的,但如果你出于其他原因想要使用Python,这将是一个很好的特性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38696575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档