Como os programas no diretório / bin são compilados em um formato não legível?

7

Eu notei que a maioria dos meus comandos / programas no diretório / bin são compilados. Desejo duplicar este formato de código não legível. Alguém pode me dizer por que e / ou como esses programas são assim?

[bônus de selo verde]: Não há um comando bash para imprimir todo o texto "legível por humanos" de um arquivo?

    
por surgemcgee 21.08.2012 / 17:55

5 respostas

14

Os comandos / programas em /bin não são não legíveis , mas são, como você diz, compilados. Isso significa que eles foram originalmente escritos em C (ou alguma outra linguagem de programação) e foram compilados para código de máquina (binário) para que o processador possa executar o código. Para fazer o mesmo, basta escrever o programa que você precisa em C e executar o comando gcc para produzir um arquivo executável.

Para imprimir qualquer texto legível em um arquivo, use strings < /bin/file ,

    
por StarNamer 21.08.2012 / 18:04
12

Introdução

Quando um programa é compilado a partir do código fonte C ou C ++, um compilador como gcc (veja abaixo) traduz esse código para a linguagem binária nativa da CPU, para que o programa possa ser executado. Assim, material humano legível (código fonte) é transformado em um formato legível não humano (código binário legível por máquina).

Binários e o sistema de arquivos

Se você inserir echo $PATH , verá os locais de todos os executáveis no sistema, tanto os binários e scripts compilados:

/home/mike/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Na hierarquia do sistema de arquivos, as principais ferramentas do sistema, como cat e getty , estão presentes em /bin e /sbin respectivamente, e outras ferramentas, como dpkg e chroot , estão presentes em /usr/bin e /usr/sbin , respectivamente. Se você compilar um programa fazendo o download do código-fonte, configurando-o e instalando-o, seu programa, por padrão, deverá entrar em /usr/local/bin e seus outros arquivos na /usr/local hierarquia.

Compiladores

Provavelmente, uma das ferramentas mais conhecidas usadas para compilar binários é gcc , que é conhecida como a Coleção GNU Compiler e anterior como o compilador GNU C; a versão fornecida com o Ubuntu 12.04 é gcc 4.6.3 . Conforme consta no manual do GNU oficial,

GCC is an integrated distribution of compilers for several major programming 
languages. These languages currently include C, C++, Objective-C, Objective-C++, 
Java, Fortran, Ada, and Go.

Compilando um binário

Os três comandos ./configure , make e sudo make install (ou sudo checkinstall ) são frequentemente usados juntos para compilar um programa.

A execução de ./configure , entre outras coisas, verifica a versão de gcc instalada e prepara o ambiente de criação. O makefile é uma das coisas mais importantes geradas a partir da execução de ./configure , pois direciona a compilação quando make é executado. O manual do GNU detalha o processo em grande profundidade. Em suma, as regras no makefile determinam o objetivo principal (para criar um executável) para que o código fonte .c files seja convertido em arquivos compilados ( .o files) para gerar o arquivo executável de destino.

Recursos

Dois ótimos recursos são os guias de compilação do Ubuntu aqui e aqui , que contém ótimos conselhos e informações para aqueles que estão começando a compilar. Outros recursos, como o manual GNU gcc e o manual make que já mencionei. Para obter mais informações sobre C e criar um programa C simples e pequeno, consulte o capítulo 22 de Rute e o capítulo 24 da Linha de Comando do Linux .

    
por user76204 21.08.2012 / 19:49
1

Para compilar programas Bash em binários (suponho que você esteja perguntando sobre o Bash porque sua pergunta está marcada como bash) você deve usar o programa Shc. Você pode baixá-lo de aqui . Depois de descompactar o arquivo, compile e instale shc com cd shc-3.8.9;make;sudo make install . Agora, execute shc -f filename , em que filename é o caminho para o arquivo que você deseja transformar em um formato de código não legível. O Shc criará dois arquivos: filename.x.c e filename.x . Você pode se livrar de filename.x.c , filename é o arquivo não legível.

    
por Aaron Hill 21.08.2012 / 18:17
1

Uma opção : Se você quiser ver o que está nos programas compilados, use uma ferramenta como objdump para despejar o código do objeto, por exemplo:

objdump -d /bin/ls | less
    
por Colin Ian King 21.08.2012 / 23:05
0

Existem 10 tipos diferentes de pessoas. Acho que você pertence ao segundo grupo ...: P

Existem apenas binários no diretório bin (Binários = Programmes no Código Binário, apenas 1 e 0)

Eles são compilados para serem legíveis por máquina. As máquinas sabem 1 e 0 ou ligam e desligam, verdadeiro ou falso, nada mais.

Isso é feito por um compilador. Existem mais de um compilador. Eu posso pensar no compilador Gnucc, ou no compilador Java, ou em um compilador Delphi ... Compiladores diferentes para diferentes linguagens de programação.

Experimente o grep. Boa sorte!

    
por mondjunge 21.08.2012 / 18:11