- 主题:二进制文件搜索特征串的问题
假设二进制文件只有唯一特征串b'PYTHON',我如何分段读入找到
这个特征串的索引位置呢?
假设我读入的缓冲是1024字节,
很有可能我的特征串在2个缓冲区的
分界位置上。
缓冲1读入的是 b'任意字节PYH'
缓冲2读入的是b'HON任意字节'
这样会导致文件内存在b'PYTHON',
而执行脚本搜索不到。
这个问题应该如何解决?
--
修改:javame FROM 58.37.36.*
FROM 58.37.36.*
读完一片之后指针往回挪5字节,再读下一片
【 在 javame (yimin) 的大作中提到: 】
: 假设二进制文件只有唯一特征串b'PYTHON',我如何分段读入找到
: 这个特征串的索引位置呢?
: 假设我读入的缓冲是1024字节,
: ...................
--
FROM 106.121.162.*
我这样处理你看行吗? 看上去得再双缓冲来区分边界字节串的解析。
chunk = bytearray()
while True:
chunk = bytearray(f.read(1024))
chunk_length = len(chunk)
if not chunk:
break
if chunk[-1] != 'N' and chunk[2:-1] != 'ON' and chunk[-3:-1] != 'HON' and and chunk[-4:-1] = 'THON'
and chunk[-5:-1] = 'YTHON'
m.write(chunk)
m.close()
f.close()
【 在 xxxss 的大作中提到: 】
: 读完一片之后指针往回挪5字节,再读下一片
--
FROM 124.78.12.*
你读1024进来,然后只比较了5个字节?
你说你要搜索关键字,读进来那1024个字节,直接做匹配算法就行了啊,只不过在准备读下一个1024 之前 往回seek 5个字节,再继续读下一个1024,
至于你这为啥要另存一个文件,你相应处理一下别存重了
【 在 javame (yimin) 的大作中提到: 】
: 我这样处理你看行吗? 看上去得再双缓冲来区分边界字节串的解析。
: chunk = bytearray()
: while True:
: ...................
--
修改:xxxss FROM 106.121.131.*
FROM 106.121.131.*
我是比较1024尾部的5个字节,来判断是否存在混叠。
没有混叠,我就将这1024字节写入新文件。
如果存在混叠的字节串,我就读入下一个缓冲区。
比如我上一个缓冲区读入最后1个字节是N,
我就读入下一个缓冲区的前5个字节,判断是否
为PYTHO
读入最后2个字节是ON,
我就读入下一个缓冲区的前4个字节,判断是否
为PYTH
【 在 xxxss 的大作中提到: 】
: 你读1024进来,然后只比较了5个字节?
--
修改:javame FROM 124.78.12.*
FROM 124.78.12.*
我的意思是你只需要判断1024那个位置是否有关键字?别的位置不用管了?
【 在 javame @ [Python] 的大作中提到: 】
:
: 我是比较1024尾部的5个字节,来判断是否存在混叠。
: 没有混叠,我就将这1024字节写入新文件。
: 如果存在混叠的字节串,我就读入下一个缓冲区。
:
#发自zSMTH@ELE-AL00
--
FROM 106.121.131.*