我正在尝试使用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。
答案 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