Warum haben fast alle gemeinsam genutzten Bibliotheken in /usr/lib/
das ausführbare Berechtigungsbit gesetzt? Ich sehe keinen Anwendungsfall für die Ausführung. Einige schaffen es, irgendeine Form von main
Funktion zum Drucken eines kurzen Urheberrechts- und Versionshinweises anzuschließen, aber viele tun dies nicht einmal und schlagen bei der Ausführung fehl.
Was bringt es also, dies x
einzustellen? Müssen das alle Bibliothekspaketierer tun? Was passiert, wenn ich dlopen()
eine gemeinsam genutzte Bibliothek mit 0644
Berechtigungen habe?
libraries
conventions
Tadeusz A. Kadłubowski
quelle
quelle
/lib
und/usr/lib
sind libc und libpthread, und sowohl ein Copyright - Hinweis drucken , wenn sie ausgeführt.main()
Symbols als Einstiegspunkt ist kein kleiner Fehler, sondern eine grundlegende Wahl für das Design. Du hast meinen Standpunkt verfehlt.Antworten:
Unter HP-UX werden gemeinsam genutzte Bibliotheken mit mmap () in den Speicher abgebildet, und alle Speicherseiten im System verfügen über Schutzbits, die mit den Speicherseitenschutzmechanismen der Kernel- und Prozessorhardware gekoppelt sind. Damit der Inhalt einer beliebigen Speicherseite im System ausgeführt werden kann, muss auf dieser Seite PROT_EXEC festgelegt sein - eine nützliche Funktion, um Datenausführungs-Exploits zu verhindern.
Der Aufruf von mmap () verwendet die Berechtigungsbits in der zuzuordnenden Datei, um die Schutzbits der zugeordneten Speicherseiten zu definieren, die sie enthalten sollen: rwx -> PROT_READ | PROT_WRITE | PROT_EXEC (von sys / mman.h). Damit eine gemeinsam genutzte Bibliothek unter HP-UX verwendet werden kann, muss die Datei mit der gemeinsam genutzten Bibliothek über Ausführungsberechtigungen verfügen, um sicherzustellen, dass die zugeordnete Bibliothek auch über Ausführungsberechtigungen verfügt.
Eine gemeinsam genutzte Bibliothek mit Modus 644 auf einem HP-UX-System führt zu Core-Dumps.
quelle
Nicht ausführbare freigegebene Objekte funktionieren einwandfrei, Bibliotheken, die als ausführbar gekennzeichnet sind, können jedoch auch als eigenständige Programme ausgeführt werden.
Keine, es sei denn, Sie möchten, dass sie Versions- oder andere Informationen veröffentlichen
Nein
Sie erhalten ein neues Shared Object-Handle (solange die Datei lesbar ist usw.) ... das Exec-Bit hat keinen Einfluss darauf
Warum in Bibliotheken, die nicht als eigenständige ausführbare Dateien verwendet werden können, immer noch das Ausführungsbit gesetzt ist: Dies ist wahrscheinlich nur ein Artefakt des verwendeten Build-Systems oder Link-Skripts.
Beispielausgabe, nur als Referenz:
quelle
main()
Einstiegspunkt haben. Libc ist ein Ausreißer. Die Entwickler haben diesen Hinweis als zusätzliche Funktionalität ausgeführt. Einfachechmod a+x
von jeder anderen Bibliothek wird Ihnen diese Funktionalität nicht geben. Ich sehe immer noch nicht den Punkt der Einstellung+x
für alle Bibliotheken..so
die ausgeführt werden können, sollten als solche gekennzeichnet werden. Ich werde meine Antwort ändern, um zu vermeiden, dass alles, was mit dem Exec-Bit gesetzt ist, wirklich eine eigenständige ausführbare Datei ist.