Mon programme s'est écrasé lorsque j'ai ajouté l'option -fstack-check et -fstack-protecteur. __stack_chk_fail est appelé dans la trace arrière. p>
Alors, comment puis-je savoir où est le problème? Qu'est-ce que la vérification du Fstetack vraiment chèque? Les informations sur GCC semblent trop énormes pour trouver la réponse. P>
3 Réponses :
"` -Fstack-protecteur 'émet un code supplémentaire pour vérifier les débordements tampons, tels que la pile briser des attaques. Ceci est fait en ajoutant une variable de garde à fonctions avec des objets vulnérables. Cela inclut des fonctions qui Appelez Alloca et fonctionne avec des tampons supérieurs à 8 octets. Les Les gardes sont initialisés lorsqu'une fonction est entrée puis vérifiée lorsque la fonction sort. Si une vérification de garde échoue, un message d'erreur est imprimé et le programme quitte " p>
Options GCC qui contrôlent l'optimisation p>
Extension GCC pour protéger les applications des attaques de pile-brisant P>
brisant la pile pour le plaisir et le profit P>
J'espère que cela donnera une certaine indice .. p>
Veuillez noter que -fstact-protecteur code> et
-fstack-check code> sont des options différentes. (Pour les compagnons de googlers)
Après avoir vérifié le programme de montage. Je pense que je pense-vérifier, ajoutera du code écrire 0 à un décalage du pointeur de la pile, afin de tester si le programme visitez une adresse de violation, le programme a été écrasé si cela le fait. par exemple. MOV $ 0x0, -0x928 (% ESP) P>
Pouvez-vous élaborer avec certains exemples de code et sortie?
Cela n'a rien à voir avec votre erreur. Voir ma réponse ci-dessous
-Fstack-check code>: Si deux fonctionnalités macros
stack_check_builtine code> et
stack_check_static_builtine code> sont laissés à la valeur par défaut 0, il insère simplement un octet nul tous les 4kb (page) lorsque la pile grandit.
Par défaut, un seul, mais lorsque la pile peut augmenter plus d'une page, ce qui est le cas le plus dangereux, tous les 4 Ko. Linux> 2.6 n'a qu'un seul écart de pages entre la pile et le tas, qui peut entraîner des attaques de pile-gap, connues depuis 2005.
Voir Quelle exception est soulevée en C par GCC - Option de chèque Fstack pour l'assemblage.
Il est activé dans GCC au moins depuis 2,95,3, à Clang depuis 3.6. P>
__ stack_chk_fail code> est le code "code> -fstact-protecteur inséré" / code> qui vérifie une valeur canarice de pile insérée qui pourrait être écrasée par un simple débordement de pile, par exemple. par récursivité. p>