Dipl.-Ing. Martin Weitzel, 64380 Roßdorf bei Darmstadt

sysprog2021-09

Begieltende Web-Seite zur Schulung Linux System-Programmierung

Hier der Link zur Webx-Konferenz:

https://technischeberatungfueredv.my.webex.com/technischeberatungfueredv.my/j.php?MTID=m3526d7b8f01f4c92bdeb39b408e5240e

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