Saída do binário de um arquivo para um editor de texto

0

Eu li que você pode usar o comando de terminal xxd -b para ver o binário de um arquivo. Eu usei esse comando e ele mostra o binário, mas não é binário listado à esquerda como números de linha e não binários listados à direita. Eu gostaria de simplesmente ler o binário de um arquivo enquanto o computador o lê, enviar esse binário para um editor de texto e depois voltar do editor de texto para o binário. Alguma sugestão? Pode algo similar ser feito usando o AppleScript?

    
por Sand 20.04.2018 / 19:55

1 resposta

2

I would like to simply read the binary of a file as the computer reads it …

Isso não é realmente possível. O computador lê como dois níveis diferentes de voltagem em algum lugar, o que você obviamente não pode ver. Eu suponho que com um computador muito mais lento (não as máquinas multi-GHz que são comuns hoje em dia), você poderia conectar um osciloscópio de alta largura de banda e quase ver / lê-lo como o computador faz. Essa é uma questão de eletrônica, e certamente não é uma resposta útil. Em última análise, qualquer modo que é exibido em seu monitor é uma abstração; simplesmente não há como perceber diretamente as centenas de bilhões, se não trilhões de mudanças de voltagem por segundo que os eletrônicos realmente lidam.

A maneira normal de editar dados binários é em hexadecimal com um editor hexadecimal. O hexadecimal é usado porque é mais fácil para os seres humanos (muito mais curto), mas ainda tem uma correspondência direta com os bits; cada "nibble" de hex (0-9a-f) representa exatamente 4 bits. A maneira tradicional de exibir isso é feita por xxd ; mostra praticamente tudo que você precisa para entender o arquivo binário que está editando: à esquerda, onde você está no arquivo (offset); à direita, o que é, se texto (bastante comum em arquivos binários); e no meio, os dados binários brutos (apresentados em hexadecimal). xxd é semelhante para seu modo binário, usando apenas bits em vez de hexadecimal.

Se você realmente quer apenas cortar essa informação útil, xxd tem uma opção para o modo hexadecimal ( -p ), mas não para o modo binário. Você pode apenas usar cut embora:

$ echo 'Hello, world'  | xxd  -b | cut -c 11-63
01001000 01100101 01101100 01101100 01101111 00101100
00100000 01110111 01101111 01110010 01101100 01100100
00001010                 

Ou se você realmente não quer formatação, algo como:

perl -nE 'print unpack("B*", $_); END { print "\n"; }'

(revertido por perl -nE 'print pack("B*", $_);' )

mas se você realmente quiser entender ou editar dados binários, um editor hexadecimal é de longe sua melhor aposta para uma ferramenta de propósito geral.

BTW: Seu binário → editor de texto → binário é fácil no modo hexadecimal; xxd -r faz isso. Os trechos perl acima farão isso por binário:

$ echo 'Hello, world!' | perl -nE 'print unpack("B*", $_); END { print "\n"; }' | tee /dev/stderr | perl -nE 'print pack("B*", $_);'
0100100001100101011011000110110001101111001011000010000001110111011011110111001001101100011001000010000100001010
Hello, world!

Eu coloquei o tee lá para mostrar os bits sendo passados entre eles - note como é completamente incompreensível comparado a xxd :

$ echo 'Hello, world!' | xxd | tee /dev/stderr | xxd -r
00000000: 4865 6c6c 6f2c 2077 6f72 6c64 210a       Hello, world!.
Hello, world!
    
por 20.04.2018 / 20:39