2.8 KiB
2.8 KiB
- 1 – Arquitetura de computadores
- 2 – Linguagens, montagem e compilação
- 3 – O formato binário ELF
- 4 – Mapeamento de memória
- 5 – Pilha de hardware e pilha de memória
1 – Arquitetura de computadores
-
Modelo de von Neumann
- Influência nas arquiteturas modernas
- Gargalo de Von Neumann
-
Arquiteturas x86
- Características
- Gerações da família x86:
- Comparativo com outras arquiteturas
- Componentes de uma CPU x86_64
-
Principais registradores e seus propósitos (64 bits)
- Relação com outras arquiteturas x86
-
Primeiro exemplo em Assembly x86_64
- Seção do código executável
- O ponto de entrada
- Chamada de sistema
- Montagem e execução (no terminal)
2 – Linguagens, montagem e compilação
-
Do código-fonte ao binário
- Arquivos texto e binários
- Formato de binário executável
- Programação em código de máquina
- Linguagens de baixo e alto nível
-
Sistemas de tradução de linguagens
- Linguagens interpretadas
- Linguagens compiladas
- Linguagens de montagem
-
Um programa em Assembly
- Tamanho do binário em bytes
- Informações gerais do arquivo
- Cabeçalho do formato ELF
- Lista de seções do programa
- Despejo do conteúdo (em hexa) da seção .text
- Despejo do conteúdo (em hexa) da seção .rodata
-
Uma versão equivalente em C
- Tamanho do binário em bytes:
- Informações gerais do arquivo
- Cabeçalho do formato ELF
- Lista de seções do programa
- Despejo do conteúdo (em hexa) da seção .text
- Despejo do conteúdo (em hexa) da seção .rodata
- Desmontagem comparativa
3 – O formato binário ELF
-
O que é o formato ELF
- Principais tipos de arquivos objeto
- Formato do arquivo
- Seções especiais
- Tipos de segmentos
-
Definindo seções ELF em NASM para Linux 64 bits
- Uma nota sobre alinhamento de dados
- Inspecionando a seção .rodata
- Inspeção da seção .data
- Inspecionando a seção .bss
4 – Mapeamento de memória
-
Como programas são executados
- O que são processos
- Layout da memória virtual de um processo
- Explorando os espaços de endereços de processos
-
Mapeamento de memória de um programa em C
- Análise com 'pmap'
- Análise com o arquivo /proc/<pid>/maps
-
Mapeamento de memória de um programa em Assembly
- Análise com o GNU Debugger (GDB)
- Executáveis independentes de posição (PIE)
5 – Pilha de hardware e pilha de memória
- Objetivos
-
O conceito de pilha (stack)
- Implementação da pilha como estrutura de dados
- Aplicações típicas
- Operações associadas às pilhas
- 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)
- Ordem dos argumentos
- Valor de retorno
- Registradores preservados e não preservados
- Exemplo em C
- Quadro de pilha (stack frame)
-
Convenções de chamadas de sistema
- Exemplo em Assembly
- Preservação de registradores com a pilha
- Resumo comparativo com chamadas de funções