ubuntuusers.de

Frage zu ELF-Format vs. Maschinencode

Status: Ungelöst | Ubuntu-Version: Ubuntu 16.04 (Xenial Xerus)
Antworten |

Freejogga

Avatar von Freejogga

Anmeldungsdatum:
20. April 2016

Beiträge: 16

Wohnort: Hamburg

Wenn ich das richtig verstehe, produziert der gcc Compiler aus (beispielsweise) einem C-Quelltext eine ausführbare Datei ("Programm"), die aber nicht aus Maschinencode besteht, sondern aus dem "ELF-Format". Meine Frage dazu:

- Ist das ELF-Format vom Prozessor direkt lesbar?

- Wenn nicht, wird ELF intern (automatisch) in Maschinencode compiliert oder wird es während des Programmlaufs interpretiert?

Ich konnte bisher keine Antwort dazu finden. Danke!

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9743

Wohnort: Münster

Ein Compiler erzeugt in der Regel aus einem Programm-Quelltext kein direkt ausführbares Programm in Maschinensprache, sondern "loader tables". Diese enthalten das Programm in Maschinensprache zusammen mit weiteren Informationen, z.B. wie dieses Programm mit anderen benötigten Teilen (z.B. aus Programm-Bibliotheken) zusammen gebunden werden muss. Ein Format, und zwar das z.Zt. bei Linux gängige für diese "loader tables" ist ELF. Siehe: https://de.wikipedia.org/wiki/Executable_and_Linking_Format

Es ist Aufgabe den Linker/Loaders, die benötigten Teile in den Arbeitsspeicher zu laden, miteinander zu verbinden und dabei die Speicher-Adressen ggf. anzupassen (zu „relozieren“) sowie das dann fertige Maschinenprogramm zu starten. Näheres zum Linux Linker/Loader siehe Manpage:

man ld
man ld.so 

Dakuan

Avatar von Dakuan

Anmeldungsdatum:
2. November 2004

Beiträge: 6504

Wohnort: Hamburg

Nur mal so zur Info:

Ganz früher, also als ich noch mit einem selbst gebauten Z80 System gespielt hatte, wurden Programme als direkt ausführbare Datei erstellt. Diese wurden dann auf eine feste Adresse (0x100 bei CP/M) geladen und sind dann auch nicht mehr verschiebbar (womit dann auch immer nur ein Programm zur Zeit laufen kann). Der Dateityp war dann *.com, was es später auch bei DOS gegeben hat.

Man sieht, das diese Vorgehensweise für moderne Betriebssysteme nicht praktikabel ist (wenn man von Tricks mit der MMU mal absieht).

Freejogga

(Themenstarter)
Avatar von Freejogga

Anmeldungsdatum:
20. April 2016

Beiträge: 16

Wohnort: Hamburg

Ja, danke Euch beiden! Ich hatte die Frage im Hinterkopf, ob der Umweg über den ELF Code nicht Performance raubt. Aber, klar, bei heutigen Betriebssystemen läuft das anders... Meine letzten (und einzigen) Assemblererfahrungen hatte ich mit dem 6502 und diese Welt habe ich unbewußt und fälschlicherweise auf heute übertragen. 😠

Dakuan

Avatar von Dakuan

Anmeldungsdatum:
2. November 2004

Beiträge: 6504

Wohnort: Hamburg

6502 kenne ich nur ansatzweise. Ich hatte auf meinem Z80 einen Emulator dafür. Die CPU hatte mich allerdings nicht begeistert. Beim MC68000 sah das dann viel besser aus.

Antworten |