Qualquer Utilities genéricos ou Bibliotecas para conversão de Hex Despejos em forma legível?

StackOverflow https://stackoverflow.com/questions/191652

Pergunta

Eu trabalho muito com a comunicação serial com uma variedade de dispositivos, e por isso muitas vezes tem que analisar hex despeja em arquivos de log. Atualmente, eu fazer isso manualmente, olhando para as lixeiras, olhando para a especificação de protocolo, e escrever os resultados. No entanto, este é tedioso e propenso a erros, especialmente whem mensagens contêm centenas de bytes e contêm misturas de dados big-endian e little-endian, ASCII, Unicode, compressão, CRCs,. . . .

Eu escrevi alguns scripts Python para ajudar com os casos mais comuns. Mas existem muitos protocolos para lidar com, e não faz sentido gastar o tempo escrevendo um script personalizado a menos que eu sei que vou ter um monte de lixeiras para analisar.

O que eu gostaria é algum tipo de utilitário que pode automatizar esta atividade. Assim, por exemplo, se eu tiver um hexadecimal textual como este:

7e ff 00 7b  00 13 86 04
00 41 42 43  44 56 ef 7e

e algum tipo de descrição do formato de mensagem, como este:

# Field         Size        Byte Order  Output Format
Flag            1                       hex
Address         1                       hex
Control         1                       hex
DataType        1                       decimal
LineIndex       1                       decimal
PollAddress     2           msb         hex
DataSize        2           lsb         decimal
Data            (DataSize)              ascii
CRC             2           lsb         hex
Flag            1                       hex

Eu obter uma saída como esta:

Flag            0x7e
Address         0xff
Control         0x00
DataType        123
LineIndex       0
PollAddress     0x1386
DataSize        4
Data            "ABCD"
CRC             0xef56
Flag            0x7e

analisadores de protocolo com base em hardware, muitas vezes têm fantasia apresenta para fazer este tipo de coisa, mas eu preciso trabalhar com arquivos de log textuais.

Será que qualquer utilidade ou existem biblioteca?


Algumas boas respostas têm surgido desde que eu configurar a recompensa. Eu acho que bounties trabalho!

Wireshark e HexEdit ambos parecem promissores; Vou dar uma olhada aqueles, e proabably premiará a recompensa para aquela que atende às minhas necessidades. Mas eu ainda estou aberto a outras idéias.

Foi útil?

Solução

Wireshark é bastante bom em protocolos de rede de abertura.

Outras dicas

Eu suponho que você precisa de um bom editor hexadecimal. Ter um olhar para hexedit . Eu tenho usado a versão gratuita no passado e é bom, mas eu não sei se ele oferece o que você está procurando. Basicamente, você quer ser capaz de definir uma estrutura e, em seguida, ser capaz de decodificar dados hexadecimais contra ela. Suponho que um editor bom hex apoiaria isso. Verifique a versão paga do HexEdit ou google para outro editor; há muitos disponíveis.

Normalmente, eu uso emacs-mode hexl para ver arquivos binários como um "text-dump". Quando eu preciso de saída mais específico, eu só fazer o que e escrever um parser em C ++.

No meu trabalho estávamos criando protocolos de rede e serial para controlar o hardware embarcado. Eu também cansei de leitura despeja errado, e escrevendo roteiros para cada protocolo, então eu escrevi uma biblioteca para fazer exatamente o que você descreve. Você poderia dar-lhe uma descrição arquivo de texto do protocolo, e tinha um gui apoio caixas de seleção para definir os bits individuais, botões de rádio para escolher entre as combinações válidas de bits, e listas drop-down quando havia um monte de opções. Você pode editar a exibição hexadecimal dos dados, a visão binária de cada campo, ou mesmo apontar e clicar nos campos, e todos os outros pontos de vista vai atualizar. Ele salvo us uma tonelada de tempo. É um pouco rápido e sujo, mas eu postá-lo se ele não era de propriedade de meu empregador. O ponto é, não foi muito difícil escrever, e uma vez eu fui longe de scripts para cada protocolo e para um programa que poderia entender uma descrição do protocolo, as coisas eram grandes. Paramos ups parafuso relativos à má interpretação de um despejo, e adicionando novos protocolos tornou-se trivial. Além disso, a descrição textual do protocolo foi direto para as especificações de desenvolvimento para que os caras de software saberia o que fazer com o hardware. Encorajo-vos a tomar uma rachadura no que faz.

Um possível ponto de partida seria libPDL , uma biblioteca C ++.

Outra opção pode ser NetPDL .

Você deve usar a Tcl binário comandos para o material como isso. O que se segue é o ponto de partida para o seu exemplo acima. Tcl é realmente fácil de aprender e scripts de escrever. Se você está fazendo coisas comm de série você deve isso a si mesmo para aprender pelo menos o básico.

bash$ tclsh
% binary scan [binary format H* 7eff007b00138604004142434456ef7e] \
  H2H2H2ccH4sa4h4H2 \
  flag1 addr ctl datatype lineidx polladdr datasize data crc flag2
10
% puts "$flag1 $addr $ctl $datatype $lineidx \
  $polladdr $datasize $data $crc $flag2"
7e ff 00 123 0 1386 4 ABCD 65fe 7e

Quando você fez o seu material byte-order você mudou em torno dos bytes, mas não os bits, então eu não tenho certeza do que você estava procurando lá. De qualquer forma, este irá ajudar a começar.

Tenha um olhar em hexworkshop

Eu tenho usado por anos para analisar dumps hexadecimais. Tem uma estrutura Viewer que permite definir os dados estrutura de um estilo C / C ++ e, em seguida, exibe os dados nesse formato.

WinHex suportes exibir / editar formatos de registros definidos pelo usuário. Há alguns exemplos em http://www.x-ways.net/winhex/templates/index.html

Eu tenho certeza que eu vi algo assim no CPAN. Eu poderia ser mais vago, se quiser. : -)

Update: Não é exatamente o que você quer, mas ter um olhar para Parse :: Binary :: FixedFormat

Existe um utilitário BSD de linha de comando chamado hexdump que faz isso através do uso de cadeias de formato (que pode ser em um arquivo externo). Consulte https://www.suse.com/communities/blog/making- -sentido hexdump / para uma introdução, e por exemplo, https://www.freebsd.org/cgi/man.cgi? query = hexdump & Sektion = 1 para a página do manual (com especial atenção para as opções -e e -f ea seção intitulada Formatos ).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top