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