Jump to content

Como a biblioteca de C foi programada? O que tem dentro dela?


Recommended Posts

Bom, estou numa interminável jornada rumo ao fundo do baú do mundo da programação, desde que comecei a estudar algumas línguas sempre me perguntei como que palavras se transformam nos zeros e uns que tanto falam, o que torna isso possível. De resposta rápida e óbvia, são os compiladores e as bibliotecas, mas isso é só a superfície do que eu busco entender. Por exemplo, quando se vai criar um programa em C/C++ usa-se o Dev-C++, e no início eu achei que tinha encontrado a resposta, para criar executáveis é só usar programas como este, até notar que o Dev também é um executável que foi programado em uma linguagem e compilado, então como que foi programado um executável sem ter um executável pré-existente? 

No momento já tenho algumas peças do quebra-cabeça, terminei recentemente o curso de engenharia reversa online que tirou muitas duvidas e acrescentou mais ainda kkkkk, durante o curso, ele sempre falava sobre a biblioteca de C (libc.so no linux e no windows eu acho que é a  msvcp.dll) e eu gostaria de saber o que tem na biblioteca de C que faz a linguagem funcionar, atualmente imagino que seja comandos assembly que equivalem aos comandos escritos em C, por exemplo onde tiver goto em um arquivo .bat o compilador reescreve para Call.

acho que n expliquei da forma mais correta, mas quem puder me dar uma luz agradeço dmsss, vou estudar a história do assembly agr, ver se acho mais respostas.

Edited by Dragao_Verde
Link to post
Share on other sites
  • 4 weeks later...

Bem... com certeza eu não sou a melhor pessoa para falar sobre isso, já adianto que tem detalhes que não irei mencionar e outros que irei podem estar incorretos,
mas pode gerar uma discussão boa.

como um programa é construído

visão de baixo para cima (para alguns talvez não tão baixa assim)


Tudo são bytes, o processador lê e processa bytes, então para que o processador possa trabalhar precisamos enviar a ele bytes de forma que tenha significado para o processador. Os bytes que fazem sentido para o processador X podem não fazer para o processador Y (no caso processadores de arquiteturas diferentes).

Esses bytes são chamados de opcodes (operation code), são as instruções que o processador entende, essas instruções podem ou não levar outros bytes, que seria os bytes que a instrução vai manipular (ou os bytes que aponta para os bytes que a instrução vai manipular).

Sendo assim podemos escrever um programa utilizando opcodes e demais bytes necessários nas instruções utilizadas,
por exemplo:

55 
48 89 e5
48 8d 3d 00 00 00 00   
e8 00 00 00 00          
b8 00 00 00 00         
5d                     
c3
 

Esses são os bytes gerados na função principal de um Hello world escrito em c em meu sistema,
os que estão em negrito são os opcodes ( instruções ), utilizei essa referencia para confirmar as instruções, mas há de ter erro meu aqui.

Imagine escrever um programa apenas utilizando números? (se fossemos bom em lembrar números não precisaria ter DNS).

para melhorar esse cenário foi criado os mnemônicos, que são os bytes relativos às instruções correlacionados com palavras que facilitam a memorização,
no fragmento abaixo o que está em negrito são os mnemônicos correspondentes aos opcodes do exemplo visto acima.

push   rbp
mov    rbp,rsp
lea    rdi,[rip+0x0]
call   10 <main+0x10>
mov    eax,0x0
pop    rbp
ret

A partir de agora já temos algumas palavras para usar facilitando a vida, porém agora precisa passar o código fonte por um programa que vai interpretá-lo e converter esses  mnemônicos em opcodes corretos para o processador, isso é o que o assembler faz.

Depois, o próximo passo seria especificar uma linguagem de programação propriamente dita, definir regras de sintaxe, e demais coisas relacionadas a linguagem, depois da linguagem especificada precisa-se criar um programa que vai pegar o arquivo texto e transformar em bytes de uma forma que o processador possa entender, esse programa chamado de compilador.

Dito isso, respondendo a
“Como a biblioteca de C foi programada? O que tem dentro dela?”

Uma biblioteca é um programa como outro qualquer, escrito como qualquer outro, porém seu objetivo é servir a outro programa e não diretamente servir o usuário "final".

como você mencionou a libc do linux, segue o link onde você pode baixar a biblioteca e ver oque tem dentro, 
https://www.gnu.org/software/libc/

espero que tenha ajudado.

  • Curtir 3
Link to post
Share on other sites
  • 2 weeks later...

Vlw mano, desde o tempo que eu postei isso eu vim pesquisando e refletindo sobre e cheguei a uma conclusão que é a mesma coisa que vc escreveu, mas ainda estava com algumas incertezas. Muito obrigado pelo norteamento, me ajudou a confirmar minhas suposições e dar uma arrumada nas ideias. Vlw msm.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...