8
votes

Comment l'option GCC-est-elle fonctionne exactement?

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.

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.


0 commentaires

3 Réponses :


3
votes

"` -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 "

Options GCC qui contrôlent l'optimisation

Extension GCC pour protéger les applications des attaques de pile-brisant

brisant la pile pour le plaisir et le profit

J'espère que cela donnera une certaine indice ..


1 commentaires

Veuillez noter que -fstact-protecteur et -fstack-check sont des options différentes. (Pour les compagnons de googlers)



6
votes

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)


2 commentaires

Pouvez-vous élaborer avec certains exemples de code et sortie?


Cela n'a rien à voir avec votre erreur. Voir ma réponse ci-dessous



3
votes

-Fstack-check : Si deux fonctionnalités macros stack_check_builtine et stack_check_static_builtine 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.

__ stack_chk_fail 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é.


0 commentaires