2011-01-27 7 views
0

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

3

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

+0

comment pouvons-nous Pax savoir qui garde mot est utilisé ... –

+0

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. –

+0

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

1

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