查找已编译的可执行文件的版本

时间:2018-12-12 10:54:14

标签: linux gcc ldd

我正在尝试创建一个检测二进制文件并获取编译它的版本的脚本。例如,如果我有一个用gcc编译的可执行文件,我想获取gcc的版本。我发现我可以使用Linux命令ldd来检查可执行文件,但是这样做是否有适当/更干净更好的方法?

据我了解,某些python文件也正在使用gcc进行编译。如何检测版本?

1 个答案:

答案 0 :(得分:1)

这取决于您正在查看的二进制格式。正如您提到的Linux,我假设使用ELF文件。

为此,您可以使用objdump -s --section .comment file

my_executable:     file format elf64-x86-64

Contents of section .comment:
 0000 4743433a 20285562 756e7475 20372e33  GCC: (Ubuntu 7.3
 0010 2e302d31 36756275 6e747533 2920372e  .0-16ubuntu3) 7.
 0020 332e3000                             3.0.

对于c,这看起来像

my_executable:     file format elf64-x86-64

Contents of section .comment:
 0000 4743433a 20285562 756e7475 20382e31  GCC: (Ubuntu 8.1
 0010 2e302d31 7562756e 74753129 20382e31  .0-1ubuntu1) 8.1
 0020 2e300063 6c616e67 20766572 73696f6e  .0.clang version
 0030 20362e30 2e302d31 7562756e 74753220   6.0.0-1ubuntu2
 0040 28746167 732f5245 4c454153 455f3630  (tags/RELEASE_60
 0050 302f6669 6e616c29 00                 0/final).

另一个难以解析的选项是使用strings

strings hyrise/build-clang/hyriseClient | grep clang
clang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final) | head -n 1

请注意,在Linux上,clang可能使用gcc中的ld,因此即使可执行文件是使用clang生成的,您也可能在输出中看到“ GCC”和“ clang”。