Diferença entre um executável e um formato de arquivo de dados?

1

Algumas coisas rápidas fora do caminho, pois sei que esse tipo de pergunta geralmente tem um histórico mal-intencionado.

  • Eu não estou tentando executar algo em um formato de arquivo (jpg)
  • Eu não estou tentando simplesmente atingir o objetivo final (ou seja, fazer algo parecido com um jpg, mas exectue)
  • Estou simplesmente tentando aprender a diferença entre como um computador analisa as informações

Então, pelo que entendi, um computador que lida com um formato de arquivo de dados, como JPG, PDF, etc etc, só analisará as informações no que essencialmente é um contêiner aderente que imagino em layouts / especificações específicas. Comumente você ouve a diferença entre um formato de arquivo de dados e um executável, ou seja, o computador não "executa (executa)" o arquivo de dados. Minha pergunta é: como o computador sabe o que ler e o que executar? Qual é a diferença? Minha imagem mental de um computador é algo que lê instruções passo a passo. Se no meio de um jpg que ele estava analisando, ele viu o shellcode para abrir uma caixa de mensagem, por que ele não é ativado quando lido?

Estou ciente de que as coisas poderiam ser executadas através de exploits para o software, enganando o analisador - talvez através de buffer overflows etc etc. Novamente, não muito interessado no objetivo final de como ele pode ser alcançado. Estou mais interessado em saber como o computador pode dizer o que deve ser lido, o que deve ser executado e como a leitura pode ser obtida sem a execução.

    
por Peleus 20.02.2013 / 00:05

2 respostas

0

Bem, arquivos de dados são abertos por programas. E os próprios programas / arquivos executáveis abrem esses arquivos e interpretam os dados.

Arquivos executáveis são abertos / executados pelo SO para a CPU. Eles contêm instruções que são dados para a CPU.

Se um arquivo de dados contivesse instruções para uma CPU, normalmente não iria para a CPU porque é apenas um arquivo que seu programa está lendo, então no máximo ele pode ter instruções para o seu programa. Mas se algo der errado em um programa, como um arquivo de dados causa um estouro de buffer em um programa, então o que está no arquivo de dados poderia ser enviado para a CPU.

Alguém poderia renomear um arquivo jpg para executá-lo e ele será executado pela CPU e dar um erro, a menos que ele realmente tenha um código de máquina (instruções da CPU), então é realmente um arquivo executável que estava errado extensão e agora tem a extensão correta.

    
por 20.02.2013 / 00:38
1

No Windows, é apenas a extensão que torna o arquivo executável - para serem executados EXEs específicos e alguns outros formatos serão interpretados por cmd ou PowerShell.

Em sistemas semelhantes ao Unix, há um bit de execução. Se você estiver familiarizado com o conceito de atributos de arquivo do Windows, poderá considerá-lo como um tipo de atributo. Qualquer arquivo pode ter um bit de execução definido - será possível executá-lo (como um programa, script etc.). Caso contrário, o sistema operacional sempre o tratará como um arquivo normal que não pode ser executado.

SOs semelhantes a Unix não usam o conceito de extensões de arquivo, mas tentam identificar arquivos por seu conteúdo. Normalmente, poucos primeiros bytes de um arquivo formam um número mágico - um identificador único de tipo de arquivo (veja Artigo da Wikipédia .

    
por 20.02.2013 / 00:27