Como o arquivo pode conter valores nulos, os filtros orientados a texto, como sed
, falharão. Mas você pode usar uma linguagem de programação que possa manipular nulos, como perl
ou python
. Aqui está uma solução para o Python 3. São algumas linhas mais longas do que o estritamente necessário, para facilitar a leitura.
#!/usr/bin/python
"""Toggle the bit at the specified offset.
Syntax: <cmdname> filename bit-offset"""
import sys
fname = sys.argv[1]
# Convert bit offset to bytes + leftover bits
bitpos = int(sys.argv[2])
nbytes, nbits = divmod(bitpos, 8)
# Open in read+write, binary mode; read 1 byte
fp = open(fname, "r+b")
fp.seek(nbytes, 0)
c = fp.read(1)
# Toggle bit at byte position 'nbits'
toggled = bytes( [ ord(c)^(1<<nbits) ] )
# print(toggled) # diagnostic output
# Back up one byte, write out the modified byte
fp.seek(-1, 1) # or absolute: fp.seek(nbytes, 0)
fp.write(toggled)
fp.close()
Salve-o em um arquivo (por exemplo, bitflip
), torne-o executável e execute-o com o nome do arquivo a ser modificado e o deslocamento em bits . Observe que isso modifica o arquivo no lugar. Execute-o duas vezes com o mesmo offset e você terá seu arquivo restaurado.