Ir ao conteúdo
  • Cadastre-se

Abrir Codigo Binario


Visitante

Posts recomendados

Abrir um arquivo qualquer C abre, agora se não reconhecer a estrutura dos dados nele guardados fica difícil interpretar, pois você receberá um punhado de bytes que podem representar qualquer coisa. Para saber do que eu estou falando pegue apenas 2 ou 3 variáveis, jogue em um arquivo binário com fwrite e veja a magia >_<. Vamos fazer um experimento...

Em primeiro lugar eu terei isso:
struct dados{
int i;
char c;
float f;
};

Dentro de main farei o seguinte:
struct dados d;

Guardamos uns dados para ver se podemos identifica-los:
    d.i=12345;
    d.c='a';
    d.f=3.14;

Vou abrir um arquivo de saída, porém vou saltar comprovações ;)
FILE *f = fopen("prova.txt", "w");

Logo vou enviar a estrutura para o arquivo:
fwrite(&d, sizeof(struct dados), 1, f);

O arquivo está assim se abrir ele com o note pad:
Screenshot_1.jpg.9db80f810523c347fc272ab47f11926f.jpg


Pelo menos podemos ver a letra a não é? Mas se não fosse você que tivesse feito o programa como saberia se isso é uma letra a? Vamos usar um editor hexadecimal:


Screenshot_2.thumb.jpg.b70ffde05a021ead9df12385e068dc12.jpg



Como podemos ver temos o importante que é isso:


Screenshot_3.thumb.jpg.d9c643703e0e61e8769f719f3dc0bb43.jpg



Se eu selecionar os primeiros 4 bytes:
Screenshot_4.thumb.jpg.d3faaa80fc50ef7d8b80d9a7a844b548.jpg

 

Vai selecionar os primeiros 4 bytes do lado direito também.
Screenshot_5.thumb.jpg.0bb85ff3c7aee756a097690c8cdad467.jpg

 

Esse deveria ser nosso inteiro porém está como "90  ", ou seja, 90+ dois nulos.
Na tabela da direita podemos ver o valor desses primeiros 4 bytes como um int32:
Screenshot_6.jpg.bfaf8ae8040536c1563be41cedc892fd.jpg

Agora podemos ver "12345" correto?;
vamos ver o resto...
Agora o char:
Screenshot_7.thumb.jpg.3de5a48f7f872777a9303f8bc520c2e2.jpg

No lado direito podemos ver como int 8 que o valor é 97. Na tabela asc2 97 é 'a', ocupa 1 byte(8bits).

Agora tenamos ver o float(4 bytes):
Screenshot_8.thumb.jpg.6d1edbbe5923dd196628628cd006399c.jpg


Como vemos o float guarda 3.1400001. Mas pera ai!? nessa altura você já deverá ter visto algo estranho... você deverá ter visto que eu pulei a leitura de uns quantos bytes. Falo particularmente desses bytes aqui:
Screenshot_9.thumb.jpg.0ffa84896ccf435424ee9bd165d590e4.jpg
Por que aconteceu isso?
Isso aconteceu a causa de um tema chamado byte aligne, ou também conhecido como alinhamento de bytes(investigar por internet). Para simplificar direi que um processador de 32 bits gosta de mastigar coisas do tamanho da sua boca, ou seja 32 bits, então o compilador pegou e preencheu com 3 bytes(24bits) mais ao lado do char, transformando-o de 1byte(8bits) a 4 bytes(32bits). Esses 3 bytes estão mortos ai e podem dar muitos problemas :rezando:.  Essa técnica de "preencher espaços" em uma estrutura se chama space padding. Mas isso é tema para outra conversa. >_<

O que eu quero dizer é que já existem programas efetivos para isso, e se chamam Editores Hexadecimais. porém como podemos ver, o editor hexadecimal não é um programa inteligente, você precisa saber exatamente em que byte começa um dado e onde ele termina. Saber o valor desses 3 dados somente sem saber a ordem, padding, tipo, etc que levam pode chegar a ser um autentico inferno em um arquivo de maiores proporções.

Falando um pouco do byte alignment e seu preenchimento, saiba que essa opção é possível desativar, para isso você deve buscar na documentação do compilador para faze-lo. porém o que eu gostaria de explicar é que imagine a situação...
você faz um bonito programa que guarda um montão de dados para seu professor, dai seu compilador realiza essas otimizações de alinhamento e preenchimento de dados com a ideia de "agilizar" o rendimento do seu programa, mas dai você entrega o arquivo binário e o código fonte do seu programa para seu professor, dai imagine que ele usa outro compilador que não usa essas otimizações. Que você acha que acontece? Scaput! Seu programa n4ao vai funcionar no computador do seu professor, e nem você e nem ele vão saber o motivo, conclusão... nota 0.:lol:

Procure ler sobre o byte align antes que seja tarde: https://0xc0de.wordpress.com/2008/10/31/alinhamento-alignment-e-preenchimento-padding/

 

Fui que já me cansei hsuehsuhe
 

Uma pergunta...
Ainda quer fazer esse programa? >_<
Só posso lhe dizer que se conseguir você ficará rico! HAHAH

adicionado 4 minutos depois

Ah! E uma coisa mais... imaginou se os dados estiverem encriptados como comentou freakday e pareçam montão de dados sem sentido. Vish! Que zica. Boa sorte! >_<

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!