pbn/curso/contents.org
2025-05-22 14:42:10 -03:00

2.8 KiB
Raw Blame History

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