it-swarm.com.de

Was ist der Unterschied zwischen einem Stapelüberlauf und einem Pufferüberlauf?

Was ist bei der Programmierung zwischen Stapelüberlauf und Pufferüberlauf zu unterscheiden?

57
joe

Stapelüberlauf bezieht sich insbesondere auf den Fall, wenn der Ausführungsstapel über den für ihn reservierten Speicher hinauswächst. Wenn Sie beispielsweise eine Funktion aufrufen, die sich rekursiv ohne Abbruch aufruft, wird ein Stack-Überlauf verursacht, da jeder Funktionsaufruf einen neuen Stack-Frame erstellt und der Stack schließlich mehr Speicher verbraucht, als für ihn reserviert ist.

Pufferüberlauf bezieht sich auf jeden Fall, in dem ein Programm über das Ende des für jeden Puffer zugewiesenen Speichers hinaus schreibt (einschließlich auf dem Heap, nicht nur auf dem Stack). Wenn Sie beispielsweise über das Ende eines vom Heap zugewiesenen Arrays schreiben, haben Sie einen Pufferüberlauf verursacht.

126
Nick Meyer

Der Hauptunterschied besteht darin, den Unterschied zwischen dem Stapel und einem Puffer zu kennen. 

Der Stack ist der Platz, der für das ausführende Programm zur Ausführung reserviert ist. Wenn Sie eine Funktion aufrufen, werden deren Parameter und Rückgabeinformationen im Stack abgelegt.

Ein Puffer ist ein allgemeiner Speicherplatz, der zu einem einzigen Zweck verwendet wird. Eine Zeichenfolge ist beispielsweise ein Puffer. Es kann ein Überlauf ausgeführt werden, indem mehr Daten in die Zeichenfolge geschrieben werden, als für sie zugewiesen wurden.

18
Craig

Stack overflow: Sie haben zu viele Dinge für den dem aktuellen Thread zugewiesenen Speicher auf den Stack gelegt

Pufferüberlauf: Sie haben die Größe Ihres aktuell zugewiesenen Puffers überschritten und die Größe des Puffers nicht angepasst (oder kann nicht weiter angepasst werden).

11
Chris Ballance

Mehr als Sie wahrscheinlich hier wissen möchten:

Paketüberfluss

Pufferüberlauf

11
Dana Holt

Ein Stackoverflow ist, wenn die Stapelgröße für einen Thread die maximal zulässige Stapelgröße für diesen Thread überschreitet. 

Ein Pufferüberlauf ist, wenn ein Wert in den Speicher geschrieben wird, der derzeit nicht vom Programm zugewiesen wird. 

5
JaredPar

Pufferüberlauf steht normalerweise für einen Zeitpunkt, zu dem auf einen Speicherpuffer außerhalb seiner Grenzen zugegriffen wird, unabhängig davon, ob er Stapel oder Heap ist. Ein Stapelüberlauf bedeutet, dass der Stapel das zugewiesene Limit überschritten hat und auf den meisten Maschinen/Betriebssystemen über Heap ausgeführt wird. 

3
kenny

Meinen Sie nicht "was ist der Unterschied zwischen einem Stapel und einem Puffer?" - das wird Sie schneller zu mehr Einsicht führen. Sobald Sie so weit gekommen sind, können Sie darüber nachdenken, was es bedeutet, jedes dieser Dinge überzulaufen.

3
Ether

1. Stapelbasierter Pufferüberlauf • Tritt ein, wenn ein Programm an eine Speicheradresse im Aufrufstapel des Programms außerhalb der vorgesehenen Datenstruktur schreibt - Puffer mit fester Länge. • Merkmale der stapelbasierten Programmierung 1. "Stack" ist ein Speicherplatz, in dem automatische Variablen zugewiesen werden. 2. Funktionsparameter werden auf dem Stack zugewiesen und werden vom System nicht automatisch initialisiert. Sie haben also einen Papierkorb, bis sie initialisiert werden. 3. Wenn eine Funktion ihren Zyklus abgeschlossen hat, wird der Verweis auf die Variable im Stapel entfernt. (d. h. wenn die Funktion mehrmals aufgerufen wird, werden ihre lokalen Variablen und Parameter jedes Mal neu erstellt und gelöscht, wenn die Funktion aufgerufen und beendet wird.)
• Der Angreifer nutzt stapelbasierte Pufferüberläufe aus, um das Programm auf verschiedene Weise durch Überschreiben zu manipulieren
1. Eine lokale Variable, die sich in der Nähe des Pufferspeichers im Stack befindet, um das Verhalten eines Programms zu ändern, das dem Angreifer zugute kommt.
2. Rückgabe der Adresse in einem Stack-Frame. Sobald die Funktion zurückkehrt, wird die Ausführung an der vom Angreifer angegebenen Rücksprungadresse fortgesetzt, normalerweise einem Puffer, der mit einer Benutzereingabe gefüllt ist. 3. Ein Funktionszeiger oder Ausnahmebehandler, der anschließend ausgeführt wird. • Faktoren zur Überwindung der Exploits sind
1. Nullbytes in Adressen 2. Variabilität in der Position des Shell-Codes 3. Unterschiede zwischen den Umgebungen Shell-Code ist ein kleiner Code, der zur Ausnutzung von Software-Schwachstellen verwendet wird. 

2. Heap-Pufferüberlauf  

• Tritt im Heap-Datenbereich auf. • Überlauf tritt auf, wenn eine Anwendung mehr Daten in einen Puffer kopiert, als der Puffer enthalten soll. • Anfällig für die Nutzung, wenn Daten in den Puffer kopiert werden, ohne dass zuvor geprüft wurde, ob die Quelle in das Ziel passt. • Merkmale der stapel- und heapbasierten Programmierung: • "Heap" ist ein "freier Speicher", der Speicherplatz ist, wenn dynamische Objekte zugewiesen werden. • Der Heap ist der Speicherplatz, der dynamisch die Funktionen new (), malloc () und calloc () zugewiesen wird . • Dynamisch erzeugte Variablen (d. H. Deklarierte Variablen) werden vor der Ausführung auf einem Heap erstellt und im Arbeitsspeicher gespeichert, bis der Lebenszyklus des Objekts abgeschlossen ist. • Die Verwertung wird durchgeführt • Indem Sie Daten beschädigen, um interne Strukturen wie verknüpfte Listenzeiger zu überschreiben. • Zeigeraustausch zum Überschreiben der Programmfunktion 

2
Uday Moradiya

Die meisten Leute, die Pufferüberläufe erwähnen, bedeuten Stapelüberläufe. Überläufe können jedoch in jedem Bereich auftreten, der nicht nur auf den Stapel beschränkt ist. Wie der Haufen oder Bss. Ein Stapelüberlauf ist auf das Überschreiben von Rücksprungadressen auf dem Stapel beschränkt, ein normaler Überlauf, der die Rücksprungadresse jedoch nicht überschreibt, überschreibt wahrscheinlich nur andere lokale Variablen.

0
user961124

Lassen Sie mich dies anhand eines RAM-Diagramms einfacher erklären. Bevor ich darauf eingehe, empfehle ich, etwas über StackFrame und Heap Memory zu lesen.

Wie Sie sehen, wächst der Stapel nach unten (angezeigt durch einen Pfeil), vorausgesetzt, es handelt sich um einen Stapel. Der Kernel-Code, der Text und die Daten sind alle statische Daten, daher sind sie fest. Der dynamische Haufenanteil wächst nach oben (durch Pfeil dargestellt).

 enter image description here 

0
Uddhav Gautam