Dificuldade em ler binário

25. Re: Dificuldade em ler binário

Apprentice X
ApprenticeX

(usa FreeBSD)

Enviado em 23/05/2024 - 01:04h

paulo1205 escreveu: Fiz uma "leitura diagonal".

Apenas por curiosidade, o que seria uma leitura diagonal?
Imagino que eu sempre faça uma leitura vertical!
Talvez Japoneses e Chineses façam uma leitura horizontal!

Mas Diagional? Fiquei pensando agora no meu Monitor Dell que sobe/desce, Gira 360 graus, acho que agora entendi o porque ele faz isso tudo!
Talvez para aqueles que desejam fazer leituras em diagonal!




  


26. Re: Dificuldade em ler binário

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 23/05/2024 - 17:06h

"Mundo é diagonal porque é plano" byy certa pessoa.

Vou ver se consigo explicar pra ti um resumo do que é um computador e programa:
--todo computador moderno, me refiro a pc desktop, são baseados em uma arquitetura chama von neuman.
--nessa arquitetura, o programa fica localizado na memória e a cpu fica externa a memória, onde a cpu tem a função de apenas executar instruções e fazer uso de outros componentes, como a unidade de lógica e aritmética.
--toda cpu de von neuman tem registradores que são usados para operações, são como variáveis globais onde a velocidade de operação é muito alta porém com limitada quantidade de registradores.

Imagine o seguinte: um programa nada mais é que um vetor de bytes (8 bits por célula) e possuí uma coisa chama de PC que é Program counter. Esse program counter diz ao cpu onde é pra executar a instrução atual, basicamente é como um indice do vetor do programa e ai a cpu executa tal instrução baseado na memoria.

Como diria senhor torvalds, show me the code!
#include <string.h>
#include <stdio.h>

int main() {
//o programa carregado na memória
//o programa tem endereçamento de no máximo 256 bytes
//aqui é o assembly do programa
char programa[] = {
's', -10, -5, //soma -10 com -5 e salva em rx
'r', //soma mais 1 ao rx
'x', //imprime rx
'j', 1 //pula pra linha ''r',1' do programa
};
//registradores
char rx = 0, ry = 0;
//contador de programa, endereça no máximo 256 endereços, pois é um char.
char pc = 0;
//o cpu
while (pc < strlen(programa)) {
//debug
#if 0
printf("pc[%d] instrucao[%c]\n", pc, programa[pc]);
#endif
//lê o opcode atual
//aquia cpu pegou da memória e trouxe pra dentro dela.
switch(programa[pc]) {
//instrução de somar dois operandos
//cada operando está numa parte a frente de 's'
case 's': {
//operando a
int a = programa[pc + 1];
//operando b
int b = programa[pc + 2];
//realiza a operação de soma
//salva no registrador rx
rx = a + b;
//incrementa pc
//+3 porque a instrução 's' requer duas áreas
//de memória a frente dela (dois bytes)
//'s' tem 3 bytes, um do 's' mais um de cada operando
pc += 3;
}
break;
//operador de salto incondicional
//pula pra alguma parte da memória do programa
case 'j': {
pc = programa[pc + 1];
//pula pro próxima instrução
pc += 2;
}
break;

//incrementa rx e pula pra próxima instrução
case 'r': {
rx++;
//próxima instrução
pc+=1;
}
break;

//opcode apenas pra printar o conteúdo do registrador rx
case 'x': {
printf("%d\n", rx);
//pula está instrução
pc++;
}
break;
//instrução inválida
default:
pc = strlen(programa);
}

}
return 0;
}

O código acima é um emulador de uma cpu de 8 bits.
Dá pra criar uma cpu mais complexa e completa se adicionar mais alguns registradores, como o carry flag.
Essa cpu é bem limitada mas serve como introdução a emulação.



https://nerdki.blogspot.com/ acessa ai, blog dedicado Paranóia!
https://github.com/cpusam com o bug fix vem a perfeição!


27. Re: Dificuldade em ler binário

aguamole
aguamole

(usa KUbuntu)

Enviado em 24/05/2024 - 12:48h

ApprenticeX escreveu:

aguamole escreveu:
Rapais, esse tempo todo vc estava perguntando dos espaços da imagem? Pó velho, é uma coisa tão lógica, que nem passo isso na minha cabeça que vc queria saber, o computador ele entende apenas ligado e desligado(1 bit ou 0 bit) que é se o transistor vai abrir ou vai fechar, esses 1 bit ou 0 bit se agrupam em grupo de 8 bit que ai forma o byte que é 8 bits, é por isso que vc vê esses espaços, o espaço aparece quando forma 1 byte que é a unidade de medida de grupo de 8bit, não tem significado na linguagem de maquina, isso só aparece apenas para facilitar a você fazer a sua leitura. Pode contar os bits ai, eu te garanto que o espaço só aparece após a contagem de 8 bits.
https://pt.wikipedia.org/wiki/Bit

Não compreendi bem sua resposta. Conforme eu disse e você mesmo repetiu: "espaços não tem signifcado na linguagem de máquina"
Logo não eram para existir no arquivo! Porque um arquivo binário seria disperdiçado com vários bytes de cada espaço se não servem pra nada?
Pense 100 espaços = 100 Bytes
Se esses espaços para O PC não são lidos, ou não tem nenhuma serventia, a lógica seria eles não estarem lá, isso diminuiria bastante o tamano do arquivo binário.

aguamole escreveu: garanto que o espaço só aparece após a contagem de 8 bits

Isso não ocorre! Exemplo, se eu escrevo um texto em binário por exemplo: test
Só existirá no arquivo: 01110100011001010111001101110100
Não existe espaço em lugar algum, somente as sequências binárias!

Porque um código compilado iria colocar espaços? se dizem que o compilador remove tanto os espaços e até comentários da linguagem ao gravar? Justamente para não inchar o arquivo binário. Até mesmo muda determinado comandos escritos errados pelo programador para comandos mais simples que fazem a mesma coisa, como substituição de printf("\n"); ou puts(""); para putchar('\n');

Rapais, mas foi o que eu escreve, não tem esses espaços no código de maquina, eles apareceram para vc na imagem é só para facilitar a sua leitura. É para vc entender onde começa o byte e onde ele termina, é só para vc ler melhor. outra coisa é que não existe quebra de linha, mas aparece quebrada é para facilitar a sua vida. Se não quiser então envia os bits dos binários para o sed remover os espaços e quebra de linha.


28. Re: Dificuldade em ler binário

Apprentice X
ApprenticeX

(usa FreeBSD)

Enviado em 30/05/2024 - 21:51h


aguamole escreveu:

ApprenticeX escreveu:

aguamole escreveu:
Rapais, esse tempo todo vc estava perguntando dos espaços da imagem? Pó velho, é uma coisa tão lógica, que nem passo isso na minha cabeça que vc queria saber, o computador ele entende apenas ligado e desligado(1 bit ou 0 bit) que é se o transistor vai abrir ou vai fechar, esses 1 bit ou 0 bit se agrupam em grupo de 8 bit que ai forma o byte que é 8 bits, é por isso que vc vê esses espaços, o espaço aparece quando forma 1 byte que é a unidade de medida de grupo de 8bit, não tem significado na linguagem de maquina, isso só aparece apenas para facilitar a você fazer a sua leitura. Pode contar os bits ai, eu te garanto que o espaço só aparece após a contagem de 8 bits.
https://pt.wikipedia.org/wiki/Bit

Não compreendi bem sua resposta. Conforme eu disse e você mesmo repetiu: "espaços não tem signifcado na linguagem de máquina"
Logo não eram para existir no arquivo! Porque um arquivo binário seria disperdiçado com vários bytes de cada espaço se não servem pra nada?
Pense 100 espaços = 100 Bytes
Se esses espaços para O PC não são lidos, ou não tem nenhuma serventia, a lógica seria eles não estarem lá, isso diminuiria bastante o tamano do arquivo binário.

aguamole escreveu: garanto que o espaço só aparece após a contagem de 8 bits

Isso não ocorre! Exemplo, se eu escrevo um texto em binário por exemplo: test
Só existirá no arquivo: 01110100011001010111001101110100
Não existe espaço em lugar algum, somente as sequências binárias!

Porque um código compilado iria colocar espaços? se dizem que o compilador remove tanto os espaços e até comentários da linguagem ao gravar? Justamente para não inchar o arquivo binário. Até mesmo muda determinado comandos escritos errados pelo programador para comandos mais simples que fazem a mesma coisa, como substituição de printf("\n"); ou puts(""); para putchar('\n');

Rapais, mas foi o que eu escreve, não tem esses espaços no código de maquina, eles apareceram para vc na imagem é só para facilitar a sua leitura. É para vc entender onde começa o byte e onde ele termina, é só para vc ler melhor. outra coisa é que não existe quebra de linha, mas aparece quebrada é para facilitar a sua vida. Se não quiser então envia os bits dos binários para o sed remover os espaços e quebra de linha.

Não tem como eles aparecerem para mim, se eu não escrevi assim!

Acho que você ficou confuso!
Está escrito em binário, se estou lendo em binário, eu sou uma máquina, então não existe converter, porque ninguém converteu nada! Logo se tem espaço a máquina está lendo espaço!
Explicando de forma mais simples: O texto está em CHINÊS! Se eu não converti, NADA, apenas abri o TEXTO ele vai continuar em CHINÊS então se tem ESPAÇOS em Chinês, quero saber o motivo!

Agora troca CHINÊS por binário!



29. Re: Dificuldade em ler binário

Apprentice X
ApprenticeX

(usa FreeBSD)

Enviado em 30/05/2024 - 22:01h


SamL escreveu:

"Mundo é diagonal porque é plano" byy certa pessoa.

Vou ver se consigo explicar pra ti um resumo do que é um computador e programa:
--todo computador moderno, me refiro a pc desktop, são baseados em uma arquitetura chama von neuman.
--nessa arquitetura, o programa fica localizado na memória e a cpu fica externa a memória, onde a cpu tem a função de apenas executar instruções e fazer uso de outros componentes, como a unidade de lógica e aritmética.
--toda cpu de von neuman tem registradores que são usados para operações, são como variáveis globais onde a velocidade de operação é muito alta porém com limitada quantidade de registradores.

Imagine o seguinte: um programa nada mais é que um vetor de bytes (8 bits por célula) e possuí uma coisa chama de PC que é Program counter. Esse program counter diz ao cpu onde é pra executar a instrução atual, basicamente é como um indice do vetor do programa e ai a cpu executa tal instrução baseado na memoria.

Como diria senhor torvalds, show me the code!
#include <string.h>
#include <stdio.h>

int main() {
//o programa carregado na memória
//o programa tem endereçamento de no máximo 256 bytes
//aqui é o assembly do programa
char programa[] = {
's', -10, -5, //soma -10 com -5 e salva em rx
'r', //soma mais 1 ao rx
'x', //imprime rx
'j', 1 //pula pra linha ''r',1' do programa
};
//registradores
char rx = 0, ry = 0;
//contador de programa, endereça no máximo 256 endereços, pois é um char.
char pc = 0;
//o cpu
while (pc < strlen(programa)) {
//debug
#if 0
printf("pc[%d] instrucao[%c]\n", pc, programa[pc]);
#endif
//lê o opcode atual
//aquia cpu pegou da memória e trouxe pra dentro dela.
switch(programa[pc]) {
//instrução de somar dois operandos
//cada operando está numa parte a frente de 's'
case 's': {
//operando a
int a = programa[pc + 1];
//operando b
int b = programa[pc + 2];
//realiza a operação de soma
//salva no registrador rx
rx = a + b;
//incrementa pc
//+3 porque a instrução 's' requer duas áreas
//de memória a frente dela (dois bytes)
//'s' tem 3 bytes, um do 's' mais um de cada operando
pc += 3;
}
break;
//operador de salto incondicional
//pula pra alguma parte da memória do programa
case 'j': {
pc = programa[pc + 1];
//pula pro próxima instrução
pc += 2;
}
break;

//incrementa rx e pula pra próxima instrução
case 'r': {
rx++;
//próxima instrução
pc+=1;
}
break;

//opcode apenas pra printar o conteúdo do registrador rx
case 'x': {
printf("%d\n", rx);
//pula está instrução
pc++;
}
break;
//instrução inválida
default:
pc = strlen(programa);
}

}
return 0;
}

O código acima é um emulador de uma cpu de 8 bits.
Dá pra criar uma cpu mais complexa e completa se adicionar mais alguns registradores, como o carry flag.
Essa cpu é bem limitada mas serve como introdução a emulação.



https://nerdki.blogspot.com/ acessa ai, blog dedicado Paranóia!
https://github.com/cpusam com o bug fix vem a perfeição!

Sam, eu estou falando de uma simples interpretação de texto de um arquivo binário.
Isso são registradores: EAX, EBX, ECX, EDX
Isso eu encontrei no binário e sei o que significa!|
Qualquer programa que você transcreva do binário para texto, você vai encontrar registradores!

Eu quero saber o que significa 12 espaços entre um registrador e outro
OU 5 espaços entre um PONTO e outro
40 espaços entre um texto e outro
60 pontos entre um texto e outro
ou 14 pontos e coisas assim que estão presentes no binário!
OU símbolos como <?> que existem aos montes no meio do texto e que não é um charactere inexistente está lá por algum motivo!

Quando escrevemos um texto, colocamos vírgula, acentos, pontos, espaços, e cada letra que escrevemos tem uma função!

Eu quero conseguir entender a função de coisas como espaços, pontos e characteres que NÃO ACHO significado. Mostrei isso na imagem!



30. Re: Dificuldade em ler binário

Apprentice X
ApprenticeX

(usa FreeBSD)

Enviado em 30/05/2024 - 22:45h

Eu não sei como explicar melhor do que o que já escrevi na pergunta e mostrei na imagem!
Eu estou falando de interpretação de texto, e todo mundo falando de registrador, código em assembly, que NADA tem a ver com minha pergunta!

Se eu não tivesse a mínima noção de assembly ou binário, nem tinha feito a pergunta!

Existe um binário: Meu programa Hello World!

1) Não existe assembly no binário. Só existe números, números binários!
2) Ao converter as sequencias binárias para um simples texto: SIM, você vai achar comandos assembly, inclusive o texto "Hello World".
Não é disso que estou falando!

Compreendam! Abaixo está escrito em TEXTO ascii:
Hello World

Agora é o texto acima em linguagem binária! A linguagem que o computador lê
0100100001100101011011000110110001101111001000000101011101101111011100100110110001100100

REPAREM por favor! Não existe espaço entre as sequências binárias! porque se existir espaço deixa de ser LINGUAGEM binária! E obviamente o computador não irá interpretar!

Espaço em linguagem binária: 00100000
Reparem no texto em ascii acima existe 1 espaço entra a palavra Hello e a palavra World! LOGO o espaço em binário EXISTE na sequencia binária traduzida!

OUTRO EXEMPLO: 00000010
O binário acima é o character não imprimível: STX

Então se estou lendo em binário e em binário tem um monte de PONTOS, tem um monte de ESPAÇOS um monte de INTERROGAÇÕES isso TEM significado! Porque não está ali a TOA gastando bytes!

Talvez uma sequência de espaços seja como um separador de tabela? Assim como se pode usar delimitadores em csv por exemplo!
Talvez uma sequência de pontos seja um delimitador, um separador, ou um código para alguma coisa!
Talevz uma sequência de interrogações também!

É isso que eu quero saber!

Na pergunta eu mostrei uma sequencia binária, cheia de: 00000000
Se isso é linguagem binária, o que significa essa sequencia porque não consigo traduzir ela do binário para qualquer significado que eu conheça!

Veja no texto da pergunta um trecho: 000000000000000000000000000000000000000000000000000000000000000000000010
Que tradução é essa acima escrita em binário? É disso que estou falando!

PEGUEM qualquer binário de vocês, abra em um editor qualquer que leia em binário, é assim que o computador lê, então se não consigo traduzir um monte de ZEROS que não representam nada no meu conhecimento como o computador sabe o que significa tanto zeros? É isso que eu quero saber!

IGUAL quando escrevemos um texto: Bom dia!
Sabemos que tem um monte de espaço entre Bom e dia
Um dos significados pra isso é que são apenas espaços, ou um tipo de tabulação, ou o teclado da pessoa com defeito!

A linha onde eu informo na pergunta o código binário QUE EU COLOQUEI espaço entre a sequência porque os ESPAÇOS NÃO EXISTEM, está escrita assim:
0111111101000101010011000100011000000010000000010000000100001001000000000000000000000000000000000000000000000000000000000000000000000010000000000011111000000000000000010000000000000000000000001110000000010101 

Eu quero saber o que significa, o que está escrito, cada letra! OBS Nessa sequência. Não preciso saber o que é ELF ou o que é cada caracter não imprimível ou os registradores. Eu quero saber o que significa os espaços, pontos e interrogações.



31. Re: Dificuldade em ler binário

Apprentice X
ApprenticeX

(usa FreeBSD)

Enviado em 30/05/2024 - 22:56h

Mais informação:
Se você escrever a palavra Linux em binário
Vai estar no arquivo assim: 0100110001101001011011100111010101111000
A sequência binária acima siginifica: Linux

Agora se por acaso quando você ler no binário isso: 01000110011100100110010101100101010000100101001101000100
É ÓBVIO que não significa Linux
É ÓBVIO que o computador não vai entender que está escrito Linux
Agora também é ÓBVIO que a sequência binária acima, significa alguma coisa, e ela tem sua utilidade!

Então recaptulando, estou tentando ler um arquivo binário, e para entendê-lo tenho que saber o que significa uma sequência de espaços.
Tenho que saber o que significa uma sequência de pontos.
Tenho que saber o que significa uma sequência de interrogações.
Porque não sei o que representam isso!

Em linguagem de programação, uma sequência de 3 até 8 espaços podem significar uma tabulação, uma formatação de textos e etc...
Uma sequência de 3 pontos, usamos no etc... né?

O que isso significa para o computador??? Entenderam a minha dúvida?



32. Re: Dificuldade em ler binário

Apprentice X
ApprenticeX

(usa FreeBSD)

Enviado em 30/05/2024 - 23:09h

Eu vou postar uma nova pergunta, mas simples para que possam entender o que desejo saber, acho que ficará mais fácil!



01 02 03



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts