Arquitetura de Computadores
(Fundação absoluta para todo exploit e engenharia reversa)
Meta do módulo: ao final, você será capaz de desenhar a organização de memória de um processo, identificar onde variáveis vivem, explicar a função dos registradores principais e demonstrar com debugger a criação e destruição de stack frames, distinguindo claramente stack de heap.
Módulo 1 — Memória, Registradores, Stack & Heap
(Fundação absoluta para todo exploit e engenharia reversa)
Meta do módulo: ao final, você será capaz de desenhar a organização de memória de um processo, identificar onde variáveis vivem, explicar a função dos registradores principais e demonstrar com debugger a criação e destruição de stack frames, distinguindo claramente stack de heap.
1. Panorama Geral — “O Prato Feito Digital”
.text
Receita fixada
Instruções
r-x
.rodata
Etiquetas
Strings/constantes
r--
.data
Arroz pronto
Globais inicializadas
rw-
.bss
Panela vazia
Globais zeradas
rw-
Heap
Bufê à la carte
Alocações via malloc/new
rw-
Stack
Torre de pratos
Frames de função
rw-
Lab‑flash 01 (3 min):
readelf -S hello | grep -E '\.(text|data|bss|rodata)'
→ anote tamanho e offsets.
2. Registradores Essenciais — “O Painel de Controle da CPU”
Dados
Operações aritméticas/lógicas
RAX
, RBX
, RCX
, RDX
Indexação
Ponteiros/arranjos
RSI
, RDI
Stack Pointer
Topo da torre
RSP
(ESP
32‑bit)
Base Pointer
Base do frame atual
RBP
(EBP
)
Instruction Pointer
Próxima instrução
RIP
(EIP
)
Lab‑flash 02 (2 min):
gdb -q ./hello start info reg rip rsp rbp rax
Explique em voz alta o que cada valor representa.
3. A Stack em Detalhes — “Pratos que entram, pratos que saem”
Endereços altos ↓
┌───────────────────────────┐
│ Args da função │
│ Endereço de retorno ← alvo│
│ RBP anterior │
│ Variáveis locais │
└───────────────────────────┘
Endereços baixos ↑
3.1 Ciclo de vida do frame
Prólogo:
push rbp; mov rbp, rsp; sub rsp, X
→ reserva espaço.Corpo: usa variáveis locais / chamadas aninhadas.
Epilogo:
leave; ret
→ descarta frame e volta ao chamador.
3.2 Por que importa?
Sobrescrever o endereço de retorno = controle total do fluxo (BoF).
Leak de
rbp
/rsp
ajuda em info‑leaks e ROP.
Lab‑guiado: compile
vuln.c
com-fno-stack-protector -g
, trace no GDB e observe a mudança deRSP
ao entrar/sair devuln()
.
4. A Heap em Detalhes — “Bufê Sob Demanda”
Arena
Região gerenciada pelo malloc
Salão do bufê
Chunk
Bloco individual
Porção no prato
Free list / bins
Listas de chunks livres
Pilhas de pratos limpos
Cresce para cima (end. maiores).
Vulnerabilidades típicas: heap overflow, use‑after‑free, double‑free.
Lab‑flash 03 (5 min): código
heap_demo.c
com doismalloc
,free
, breakpoint emfree
e olharglibc
bins via pwndbgheap bins
.
5. Stack vs Heap — Comparação Rápida
Atributo
Stack
Heap
Gerência
Automática (CPU)
Manual (malloc/free
)
Crescimento
↓ (endereços menores)
↑ (endereços maiores)
Tamanho
Limitado (default 8 MB)
Virtualmente ilimitado
Velocidade
Muito rápido
Mais lento
Riscos
Buffer/stack overflow
Heap overflow, UAF
6. Exercícios Práticos
Mapeie seu processo:
cat /proc/$(pidof hello)/maps
e marque stack & heap.Desmonte uma função
foo
e identifique cada campo do frame.Exploit básica: modifique exemplo
gets()
e provoque SIGSEGV → capture offset com pwntoolscyclic
.
7. Checklist Feynman
8. Referências Oficiais Essenciais
Intel® 64 Manuals, Vol. 1 §§ 2–3 (registradores, modos).
Operating Systems: Three Easy Pieces – Cap. 14 (Virtual Memory).
The Art of Exploitation § Stack & Heap.
pwndbg docs –
heap
commands.glibc malloc internals (ptmalloc3 wiki).
Pronto! Esta base sólida permitirá quebrar limites (BoF, heap feng‑shui) nos módulos seguintes.🤘
Módulo 1 – Fundamentos da Engenharia Reversa
Meta do módulo: construir a base conceitual e prática indispensável para todo o restante do curso, respondendo quatro perguntas‑chave:
Como o computador armazena e move dados (memória, registradores, pilha, heap)?
Como o sistema operacional conversa com o hardware e com os processos?
Como ler e escrever Assembly (x86/x64) de forma fluida?
Quais ferramentas vou usar no resto do curso e como iniciar nelas?
1 Arquitetura de Computadores
1.1 Mapa da Memória
.text
r‑x
Código
Receita fixa na parede
.rodata
r--
Constantes/strings
Etiquetas
.data
rw-
Globais inic.
Arroz pronto
.bss
rw-
Globais zeradas
Panela vazia
heap
rw-
malloc/new
Bufê à la carte
stack
rw-
Frames de função
Torre de pratos (LIFO)
Hands‑on (5 min)
readelf ‑S hello
→ marque endereço e tamanho de cada segmento.
1.2 Registradores essenciais
x86 (32 bit)
Dados
EAX
, EBX
, ECX
, EDX
x86‑64 (64 bit)
Dados estendidos
RAX
, RBX
, … R15
Ambos
Stack ptr
ESP
/ RSP
Ambos
Base ptr
EBP
/ RBP
Ambos
Próxima instrução
EIP
/ RIP
Micro‑lab:
gdb ./hello
start
info reg rip rsp rbp
1.3 Stack × Heap visual
Endereços altos ↓
| Stack | ← cresce para baixo
|-----------|
| Heap | ← cresce para cima
|-----------|
| .bss/.data|
|-----------|
| .text |
Endereços baixos ↑
2 Sistemas Operacionais em 10 minutos
Modo usuário × modo kernel ‑ privilégio e interrupções.
Syscalls ‑ ponte de user para kernel (Linux:
int 0x80
,syscall
; Windows: ntdll → KiFastSystemCall).Carregador (loader) ‑ mapeia ELF/PE na memória.
Gerência de memória virtual ‑ páginas, proteção (
rwx
).
Exercício‑flash: use strace ls
(Linux) ou Process Monitor (Win) e liste cinco syscalls mais comuns de um “Hello World”.
3 Assembly Essencial (x86/x64)
3.1 Sintaxe AT&T × Intel
AT&T (prefixo %) →
mov %eax, %ebx
Intel →
mov ebx, eax
3.2 Conjunto mínimo de instruções
Transferência
mov
, lea
, xchg
Dados
Aritmética
add
, sub
, inc
, dec
Contadores
Lógica
and
, or
, xor
, not
Flags / criptografia
Controle
call
, ret
, jmp
, je
Fluxo
Pilha
push
, pop
, leave
Frames
3.3 Calling conventions
System V AMD64 (Linux/macOS): argumentos →
RDI RSI RDX RCX R8 R9
.Microsoft x64:
RCX RDX R8 R9
, resto stack.
Lab rápido: compile gcc -fasynchronous-unwind-tables -S hello.c
e abra o .s
.
4 Ferramentas Essenciais (setup mínimo)
Disassembler/Decompiler
Ghidra
Abrir ELF/PE, renomear main
Disassembler GUI
IDA Free
Navegar gráfico de funções
CLI + scriptável
Radare2/iaito
aaa
, pdf
, VV
Debugger Linux
GDB + GEF/Pwndbg
Break main, print stack
Debugger Windows
x64dbg
Trace printf
Helper Exploit
pwntools
cyclic()
& socket
Dica de Feynman: se você não consegue explicar o comando
pdf @ main
para outra pessoa, volte e pratique até fazer sentido.
5 Checkpoint de Aprendizagem
Prova Relâmpago (auto‑cheque)
Qual registrador recebe o 1.º argumento em System V AMD64?
O que acontece internamente quando você faz
call func
?Cite duas diferenças entre heap e stack.
Se travar em qualquer pergunta, revise a seção correspondente.
Atualizado