每当我在 ELF 二进制文件上运行 file 时,我都会得到以下输出:
[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支持吗?
答案1
glibc
有一个名为的配置选项--enable-kernel
,可让您指定支持的最低内核版本。当目标文件与该 glibc 版本链接时,链接器将 SHT_NOTE 部分添加到.note.ABI-tag
包含该最低内核版本的生成的可执行文件中。确切的格式定义在最低有效位,并且file
知道寻找该部分以及如何解释它。
您的特定 glibc 构建为需要 2.6.9 的原因取决于构建它的人。我的系统(Gentoo)也是如此; glibc ebuild 中的注释说它指定了 2.6.9,因为它是 2.6.9 所需的最低版本NPTL,所以这可能是一个常见的选择。另一种是似乎出现了是 2.4.1,因为它是最低要求Linux线程, NPTL之前使用的包