我正在尝试创建一个检测二进制文件并获取编译它的版本的脚本。例如,如果我有一个用gcc
编译的可执行文件,我想获取gcc
的版本。我发现我可以使用Linux命令ldd
来检查可执行文件,但是这样做是否有适当/更干净更好的方法?
据我了解,某些python文件也正在使用gcc
进行编译。如何检测版本?
答案 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”。