Communitygithub.com

SamuelChien/mega-skills-collection

O AddressSanitizer detecta erros de memória durante o fuzzing. Use ao fuzzar código C/C++ para encontrar estouros de buffer e erros de uso-após-liberação.

O que é mega-skills-collection?

AddressSanitizer (ASan) é uma ferramenta de detecção de erros de memória amplamente adotada, usada extensivamente durante testes de software, especialmente fuzzing. Ela ajuda a detectar bugs de corrupção de memória que poderiam passar despercebidos, como estouros de buffer, erros de uso-após-liberação e outras violações de segurança de memória. O ASan é uma prática padrão em fuzzing devido à sua eficácia na identificação de vulnerabilidades de memória. Ele instrumenta o código em tempo de compilação para rastrear alocações e acessos de memória, detectando operações ilegais em tempo de execução, com um custo de desempenho de aproximadamente 2 a 4 vezes de lentidão em comparação com código não instrumentado. A ferramenta é compatível com Clang, GCC e AFL++ no Linux, tem suporte limitado no macOS e suporte experimental no Windows, e pode ser combinada com outros sanitizers, como o UndefinedBehaviorSanitizer. Seu uso é recomendado para fuzzing de código C/C++, teste de código Rust com blocos inseguros e depuração de falhas relacionadas à corrupção de memória, mas deve ser evitado em produção e em plataformas com suporte limitado.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/SamuelChien/mega-skills-collection/tree/HEAD/address-sanitizer

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

AddressSanitizer (ASan)

O AddressSanitizer (ASan) é uma ferramenta de detecção de erros de memória amplamente adotada, usada extensivamente durante testes de software, particularmente em fuzzing. Ela ajuda a detectar bugs de corrupção de memória que poderiam passar despercebidos, como estouros de buffer, erros de uso-após-liberação e outras violações de segurança de memória.

Visão Geral

O ASan é uma prática padrão em fuzzing devido à sua eficácia na identificação de vulnerabilidades de memória. Ele instrumenta o código em tempo de compilação para rastrear alocações e acessos de memória, detectando operações ilegais em tempo de execução.

Conceitos Chave

ConceitoDescrição
InstrumentaçãoO ASan adiciona verificações em tempo de execução às operações de memória durante a compilação
Memória SombraMapeia 20 TB de memória virtual para rastrear o estado das alocações
Custo de DesempenhoAproximadamente 2 a 4x de lentidão em comparação com código não instrumentado
Escopo de DetecçãoEncontra estouros de buffer, uso-após-liberação, dupla liberação e vazamentos de memória

Quando Aplicar

Aplique esta técnica quando:

  • Fuzzar código C/C++ para vulnerabilidades de segurança de memória
  • Testar código Rust com blocos inseguros
  • Depurar falhas relacionadas à corrupção de memória
  • Executar testes unitários onde erros de memória são suspeitos

Pule esta técnica quando:

  • Executar código em produção (ASan pode reduzir a segurança)
  • A plataforma for Windows ou macOS (suporte limitado ao ASan)
  • A sobrecarga de desempenho for inaceitável para seu caso de uso
  • Fuzzar linguagens seguras puras sem FFI (ex.: Go puro, Java puro)

Referência Rápida

TarefaComando/Exemplo
Habilitar ASan (Clang/GCC)-fsanitize=address
Habilitar verbosidadeASAN_OPTIONS=verbosity=1
Desabilitar detecção de vazamentosASAN_OPTIONS=detect_leaks=0
Forçar aborto em erroASAN_OPTIONS=abort_on_error=1
Múltiplas opçõesASAN_OPTIONS=verbosity=1:abort_on_error=1

Passo a Passo

Passo 1: Compilar com ASan

Compile e linke seu código com a flag -fsanitize=address:

clang -fsanitize=address -g -o meu_programa meu_programa.c

A flag -g é recomendada para obter melhores rastreamentos de pilha quando o ASan detecta erros.

Passo 2: Configurar Opções do ASan

Defina a variável de ambiente ASAN_OPTIONS para configurar o comportamento do ASan:

export ASAN_OPTIONS=verbosity=1:abort_on_error=1:detect_leaks=0

Passo 3: Executar Seu Programa

Execute o binário instrumentado com ASan. Quando erros de memória forem detectados, o ASan imprimirá relatórios detalhados:

./meu_programa

Passo 4: Ajustar Limites de Memória do Fuzzer

O ASan requer aproximadamente 20 TB de memória virtual. Desabilite as restrições de memória do fuzzer:

  • libFuzzer: -rss_limit_mb=0
  • AFL++: -m none

Padrões Comuns

Padrão: Integração Básica com ASan

Caso de Uso: Configuração padrão de fuzzing com ASan

Antes:

clang -o alvo_fuzz alvo_fuzz.c
./alvo_fuzz

Depois:

clang -fsanitize=address -g -o alvo_fuzz alvo_fuzz.c
ASAN_OPTIONS=verbosity=1:abort_on_error=1 ./alvo_fuzz

Padrão: ASan com Testes Unitários

Caso de Uso: Habilitar ASan para suíte de testes unitários

Antes:

gcc -o suite_teste suite_teste.c -lcheck
./suite_teste

Depois:

gcc -fsanitize=address -g -o suite_teste suite_teste.c -lcheck
ASAN_OPTIONS=detect_leaks=1 ./suite_teste

Uso Avançado

Dicas e Truques

DicaPor Que Ajuda
Use a flag -gFornece rastreamentos de pilha detalhados para depuração
Defina verbosity=1Confirma que o ASan está habilitado antes de o programa iniciar
Desabilite detecção de vazamentos durante fuzzingA detecção de vazamentos não causa falhas imediatas, poluindo a saída
Habilite abort_on_error=1Alguns fuzzers exigem abort() em vez de _exit()

Entendendo os Relatórios do ASan

Quando o ASan detecta um erro de memória, ele imprime um relatório detalhado incluindo:

  • Tipo de erro: Estouro de buffer, uso-após-liberação, etc.
  • Rastreamento de pilha: Onde o erro ocorreu
  • Rastreamentos de alocação/desalocação: Onde a memória foi alocada/liberada
  • Mapa de memória: Estado da memória sombra ao redor do erro

Exemplo de relatório do ASan:

==12345==ERROR: AddressSanitizer: heap-buffer-overflow no endereço 0x60300000eff4 no pc 0x00000048e6a3
READ de tamanho 4 em 0x60300000eff4 thread T0
    #0 0x48e6a2 in main /caminho/para/arquivo.c:42

Combinando Sanitizers

O ASan pode ser combinado com outros sanitizers para detecção abrangente:

clang -fsanitize=address,undefined -g -o alvo_fuzz alvo_fuzz.c

Considerações Específicas por Plataforma

Linux: Suporte completo ao ASan com melhor desempenho macOS: Suporte limitado, alguns recursos podem não funcionar Windows: Suporte experimental, não recomendado para fuzzing em produção

Anti-Padrões

Anti-PadrãoProblemaAbordagem Correta
Usar ASan em produçãoPode tornar aplicações menos segurasUse ASan apenas para testes
Não desabilitar limites de memóriaO fuzzer pode matar o processo devido a 20 TB de memória virtualDefina -rss_limit_mb=0 ou -m none
Ignorar relatórios de vazamentoVazamentos de memória indicam problemas de gerenciamento de recursosRevise relatórios de vazamento no final da campanha de fuzzing

Orientações Específicas por Ferramenta

libFuzzer

Compile com ambos fuzzer e sanitizer de endereço:

clang++ -fsanitize=fuzzer,address -g harness.cc -o fuzz

Execute com RSS ilimitado:

./fuzz -rss_limit_mb=0

Dicas de integração:

  • Sempre combine -fsanitize=fuzzer com -fsanitize=address
  • Use -g para rastreamentos de pilha detalhados em relatórios de falha
  • Considere ASAN_OPTIONS=abort_on_error=1 para melhor tratamento de falhas

Veja: libFuzzer: AddressSanitizer

AFL++

Use a variável de ambiente AFL_USE_ASAN:

AFL_USE_ASAN=1 afl-clang-fast++ -g harness.cc -o fuzz

Execute com memória ilimitada:

afl-fuzz -m none -i diretorio_entrada -o diretorio_saida ./fuzz

Dicas de integração:

  • AFL_USE_ASAN=1 adiciona automaticamente as flags de compilação adequadas
  • Use -m none para desabilitar o limite de memória do AFL++
  • Considere AFL_MAP_SIZE para programas com grandes mapas de cobertura

Veja: AFL++: AddressSanitizer

cargo-fuzz (Rust)

Use a flag --sanitizer=address:

cargo fuzz run alvo_fuzz --sanitizer=address

Ou configure em fuzz/Cargo.toml:

[profile.release]
opt-level = 3
debug = true

Dicas de integração:

  • ASan é útil para fuzzing de código Rust inseguro ou limites FFI
  • Código Rust seguro pode não se beneficiar tanto (o compilador já previne muitos erros)
  • Foque em blocos inseguros, ponteiros brutos e ligações com bibliotecas C

Veja: cargo-fuzz: AddressSanitizer

honggfuzz

Compile com ASan e linke com honggfuzz:

honggfuzz -i diretorio_entrada -o diretorio_saida -- ./alvo_fuzz_asan

Compile o alvo:

hfuzz-clang -fsanitize=address -g alvo.c -o alvo_fuzz_asan

Dicas de integração:

  • honggfuzz funciona bem com ASan sem configuração adicional
  • Use modo orientado por feedback para melhor cobertura com sanitizers
  • Monitore o uso de memória, pois o ASan aumenta o consumo de memória

Solução de Problemas

ProblemaCausaSolução
Fuzzer mata processo imediatamenteLimite de memória muito baixo para 20 TB de memória virtual do ASanUse -rss_limit_mb=0 (libFuzzer) ou -m none (AFL++)
"ASan runtime not initialized"Ordem de linking errada ou runtime ausenteGaranta que -fsanitize=address seja usado tanto na compilação quanto no linking
Relatórios de vazamento poluem saídaLeakSanitizer habilitado por padrãoDefina ASAN_OPTIONS=detect_leaks=0
Baixo desempenho (>4x lentidão)Modo debug ou build não otimizadoCompile com -O2 ou -O3 junto com -fsanitize=address
ASan não detecta bugs óbviosBinário não instrumentadoVerifique com ASAN_OPTIONS=verbosity=1 se o ASan imprime informações de inicialização
Falsos positivosConflitos de interceptadoresConsulte o FAQ do ASan para problemas conhecidos com bibliotecas específicas

Habilidades Relacionadas

Ferramentas Que Usam Esta Técnica

HabilidadeComo Aplica
libfuzzerCompile com -fsanitize=fuzzer,address para fuzzing integrado com detecção de erros de memória
aflppUse a variável de ambiente AFL_USE_ASAN=1 durante a compilação
cargo-fuzzUse a flag --sanitizer=address para habilitar ASan para alvos de fuzzing Rust
honggfuzzCompile o alvo com -fsanitize=address para fuzzing instrumentado com ASan

Técnicas Relacionadas

HabilidadeRelação
undefined-behavior-sanitizerFrequentemente usado junto com ASan para detecção abrangente de bugs (comportamento indefinido + erros de memória)
fuzz-harness-writingHarnesses devem ser projetados para lidar com falhas detectadas pelo ASan e evitar falsos positivos
coverage-analysisO fuzzing guiado por cobertura ajuda a acionar caminhos de código onde o ASan pode detectar erros de memória

Recursos

Recursos Externos Principais

AddressSanitizer no Google Sanitizers Wiki

A documentação oficial do ASan cobre:

  • Algoritmo e detalhes de implementação
  • Lista completa de tipos de erro detectados
  • Características de desempenho e sobrecarga
  • Comportamento específico por plataforma
  • Limitações e incompatibilidades conhecidas

SanitizerCommonFlags

Flags de configuração comuns compartilhadas por todos os sanitizers:

  • verbosity: Controla o nível de saída de diagnóstico
  • log_path: Redireciona a saída do sanitizer para arquivos
  • symbolize: Habilita/desabilita resolução de símbolos em relatórios
  • external_symbolizer_path: Usa um simbolizador personalizado

AddressSanitizerFlags

Opções de configuração específicas do ASan:

  • detect_leaks: Controla a detecção de vazamentos de memória
  • abort_on_error: Chama abort() vs _exit() em caso de erro
  • detect_stack_use_after_return: Detecta bugs de uso-após-retorno na pilha
  • check_initialization_order: Encontra bugs de ordem de inicialização

FAQ do AddressSanitizer

Pegadinhas e soluções comuns:

  • Problemas de ordem de linking
  • Conflitos com outras ferramentas
  • Problemas específicos de plataforma
  • Dicas para ajuste de desempenho

Documentação do AddressSanitizer para Clang

Orientações específicas para Clang:

  • Flags e opções de compilação
  • Interação com outros recursos do Clang
  • Plataformas e arquiteturas suportadas

Opções de Instrumentação do GCC

Documentação específica do ASan para GCC:

  • Flags e comportamento específicos do GCC
  • Diferenças da implementação do Clang
  • Suporte de plataforma no GCC

AddressSanitizer: A Fast Address Sanity Checker (Artigo USENIX)

Artigo de pesquisa original com detalhes técnicos:

  • Algoritmo de memória sombra
  • Requisitos de memória virtual (historicamente 16 TB, agora ~20 TB)
  • Benchmarks de desempenho
  • Decisões de design e compensações

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

SamuelChien/mega-skills-collection

Security audit, hardening, threat modeling (STRIDE/PASTA), Red/Blue Team, OWASP checks, code review, incident response, and infrastructure security for any project.

SamuelChien/mega-skills-collection

Arquitecto de Soluciones Principal y Consultor Tecnológico de Andru.ia. Diagnostica y traza la hoja de ruta óptima para proyectos de IA en español.

SamuelChien/mega-skills-collection

Ingeniero de Sistemas de Andru.ia. Diseña, redacta y despliega nuevas habilidades (skills) dentro del repositorio siguiendo el Estándar de Diamante.

SamuelChien/mega-skills-collection

Estratega de Inteligencia de Dominio de Andru.ia. Analiza el nicho específico de un proyecto para inyectar conocimientos, regulaciones y estándares únicos del sector. Actívalo tras definir el nicho.

SamuelChien/mega-skills-collection

2D game development principles. Sprites, tilemaps, physics, camera.

SamuelChien/mega-skills-collection

3D game development principles. Rendering, shaders, physics, cameras.

SamuelChien/mega-skills-collection

Expert in building 3D experiences for the web - Three.js, React Three Fiber, Spline, WebGL, and interactive 3D scenes. Covers product configurators, 3D portfolios, immersive websites, and bringing depth to web experiences.

SamuelChien/mega-skills-collection

Accessibility audit skill for scanning, fixing, and verifying WCAG 2.2 Level A and AA compliance across React, Next.js, Vue, Angular, Svelte, and plain HTML codebases. Use when auditing accessibility, fixing a11y violations, checking color contrast, generating compliance reports, or integrating accessibility checks into CI/CD pipelines.

SamuelChien/mega-skills-collection

Ab Test Analyzer - Auto-activating skill for Data Analytics. Triggers on: ab test analyzer, ab test analyzer Part of the Data Analytics skill category.

SamuelChien/mega-skills-collection

A B Test Config Creator - Auto-activating skill for ML Deployment. Triggers on: a b test config creator, a b test config creator Part of the ML Deployment skill category.

SamuelChien/mega-skills-collection

When the user wants to plan, design, or implement an A/B test or experiment. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "conversion experiment," "statistical significance," or "test this." For tracking implementation, see analytics-tracking.

SamuelChien/mega-skills-collection

Acceptance Criteria Creator - Auto-activating skill for Enterprise Workflows. Triggers on: acceptance criteria creator, acceptance criteria creator Part of the Enterprise Workflows skill category.

SamuelChien/mega-skills-collection

Use when a coding task should be driven end-to-end from issue intake through implementation, review, deployment, and acceptance verification with minimal human re-intervention.

SamuelChien/mega-skills-collection

Accessibility Audit Runner - Auto-activating skill for Frontend Development. Triggers on: accessibility audit runner, accessibility audit runner Part of the Frontend Development skill category.

SamuelChien/mega-skills-collection

You are an accessibility expert specializing in WCAG compliance, inclusive design, and assistive technology compatibility. Conduct audits, identify barriers, and provide remediation guidance.

SamuelChien/mega-skills-collection

Web accessibility patterns for WCAG 2.2 compliance including ARIA, keyboard navigation, screen readers, and testing

SamuelChien/mega-skills-collection

Manage Discord channel access — approve pairings, edit allowlists, set DM/group policy. Use when the user asks to pair, approve someone, check who's allowed, or change policy for the Discord channel.

SamuelChien/mega-skills-collection

Create unified specification packages across Business, Development, and Design teams. Staged elaboration (L0 Vision → L1 Requirements → L2 Team Detail → L3 Acceptance Criteria) to build shared understanding. Does not write code.

SamuelChien/mega-skills-collection

Research a company or person and get actionable sales intel. Works standalone with web search, supercharged when you connect enrichment tools or your CRM. Trigger with "research [company]", "look up [person]", "intel on [prospect]", "who is [name] at [company]", or "tell me about [company]".

SamuelChien/mega-skills-collection

Validate messaging consistency across website, GitHub repos, and local documentation generating read-only discrepancy reports. Use when checking content alignment or finding mixed messaging. Trigger with phrases like "check consistency", "validate documentation", or "audit messaging".

Habilidades Relacionadas