From f92d1065d0ece76d0e5497e80f0d1c7aa372a731 Mon Sep 17 00:00:00 2001 From: Blau Araujo Date: Wed, 14 May 2025 12:50:43 -0300 Subject: [PATCH] =?UTF-8?q?cabe=C3=A7alho=20da=20aula=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- curso/aula-02.org | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/curso/aula-02.org b/curso/aula-02.org index 17f5533..cb4a353 100644 --- a/curso/aula-02.org +++ b/curso/aula-02.org @@ -1,29 +1,33 @@ -* 2. Linguagens de Montagem e a Compilação +#+title: 2. Linguagens de Montagem e a Compilação +#+author: Blau Araujo +#+email: cursos@blauaraujo.com -** Objetivos +#+options: toc:3 + +* Objetivos - Compreender o papel das linguagens de montagem. - Distinguir montagem, compilação e linkagem. - Conhecer o funcionamento do NASM e do `ld`. - Utilizar ferramentas como `objdump` e `readelf`. -** Resumo Teórico +* Resumo Teórico -*** Do código-fonte ao binário +** Do código-fonte ao binário 1. *Código-fonte* (Assembly ou C) 2. *Montador* (NASM): converte =.asm= → =.o= (objeto) 3. *Linkado** (=ld=): converte =.o= → executável ELF 4. *Carregador* (/loader/ do sistema): executa binários ELF -*** Linguagens de montagem +** Linguagens de montagem - Traduzem o código diretamente para instruções de máquina. - São específicas da arquitetura (ex: x86_64). - NASM (Netwide Assembler): sintaxe no estilo Intel, direta e limpa. - GAS (GNU Assembler): usada pelo GCC, sintaxe AT&T. -*** Ferramentas úteis +** Ferramentas úteis - =nasm=: montador - =ld=: linkador (ou /link-editor/) @@ -32,7 +36,7 @@ - =file=: mostra tipo do executável - =xxd=: "despeja" conteúdo de binários em hexadecimal (instalado com o Vim) -** Exemplo em Assembly NASM +* Exemplo em Assembly NASM Arquivo: [[exemplos/02/salve.asm][salve.asm]] @@ -56,7 +60,7 @@ _start: syscall #+end_src -*** Compilação e execução +** Compilação e execução #+begin_example :~$ nasm -f elf64 -o salve.o salve.asm @@ -65,7 +69,7 @@ _start: Salve, simpatia! #+end_example -*** Inspeção do executável +** Inspeção do executável #+begin_src sh file salve @@ -73,7 +77,7 @@ readelf -h salve objdump -d salve #+end_src -** Versão equivalente em C +* Versão equivalente em C Arquivo: [[exemplos/02/salve.c][salve.c]] @@ -87,7 +91,7 @@ int main() { } #+end_src -*** Compilação e execução +** Compilação e execução #+begin_example :~$ gcc -o salvec salve.c @@ -95,13 +99,13 @@ int main() { Salve, simpatia! #+end_example -** Exercícios sugeridos +* Exercícios sugeridos 1. Modifique o programa para imprimir outra mensagem. 2. Use =objdump -d= para comparar os binários =salve= e =salvec=. 3. Compile o programa em C com =gcc -S -masm=intel= e estude o código-fonte em Assembly. -** Referências +* Referências - man 2 write - man 1 nasm