macht proprietäre ELF-Binärdateien unter Linux portierbar

8

Ich suche nach einer Möglichkeit, existierende proprietäre ELF-Binärdateien, die mit bestimmten Versionen von Systembibliotheken verknüpft sind, portabel zu machen. Mit portable meine ich, dass die ausführbare Datei auf jedem System mit derselben Prozessorarchitektur und einem kompatiblen Systemkern funktioniert, ohne unbedingt den Quellcode der Bibliotheken zu haben (wenn es keinen Weg gibt, ohne den Quellcode zu haben, wird es auch funktionieren) .

Bisher habe ich an zwei Möglichkeiten gedacht, aber ich weiß nicht, ob sie überhaupt möglich sind und wenn ja, welche zu wählen:

  1. Durchsuche alle verknüpften Bibliotheken und ihre Abhängigkeiten und füge sie in ein Unterverzeichnis der Binärdatei ein und ändere den Bibliothekspfad in dieses Verzeichnis.
  2. Erneutes statisches Einbinden der Bibliotheken in die Binärdatei zu einer großen ausführbaren Datei (wenn das Programm sich nicht anhand einer Prüfsumme verifiziert).

Lizenzierung ist kein Problem, da ich die erstellten portablen Programme nicht verteilen möchte, es ist nur für den privaten Gebrauch.

Danke für deine Antworten.

    
FSMaxB 13.03.2013, 12:58
quelle

1 Antwort

6
  

Suche alle verlinkten Bibliotheken und ihre Abhängigkeiten und schließe sie in ein Unterverzeichnis der Binärdatei ein und ändere den Bibliothekspfad in dieses Verzeichnis.

Dies würde für die meisten gemeinsam genutzten Bibliotheken funktionieren, funktioniert aber nicht für libc.so.6 (das ist das Problem, das am wahrscheinlichsten Probleme verursacht, wenn Ihr Zielsystem nicht über die Version verfügt, die neu genug ist).

Der Grund: glibc besteht aus über 200 separaten, gemeinsam genutzten Bibliotheken, die nicht versionierte binäre Schnittstellen zwischen ihnen haben und keinen stabilen ABI zwischen ihnen haben. Aus diesem Grund müssen alle Teile von glibc aus demselben Build stammen. Einer dieser Teile ist libc.so.6 . Ein anderer ist ld-linux.so . Ein absoluter Pfad zu letzterem ist hart codiert in jede dynamische ausführbare Datei. Das Endergebnis: Wenn Sie eine eigene Kopie von libc.so.6 angeben und diese Kopie nicht mit /lib/ld-linux*.so.2 auf dem System übereinstimmt, werden Sie sehr seltsame Abstürze sehen, die Sie nur schwer erklären oder debuggen könnten .

  

Verknüpfen Sie die Bibliotheken statisch in der Binärdatei mit einer großen ausführbaren Datei.

Das kann auf keinem anderen UNIX-System als AIX funktionieren: Sie alle betrachten a.out und foo.so als endgültiges Linkprodukt, das nicht weiter verknüpft werden kann.

Es gibt einen Statistior , der eine (riesige) statische ausführbare Datei aus einer dynamischen erstellt. Ich habe keine Erfahrung damit.

    
Employed Russian 18.03.2013, 02:16
quelle