gcc-mpreferred-pile-option de limite
Je veux savoir quelle est l'utilité de -mpreferred-stack-boundary
option lors de la compilation dans le compilateur GNU. J'ai vérifié la documentation, mais l'explication est perdu sur moi. Quelqu'un pourrait-il expliquer cela.
Vous devez vous connecter pour publier un commentaire.
L'option a absolument rien à voir avec le débogueur.
Elle affecte le code généré dans votre binaire. Par défaut, GCC va arranger les choses pour que chaque fonction, dès l'entrée, a son pointeur de pile alignée sur 16 octets à la frontière (ce qui peut être important si vous avez des variables locales, et de permettre
sse2
instructions).Si vous modifiez la valeur par défaut, par exemple
-mpreferred-stack-boundary=2
, puis GCC va aligner pointeur de pile sur la limite de 4 octets. Cela permettra de réduire la pile exigences de vos routines, mais va planter si votre code (ou code vous appeler) ne utilisationsse2
, est donc généralement pas à l'abri.Il a à voir avec les limites d'octets que votre programme utilise quand il est jeté dans la mémoire.
Ce qu'une pile de boundary=2 n'est de s'assurer que la pile est mis en place dans dword de la taille des incréments, cela empêche votre machine à partir de l'optimisation de la pile.
Si vous découvrez:
Une pile par défaut de la limite des 4 est le même pour les deux Intel 386 et et AMD x86-64 machines.
Lorsque j'essaie d'utiliser le "m-préféré-pile-limite=2" option sur la version 64 bits de linux de la machine de compilation échoue avec l'erreur
C'est parce que la largeur du champ d'adresse a été augmenté de 4 octets 8 octets, 64 bits machines. Il ne peut donc pas écrire des morceaux individuels sur une pile de limite=2, car 2^2=4 octets. Cependant, il est intéressant de noter, d'une pile de limite de 3 renvoie toujours une erreur à la fois 32 bits et 64 bits des machines, ce qui serait une frontière d'octet 8.
Je ne peux pas le lien parce que je n'ai pas de 10 de réputation...mais une recherche se genre de choses assez facilement
Aussi loin que je peux dire c'est une fonctionnalité de sécurité parce que 8 octets est sujette à désaligner la pile...pas de doute, quelqu'un d'autre sait mieux, ou a plus de détails.
Comment la pile ai mal alignées
Dit:
droit, il est utile d'utiliser -mpreferred-pile-frontière avec 2 à démonter facilement ce qu'il se passe, sinon il sera optimisé et difficile à suivre ce qui se passe dans la pile. pour la version 64 bits de droite vous avez besoin de 4 à moins