Basiswissen Buffer Overflow

14.05.2004
Von Thomas Wölfer

Für die Ausführung der Instruktionen gibt es nun wieder einen speziellen Speicher in der CPU, den Befehlszähler. Dieser enthält die Adresse der nächsten auszuführenden Anweisung. Die Anweisung wird dann von dieser Adresse in die CPU kopiert und ausgeführt. Sofern dabei nichts Besonderes passiert, wird dann der Wert der nächsten Adresse ermittelt und die nächste Anweisung wird in die CPU transferiert. Die CPU führt dann die nächste Anweisung aus. Wie eine CPU exemplarisch funktioniert, finden Sie im Artikel "So funktioniert ein Prozessor" näher beschrieben.

So wird zurück gesprungen

Der Befehlszähler kann aber auch durch spezielle Sprungbefehle direkt beeinflusst werden. Statt einfach die Anweisungen so, wie sie im Speicher stehen, nacheinander auszuführen, springt das Programm dabei an eine völlig andere Stelle im Speicher, und arbeitet dort die Anweisungen der Reihe nach ab - bis wieder ein Sprung-Befehl kommt. Die von Menschen lesbare Form hat in etwa das folgende Aussehen:

JMP 123

Dabei würde der Programmcode jetzt ab Adresse 123 abgearbeitet. Mit diesem Mechanismus werden Funktionsaufrufe, die sich im Quellcode befinden, im binären Code abgebildet.

So hat die erste Instruktion der Funktion main() beispielsweise eine bestimmte Adresse - zum Beispiel 1000. Ebenso hat die erste Instruktion der Funktion CopyName() eine Adresse - zum Beispiel die 1400.