Capstones e próximos passos
TL;DR
- Você vai ter projetos capstone práticos que combinam as habilidades da série: compilar C RV32, inspecionar internals de ELF, entender stack frames, depurar no QEMU, fazer triagem de firmware e validar com interfaces de hardware.
- Cada capstone inclui entregáveis sugeridos, plano de teste e “stretch goals”.
- Você também recebe um plano de estudo para ensinar este material a outras pessoas: como conduzir labs, avaliar exercícios e manter os alunos avançando.
Capstone 1: RV32 “binaryISC” - um mini monitor de firmware no QEMU
Objetivo
Construir um programa bare-metal RV32 mínimo que:
- começa em um endereço conhecido (via linker script),
- mantém algumas variáveis globais,
- expõe um pequeno “monitor loop” (mesmo que seja apenas uma máquina de estados),
- e possa ser depurado de forma determinística.
Entregáveis
monitor.c,monitor.ldmonitor.elf,monitor.binmonitor.map(link map)- um write-up curto:
- mapa de memória (o que está em qual endereço)
- como conectar com GDB e inspecionar estado
Esboço sugerido de implementação
- Uma variável global de comando que muda de estado
- Um loop que checa a variável e atualiza um contador
- Opcional: um rótulo de “software breakpoint” para o qual você pode saltar
Plano de teste
- Verificar o endereço de
_startcomreadelf -hereadelf -s. - Verificar posicionamento de
.text/.data/.bsscom o arquivo.map. - Depurar com
qemu-system-riscv32 -S -gdb tcp::1234e GDB.
Stretch goals
- Adicionar copy-down de
.datae zero de.bssno startup. - Adicionar saída UART básica via QEMU virt UART (avançado).
Capstone 2: “C → Assembly” pack de explicação (entregável didático)
Objetivo
Criar um conjunto de materiais didáticos que explicam como 5 funções C pequenas compilam para assembly em -O0 e -O2.
Escolha funções que cubram:
- aritmética + bitwise
- if/else
- loop sobre array
- switch
- chamada de função com stack frame
Entregáveis
- um PDF ou write-up em markdown com:
- C original
- trechos de disassembly
- notas de “como ler isso”
- um quiz curto para cada função (alunos respondem a partir do disassembly)
Plano de teste
- Para cada função, inclua um trecho de sessão GDB que confirme o comportamento.
Capstone 3: Relatório de triagem de firmware (estático primeiro)
Objetivo
Pegar uma imagem de firmware (sua ou de treinamento) e produzir um relatório estruturado de triagem.
Entregáveis
Um relatório contendo:
- resultados de identificação de tipo (
file, notas de entropia) - destaques de strings e hipóteses
- artefatos embutidos encontrados (headers ELF, regiões comprimidas)
- sub-imagens extraídas (se aplicável)
- um palpite inicial de mapa de memória (para
.bin) - próximos passos (quais funções/subsistemas analisar)
Plano de teste
- Forneça os comandos exatos usados.
- Forneça offsets e hashes para as partes extraídas.
Capstone 4: Mini-lab de análise dinâmica (Frida)
Objetivo
Hookar um ponto de decisão em um programa userland:
- logar entradas
- logar saídas
- opcionalmente patchar o comportamento
Entregáveis
- scripts Frida
- evidências de comportamento antes/depois
- explicação de por que você escolheu aquele ponto de hook
Stretch goals
- Converter para hook baseado em endereço e lidar com símbolos stripados.
Capstone 5: Planilha de validação de hardware (UART/SPI/I2C)
Objetivo
Criar uma “planilha de campo” que alunos possam usar em qualquer placa.
Entregáveis
Um template que inclua:
- trilhas de alimentação e tensões esperadas
- pontos de ground
- pinos de header UART suspeitos e resultados de teste
- ID de chip SPI flash suspeito, mapeamento de pinos e resultados de sniff
- plano de varredura I2C e notas de captura
Plano de teste
- Teste em uma placa dev que você possui e preencha uma planilha real.
Plano de ensino: como rodar esta série para uma turma
Ritmo recomendado
- Semana 1: Capítulos 1–3 (setup, ELF, ABI)
- Semana 2: Capítulos 4–6 (otimização, fluxo de controle, stack)
- Semana 3: Capítulos 7–9 (linker scripts, floats, debug)
- Semana 4: Capítulos 10–12 (workflow de firmware, análise dinâmica, interfaces de hardware)
- Semana 5+: Capstones
Como avaliar alunos
- Exigir “artefatos de evidência”:
- map files, trechos de disassembly, transcrições de GDB
- pequenos scripts (Python) que validam constantes
- Usar checagens orais curtas:
- “me mostre onde o valor de retorno está”
- “me mostre qual instrução carrega o campo X da struct”
Exercícios
- Escolha um capstone e escreva um plano de projeto de 1 página com marcos.
- Crie uma rubrica para corrigir o Capstone 2 (pack de explicação C→assembly).
- Escreva 10 “micro-perguntas” que alunos possam responder a partir de output do
objdump.
Como testar suas respostas
- Se o seu plano tem marcos claros, outro aluno deve conseguir segui-lo.
- Se sua rubrica é específica, dois avaliadores devem pontuar de forma similar.
Resumo
Agora você tem um conjunto de projetos realistas que combinam toda a toolchain: compilação, leitura de ELF, raciocínio em assembly, entendimento de stack/ABI, depuração, triagem de firmware e validação de interfaces de hardware.
Se você quiser expandir este livro depois, as adições mais valiosas são:
- tópicos mais profundos de startup/runtime (crt0 (C runtime zero) e inicialização),
- tratamento de exceções/traps no RISC-V,
- e um lab completo de “firmware Linux emulado” com filesystem e serviços.