Linker, Loader und ausführbare Formate

Welche Verarbeitung führt der Startcode bei einem Mikrocontroller ohne Betriebssystem unmittelbar nach dem Einschalten aus, bevor er main aufruft?

  1. ADen gesamten Maschinencode von .text aus dem RAM in den Flash zurückschreiben
  2. BDen Inhalt des RAM auslesen und die Variablenwerte vom letzten Abschalten wiederherstellen
  3. CDie Initialwerte von .data aus dem Flash in das RAM kopieren und den Bereich .bss mit 0 füllen
Antwort und Erläuterung anzeigen

Antwort: C. Die Initialwerte von .data aus dem Flash in das RAM kopieren und den Bereich .bss mit 0 füllen

Beim Ausschalten geht der RAM-Inhalt verloren; die Werte von Variablen mit Initialwert werden daher im nicht überschreibbaren Flash gespeichert, und der Startcode kopiert sie an die Stellen der Variablen im RAM. Der Bereich der Variablen ohne Initialwert (.bss) wird mit 0 gefüllt. Im Linker-Skript werden für .data getrennt die „Adresse im Flash“ und die „zur Laufzeit im RAM verwendete Adresse“ angegeben. Erst danach kann main in dem von C zugesicherten Zustand beginnen.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Linker, Loader und ausführbare Formate

  1. Was ist der Unterschied zwischen „Section“ und „Segment“ in ELF-Dateien?
  2. Welcher Angriff lässt sich leichter verhindern, wenn Speicherseiten nicht gleichzeitig „beschreibbar“ und „ausführbar“ sein dürfen (W^X, Trennung von Schreiben und Ausführen)?
  3. Wann wird bei Shared Libraries unter Linux die Versionsnummer des soname, wie das „.1“ in libfoo.so.1, im Allgemeinen erhöht?
  4. Was lässt sich unter Linux erkennen, wenn der Befehl ldd auf eine ausführbare Datei angewendet wird?
  5. Welche Kombination der von den wichtigsten Betriebssystemen verwendeten Formate ausführbarer Dateien ist richtig?

Vergleiche zu diesem Thema