pbn/curso
2025-06-18 09:45:25 -03:00
..
exemplos exemplos da aula 9 2025-06-18 09:35:02 -03:00
aula-00.org conteúdo da aula 0 2025-05-28 10:03:55 -03:00
aula-01.org atualização da aula 1 2025-05-17 15:13:38 -03:00
aula-02.org atualização da aula 2 2025-05-17 11:01:21 -03:00
aula-03.org objetivos alterados na aula 3 2025-05-20 08:13:17 -03:00
aula-04.org conteúdo da aula 4 2025-05-21 14:00:12 -03:00
aula-05.org correção do exemplo em c 2025-05-23 12:17:06 -03:00
aula-06.org conteúdo da aula 7 2025-05-26 08:04:43 -03:00
aula-07.org conteúdo da aula 7 2025-05-26 08:04:43 -03:00
aula-08.org conteúdo da aula 8 2025-06-02 11:48:54 -03:00
aula-09.org anotações da aula 9 2025-06-18 09:33:28 -03:00
README.org correção dos links 2025-06-18 09:45:25 -03:00

Fundamentos da Programação em Baixo Nível

0 Introdução à linguagem Assembly (NASM)

Texto | Vídeo

  • O que é Assembly
  • Linguagem dependente da arquitetura
  • Linguagem de montagem
  • Classificações da linguagem
  • Comparação com outras linguagens
  • Por que aprender Assembly?
  • Principais sintaxes
  • O Netwide Assembler (NASM)
  • Instruções essenciais
  • Montagem e execução de programas em Assembly NASM

1 Arquitetura de computadores

Texto | Vídeo

  • Modelo de von Neumann
  • Arquiteturas x86
  • Componentes de uma CPU x86_64
  • Principais registradores e seus propósitos (64 bits)
  • Primeiro exemplo em Assembly x86_64

2 Linguagens, montagem e compilação

Texto | Vídeo

  • Do código-fonte ao binário
  • Programação em código de máquina
  • Linguagens de baixo e alto nível
  • Sistemas de tradução de linguagens
  • Um programa em Assembly
  • Uma versão equivalente em C
  • Desmontagem comparativa

3 O formato binário ELF

Texto | Vídeo

  • O que é o formato ELF
  • Formato do arquivo
  • Seções especiais
  • Tipos de segmentos
  • Definindo seções ELF em NASM para Linux 64 bits

4 Mapeamento de memória

Texto | Vídeo

  • Como programas são executados
  • Explorando os espaços de endereços de processos
  • Mapeamento de memória de um programa em C
  • Mapeamento de memória de um programa em Assembly

5 Pilha de hardware e pilha de memória

Texto | Vídeo

  • Objetivos
  • O conceito de pilha (stack)
  • Pilha de memória
  • Pilha de hardware
  • Registradores e a pilha de memória
  • Convenções de chamadas de funções (System V AMD64 ABI)
  • Convenções de chamadas de sistema

6 Vetor de argumentos de linha de comando

Texto | Vídeo

  • O quadro inicial da pilha do processo
  • Inspecionando argumentos e variáveis exportadas
  • Acesso aos argumentos em baixo nível
  • Listando todos os dados de argumentos

7 Vetor de ambiente

Texto | Vídeo

  • Revisão: o quadro inicial da pilha do processo
  • Localizando o vetor de ambiente
  • Extraindo valores de variáveis exportadas
  • Implementação com funções da linguagem C

8 Conversão de strings numéricas para inteiros

Texto | Vídeo

  • Todos os dados externos são recebidos como caracteres
  • Conversão para inteiros sem sinal em alto nível
  • Conversão para inteiros sem sinal em baixo nível
  • Conversão para inteiros com sinal

9 Conversão de representações de ponto flutuante

Texto | Vídeo

  • Tipos de ponto flutuante em C
  • Representações em expressões constantes
  • Codificação binária do tipo double (64 bits)
  • Codificação binária do tipo float (32 bits)
  • Unidades de ponto flutuante em x86_64
  • Conversão de strings para float

10 Conversão de números para caracteres

11 Conversão de bases de numeração

12 Bibliotecas, macros e sub-rotinas

13 Fluxos de dados

Texto | Vídeo

  • Tabela de descritores de arquivos
  • Uso dos fluxos de dados padrão no shell
  • Uso dos fluxos de dados padrão em programas
  • Criação e manipulação de fluxos de dados
  • Armazenamento temporário (bufferização)

14 Criação e manipulação de arquivos

15 Implementação de funções para uso em C

16 Utilizando funções da GLibc

17 Desafio de encerramento