我有以下问题:我有一个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
我在这里缺少什么?还有其他方法可以实现我的目标吗?
答案 0 :(得分:2)
我希望结果为False,对于准备运行的二进制文件,我希望为True。
通常,您的目标是无法实现的:可以构建一个可以运行的库(例如,在Linux上为/lib64/libc.so.6
),还可以构建一个即使报告{{1}也会在启动时崩溃的可执行文件。 }。
尝试运行任何二进制文件也是 ill 的建议,除非您知道该二进制文件来自何处以及其预期的执行结果是什么。
我在这里想念什么
正如this answer所解释的那样,许多最新的Linux发行版默认情况下都会构建PIE可执行文件。
还有其他方法可以实现我的目标吗?
请参见this answer。