Was passiert bei einem buffer overflow?
-
Steve03 schrieb:
ok danke, was ist denn n buffer underflow?
grüsse steve
Naja, Buffer können nicht underflowt werden, wie soll das gehen?!?
Höchstens im übertragenen Sinne: Du erwartest mehr, als kommt...Variablen können höchstens over- oder underflowt werden... ein 32-Bit-int z.B., logisch...
-
gibts da auch ein codebeispiel zu
wei ein programm einen overflow verursacht und ein anderes code einschleußt?
-
Wenn du folgendes machst:
#include <stdio.h> int main (void) { int i = 0; i = -65536 // kleinstmöglichster Wert bei 32Bit signed Integer --i; // um 1 verkleinern printf ("%d", i); return 0; }
Das wäre nun ein Überlauf des Integers.
Ein Underflow gibt es meines Wissens nach nur bei Stacks.Nehmen wir an du hast einen Stack für 10 int elementen, bei einem Stack gibt es
meist die Funktion push welche ein Element auf den Stack setzt und den Stackzeiger
um 1 erhöht so dass er auf das oberste Element zeigt und eine Funktion pop welche
das oberste Element löscht und zurückliefert.
Nehmen wir an du setzt den Elementzeiger auf -1 (Die Position vor dem ersten
Element des Stacks!), so macht das durchaus Sinn, da bei einem Push der Zeiger
um eines nach oben geschoben wird und somit auf ein freies Feld zeigt und in
dieses der Wert gesetzt wird.
Wenn du aber nun ein pop() für einen leeren Stack aufrufst, so wird der Wert aus einem Feld vor dem eigentlichen Stack gelöscht (!) und dir etwas zurückgeliefert
was du nie in den Stack geschoben hast.
Du hast nun einen Stack underflow erzeugt, der Daten eines anderen Programmes
gelöscht hat.Hoffe ich hab es einigermaßen verständlich erklärt. Ach und als Tipp, immer prüfen
ob der Stack NICHT leer ist bevor pop ein Element löscht !
-
Irgendwo gabs das Thema letztens schonmal.
Da hab ich den Link her.
-
Steve03 schrieb:
ok danke, was ist denn n buffer underflow?
bufferunderrun kenn ich nur vom brennen. während eines brennvorganges gehen dem brenner die daten aus, was dich meistens den rohling kostet.
mfg
-
dass liegt daran, dass eben weniger Daten als erwartet (bzw. hier mindestens nötig um den Brennvorgang am laufen zu erhalten) geliefert werden.
-
Sovok schrieb:
gibts da auch ein codebeispiel zu
wei ein programm einen overflow verursacht und ein anderes code einschleußt?Mhhh... soll ich mal was bauen?!
Das war ja auch das Problem, weswegen es das DirectX 9.0b (!) Update gab'.
Seit Version 8 hatte DirectXAudio wohl ein Problem mit MIDI-Dateien (wo Note für Note gespeichert wird). Beim Einlesen wurde ein Puffer nicht gecheckt.
Das könnte man sich halt zunutze machen, indem man eine MIDI-Datei so umbastelt, daß ab einer bestimmten Länge ASM-Opcodes drin stehen, die was fieses machen...
So könnte sich also auch bei Outlook mit Vorschau bei einer in eine HTML-Mail eingebettete MIDI was übles ergeben...
Sehr kurios.
-
hi
ich wunder mich immer wieder wieso man eigentlich asm code vom stack ausführen kann. Sollte doch eigentlich in einem PM OS unmöglich sein, da der doch als Stacksement / Datensegment makiert ist und somit nicht ausfürbar sein dürfte. ( auser das os baut da mächtig ..... ) soweit ich mich erinnern kann, wird doch so ein grober schnitzer vom prozessor mit einer exception geandet, oder?
gruss Termite
-
NOp Codes werden ab jetzt ignoriert. und da windows mit jeder version immer mehr leistung frisst, dürfte es bald keine funktionierenden exploits mehr geben...:)
mfg
-
und ich hab immer gedacht das würde auch für einen i368 aufwerts gelten. so kann man sich irren
gruss Termite
-
@Sgt. Nukem
ja wär klasse wenn du was kleines bauen könntest
ein konsolentool, das nix mach außer n overflow zu verursachen und ein zweites tool, das nachvollziehbar den overflow ausnutztmich interessiert nur wie das ausführen von fremdcode in der praxis aussieht