Shim eine Bibliothek mit versionierten Symbolen
Wie erlaube ich für eine Bibliothek, die von einem gemeinsam genutzten Objekt geladen wird, dass versionierte Symbole von der ausführbaren Datei aufgelöst werden?
Es gibt eine proprietäre Bibliothek, die von vielen ausführbaren Dateien auf einem System verwendet wird und in einer Routine einen Fehler aufweist, den wir für das gesamte System patchen müssen. Dies macht etwas wie LD_PRELOAD umständlich und unpraktisch, um in jede Umgebung zwingen zu können, aus der diese ausführbaren Dateien gestartet werden könnten. Der Plan, der mir gegeben wurde, bestand darin, say libspecial.so
in libspecial.so.org
eine neue Bibliothek zu kopieren und eine neue Bibliothek mit dem Namen zu erstellen, libspecial.so
die diese Funktion überschreibt und mit dieser verknüpft ist libspecial.so.org
, damit alle übrigen Symbole automatisch geladen werden können.
In einem kleinen Test mit einer kleinen Beispielbibliothek hat dies gut funktioniert.
Die eine Funktion wird überschrieben, und alle anderen Symbole in der Originalbibliothek sind für die ausführbare Hauptdatei transparent verfügbar.
Die betreffende Bibliothek enthält jedoch einige versionierte Symbole. Aus irgendeinem Grund werden diese Informationen nicht weitergeleitet, und die ausführbare Datei beschwert sich (auch der Laufzeit-Linker), dass die benötigten Versionsinformationen nicht gesucht werden können.
Wie kann ich zulassen, dass versionierte Symbole von der ausführbaren Datei aufgelöst werden?
Wenn ich die Bibliothek explizit mit dlopen lade, gibt es vielleicht spezielle Flags, die dies erlauben?
Oder gibt es einen einfacheren Weg?
Ein Kollege schlug vor, dass wir alle ausführbaren Informationen aus den ausführbaren ELF-Strukturen entfernen könnten, was wir ausprobiert haben und es funktioniert. Aber dann muss ich alle ausführbaren Dateien ändern, und es gibt auch die Sorge, dass dies etwas kaputt machen könnte und sich zu riskant anfühlt. Da der Laufzeit-Linker mit dem Auflösen der Symbole umgehen kann und gerade durch die Versionsinformationen gebremst wird, vermisse ich nur, dass mir eine Möglichkeit fehlt, dieses Problem in der Bibliothek leicht zu handhaben.
0 Antworten auf die Frage
Verwandte Probleme
-
9
Was ist der Unterschied zwischen den Befehlen "su -s" und "sudo -s"?
-
4
Gutes freies Ubuntu Server-VMWare-Image benötigt
-
4
Was sind die Unterschiede zwischen den großen Linux-Distributionen? Werde ich es merken
-
2
Begrenzung der CPU-Auslastung für Flash in Firefox?
-
2
Wie kann ich mein Mikrofon unter Debian GNOME zum Laufen bringen?
-
2
Conky-Setups - Beispiele / Ideen?
-
3
Was sind die Unterschiede zwischen Linux Window Managern?
-
2
ThunderBird / Lichtsynchronisation mit SE k770i
-
4
Linux-Dateisystem
-
6
Vollbild-Flash langsam in KDE 4