从内存读取数据并解码

时间:2019-01-29 21:21:45

标签: memory encoding byte

我正在尝试对驻留在进程内存中的字符串值进行模式匹配。我将内存位置存储在列表中,然后遍历该列表并确定其内容。

for address in l:  
    print "\n\n"
    print address

    addressContent = str(address.read(100)).replace(" ", "")
    print addressContent[0:10] + "\n" + addressContent + "\n"
    print "s a v e d" == addressContent[0:10].lower()

我毫无疑问地搜索我想要的内容(字符串“ savedvariables”),但是麻烦在于尝试围绕我搜索的内容确定上下文。这是此搜索的结果。

<Addr: 0x00E2AF48 : "S\x00a\x00v\x00e\x00d\x00V\x00a\x00r\x00i\x00a\x00b\x00l\x00e\x00s\x00\\\x00C\x00a\x00r\x00t\x00o\x00g\x00r\x00a\x00p\x00\xa1"" (bytes)>
S a v e d
S a v e d V a r i a b l e s \ C a r t o g r a p í"╘╓r* ÇM i n i n g . l u a . b a k             ╗".╓

False

为什么搜索后无法准确确定内存的内容?

1 个答案:

答案 0 :(得分:0)

您正在将“ s v e d”与“ s v e d”进行比较,切片中有一个额外的字符

string = 'S a v e d V a r i a b l e s \ C a r t o g r a p í"╘╓r* ÇM i n i n g . l u a . b a k' 
print(string[:10].lower())

s v d

print(string[:9].lower())

s v e d

编辑:我在考虑为什么您的addressContent字符串替换后有空格,这使我认为它们实际上不是空格。尝试在此链接Python: A character that appears to be a space but isn't a space. What is it?

中使用str.encode
addressContent = str(address.read(100)).encode('ascii','replace').replace("?", "")

这有望删除空格。