Basiswissen Buffer Overflow

Der Einstieg: Variablen

Zunächst muss man wissen, wie Daten in Variablen gespeichert werden. Bei einer Variablen handelt es sich im Wesentlichen um einen symbolischen Namen, der für einen Wert oder für eine Anzahl von Werten steht. Im Normalfall ist die kleinste beim Programmieren verwendete Einheit ein Byte - Variablen sind also symbolische Namen für ein oder mehrere Bytes.

Texte sind häufig vorkommende Daten. Text ist auch für dieses Beispiel besonders geeignet, weil Text innerhalb von Programmiersprachen oft direkt auf Bytes abgebildet wird. Ein einzelnes Zeichen nennt man dabei "Character", ein einzelner Character verbraucht im Allgemeinen ein einzelnes Byte.

Setzt sich ein Wort aus mehreren Zeichen zusammen, benötigt man mindestens eine ebenso hohe Anzahl an Bytes zum Speichern des Wortes, wie das Wort Buchstaben hat. Ansammlungen aus Daten eines bestimmten Typs nennt man ein "Array". Bei einem Wort handelt es sich also um ein Array aus Bytes. Stattdessen spricht man bei Texten auch von "Strings".

In der Sprache C, auf der ein Großteil des Windows- und Linux-Codes basiert, sind Strings immer mit einem besonderen Zeichen abgeschlossen: Am Ende eines Textes steht immer ein Byte, das den Wert 0 hat. Dadurch wird das Ende des Strings markiert.

Ein String wird also mit einem symbolischen Namen beschrieben und steht für eine bestimmte Anzahl an Bytes mit einer abschließenden "0". Arrays werden in C in eckigen Klammern markiert. Innerhalb der eckigen Klammer steht eine Zahl, die die Größe des Arrays angibt:

char aVariable[10];

Hier handelt es sich also um die Variable mit dem Namen aVariable. Die Variable ist ein Array der Größe 10 und hat den Typ char. Die Variable bietet also Speicherplatz für 10 Bytes.