确定elf文件是可执行文件还是库

时间:2018-07-04 00:44:17

标签: linux elf

我有以下问题:我有一个elf文件,我想知道该elf文件是否可以作为独立的可执行文件运行。因此,对于共享库,例如.so文件,我希望将False作为结果,对于现成的二进制文件,我希望将True作为输出。我试图利用file来实现这一点,但是显然所提供的信息是不够的。考虑

file /usr/bin/sudo /usr/bin/sudo: setuid ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=3e4fbfd5a73126630bcc22d5dee68c32e2813566, stripped

我实际上期望输出为ELF 64-bit LSB executable,例如gcc编译器:

file /usr/bin/gcc-5 /usr/bin/gcc-5: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=b3417f0bc306e9b0afe35e778b5e4702f2d22b26, stripped

我在这里缺少什么?还有其他方法可以实现我的目标吗?

1 个答案:

答案 0 :(得分:2)

  

我希望结果为False,对于准备运行的二进制文件,我希望为True。

通常,您的目标是无法实现的:可以构建一个可以运行的库(例如,在Linux上为/lib64/libc.so.6),还可以构建一个即使报告{{1}也会在启动时崩溃的可执行文件。 }。

尝试运行任何二进制文件也是 ill 的建议,除非您知道该二进制文件来自何处以及其预期的执行结果是什么。

  

我在这里想念什么

正如this answer所解释的那样,许多最新的Linux发行版默认情况下都会构建PIE可执行文件。

  

还有其他方法可以实现我的目标吗?

请参见this answer