cabeçalho da aula 2

This commit is contained in:
Blau Araujo 2025-05-14 12:50:43 -03:00
parent adeb6897ca
commit f92d1065d0

View file

@ -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. - Compreender o papel das linguagens de montagem.
- Distinguir montagem, compilação e linkagem. - Distinguir montagem, compilação e linkagem.
- Conhecer o funcionamento do NASM e do `ld`. - Conhecer o funcionamento do NASM e do `ld`.
- Utilizar ferramentas como `objdump` e `readelf`. - 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) 1. *Código-fonte* (Assembly ou C)
2. *Montador* (NASM): converte =.asm==.o= (objeto) 2. *Montador* (NASM): converte =.asm==.o= (objeto)
3. *Linkado** (=ld=): converte =.o= → executável ELF 3. *Linkado** (=ld=): converte =.o= → executável ELF
4. *Carregador* (/loader/ do sistema): executa binários 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. - Traduzem o código diretamente para instruções de máquina.
- São específicas da arquitetura (ex: x86_64). - São específicas da arquitetura (ex: x86_64).
- NASM (Netwide Assembler): sintaxe no estilo Intel, direta e limpa. - NASM (Netwide Assembler): sintaxe no estilo Intel, direta e limpa.
- GAS (GNU Assembler): usada pelo GCC, sintaxe AT&T. - GAS (GNU Assembler): usada pelo GCC, sintaxe AT&T.
*** Ferramentas úteis ** Ferramentas úteis
- =nasm=: montador - =nasm=: montador
- =ld=: linkador (ou /link-editor/) - =ld=: linkador (ou /link-editor/)
@ -32,7 +36,7 @@
- =file=: mostra tipo do executável - =file=: mostra tipo do executável
- =xxd=: "despeja" conteúdo de binários em hexadecimal (instalado com o Vim) - =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]] Arquivo: [[exemplos/02/salve.asm][salve.asm]]
@ -56,7 +60,7 @@ _start:
syscall syscall
#+end_src #+end_src
*** Compilação e execução ** Compilação e execução
#+begin_example #+begin_example
:~$ nasm -f elf64 -o salve.o salve.asm :~$ nasm -f elf64 -o salve.o salve.asm
@ -65,7 +69,7 @@ _start:
Salve, simpatia! Salve, simpatia!
#+end_example #+end_example
*** Inspeção do executável ** Inspeção do executável
#+begin_src sh #+begin_src sh
file salve file salve
@ -73,7 +77,7 @@ readelf -h salve
objdump -d salve objdump -d salve
#+end_src #+end_src
** Versão equivalente em C * Versão equivalente em C
Arquivo: [[exemplos/02/salve.c][salve.c]] Arquivo: [[exemplos/02/salve.c][salve.c]]
@ -87,7 +91,7 @@ int main() {
} }
#+end_src #+end_src
*** Compilação e execução ** Compilação e execução
#+begin_example #+begin_example
:~$ gcc -o salvec salve.c :~$ gcc -o salvec salve.c
@ -95,13 +99,13 @@ int main() {
Salve, simpatia! Salve, simpatia!
#+end_example #+end_example
** Exercícios sugeridos * Exercícios sugeridos
1. Modifique o programa para imprimir outra mensagem. 1. Modifique o programa para imprimir outra mensagem.
2. Use =objdump -d= para comparar os binários =salve= e =salvec=. 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. 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 2 write
- man 1 nasm - man 1 nasm