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ébordement de pile et le débordement de tampon en programmation ?
9 réponses
Stack overflow se réfère spécifiquement au cas où la pile d'exécution se développe au-delà de la mémoire qui lui est réservée. Par exemple, si vous appelez une fonction qui s'appelle récursivement sans terminaison, vous provoquerez un débordement de pile car chaque appel de fonction crée un nouveau cadre de pile et la pile consommera finalement plus de mémoire que ce qui lui est réservé.
Le dépassement de tampon fait référence à tout cas dans lequel un programme écrit au-delà de la fin de la mémoire allouée pour un tampon (y compris sur le tas, pas seulement sur la pile). Par exemple, si vous écrivez après la fin d'un tableau alloué à partir du tas, vous avez provoqué un dépassement de tampon.
La différence clé 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. Lorsque vous appelez une fonction, son paramètre et ses informations de retour sont placés sur la pile.
Un tampon est un chunck générique de mémoire qui est utilisé dans un seul but. Par exemple, une chaîne est un tampon. Il peut être exécuté en écrivant plus de données dans la chaîne pour laquelle il a été alloué.
Stack overflow: vous avez mis trop de choses sur la pile pour la mémoire allouée au thread courant
Dépassement de tampon: Vous avez dépassé la taille de votre tampon actuellement alloué et ne l'avez pas redimensionné pour l'adapter (ou ne pouvez pas le redimensionner davantage).
Un stackoverflow est 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 est quand une valeur est écrite dans la mémoire qui n'est pas actuellement allouée par le programme.
Buffer overflow signifie généralement chaque fois qu'un tampon de mémoire est accessible au-delà de ses limites, qu'il s'agisse d'une pile ou d'un tas. Un débordement de pile signifie que la pile a dépassé sa limite allouée et que sur la plupart des machines/OS s'exécute sur le tas.
Ne pas vous 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 êtes allé aussi loin, alors vous pouvez penser à ce que cela signifie de déborder chacune de ces choses.
1. Débordement De Tampon Basé Sur La Pile
* Se produit lorsqu'un programme écrit à une adresse mémoire sur la pile d'appels du programme en dehors de la structure de données prévue – tampon de longueur fixe.
* Caractéristiques de la programmation basée sur la pile
1. "Stack" 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, de sorte qu'ils ont des déchets 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 retirée. (c'est-à-dire que 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 exploite les débordements de tampon basés sur la pile pour manipuler le programme de diverses manières en écrasant
1. Une variable locale qui est près du tampon en mémoire sur la pile pour changer le comportement du programme qui peut bénéficier à l'attaquant.
2. Adresse de retour dans un cadre de pile. Une fois la fonction retournée, 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'exception, qui est ensuite exécuté.
* Les facteurs pour surmonter les exploits sont
1. Octets nuls dans les adresses
2. Variabilité de l'emplacement du code shell
3. Différences entre le code Shell de l'environnement est un petit morceau de code utilisé dans l'exploitation de la vulnérabilité du logiciel.
2. Débordement De Tampon De Tas
* se produit dans la zone de données de tas. * Le débordement se produit lorsqu'une application Copie plus de données dans un tampon que le tampon a été conçu pour contenir. * Vulnérable à l'exploitation si elle copie des données dans un tampon sans d'abord vérifier que la source s'adaptera à la destination. * Caractéristiques de la programmation en pile et en tas: * "Tas" est un "magasin libre" qui est l'espace mémoire, lorsque des objets dynamiques sont alloués. * Le tas est la mémoire espace alloué dynamiquement les 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 l'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 remplacer les structures internes telles que les pointeurs de liste liés. * Échange de pointeur pour remplacer la fonction de programme
La plupart des personnes qui mentionnent des débordements de tampon signifient des oveflows de pile. Cependant, des débordements peuvent se produire dans n'importe quelle zone non seulement limitée à la pile. Comme le tas ou bss. Un dépassement de pile est limité à l'écrasement des adresses de retour sur la pile, mais un dépassement normal qui n'écrase pas l'adresse de retour écrasera probablement simplement d'autres variables locales.