[HACK] buffer overflows & gcc

Gerardo Richarte gera at corest.com
Tue Feb 22 23:54:37 CET 2005


> ¿Sabe alguién si a partir de cierta versión del GCC el compilador
> deja "márgenes" en la pila entre las variables locales y los registros
> para evitar errores de este tipo?
>  
>

    Si, deja.
    Si no me equivoco es a partir de las versiones 3.x

    Basicamente lo que hace el gcc es alinear siempre a 16 la direccion 
del stack pointer, con 1 el
minimo y 16 el maximo de bytes extras usado. Esto lo hace cada vez que 
va a reservar espacio
para variables locales, y cada vez que va a llamar a una funcion con 
argumentos.
    La idea es que las variables locales y los argumentos esten siempre 
alineados a 16, para que
entren justo en una cache-line, pero intuitivamente no me parece que 
halla una ganancia real,
sobre todo cuando las variables locales pueden ocupar mas de una sola 
linea de cache.

    No hace mucho me dijeron que hay una opcion de gcc para deshabilitar 
esta alineacion,
pero nunca lo confirme o desmenti.

    gera



More information about the hacking mailing list