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

Post on 22-Jun-2015

92 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

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