Re: Funktionsweise von ausführbaren Dateien



Dominik Schmidt (dominikschmidt3@xxxxxxx) schrieb:
Hallo,

wie an der Frage sicherlich unschwer zu erkennen, kenne ich mich mit
Linux-Systemen kaum aus.
Ich würde gerne wissen, wie ausführbare Dateien unter Linux
"funktionieren", bzw. wie man sich deren Funktionsweise vorzustellen hat.

Unter Windows werden Dateien bekanntlich anhand ihrer Dateiendung
identifiziert.
Die Dateiendung "exe" (wie "test.exe") ist eine ausführbare Datei bzw.
Programmdatei, die beim Öffnen als Programm geöffnet wird.
Bei anderen Dateitypen, wie z.B. "jpg" (Bild) öffnet Windows das damit
verknüpfte Bildprogramm mit dem Dateipfad des geöffneten Bildes als
Parameter.


Korrekt. Hat allerdings den Nachteil, dass, wenn du ein AVI-Video in
*.jpg umbenennst, Windows versucht, den Bildbetrachter zu öffnen.

Bei UNIX-Systemen gibt es wohl keine Dateiendungen.

Doch, auch, aber sie haben nicht die gleiche Bedeutung wie unter
Windows. Hier zählen die Inneren Werte[tm]. Bloß, weil eine Datei *.jpg
heißt, muss sie ja kein Bild sein.

Eine ausführbare Datei (wie eine Exe-Datei unter Windows) ist nur dann
ausführbar, wenn man das Execute-Bit setzt (z.B. chmod), sonst hat man
einen unbrauchbaren Binaryhaufen.

Hmmm... es gibt aber auch Dateien, die bestehen nur aus ASCII und haben
ein Executable-Bit. Und das beste: Das funktioniert sogar. Nennt sich
Skript und funktioniert so: Wenn die erste Zeile mit "#!" beginnt, wird
der Rest der Zeile als Interpreter betrachtet und mit dem Skript als
Argument aufgerufen. Wenn nicht, wird /bin/sh genommen.

Ob es sich bspw. bei einer Bilddatei um ein JPEG-Bild oder ein GIF-Bild
(GIF-Bilder scheinen ja z.B. immer mit der 3 Byte langen ASCII-Zeichenfolge
"GIF" zu beginnen) handelt, wird ermittelt, indem der Anfang vom Dateibody
(möglicherweise in dem Fall also diese ersten 3 Byte) eingelesen wird.
Somit wird diese Information auch benutzt, um beim Öffnen einer Datei (z.B.
mit einem Dateimanager) das verknüpfte Bildprogramm mit dem Bildpfad als
Parameter zu öffnen?


"Das kommt drauf an." Nämlich auf die Art und Weise, wie du die
entsprechende Datei öffnen willst. Vermutlich meinst du das Anklicken im
Konqueror, Dolphin oder Nautilus. Da wird AFAIK so etwas benutzt, wie
das Kommandozeilentool "file", dass Dateien anhand ihres Inhalts
klassifiziert. Dessen Ausgabe wird ausgewertet und dann wird ein
entsprechendes Programm gestartet. AFAIK...

Allerdings müssen es nicht die ersten drei Bytes sein. Bei einem Tape
Archive steht die Magic Number (in dem Falle der String "ustar") erst an
Stelle 251 oder so. Und dann gibt es da noch Verfeinerungen: Beginnt
eine Datei mit "MZ", ist es auf jeden Fall eine DOS-Exe. Kommt
allerdings etwas später ein "PE", so ist die Datei auch eine Win32-Exe
(in Win32-Exen steht vorne ein DOS-Stub drin, der DOS-Nutzer dazu
auffordert, Windows zu installieren. Das ist sauberer designed als das
grausliche .NET-Framework, das, wenn es kein .NET gibt, einem die
hübsche Fehlermeldung bringt "Das Programm konnte nicht richtig
initialisiert werden." Und daraus soll einer Schlau werden!)

Habe ich das soweit richtig verstanden?

Meine nächste Frage:
Eine Windows-Exe-Datei ist im Allgemeinen auf allen Windows-Systemen
(zumindest Desktop-Systeme ab 9x) zumindest startfähig.
Sicherlich wird eine Programmdatei, die für Windows XP geschrieben wurde,
unter Windows 95 wohl abbrechen, bevor man eine Oberfläche sieht, weil z.B.
Abhängigkeiten fehlen.

Richtig. Das ist einer der wenigen Fälle, wo Windows mal vernünftige
Fehlermeldungen ausgibt, nämlich "Die DLL foo.dll wurde nicht gefunden"
oder "Der Prozedureinsprungpunkt foobar wurde nicht in foo.dll
gefunden."

Aber im wesentlichen lassen sich doch Programmdateien, die auf einem
Windows 2000 System laufen, auch auf einem Windows 7 System benutzen.


Richtig. Manchmal klappt das sogar mit Treibern (für meine WLAN-Karte
gibt es nur einen WinXP-Treiber, der aber auch bei Win7 tadellos seinen
Dienst versieht).

Lange Rede kurzer Sinn: Unter Linux muss man scheinbar die Quelldateien für
jede Distribution neu kompilieren, selbst kompilierte ausführbare Dateien
von bspw. SuSE Linux 11.1 sind unter der Version 11.2 angeblich nicht mehr
lauffähig.
Ist das richtig?
Warum muss für jede Distribution neu kompiliert werden?

"Kommt drauf an". Und zwar hat jede Distribution andere (Versionen von)
Shared Libs parat. Debian sarge dürfte wohl kaum mit einer libslang von
letztem Dienstag aufwarten können, oder so. Und jede Software hat andere
Abhängigkeiten. Die einen linken rpm noch gegen libdb, die anderen gegen
libsqlite etc. pp.

Es gibt einen Standard namens Linux Standard Base, in dem drin steht,
was ein Programm alles an Bibliotheken erwarten darf. Alles was da nicht
drin steht, müsste man theoretisch per libdl nachladen, aber wozu der
Aufwand? Damit nicht der dynamische Linker die Fehlermeldung herausgibt,
sondern das Programm selbst? Kann ich mir auch sparen.

Im übrigen könnte ein Programm für SuSE Linux 11.1 durchaus noch auf
11.2 laufen. Es könnte sogar sein, dass ein Programm von Debian Sarge
auf SuSE Linux 11.2 läuft. Es ist nur nicht garantiert. Garantieren
jedoch kann man, dass der Quellcode auf beiden Distributionen
kompiliert. Genauer gesagt ist das Kompilieren oft nicht das Problem,
sondern das Linken. Der proprietäre nVidia-Treiber macht sich das
zunutze: Die liefern Objektdateien aus, die nur noch gelinkt werden
müssen.

HTH,
Markus
--
Nur weil ein Genie nix reißt, muß ja nun nicht gleich jeder Idiot
pausieren... Bully hats ja auch geschafft.
-- gUnter nanonüm in de.alt.anime

--- news://freenews.netfront.net/ - complaints: news@xxxxxxxxxxxx ---
.



Relevant Pages

  • Re: Zeichensatzprobleme
    ... Du wirst also immer irgendwelch Hardware finden, ... unter Linux läuft das selbe Board rockstable über ... Das musst Du übrigens bei Windows ... >> Homebanking Programm Star Money genannt. ...
    (de.rec.mampf)
  • Re: Welches Linux ?
    ... Das beste wäre eine vorkonfigurierte Firewall wie ... Zonealarm, die mir in einem Dialog anzeigt, wenn sich ein Programm ans ... vom Nutzen, fuer Windows anzubieten). ... Und wenn auch auf Verpackungen von Linux Distributionen steht, ...
    (de.comp.os.unix.linux.misc)
  • Re: Fehlermeldung "libevent-1.3b.so.1 needed"
    ... wenn man man ein neues Programm installieren will: ... vielen anderen Dingen, die Sache an, wie man es von Windows kennt. ... Zumindest muss man umdenken, und auch nicht erwarten wollen, dass Linux ... der eigene Distributor. ...
    (de.comp.os.unix.linux.misc)
  • Re: Windows und Linux?
    ... >> Office mit Sicherheit nicht, ... Selbst unter win4lin ist das Programm nicht nutzbar, ... Soweit man lesen kann, weiss der OP noch nichtmal richtig, was Linux genau ... Es gibt für Linux kaum Endanwenderanwendungen, die es für Windows nicht ...
    (microsoft.public.de.german.windowsxp.sonstiges)
  • Re: Problem beim Starten von XP
    ... "Eric March" schrieb: ... Beim starten von Windows wird angezeigt, ... >> Auflistung von Dateien und Ordnern mit Dir. ... dass Linux mir alles anzeigt und XP nicht ??? ...
    (microsoft.public.de.german.windowsxp.sonstiges)