pbn/curso/contents.org
2025-05-22 14:36:58 -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