Dans un système d'exploitation, pour tout processus, il y a une pile et un tas. Les deux croissent l'un vers l'autre.Il doit y avoir une bande de garde entre eux pour vérifier le chevauchement.Peut-on m'en donner une illustration. Je veux écrire ma propre fonction pour vérifier l'erreur de débordement de pile.méthode de débordement de pile
Répondre
Dans un système comme celui-là, vous auriez normalement un mot de garde ou quelque chose de similaire en haut du tas, quelque chose comme 0xa55a
ou 0xdeadbeef
. Puis, périodiquement, ce mot de garde est vérifié pour voir s'il a été corrompu. Si c'est le cas, quelque chose a écrasé la mémoire.
Maintenant, cela ne peut pas nécessairement être un débordement de pile, il peut être une écriture de mémoire voyou. Mais, dans ces deux cas, quelque chose ne va vraiment pas, alors vous pouvez les traiter de la même manière.
Bien sûr, des systèmes d'exploitation plus modernes peuvent utiliser l'assistance du matériel comme dans les puces Intel. Dans ceux-ci, vous pouvez configurer un segment de pile à une taille spécifique et, si vous essayez d'écrire en dehors de celui-ci (en utilisant le sélecteur de pile), vous obtiendrez un piège surélevé.
Le tas dans ce cas utiliserait un sélecteur différent afin d'être maintenu séparé.
De nombreux systèmes d'exploitation placent une page de garde (ou des techniques similaires) entre la pile et le tas pour protéger contre de tels vecteurs d'attaque. Je n'ai pas encore vu de canaris (la méthode mentionnée par paxdiablo), ils sont surtout utilisés pour se prémunir contre les débordements internes à la pile (alias garder l'adresse de retour).
pages de garde sous Windows: http://msdn.microsoft.com/en-us/library/aa366549(VS.85).aspx
Linux avait un intéressant exploit basé sur ce problème il y a quelque temps cependant: http://www.h-online.com/open/news/item/Root-privileges-through-Linux-kernel-bug-Update-1061563.html
- 1. Débordement de pile et méthode récursive
- 2. Débordement de pile C#
- 3. Dépassement de pile pour débordement de pile
- 4. erreur de débordement de pile
- 5. débordement de pile dans Prolog
- 6. Convertisseur JSON - débordement de pile
- 7. Débordement de pile async F #
- 8. FreeRTOS débordement de pile excessive
- 9. C++ débordement de la pile
- 10. débordement de pile vs segfault
- 11. Scala débordement pile inattendue
- 12. after_initialize provoque un débordement de pile
- 13. jeux de prologues, débordement de pile
- 14. débordement de pile Procédures de traitement
- 15. Création d'un notificateur de débordement de pile
- 16. Direction de pile et débordement de tampon
- 17. Débordement de pile SmartGWT sur JSTranslate
- 18. lancement asynchrone débordement de pile en mono
- 19. débordement de pile dans swing à processKeyEvent
- 20. débordement de pile sur XMLListCollection collectionEvent
- 21. Connexion au débordement de pile avec cURL
- 22. Débogage d'un débordement de pile flash
- 23. Débordement de pile C++ - Visual Studio 2008
- 24. Authentification par débordement de pile par programme
- 25. Fonction récursive Haskell sans débordement de pile
- 26. débordement de pile LINQ sélectionnant plusieurs
- 27. Exercice sur le débordement de pile
- 28. RegexpError: débordement de pile dans regexp matcher
- 29. technique de débordement dans la pile
- 30. starray et débordement de la pile
comment pouvons-nous Pax savoir qui garde mot est utilisé ... –
habituellement le compilateur Est-ce que. il peut s'agir d'une valeur statique, d'un élément aléatoire généré au moment de la compilation ou même d'un élément calculé pour chaque appel. totalement spécifique à la mise en œuvre. –
Le système d'exploitation (ou bibliothèque C ou quoi que ce soit) sait ce que c'est parce que le système d'exploitation (ou la bibliothèque C ou quoi que ce soit) le mettre là. – paxdiablo