有没有办法在设置size参数时使buffer()可写而不复制?

时间:2016-07-28 22:37:39

标签: python linux security python-2.x 32-bit

如果一个对象是可变的,那么通过不指定buffer() 的第二个参数(这是一个内置函数)就可以获得一个可修改的缓冲区:

>>> s = bytearray(1000000)   # a million zeroed bytes
>>> t = buffer(s, 1)         # slice cuts off the first byte
>>> s[1] = 5                 # set the second element in s
>>> t[0]                     # which is now also the first element in t!
'\x05'

但是,在我的情况下,我需要指定0x7fffffff作为size参数。在那种情况下:

>>> b = buffer(bytearray('a'), 1,0x7fffffff)

how to make b writeable without copying it’s data?在我的情况下,_ctypes支持被禁用,程序不会以root身份启动 当然,像memoryview这样的东西是可用的,但我放弃了在每个虚拟地址读取内存的可能性。

1 个答案:

答案 0 :(得分:0)

副本是必要的。 bytearray的内部缓冲区根本不是2 GiB长;如果你想要一个2 GiB缓冲区,你需要将bytearray的数据复制到一个新的缓冲区。

如果你以某种方式迫使Python将缓冲区视为你想要它的大小而不复制,那么写入它会破坏你的进程的内存和/或导致段错误。