在python2.7中使用ctypes.memset()

时间:2018-03-23 22:48:12

标签: python python-2.7 memset

我正在尝试使用ctypes.memset

在python文件中设置子串

以下是我正在使用的代码:

import ctypes

def memz(string):
    buffsize = len(string)+1
    size = sys.getsizeof(string)
    offset = size - buffsize
    start = string.find('{') -----------> 142
    end = string.find('}') + 1  --------> 167
    location = id(string)
    ctypes.memset(location + offset + start, 0, end-start)

我看到这不会记住子字符串,而是编写内存的其他部分。我怀疑我没有将正确的内存位置传递给ctypes.memset。 我是否需要更改传递给ctypes.memset的位置(位置+偏移+开始)的格式?

PS:解决方案源自Mark data as sensitive in python。我尝试了这个解决方案,但使用了ctypes.CDLL(' libc.so.6')的memset.memset导致了seg错误。我使用的是Python2.7.11。

1 个答案:

答案 0 :(得分:1)

您的解决方案也有效。我尝试在本地运行它,它清除了所需的子字符串。

str = 'This is a {sample} string'

print(ctypes.string_at(id(str), sys.getsizeof(str)))

buffSize = len(str)+1
size = sys.getsizeof(str)
offset = size - buffSize
start = str.find('{')
end = str.find('}') + 1
location = id(str)

ctypes.memset(location + offset + start, 0, end-start)

print(ctypes.string_at(id(str), sys.getsizeof(str)))

它产生以下输出

 ���A,�5~��dThis is a {sample} string
 ���A,�5~��dThis is a  string