Eu quero encontrar cópias repetidas da seção de configuração dentro do despejo de partição (arquivo binário), usando padrão e cabeçalho 'mágico'. A seção de configuração sempre começa com 202 '0xff'
bytes seguidos por 4 bytes '\x00\x00\x23\x27'
. O script deve identificar diferentes cópias de configuração dentro da partição e imprimir endereços (em bytes) onde as ocorrências do padrão iniciam. Ajustei um script python existente para o meu padrão, mas não funciona, apenas gera erros devido à mistura de bytes com strings. Como consertar esse script?
#!/usr/bin/env python3
import re
import mmap
import sys
magic = '\xff' * 202
pattern = magic + '\x00\x00\x23\x27'
fh = open(sys.argv[1], "r+b")
mf = mmap.mmap(fh.fileno(), 0)
mf.seek(0)
fh.seek(0)
for occurence in re.finditer(pattern, mf):
print(occurence.start())
mf.close()
fh.close()
erros:
$ ./matcher.py dump.bin
Traceback (most recent call last):
File "/home/eviecomp/BC2UTILS/dump_previous_profile/./matcher.py", line 13, in <module>
for occurence in re.finditer(pattern, mf):
File "/usr/lib/python3.9/re.py", line 248, in finditer
return _compile(pattern, flags).finditer(string)
TypeError: cannot use a string pattern on a bytes-like object
padrão e magia:
Embora
re
possa lidar com cadeias de bytes (você só precisa prestar atenção ao texto da mensagem de aviso e procurar umbytes
objeto, não umstr
), parece um exagero aqui.Ou, pela beleza do Python moderno, você também pode usar um "iterador" nas correspondências: