2. Vom Programm zum
Prozess
Ausführbare Binärdatei (Binary) enthält den
passenden Programmcode für das Betriebssystem
und den Prozessor
Das Format beschreibt alle benötigten
Informationen, die das System zum Laden und
Starten des Programmes benötigt
Linux: Executable and Linking Format (ELF)
Windows: Portable Executable (PE)
Alte UNIXe: a.out (Assembler Out)
3.
4.
5.
6.
7. Das Text-Segment
Enthält den eigentlichen Programmcode mit all seinen
Funktionen und Anweisungen
Liegt in Maschinensprache vor
Wird in der Regel in Assembler angezeigt
8. Das Data-Segment
Initialisierter schreibbarer Speicher
Nutzung und Größe ist bereits vor der Laufzeit
festgelegt
Häufige Nutzung: Globale Verfügbarkeit über
Funktionsgrenzen und Aufrufe hinaus
Allerdings auch: Feste Inhalte und Startwerte
10. Das Heap-Segment
DATEN X DATEN Y
Die Halde
Dynamischer Speicher: Programm fordert bei Bedarf
„Heap“ beim Betriebssystem an
Zusammensetzung bei GLIBC aus einer „Double Linked
List“, einer doppelt verketteten Liste
11. Das Stack-Segment
Der „Stapel“ - Speicher
Funktionsweise nach LIFO
(Last In, First Out)
„Push“ und „Pop“
Speicherort für
Umgebungsvariablen,
Parameter und lokale
Funktionsvariablen
29. Weiterführende Übungen
Auftrag: Ein Programm in „C“ schreiben, das die
virtuellen Adressen aller Segmente oder Variablen
auf der Konsole ausgibt
Frage: Wie kann man aus einer Binärdatei die
Adressen und die Größen der statischen
Datenbereiche und des Anweisungsbereiches
vorher herausfinden? Tipp: objdump
Frage: Wo liegt der Unterschied bei dynamisch
und bei statisch gelinkten Programmen im Aufbau
des Text - Segments? Tipp: ldd