diff --git a/curso/contents.org b/curso/contents.org new file mode 100644 index 0000000..ba12ba2 --- /dev/null +++ b/curso/contents.org @@ -0,0 +1,91 @@ +* 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