fileコマンドでELFバイナリがLinux 2.6.9用であると表示されるのはなぜですか?


18

ELFバイナリでファイルを実行するたびに、次の出力が表示されます。

[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

Linux 2.6.9でこのバイナリが2.6.8で実行できなかったことで何が変わったのでしょうか?Linux 2.0ではELFサポートが追加されていませんか?

回答:


23

glibcには、--enable-kernelサポートされる最小カーネルバージョンを指定できるconfigureオプションがあります。オブジェクトファイルがそのglibcビルドとリンクされると、リンカーは、SHT_NOTEセクションを、.note.ABI-tagその最小カーネルバージョンを含む名前が付けられた実行可能ファイルに追加します。正確な形式はLSBで定義されておりfile、そのセクションを探すことと、その解釈方法を知っています。

特定のglibcが2.6.9を必要とするように構築された理由は、誰がそれを構築したかによって異なります。私のシステム(Gentoo)でも同じです。glibc ebuildのコメントでは、NPTLに最低限必要なため、2.6.9を指定していると言われています。もう1つ登場すると思われるのは2.4.1です。これは、NPTLより前に使用されていたパッケージであるLinuxThreadsに最低限必要だったためです。


最低限必要なカーネルバージョンを増やすと、パフォーマンスが向上しますか?そうすることの利点は何ですか?
アーロンフランケ

ここ(Fedora 31、x86_64)/lib/libc-2.30.soにはカーネル3.20が必要です(現在のカーネルバージョンは5.3.12-300です)
vonbrand
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.