Ich bin nur Neugierig.
bash-3.00$ ldd libmylibrary.so
ldd: warning: you do not have execution permission for `libmylibrary.so'
Alles scheint gut zu funktionieren, nur mit + r. Mir ist aufgefallen, dass die meisten .so in / usr / lib + x gesetzt haben ...
Warum sollen gemeinsam genutzte Bibliotheken ein ausführbares Bit gesetzt haben? Was könnte passieren, wenn ich es nicht einstelle?
Antworten:
Eigentlich kommt es auf die
ldd
Umsetzung an.ldd
Ist normalerweise ein Skript, können Sie es bearbeiten, um zu sehen, wo und warum Sie diesen Fehler erhalten.ldd
Überprüft unter Ubuntu 10.04read
nur die Berechtigung. Es kann sein, dass der Fehler keine dynamische ausführbare Datei ist, wenn die Datei kein ELF ( Executable and Linkable Format ) ist. Die Bibliotheken hier sind-rw-r--r--
zum Beispiel alleEs ist nicht schockierend, einen
x
Zugriff für eine gemeinsam genutzte Bibliothek zu wünschen . Derexecutable
Modus ist eine Konvention, die dem Betriebssystem eine weitere Ebene der Zugriffsrechtskontrolle bietet. Der ausführbare Loader steuert diesen Zugriff, um sicherzustellen, dass der Benutzer ihn ausführen kann, aber auch um Fehler zu vermeiden (einige Skripte oder Programme sollten von einigen Personen nicht ausgeführt werden).Dies könnte aus dem gleichen Grunde auf die gemeinsam genutzten Bibliotheken erweitert werden - aber gemeinsam genutzte Bibliotheken können nicht laufen von selbst, und ist weniger fehleranfällig verwendet wird zufällig ). Somit ist die Notwendigkeit weniger offensichtlich (der
r
Zugang reicht aus).quelle
Sie können tatsächlich viele Bibliotheken ausführen. Sehen Sie beispielsweise, was passiert, wenn Sie
/lib/libc.so.6
auf einem aktuellen GNU / Linux-System an Ihrer Shell tippen .quelle
Denken Sie an eine ausführbare Datei mit -x. Sie können es nicht ausführen. Betrachten Sie diese Bibliotheken als eine Sammlung allgemeiner Funktionen, die von einem anderen Programm aufgerufen werden (sagen wir myProgra). Wenn Sie die Bibliotheken / Funktion nicht ausführen können ... dann haben Sie nichts
Ein Beispiel
Wenn Sie nun Funktion1 und Funktion2 in eine andere Datei einfügen und diese einschließen, erhalten Sie eine Bibliothek. (Natürlich ist es etwas komplizierter. Dies ist nur ein Beispiel)
Wie Sie sehen, müssen Sie in jedem Fall den Code ausführen, der in der Bibliothek enthalten ist
quelle
Der Schlüssel ist das Dateiformat, das ausführbare und das verknüpfbare Format. Da das gleiche exakte Dateiformat verwendet wird, um sowohl eine ausführbare Datei als auch eine gemeinsam genutzte Bibliothek zu identifizieren, müssen beide über die entsprechenden ausführbaren Berechtigungen für den Betriebssystemlader verfügen. Dies ermöglicht, dass ein einzelner Loader und ausführbare Dateien als DSO verwendet werden, wenn sie eine Symboltabelle enthalten.
quelle