cabeçalho da aula 2
This commit is contained in:
parent
adeb6897ca
commit
f92d1065d0
1 changed files with 17 additions and 13 deletions
|
@ -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
|
||||||
|
|
Loading…
Add table
Reference in a new issue