⚡ Cap 12: Strings & Segurança de Memória (OWASP/CERT C)
Especialização em Engenharia de Sistemas com Linguagem C (C17/C23)
🗺️ Slide 1: O Byte Terminador Nulo ('\0')
graph LR
A["'C' (0x43)"] --> B["' ' (0x20)"]
B --> C["'P' (0x50)"]
C --> D["'U' (0x55)"]
D --> E["'R' (0x52)"]
E --> F["'O' (0x4F)"]
F --> G["'\\0' (0x00)"]
style G fill:#064e3b,stroke:#00e676,stroke-width:2px,color:#ffffff
- Regra Fundamental: A capacidade do array deve ser $\ge \text{strlen}(s) + 1$ byte.
- Sem o
'\0', as funções de C continuam lendo memória adjacente arbitrariamente.
🏛️ Slide 2: Stack Mutável vs .rodata Imutável
char mutavel[] = "Texto"; // ✅ Alocado na Stack (pode alterar)
const char *literal = "Texto"; // 🔒 Seção .rodata (somente leitura)
- Tentar alterar um ponteiro para string literal gera
SIGSEGV(Segmentation Fault).
🛡️ Slide 3: Substitutos Seguros (CERT C)
| Inseguro (Proibido) | Seguro (Recomendado) |
|---|---|
gets(str) |
fgets(str, sizeof(str), stdin) |
strcpy(dst, src) |
strncpy(dst, src, sizeof(dst) - 1) |
sprintf(dst, ...) |
snprintf(dst, sizeof(dst), ...) |
⚠️ Slide 4: Vulnerabilidade de Format String
// ❌ VULNERÁVEL (vaza memória da Stack):
printf(userInput);
// ✅ SEGURO E PROTEGIDO:
printf("%s", userInput);
- Nunca passe dados dinâmicos do usuário como string de formato no
printf.
📋 Resumo da Aula & Próximos Passos
- Revise os códigos de exemplo deste capítulo.
- Teste seus conhecimentos no Quiz Formativo.
- Pratique os exercícios em 4 níveis de complexidade.
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim