Warum sollte der ELF-Header einer gemeinsam genutzten Bibliothek Linux als OSABI angeben?

8

Alle standardmäßigen gemeinsamen Bibliotheken auf meinem Linux-System (Fedora 9) geben ELFOSABI_NONE (0) als ihr OSABI an.

Das ist in Ordnung - aber ich habe eine gemeinsam genutzte Bibliothek von einem Lieferanten erhalten, wo das OSABI in der ELF-Kopfzeile ELFOSABI_LINUX (3) ist.

Das klingt nicht wie ein unvernünftiger Wert für eine gemeinsam genutzte Bibliothek, die für ein Linux-System gedacht ist, aber es ist ein anderer Wert als alle anderen Bibliotheken - und wenn ich versuche, es zu öffnen Diese Bibliothek, mit Dlopen (), aus einer meiner anderen Bibliotheken schlägt dies mit dem Fehler "ELF-Datei OS ABI ungültig".

Ich habe das FreeBSD-Dienstprogramm brandelf.c zusammengestellt und benutzte es, um den OSABI-Typ auf 0 zu setzen und nun scheint die Bibliothek zu sein, um mit allem anderen gut zu spielen.

Ich frage mich nur - warum denken Sie, dass diese Bibliothek als ELFOSABI_LINUX markiert ist? Ich nehme an, vielleicht kreuzten sie sich kompiliert auf einem anderen System und spezifizierten irgendein gcc Markierungszeichen, das diesen Wert veranlaßte, in den ELF Vorsatz eingestellt zu werden? Ich habe versucht, etwas Ähnliches zu erreichen, konnte aber nicht die passenden gcc Flags oder Flags bestimmen.

Ich würde gerne wissen, was die wahrscheinliche Ursache ist, da dieser bestimmte Lieferant nichts tun wird, ohne viel Hand zu halten und ich würde gerne sagen können: "Du machst wahrscheinlich X, aber das bedeutet, dass wir müssen Ändern Sie Ihre Bibliotheken, nachdem wir sie erhalten haben. "

    
George Hawkins 07.01.2010, 14:31
quelle

1 Antwort

4

Möglicherweise kompiliert der Hersteller auf FreeBSD oder verwendet ein sehr neues Fedora-System, bei dem alles, was STT_GNU_IFUNC verwendet, als ELFOSABI_LINUX markiert wird. Wenn Sie versuchen, es unter Linux zu verwenden, sollte es keine Probleme geben, es auf ELFOSABI_NONE zu ändern, wie Sie es getan haben.

    
Ronny Vindenes 07.01.2010, 15:32
quelle

Tags und Links