sysprog2021-09
Begieltende Web-Seite zur Schulung Linux System-Programmierung
Hier der Link zur Webx-Konferenz:
Behandelte Themen Montagmorgen:
Systemaufrufe Generell
Beispiel zu "hello, world" mit C-Funktion "puts"
Beispiel zu "hello, world" mit Systemaufruf "write"
Systemaufruf write in Assembler
Rolle des Runtime-Startup
Minimales Runtime-Startup Modul
Diverse Linux Kommands:
gcc zum Kompilieren UND Linken (erzeugt per default a.out)
gcc -c nur Objekt-File erstellen – geht aus *.c files (C-Source code) und *.s Files (Assembler Source Code)
gcc (ohne -c) aus mehreren Objekt Files PLUS dem Standard Runtime-Startup Modul ein ausführbares Programm erzeugen
Ausführbare Programme können eventuell Shared Libraries referenzieren.
objdump -S kann Object Files auch wieder disassemblieren
Linken bedeutet: die noch nicht endgültigen Adressen in Objekt Files werden so verschoben, dass sie eindeutig sind.
nm zeigt Symbole in Objekt Files
nm ... | grep ' U ' zeigt, ob es noch undefinierte Symbole gibt (wenn diese in einem ausführbaren Programm enthalten sind, bedeutet das, es wird beim Start eine (oder mehrere) Shared Libraries nötig.
mit gcc -static kann man statisch binden: Nachteil, das Stanrdard Runtime-Startup Moduk fügt sehr viel Code hinzu
mit gcc -nostartfiles kann statt des Standard Runtime Startup Moduls ein eigenes (schlankeres) Startup Modul zur Verfügug gestellt werden.
Allerdings kann dieses evtl. nicht ausreichen (abhängig von der Programmiersprache). Z.B. können in C++ auch globale Objekte Konstruktoren und Destruktoren haben, die gf. direkt for bzw. direkt nach der main-Funktion laufen müssen. Ein eigenes "schlankes" Runtime Startup Modul würde dann zu fehlerhaften Verhalten führen