Basiswissen Buffer Overflow

Ein Beispielprogramm

Beim Beispielprogramm soll es sich um ein Programm zur Bearbeitung von Kontaktdaten handeln. Im Zuge des Programms werden die Namen und Vornamen von Personen gespeichert. Dazu werden zwei Variablen angelegt: "Name" und "Vorname". Namen sind meist recht kurz und daher bekommen die Variablen feste Längen. Für Namen und Vornamen stehen je 15 Bytes zur Verfügung.

char Name[ 15];
char Vorname[ 15];

Um einen Text in eine Variable zu kopieren, benutzt man den Befehl "String Copy", abgekürzt strcpy. Der Befehl erhält zwei Parameter. Der erste gibt die Quelle an, der zweite das Ziel des Kopiervorgangs. Das Ziel des Vorgangs wird als Adresse ausgedrückt - dazu kann man einfach den Namen der Variablen benutzen, da der Name für ihre Adresse steht. Um Namen und Vornamen eines Kontakts in eine Variable zu kopieren, verwendet man die folgenden Befehlszeilen:

strcpy( "Kofler", Name);
strcpy( "Heinz", Vorname);

Nun muss man sich den Inhalt des Arbeitsspeichers im Zuge der vier Programmzeilen vergegenwärtigen. Bevor die erste Programmzeile ausgeführt wird, liegt einfach nur unbelegter Speicher vor: Da noch nichts passiert ist, enthalten alle Speicherzellen mehr oder weniger zufällige Werte.

Dann folgen die beiden Programmzeilen, mit denen die Variablen festgelegt werden:

char Name[ 15];
char Vorname[ 15];

Nun einmal angenommen, dass die beiden Variablen die ersten im Programm definierten sind. Dann hat Name die Adresse 0 und reicht bis zur Adresse 14, Vorname hat die Adresse 15 und belegt die folgenden 15 Bytes. Die Variablen wurden aber noch nicht mit Inhalten belegt, also enthalten die zugehörigen Speicherzellen auch nur zufällige Werte. Diese zufälligen Werte sind in der Abbildung mit einem X markiert. Die Adressen der einzelnen Zellen stehen jeweils über der Zelle.