
Eu estava procurando como fazer um hexdump reverso e encontrei xxd mencionado. No entanto, não parece funcionar simplesmente:
xxd -r hexdumpfile > binaryfile
Em seguida, comparei a diferença entre as saídas de xxd infile
e hexdump infile
e encontrei três diferenças:
- A saída xxd tem dois pontos após o endereço
- A saída xxd tem as posições nos dados invertidas (por exemplo,
5a42
na saída hexdump torna-se425a
na saída xxd) - Existem alguns caracteres extras após cada linha
Eu só tenho a versão hexadecimal de determinados arquivos em um servidor. Como posso recuperar corretamente os dados binários usando xxd?
Responder1
Não conheço nenhum comando que faça a conversão, mas ela pode ser facilmente dividida em algumas etapas:
- Retire endereços da
hexdump
saída usandosed
- Converter em binário usando
xxd
- Conversão Endian (por exemplo,
5a42
torna-se425a
) usandodd
Aqui está o comando completo:
sed 's/^[0-9]*//' hexdump | xxd -r -p | dd conv=swab of=binaryfile
Responder2
Esta resposta é uma postagem cruzada dehttps://stackoverflow.com/a/52834021/6770384
Você pode fazer a conversão em um sed
comando. Basta adicionar :
depois do endereço e alterar o endianismo (mudando ab12
para 12ab
).
sed -E 's/ /: /;s/ (..)(..)/ \2\1/g;$d' dump | xxd -r
Erros conhecidos(veja a seção de comentários)
- Um byte nulo final será adicionado se o arquivo original tiver comprimento ímpar (por exemplo, 1, 3, 5, 7, ..., byte de comprimento).
- Seções repetidas do arquivo original não serão restauradas corretamente se forem
hexdump
editadas usando um arquivo*
.
Responder3
Tente adicionar -p
.
xxd -r -p hexdumpfile > binaryfile
Responder4
Você pode simplesmente usar as coisas abaixo
Obtenha hexdump no formato necessário
hexdump -Cv <arquivo_binário.bin> > arquivo_binário.txt
-C imprimirá dados byte por byte
-v não usará * para conteúdo repetido
Agora você precisa remover o primeiro e o último caractere de binary_file.txt para cada linha. Você pode usar o comando sed aqui.
Agora use o comando xxd
xxd -r -p arquivo_binário.txt > recuperar_arquivo_binário.bin
Você pode verificar o md5sum de ambos os arquivos. Deve corresponder
md5sum arquivo_binário.bin
md5sum recuperar_binary_file.bin