Warum besagt der Dateibefehl, dass ELF-Binärdateien für Linux 2.6.9 sind?

18

Immer wenn ich eine ELF-Binärdatei starte, erhalte ich folgende Ausgabe:

[jonescb@localhost ~]$ file a.out
a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for
GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, 
not stripped

Ich frage mich nur, was sich in Linux 2.6.9 geändert hat, dass diese Binärdatei unter 2.6.8 nicht ausgeführt werden konnte. Wurde in Linux 2.0 keine ELF-Unterstützung hinzugefügt?

jonescb
quelle

Antworten:

23

glibchat eine Konfigurationsoption mit dem Namen --enable-kernel, mit der Sie die minimale unterstützte Kernelversion angeben können. Wenn Objektdateien mit diesem glibc-Build verknüpft sind, fügt der Linker der resultierenden ausführbaren Datei mit dem Namen einen SHT_NOTE-Abschnitt hinzu, der die .note.ABI-tagKernel-Mindestversion enthält. Das genaue Format ist im LSB definiert und muss filenach diesem Abschnitt suchen und ihn interpretieren.

Der Grund, warum Ihre spezielle Glibc 2.6.9 benötigt, hängt davon ab, wer sie erstellt hat. Auf meinem System (Gentoo) ist es dasselbe. Ein Kommentar im glibc-Ebuild besagt, dass 2.6.9 spezifiziert ist, da dies das für die NPTL erforderliche Minimum ist. Daher ist dies wahrscheinlich eine häufige Wahl. Ein weiteres Problem scheint 2.4.1 zu sein, da dies das für LinuxThreads , das vor NPTL verwendete Paket, erforderliche Minimum war

Michael Mrozek
quelle
Erzielen Sie Leistungsverbesserungen, wenn Sie die minimal erforderliche Kernelversion erhöhen? Was sind die Vorteile davon?
Aaron Franke
Hier (Fedora 31, x86_64) benötigt /lib/libc-2.30.so Kernel 3.20 (aktuelle Kernel-Version ist 5.3.12-300)
vonbrand