asan un debugger de memoria en tu compilador - akademy-es 2014

14
Sebastian Kügler <[email protected]>, FrOSCon 2006 Akademy-es 2014 – Málaga Albert Astals Cid <[email protected]> ASAN ASAN Un debugger de memoria en tu compilador Albert Astals Cid

Upload: kdeespana

Post on 22-Jun-2015

91 views

Category:

Technology


1 download

DESCRIPTION

ASAN Un debugger de memoria en tu compilador Charla de Albert Astals para Akademy-es 2014

TRANSCRIPT

Page 1: ASAN Un debugger de memoria en tu compilador - Akademy-es 2014

Sebastian Kügler <[email protected]>, FrOSCon 2006

Akademy-es 2014 – Málaga Albert Astals Cid <[email protected]>

ASAN

ASANUn debugger de memoria en tu compilador

Albert Astals Cid

Page 2: ASAN Un debugger de memoria en tu compilador - Akademy-es 2014

Sebastian Kügler <[email protected]>, FrOSCon 2006

Akademy-es 2014 – Málaga Albert Astals Cid <[email protected]>

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

Page 3: ASAN Un debugger de memoria en tu compilador - Akademy-es 2014

Sebastian Kügler <[email protected]>, FrOSCon 2006

Akademy-es 2014 – Málaga Albert Astals Cid <[email protected]>

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

Page 4: ASAN Un debugger de memoria en tu compilador - Akademy-es 2014

Sebastian Kügler <[email protected]>, FrOSCon 2006

Akademy-es 2014 – Málaga Albert Astals Cid <[email protected]>

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

Page 5: ASAN Un debugger de memoria en tu compilador - Akademy-es 2014

Sebastian Kügler <[email protected]>, FrOSCon 2006

Akademy-es 2014 – Málaga Albert Astals Cid <[email protected]>

ASAN

¿Como uso ASAN?

-fsanitize=address -g -fno-omit-frame-pointer

¡Fácil! Vámonos a casa :D

¡Esperad!Tengo ejemplos

Page 6: ASAN Un debugger de memoria en tu compilador - Akademy-es 2014

Sebastian Kügler <[email protected]>, FrOSCon 2006

Akademy-es 2014 – Málaga Albert Astals Cid <[email protected]>

ASAN

Uso despues de free

Page 7: ASAN Un debugger de memoria en tu compilador - Akademy-es 2014

Sebastian Kügler <[email protected]>, FrOSCon 2006

Akademy-es 2014 – Málaga Albert Astals Cid <[email protected]>

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

Page 8: ASAN Un debugger de memoria en tu compilador - Akademy-es 2014

Sebastian Kügler <[email protected]>, FrOSCon 2006

Akademy-es 2014 – Málaga Albert Astals Cid <[email protected]>

ASAN

Acceso fuera del heap

Page 9: ASAN Un debugger de memoria en tu compilador - Akademy-es 2014

Sebastian Kügler <[email protected]>, FrOSCon 2006

Akademy-es 2014 – Málaga Albert Astals Cid <[email protected]>

ASAN

Acceso fuera de la pila

Page 10: ASAN Un debugger de memoria en tu compilador - Akademy-es 2014

Sebastian Kügler <[email protected]>, FrOSCon 2006

Akademy-es 2014 – Málaga Albert Astals Cid <[email protected]>

ASAN

Acceso fuera de globales

Page 11: ASAN Un debugger de memoria en tu compilador - Akademy-es 2014

Sebastian Kügler <[email protected]>, FrOSCon 2006

Akademy-es 2014 – Málaga Albert Astals Cid <[email protected]>

ASAN

Uso en librerias

Page 12: ASAN Un debugger de memoria en tu compilador - Akademy-es 2014

Sebastian Kügler <[email protected]>, FrOSCon 2006

Akademy-es 2014 – Málaga Albert Astals Cid <[email protected]>

ASAN

Valores sin inicializar

Page 13: ASAN Un debugger de memoria en tu compilador - Akademy-es 2014

Sebastian Kügler <[email protected]>, FrOSCon 2006

Akademy-es 2014 – Málaga Albert Astals Cid <[email protected]>

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!?!?!

Page 14: ASAN Un debugger de memoria en tu compilador - Akademy-es 2014

Sebastian Kügler <[email protected]>, FrOSCon 2006

Akademy-es 2014 – Málaga Albert Astals Cid <[email protected]>

ASAN

¿Preguntas?