asan un debugger de memoria en tu compilador - akademy-es 2014
Post on 22-Jun-2015
92 Views
Preview:
DESCRIPTION
TRANSCRIPT
Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2014 – Málaga Albert Astals Cid <aacid@kde.org>
ASAN
ASANUn debugger de memoria en tu compilador
Albert Astals Cid
Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2014 – Málaga Albert Astals Cid <aacid@kde.org>
ASAN
¿Quien es Albert Astals Cid?
Ingeniero en Informática por la UPC
Traductor en KDE desde 2002
Programador en KDE desde 2003
Mantenedor de KPDF/Okular desde 2004
Miembro de KDE eV desde 2005, actualmente en la Junta Directiva
Miembro fundador de KDE España, ex-presidente
NO SOY UN EXPERTO EN ASAN
Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2014 – Málaga Albert Astals Cid <aacid@kde.org>
ASAN
¿Que es ASAN?
AddressSanitizer (aka ASAN) is a memory error detector for C/C++.
It finds:
Use after free (dangling pointer dereference)
Heap buffer overflow
Stack buffer overflow
Global buffer overflow
Use after return
Initialization order bugs
Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2014 – Málaga Albert Astals Cid <aacid@kde.org>
ASAN
¿Que es ASAN? (II)This tool is very fast. The average slowdown of the instrumented
program is ~2x.
The tool works on x86 Linux and Mac, and ARM Android.
It supports gcc (>=4.8) and clang (>=3.1) (clang support is better)
It's a Google project
Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2014 – Málaga Albert Astals Cid <aacid@kde.org>
ASAN
¿Como uso ASAN?
-fsanitize=address -g -fno-omit-frame-pointer
¡Fácil! Vámonos a casa :D
¡Esperad!Tengo ejemplos
Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2014 – Málaga Albert Astals Cid <aacid@kde.org>
ASAN
Uso despues de free
Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2014 – Málaga Albert Astals Cid <aacid@kde.org>
ASAN
¡Pero eso es una mierda!
¡Haberlo dicho antes!
Tenemos que exportar un par de variables de entorno:
export ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.4export ASAN_OPTIONS=symbolize=1
Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2014 – Málaga Albert Astals Cid <aacid@kde.org>
ASAN
Acceso fuera del heap
Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2014 – Málaga Albert Astals Cid <aacid@kde.org>
ASAN
Acceso fuera de la pila
Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2014 – Málaga Albert Astals Cid <aacid@kde.org>
ASAN
Acceso fuera de globales
Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2014 – Málaga Albert Astals Cid <aacid@kde.org>
ASAN
Uso en librerias
Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2014 – Málaga Albert Astals Cid <aacid@kde.org>
ASAN
Valores sin inicializar
Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2014 – Málaga Albert Astals Cid <aacid@kde.org>
ASAN
¿Y valgrind?
Valgrind/memcheck es una herramienta muy util
Es leeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeento :(
No necesita recompilación :)
Continua despues del primer error :)
Encuentra memory leaks :)
Encuentra memoria sin inicializar :) (MSAN no me funciona)
No encuentra accesos fuera de pila/globales :(
Pero que te ha hecho el dragón!?!?!
Sebastian Kügler <sebas@kde.org>, FrOSCon 2006
Akademy-es 2014 – Málaga Albert Astals Cid <aacid@kde.org>
ASAN
¿Preguntas?
top related