Programação defensiva e memória

Format strings, memória e ROP, canários, taint, cópia segura, TOCTOU e mitigações.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Contratos e formato

  • Valida no servidor tipo, tamanho, intervalo e significado. Cliente pode enviar pedidos sem formulário. Prefere permitidos a padrões proibidos; validação não separa dados de instruções.
  • SQL usa parâmetros para valores; HTML exige codificação do contexto.
  • printf(entrada) deixa dados controlar a interpretação. Usa printf("%s", entrada) para texto. Formato controlado pode levar a implementação a ler posições da pilha nesta máquina e expor segredos; analisa formato e canários em conjunto, sem promessa portátil.
  • %s lê string por ponteiro; %d recebe int; %n sem modificador recebe int * e guarda a contagem já impressa. printf("abc%n!", &n) guarda 3.

Limites e tipos

  • Buffer de bb bytes guarda string até b−1b-1 mais nulo. Comportamento fora dos limites é indefinido; não deduz vítima pela ordem das declarações.
  • Para nome válido terminado em nulo, rejeita se não cabe:
if (n >= 8) return 0;
memcpy(buf, nome, n + 1);
  • Conta bytes, não letras Unicode. Bloco binário exige comprimento explícito. strncpy pode não terminar e pode colidir identificadores.
ErroRegra
Heap overflowEscrita além da alocação; adjacência não garantida.
Use-after-freeUso após libertar é inválido; copiar ponteiro não prolonga vida.
Double freeLibertar duas vezes é inválido; anular um ponteiro não anula aliases.
Integer overflowRejeita quantidade > SIZE_MAX / sizeof(item) antes de multiplicar.
Leitura fora dos limitesCom índice com sinal exige 0 <= indice && indice < len.

Valida comprimento contra bytes disponíveis antes de converter; 65540 em campo de 16 bits fica 4.

Pilha, ROP e canários

  • Modelo x86 de 32 bits com frame pointer: pilha cresce para endereços menores; cópia avança para maiores. Com buffer de 12 bytes em ebp-16 e retorno em ebp+4, o índice 20 atinge o retorno. Little-endian põe 0x11223344 como 44 33 22 11. Depende da disposição dada.

ROP encadeia trechos existentes por ret; reutilizar funções completas é o caso simples.

Assume argumentos na pilha, sem canário e funções que não retiram argumentos. Não extrapola para x86-64.

  • Canário deteta escritas que o atravessam. Terminador só trava primitivas de texto; cópia binária transporta nulos. Aleatório exige imprevisibilidade e sigilo; fuga nesta máquina pode revelá-lo.
  • NX impede executar páginas de dados, não reutilização de código. ASLR dificulta endereços; fugas reduzem-no. CFI restringe desvios cobertos.
  • Taint segue fontes externas até sinks; cópia propaga marca. Sanitização só vale para a condição do sink. Estática aproxima e pode falhar; dinâmica só vê caminhos executados.

TOCTOU

Verificar nome e abrir depois permite trocar o objeto. Abre com restrições, verifica pelo descritor e usa esse descritor. Repetir verificação pelo nome cria outro intervalo. Saldo exige atomicidade ou transação; mutex local não coordena outros processos.

Contratos e modelos.

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.