web-dev-qa-db-fra.com

Quelle est la différence entre un débordement de pile et un débordement de tampon?

Quelle est la différence entre le dépassement de pile et le dépassement de tampon dans la programmation?

57
joe

Le débordement de pile fait spécifiquement référence au cas où la pile d'exécution dépasse la mémoire qui lui est réservée. Par exemple, si vous appelez une fonction qui s’appelle de manière récursive sans interruption, vous allez provoquer un débordement de pile car chaque appel de fonction crée un nouveau cadre de pile et la pile finira par consommer plus de mémoire que ce qui lui est réservé.

Le dépassement de mémoire tampon désigne tout cas dans lequel un programme écrit au-delà de la fin de la mémoire allouée à un tampon (y compris sur le tas, pas seulement sur la pile). Par exemple, si vous écrivez au-delà de la fin d'un tableau alloué à partir du segment de mémoire, vous avez provoqué un débordement de mémoire tampon.

126
Nick Meyer

La principale différence est de connaître la différence entre la pile et un tampon. 

La pile est l'espace réservé pour l'exécution du programme en cours d'exécution. Lorsque vous appelez une fonction, son paramètre et ses informations de retour sont placés dans la pile.

Un tampon est un bloc générique de mémoire utilisé à une seule fin. Par exemple, une chaîne est un tampon. Il peut être dépassé en écrivant plus de données dans la chaîne que celles allouées.

18
Craig

Dépassement de pile: vous avez mis trop d'éléments sur la pile pour la mémoire allouée au thread actuel

Buffer overflow: Vous avez dépassé la taille de la mémoire tampon actuellement allouée et vous ne l'avez pas redimensionné pour l'adapter (ou vous ne pouvez plus le redimensionner).

11
Chris Ballance

Plus que vous voulez probablement savoir ici:

Débordement de pile

Débordement de tampon

11
Dana Holt

Un stackoverflow se produit lorsque la taille de la pile pour un thread dépasse la taille de pile maximale autorisée pour ce thread. 

Un dépassement de tampon survient lorsqu'une valeur est écrite dans la mémoire et n'est pas actuellement allouée par le programme. 

5
JaredPar

Débordement de mémoire tampon signifie généralement à chaque fois qu'une mémoire tampon est accédée au-delà de ses limites, que ce soit en pile ou en tas. Un débordement de pile signifie que la pile a dépassé la limite qui lui est allouée et que sur la plupart des machines/systèmes d'exploitation, elle déborde de tas. 

3
kenny

Ne voulez-vous pas dire "quelle est la différence entre une pile et un tampon?" - cela vous mènera à plus de perspicacité plus rapidement. Une fois que vous en êtes arrivé là, vous pouvez alors réfléchir à ce que signifie déborder de chacune de ces choses.

3
Ether

1. Débordement de tampon basé sur la pile • Se produit quand un programme écrit dans une adresse mémoire de la pile d’appels du programme en dehors de la structure de données prévue - mémoire tampon de longueur fixe. • Caractéristiques de la programmation par pile 1. «Pile» est un espace mémoire dans lequel des variables automatiques sont allouées. 2. Les paramètres de fonction sont alloués sur la pile et ne sont pas automatiquement initialisés par le système. Ils sont donc restés vides jusqu'à ce qu'ils soient initialisés. 3. Une fois qu'une fonction a terminé son cycle, la référence à la variable dans la pile est supprimée. (Par exemple, si la fonction est appelée plusieurs fois, ses variables et paramètres locaux sont recréés et détruits chaque fois que la fonction est appelée et quittée.)
• L’attaquant a exploité les dépassements de mémoire tampon basés sur la pile pour manipuler le programme de différentes manières en écrasant
1. Une variable locale proche du tampon en mémoire sur la pile pour modifier le comportement du programme susceptible de profiter à l'attaquant.
2. Adresse de retour dans un cadre de pile. Une fois que la fonction retourne, l'exécution reprendra à l'adresse de retour spécifiée par l'attaquant, généralement un tampon rempli par l'utilisateur. 3. Un pointeur de fonction ou un gestionnaire d'exceptions, qui est ensuite exécuté. • Les facteurs pour surmonter les exploits sont
1. Octets nuls dans les adresses 2. Variabilité dans l’emplacement du code shell 3. Différences entre environnement Le code shell est un petit morceau de code utilisé pour exploiter une vulnérabilité logicielle. 

2. Débordement de mémoire tampon  

• Se produit dans la zone de données de tas. • Un débordement se produit lorsqu'une application copie plus de données dans une mémoire tampon que la mémoire tampon ne devait en contenir. • Vulnérable d’exploitation s’il copie des données dans la mémoire tampon sans vérifier au préalable que la source tiendra bien dans la destination. • Caractéristiques de la programmation par pile et par tas: • «Tas» est un «magasin libre» qui représente un espace mémoire lorsque des objets dynamiques sont alloués. • Le segment de mémoire est l'espace mémoire alloué dynamiquement aux fonctions new (), malloc () et calloc () . • Les variables créées dynamiquement (c'est-à-dire les variables déclarées) sont créées sur le tas avant exécution et stockées en mémoire jusqu'à la fin du cycle de vie de l'objet. • L'exploitation est effectuée • En corrompant les données pour écraser les structures internes telles que les pointeurs de liste liés . • échange de pointeur pour annuler la fonction du programme 

2
Uday Moradiya

La plupart des gens qui mentionnent des débordements de mémoire tampon signifient pile oveflows. Toutefois, des débordements peuvent survenir dans n’importe quelle zone, et pas seulement dans la pile. Tels que le tas ou bss. Un débordement de pile est limité à l'écrasement des adresses de retour sur la pile, mais un débordement normal qui n'écrase pas l'adresse de retour écrasera probablement uniquement les autres variables locales.

0
user961124

Permettez-moi de vous expliquer d'une manière plus simple avec un diagramme de RAM. Avant de me lancer, je suggère de lire sur StackFrame, Heap Memory.

Comme vous pouvez le constater, la pile croît vers le bas (indiquée par une flèche) en supposant que c'est la pile. Le code du noyau, le texte, les données sont toutes des données statiques, elles sont donc corrigées. La partie de tas étant dynamique se développe vers le haut (indiqué par une flèche).

 enter image description here 

0
Uddhav Gautam