Stack overflow bezieht sich insbesondere auf den Fall, wenn die Ausführung der stack wächst über die Erinnerung, die ist für Sie reserviert. Zum Beispiel, wenn Sie eine Funktion aufrufen, die rekursiv ruft sich, ohne Kündigung, Sie werden zu einem stack-überlauf, da jeder Funktionsaufruf erzeugt einen neuen stack-frame, und der Stapel wird schließlich verbrauchen mehr Speicher, als für Sie reserviert.
Buffer overflow bezieht sich auf jede Fall, in dem ein Programm schreibt über das Ende des Speichers für Puffer (einschließlich auf dem heap, nicht nur auf dem stack). Zum Beispiel, wenn Sie schreiben über das Ende eines array zugewiesen, aus dem Haufen, den Sie verursacht habe, ein Puffer-überlauf.
Der wesentliche Unterschied ist, zu wissen, den Unterschied zwischen stack und einen Puffer.
Den stack ist der reservierte Speicher für das auszuführende Programm ausführen. Wenn Sie eine Funktion aufrufen, parameter-und return-Informationen werden auf dem Stapel abgelegt.
Einen Puffer ist eine generische chunck der Speicher, der verwendet wird, für einen einzigen Zweck. Zum Beispiel, ein string ist ein Puffer. Kann es sein, über die Strecke durch das schreiben von weiteren Daten, die als string zugewiesen wurde.
Stack overflow: Sie haben zu viele Dinge auf dem Stapel für den Speicher auf den aktuellen thread
Buffer overflow: haben Sie überschritten die Größe des momentan zugewiesenen Puffer übergeben wird und nicht angepasst um zu passen (oder nicht die Größe ändern weitere).
Buffer overflow in der Regel steht für Sie jederzeit ein Speicherpuffer zugegriffen wird darüber hinaus die Grenzen, ob stack-oder heap. Ein stack-überlauf bedeutet, dass der stack hat Sie überschreiten die allokierten limit und auf den meisten Rechnern/OS ausgeführt wird, über heap.
Nicht, Sie sagen "was ist der Unterschied zwischen einem stack und einem Puffer?" -- , führen Sie zu mehr Einsicht, mehr schnell. Wenn man einmal so weit gekommen, dann kann man darüber nachdenken, was es bedeutet, über alle diese Dinge.
1. Stack-Basierten Pufferüberlauf
• Auftreten, wenn ein Programm schreibt in eine Speicheradresse auf dem Programm stehen das call-stack außerhalb der soll-Daten-Struktur – Pufferspeicher mit fester Länge.
• Eigenschaften der stack-basierte Programmierung
1. "Stack" ist ein Speicherbereich, in welcher automatischen Variablen zugewiesen werden.
2. Parameter der Funktion sind auf dem Stapel reserviert und werden nicht automatisch initialisiert das system, so haben Sie Müll, bis Sie initialisiert sind.
3. Sobald eine Funktion hat den Zyklus abgeschlossen, - Referenz auf die variable in den stack entfernt wird. (ich.e wenn-Funktion mehrfach aufgerufen, Ihre lokalen Variablen und Parameter sind neu und zerstört jedes mal die Funktion aufgerufen wird und beendet wird.)
• Der Angreifer ausnutzen, stackbasierte Pufferüberläufe zu manipulieren-Programm auf verschiedene Weise durch überschreiben
1. Eine lokale variable, die in der Nähe des Puffers im Speicher auf dem stack zu ändern, die das Verhalten des Programms profitieren könnten die Angreifer.
2. Return-Adresse im stack-frame. Sobald die Funktion zurückkehrt, wird die Ausführung Lebenslauf an die Adresse zurück, die, wie angegeben, durch den Angreifer, in der Regel eine Benutzer-Eingabe-Puffer gefüllt.
3. Eine Funktion Zeiger, oder exception handler, welcher anschließend ausgeführt.
• Faktoren zu überwinden, die exploits
1. Null-bytes in Adressen
2. Variabilität in der Lage der shell-code
3. Unterschiede zwischen Umwelt-Shell-code ist ein kleines Stück code zur Ausnutzung software Verwundbarkeit zu.
2. Heap Buffer Overflow
• Tritt in die heap-Daten-Bereich.
• Überlauf tritt auf, wenn eine Anwendung Kopien mehr Daten in einen Puffer als Puffer wurde entwickelt, um enthalten.
• Anfällig für Ausbeutung, wenn es kopiert Daten in den Puffer, ohne zuerst überprüfen, dass die Quelle passen ins Ziel.
• Eigenschaften der stack-basierte und heap-basierte Programmierung:
• "Heap" ist eine "free store", das ist der Speicherplatz, als dynamische Objekte zugeordnet sind.
• Der heap ist der Speicherbereich dynamisch allokiert new(), malloc () und calloc () - Funktionen.
• Dynamisch erzeugte Variablen (ich.e deklarierten Variablen werden auf Haufen vor der Ausführung und im Arbeitsspeicher gespeichert, bis der Lebenszyklus des Objekts abgeschlossen wurde.
• Ausbeutung erfolgt
• Durch die Beschädigung von Daten zu überschreiben internen Strukturen wie verkettete Liste von Zeigern.
• Zeiger exchange überschreiben Programm-Funktion
Meisten Menschen, die erwähnt buffer overflows mean stack oveflows. Jedoch, überläufe auftreten können, in jedem Bereich, nicht nur beschränkt auf den stack. Wie der heap oder bss. Ein stack-überlauf ist beschränkt auf überschreiben return-Adressen auf dem stack, sondern einen normalen überlauf, der überschreibt nicht die return-Adresse wird wahrscheinlich einfach zu überschreiben lokaler Variablen.
Stack overflow bezieht sich insbesondere auf den Fall, wenn die Ausführung der stack wächst über die Erinnerung, die ist für Sie reserviert. Zum Beispiel, wenn Sie eine Funktion aufrufen, die rekursiv ruft sich, ohne Kündigung, Sie werden zu einem stack-überlauf, da jeder Funktionsaufruf erzeugt einen neuen stack-frame, und der Stapel wird schließlich verbrauchen mehr Speicher, als für Sie reserviert.
Buffer overflow bezieht sich auf jede Fall, in dem ein Programm schreibt über das Ende des Speichers für Puffer (einschließlich auf dem heap, nicht nur auf dem stack). Zum Beispiel, wenn Sie schreiben über das Ende eines array zugewiesen, aus dem Haufen, den Sie verursacht habe, ein Puffer-überlauf.
InformationsquelleAutor der Antwort Nick Meyer
Der wesentliche Unterschied ist, zu wissen, den Unterschied zwischen stack und einen Puffer.
Den stack ist der reservierte Speicher für das auszuführende Programm ausführen. Wenn Sie eine Funktion aufrufen, parameter-und return-Informationen werden auf dem Stapel abgelegt.
Einen Puffer ist eine generische chunck der Speicher, der verwendet wird, für einen einzigen Zweck. Zum Beispiel, ein string ist ein Puffer. Kann es sein, über die Strecke durch das schreiben von weiteren Daten, die als string zugewiesen wurde.
InformationsquelleAutor der Antwort Craig
Stack overflow: Sie haben zu viele Dinge auf dem Stapel für den Speicher auf den aktuellen thread
Buffer overflow: haben Sie überschritten die Größe des momentan zugewiesenen Puffer übergeben wird und nicht angepasst um zu passen (oder nicht die Größe ändern weitere).
InformationsquelleAutor der Antwort Chris Ballance
Mehr, als Sie wahrscheinlich wissen wollen, hier:
- Stack Overflow
Pufferüberlauf
InformationsquelleAutor der Antwort Dana Holt
Einen stackoverflow ist, wenn die Größe des Stacks für einen thread überschreitet die maximal zulässige stack-Größe für diesen thread.
Einem Pufferüberlauf, wenn ein Wert geschrieben wird, in den Speicher, die derzeit nicht durch das Programm zugewiesen.
InformationsquelleAutor der Antwort JaredPar
Buffer overflow in der Regel steht für Sie jederzeit ein Speicherpuffer zugegriffen wird darüber hinaus die Grenzen, ob stack-oder heap. Ein stack-überlauf bedeutet, dass der stack hat Sie überschreiten die allokierten limit und auf den meisten Rechnern/OS ausgeführt wird, über heap.
InformationsquelleAutor der Antwort kenny
Nicht, Sie sagen "was ist der Unterschied zwischen einem stack und einem Puffer?" -- , führen Sie zu mehr Einsicht, mehr schnell. Wenn man einmal so weit gekommen, dann kann man darüber nachdenken, was es bedeutet, über alle diese Dinge.
InformationsquelleAutor der Antwort Ether
1. Stack-Basierten Pufferüberlauf
• Auftreten, wenn ein Programm schreibt in eine Speicheradresse auf dem Programm stehen das call-stack außerhalb der soll-Daten-Struktur – Pufferspeicher mit fester Länge.
• Eigenschaften der stack-basierte Programmierung
1. "Stack" ist ein Speicherbereich, in welcher automatischen Variablen zugewiesen werden.
2. Parameter der Funktion sind auf dem Stapel reserviert und werden nicht automatisch initialisiert das system, so haben Sie Müll, bis Sie initialisiert sind.
3. Sobald eine Funktion hat den Zyklus abgeschlossen, - Referenz auf die variable in den stack entfernt wird. (ich.e wenn-Funktion mehrfach aufgerufen, Ihre lokalen Variablen und Parameter sind neu und zerstört jedes mal die Funktion aufgerufen wird und beendet wird.)
• Der Angreifer ausnutzen, stackbasierte Pufferüberläufe zu manipulieren-Programm auf verschiedene Weise durch überschreiben
1. Eine lokale variable, die in der Nähe des Puffers im Speicher auf dem stack zu ändern, die das Verhalten des Programms profitieren könnten die Angreifer.
2. Return-Adresse im stack-frame. Sobald die Funktion zurückkehrt, wird die Ausführung Lebenslauf an die Adresse zurück, die, wie angegeben, durch den Angreifer, in der Regel eine Benutzer-Eingabe-Puffer gefüllt.
3. Eine Funktion Zeiger, oder exception handler, welcher anschließend ausgeführt.
• Faktoren zu überwinden, die exploits
1. Null-bytes in Adressen
2. Variabilität in der Lage der shell-code
3. Unterschiede zwischen Umwelt-Shell-code ist ein kleines Stück code zur Ausnutzung software Verwundbarkeit zu.
2. Heap Buffer Overflow
• Tritt in die heap-Daten-Bereich.
• Überlauf tritt auf, wenn eine Anwendung Kopien mehr Daten in einen Puffer als Puffer wurde entwickelt, um enthalten.
• Anfällig für Ausbeutung, wenn es kopiert Daten in den Puffer, ohne zuerst überprüfen, dass die Quelle passen ins Ziel.
• Eigenschaften der stack-basierte und heap-basierte Programmierung:
• "Heap" ist eine "free store", das ist der Speicherplatz, als dynamische Objekte zugeordnet sind.
• Der heap ist der Speicherbereich dynamisch allokiert new(), malloc () und calloc () - Funktionen.
• Dynamisch erzeugte Variablen (ich.e deklarierten Variablen werden auf Haufen vor der Ausführung und im Arbeitsspeicher gespeichert, bis der Lebenszyklus des Objekts abgeschlossen wurde.
• Ausbeutung erfolgt
• Durch die Beschädigung von Daten zu überschreiben internen Strukturen wie verkettete Liste von Zeigern.
• Zeiger exchange überschreiben Programm-Funktion
InformationsquelleAutor der Antwort Uday Moradiya
Meisten Menschen, die erwähnt buffer overflows mean stack oveflows. Jedoch, überläufe auftreten können, in jedem Bereich, nicht nur beschränkt auf den stack. Wie der heap oder bss. Ein stack-überlauf ist beschränkt auf überschreiben return-Adressen auf dem stack, sondern einen normalen überlauf, der überschreibt nicht die return-Adresse wird wahrscheinlich einfach zu überschreiben lokaler Variablen.
InformationsquelleAutor der Antwort user961124