pbn/curso/README.org
2025-06-08 10:35:24 -03:00

2.9 KiB
Raw Blame History

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 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)

9 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