Basiswissen Buffer Overflow

14.05.2004
Von Thomas Wölfer

In der gekürzten Variante gibt es nur noch die Variable Name und eine Funktion, die diese Variable mit dem Text Kofler beschreibt. Danach wird der Inhalt der Variable mit Puts() ausgegeben.

In diesem Zusammenhang stellt sich eine Frage: Wenn die Funktion CopyName ihre Arbeit erledigt hat - woher weiß der Computer dann, an welcher Stelle er mit dem Programm weitermachen soll?

Wichtig: Die Rücksprungadresse

Jede Quellcodezeile wird beim Kompilieren eines Programms in eine Reihe von CPU-Instruktionen übersetzt, die dazu führen, dass die CPU die gewünschte Arbeit erledigt. Da die CPU immer nur mit Daten arbeiten kann, die sich in der CPU selbst (im Gegensatz zum RAM) befinden, müssen außerdem alle für eine bestimmte Aufgabe benötigten Daten vorher in die CPU kopiert und nach der Aufgabe zurück kopiert werden. Den Speicherplatz der CPU, der für solche Arbeiten zur Verfügung steht, nennt man Register. Dabei ist die Anzahl der Register begrenzt und die Register haben feste Namen. Das erste Register heißt zum Beispiel AX, das zweite BX, der dritte CX und so weiter.

Hat man beispielsweise eine Ganzzahl-Variable an der Adresse 12, die den Wert 5 hat und deren Wert um eins erhöht werden soll, so sähe der zugehörige Quelltext wie folgt aus:

int variable = 5;