Como visualizar um arquivo binário?

43

Pelo que entendi, um compilador cria um arquivo binário que consiste em 1s e 0s que uma CPU pode ler. Eu tenho um arquivo binário, mas como abro para ver os 1's e 0's que estão lá? Um editor de texto diz que não pode abri-lo ...

P.S. Eu tenho um binário compilado assembly que deve ser código binário simples de 1 e 0's?

    
por Martin Zeltin 10.05.2016 / 12:22

11 respostas

87

De acordo com esta resposta por tirano :

hexdump -C yourfile.bin 

unless you want to edit it of course. Most Linux distros have hexdump by default (but obviously not all).

Atualizar

De acordo com esta resposta por Emilio Bool :

xxd does both binary and hexadecimal

For bin :

xxd -b file

For hex :

xxd file
    
por 10.05.2016 / 12:34
43

Várias pessoas responderam a alguns aspectos da consulta, mas não a todas.

Todos os arquivos em computadores são armazenados como 1's e 0's. Imagens, arquivos de texto, músicas, aplicativos executáveis, arquivos de objetos, etc.

Eles são todos 0's e 1's. A única diferença é que eles são interpretados de forma diferente dependendo do que os abre.

Quando você visualiza um arquivo de texto usando cat , o executável ( cat neste caso) lê todos os 1's e 0s e os apresenta a você convertendo-os em caracteres de seu alfabeto ou idioma relevantes.

Quando você visualiza um arquivo usando um visualizador de imagens, ele pega todos os 1's e 0s e os transforma em uma imagem, dependendo do formato do arquivo e de alguma lógica para resolver tudo.

Arquivos binários compilados não são diferentes, eles são armazenados como 1's e 0's.

A resposta da arzyfex oferece as ferramentas para visualizar esses arquivos de diferentes maneiras, mas ler um arquivo como binário funciona para qualquer arquivo em um computador, assim como visualizá-lo como octal, hexadecimal ou ASCII. sentido em cada um desses formatos.

Se você quiser entender o que um arquivo binário executável faz, você precisa visualizá-lo de uma forma que mostre a linguagem assembler (como um começo), o que você pode fazer usando,

objdump -d /path/to/binary

que é um desassemblador, pega o conteúdo binário e o converte em montador (que é uma linguagem de programação de baixo nível). objdump nem sempre é instalado por padrão, então pode ser necessário instalá-lo dependendo do ambiente Linux.

Alguma leitura externa.

NB: como aponta o @Wildcard, é importante observar que os arquivos não contêm os caracteres 1 e 0 (como você os vê na tela), eles contêm dados numéricos reais, individuais bits de informação que estão em (1) ou off (0). Mesmo essa descrição é apenas uma aproximação da verdade. O ponto chave é que, se você encontrar um visualizador que mostre os 1s e 0s, mesmo que ele ainda interprete os dados do arquivo e mostre os caracteres ASCII para 0 e 1. Os dados são armazenados em formato binário ( veja o link do número binário acima). A entrada wiki da comunidade de Pierre-Olivier aborda isso com mais detalhes.

    
por 10.05.2016 / 13:07
14

No nível baixo, um arquivo é codificado como uma seqüência de 0s e 1s.

Mas mesmo os programadores raramente vão lá na prática.

Primeiro (e mais importante que essa história de 0's e 1's), você precisa entender que qualquer coisa que o computador manipula é codificada com números .

  • Um caractere é codificado com um número, usando as tabelas de conjuntos de caracteres. Por exemplo, a letra 'A' tem um valor de 65 quando codificada usando ASCII. Consulte o link

  • Um pixel é codificado com um ou mais números (há vários formatos gráficos) Por exemplo, no formato padrão de três cores, um pixel amarelo é codificado como: 255 para vermelho, 255 para verde e 0 para azul. Consulte o link (escolha uma cor e veja as células R, G & B)

  • Um arquivo executável binário é escrito em Assembly; cada instrução de montagem é codificada como números. Por exemplo, a instrução de montagem MOVB $0x61,%al é codificada por dois números: 176,97 Consulte o link (cada instrução tem um número associado de 00 a FF, porque a notação hexadecimal é usada, veja abaixo)

Em segundo lugar : cada número pode ter várias representações ou notações .

Digamos que eu tenha 23 maçãs.

  • Se eu fizer grupos de dez maçãs, receberei: 2 décimos e 3 maçãs sozinhas. É exatamente isso que queremos dizer quando escrevemos 23: a 2 (décimos) e depois a 3 (unidades).
  • Mas também posso fazer grupos de 16 maçãs. Então eu vou pegar um grupo de 16 e 7 maçãs sozinho. Na notação hexadecimal (que é chamada de 16 radix), eu escreverei: 17. Para distinguir da notação decimal, notação hexadecimal geralmente é notada com um prefixo ou um sufixo: 17h, # 17 ou $ 17 . Mas como representar mais de 9 Grupo-de-16, ou mais de 9 maçãs sozinhas? Simplesmente, usamos letras de A (10) a F (15). O número 31 (como em 34 maçãs) é escrito como # 1F em hexadecimal.

  • No mesmo princípio, podemos fazer apenas um grupo de duas maçãs. (E grupo de duas maçãs grupo-de-dois, ou seja, grupo-de-2x2-maçãs, e assim por diante). Então 23 é: 1 grupo-de-2x2x2x2-maçãs, 0 grupo-de-2x2x2-maçãs, 1 grupo-de-2x2-maçãs, 1 grupo de 2 maçãs e 1 maçã sozinha. Qual será notado 10111 em binário

(Veja link )

Fisicamente, os mecanismos que permitem dois estados (switches) são fáceis de fazer, bem como no disco que está no armazenamento de memória.

É por isso que dados e programas, vistos como números, são escritos e manipulados em sua forma binária.

Então traduzido - dependendo do tipo de dados - em sua forma apropriada (letra A, pixel amarelo) ou executado (instrução MOV).

hexdump lista os números que codificam os dados (ou o programa de montagem) em sua forma hexadecimal. Você pode então usar uma calculadora para obter o formulário binário correspondente.

    
por 12.05.2016 / 13:36
11

Gostaria de começar com od (octal dump) e, dependendo do o sistema, pode encontrar ferramentas como objdump útil.

    
por 10.05.2016 / 12:28
4

Você poderia abri-lo em um editor hexadecimal que o mostrasse como uma série de valores hexadecimais. xxd file

O que você está tentando realizar?

    
por 10.05.2016 / 12:28
3

bvi é um editor de Binary VIsual com atalhos de teclado vim. Está disponível na maioria dos sistemas Linux.

    
por 11.05.2016 / 13:45
3

Uma parte importante sobre a qual você ainda parece confuso: Valores hexadecimais são apenas uma representação diferente de valores binários. A maioria dos editores hexadecimais ou hexdumps exibirá valores na base hexadecimal, porque é mais legível do que na base binária.

Por exemplo:

Binário:

xxd -b README.md                                                                
00000000: 00100011 00100000

Qual é 35 e 32 em decimal

xxd README.md                                                                   
00000000: 2320

Também 35 e 32 em decimal

    
por 10.05.2016 / 18:44
2

Você pode visualizar o arquivo em binário em vim , por:

  • Abrindo o arquivo em vim
  • Inserindo :% !xxd -b

O comando xxd pode ser melhorado, por exemplo:

  • Adicionando -g4 , que agrupará os bits em pacotes de 32 bits
  • Adicionando -c4 , que formatará a saída, para ter 4 bytes por linha

Adicionando ambos os sinalizadores acima, você terá um número inteiro de 32 bits por linha.

    
por 10.05.2016 / 13:37
1

Você pode fazer isso com, por exemplo, esta linha de ruby:

$ ruby -e 'while c=STDIN.read(1); printf "%08b" % c.bytes.first; end'

O sistema tradicional baseado em C tem um péssimo suporte para a produção de material em binário, o AFAIK. Geralmente não é muito útil, pois é muito difícil de ler ao contrário de lixeiras hexadecimais.

    
por 10.05.2016 / 12:55
1

O comando strings do Linux imprime as strings de caracteres imprimíveis em arquivos, por exemplo:

$ strings /usr/bin/gnome-open 
/lib64/ld-linux-x86-64.so.2
3;o:)
libgnome-2.so.0
_ITM_deregisterTMCloneTable
g_object_unref
gmon_start__
g_dgettext
_Jv_RegisterClasses
g_strdup
_ITM_registerTMCloneTable
g_error_free
gnome_program_init
libgnome_module_info_get
libgio-2.0.so.0
g_ascii_strncasecmp

etc ... é bem mais legível que o binário.

    
por 12.05.2016 / 02:08
1

GHex é seu amigo :)
Você pode instalá-lo usando a linha de comando

Ubuntu:

sudo apt-get install ghex

Fedora:

sudo yum install ghex

    
por 02.12.2016 / 17:44