J'ai activé le -Wstack-protector
lors de la compilation du projet sur lequel je travaille (un moteur de jeu commercial multiplateforme C++, compilé sur Mac OS X 10.6 avec GCC 4.2). Ce drapeau prévient des fonctions qui ne seront pas protégées contre le stack smashing même si -fstack-protector
est activé. GCC émet quelques avertissements lors de la construction du projet :
fonction non protectrice : pas de tampon d'au moins 8 octets de long
ne pas protéger les variables locales : tampon de longueur variable
Pour le premier avertissement, j'ai découvert qu'il est possible d'ajuster la taille minimale qu'un tampon doit avoir lorsqu'il est utilisé dans une fonction, pour que cette fonction soit protégée contre le stack smashing : --param ssp-buffer-size=X
peut être utilisé, où X est 8 par défaut et peut être aussi bas que 1.
Pour le deuxième avertissement, je ne peux pas supprimer ses occurrences à moins d'arrêter d'utiliser -Wstack-protector
.
1/ Quand faut-il -fstack-protector
être utilisé ? (par exemple, tout le temps pendant le développement, ou seulement lors du suivi des bogues ?)
2/ Quand faut-il -fstack-protector-all
être utilisé ?
3/ Qu'est-ce que -Wstack-protector
me dit-elle ? Est-ce qu'il me suggère de diminuer la taille minimale de la mémoire tampon ?
4/ Si oui, y a-t-il des inconvénients à mettre la taille à 1 ?
5/ Il apparaît que -Wstack-protector
n'est pas le genre de drapeau que vous voulez activer à tout moment si vous voulez une construction sans avertissement. Est-ce correct ?
Merci !