* 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//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