2011-10-18 12 views
5

Do -fstack-protector y -fstack-protector-all también protegen las asignaciones de memoria basadas en el montón o solo las basadas en la pila?-fstack-protector, -fstack-protector-all y -fmudflap

¿Cuál es la diferencia entre los primeros 2 y -fmudflap?

¿Alguna recomendación sobre cuál es mejor para la depuración?

(no estoy seguro de si el gcc man page es lo suficientemente clara o simplemente no lo entiendo ...)

char foobar[10]; // stack-based 

char *foobar = malloc(10); // heap-based 
+0

¿Cuál es su objetivo? ¿Desea asegurarse de que su código esté protegido y activar lo que lo protege bien? Si ese es el caso, gcc por defecto compila a la mayoría si todas las protecciones están activadas (por ejemplo, el valor canario -fatack-protector parece habilitar). Si su objetivo es deshabilitar selectivamente en un estado de depuración para que sea más fácil seguir la lógica del código sin tener que preguntarse qué partes del código son meramente protecciones de pirateo, puede desactivar muchas protecciones (creo que todo menos la configuración del nx poco más o menos). En ese caso, la opción que desea (entre otras) es -fno-stack-protector. – gnometorule

+0

Bueno, hay otros que creo que son difíciles de desactivar, sino son imposibles, por ejemplo, si ciertas tablas de redirección son grabables. – gnometorule

+0

@gnometorule Mi objetivo es habilitar la mayor protección posible. Pero para eso, necesito entender qué hacen y qué no hacen cada uno. –

Respuesta

0

tira de arrastre es para los controles del puntero. Ver this pdf. Tendrá que instalar las librerías relevantes para poder usar estas características de gcc. Me gusta más valgrind para detectar tales errores porque no hay necesidad de volver a compilar/volver a vincular y es más fácil de usar, pero también pueden ser valiosos.

+0

el enlace pdf está roto – makerj

2

-fstack-protector y -fstack-protector-all no tienen nada que ver con las asignaciones de montón.
-fstack-protector solo protege cadenas (objetivo problema principal para ataques de desbordamiento de búfer), -fstack-protector-all protege todos los tipos. Algunas descripciones aquí: http://en.wikipedia.org/wiki/Buffer_overflow_protection