* 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