当使用file命令检查二进制文件的属性时,我注意到这样的输出:
$ file /bin/ls
ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=9567f9a28e66f4d7ec4baf31cfbf68d0410f0ae6, stripped
$ file /bin/pwd
pwd: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=fb34777a0e4532338c1f64bec0a8372ee619b9e7, stripped
$ uname -sr
Linux 4.19.9-arch1-1-ARCH
输出中有“ for GNU / linux 3.2.0”。
我已经在Ubuntu 18.04(内核版本4.15)和Arch linux(内核版本4.19)上进行了测试,但是对于系统二进制文件,文件属性始终为“ linux 3.2.0”。
我想知道这个标记是什么意思,为什么它与系统内核版本不一致?
答案 0 :(得分:1)
此标记显示ELF二进制文件是使用glibc编译的,该glibc生成需要运行此特定minimun linux内核版本的二进制文件。 版本号是使用配置选项-enable-kernel 在glibc的compile time上设置的,并由链接程序在二进制文件的SHT_NOTE部分复制(通过file命令从此处读取)