Поиск версии скомпилированного исполняемого файла - PullRequest
0 голосов
/ 12 декабря 2018

Я пытаюсь создать скрипт, который обнаруживает двоичные файлы и получает версию, которая его скомпилировала.Например, если у меня есть исполняемый файл, скомпилированный с gcc, я бы хотел получить версию gcc.Я обнаружил, что могу использовать команду Linux ldd для проверки исполняемого файла, но есть ли подходящий / более чистый и лучший способ сделать это?

Также, как я понимаю, некоторые из файлов python также компилируются с gcc.Как я могу определить версию?

1 Ответ

0 голосов
/ 12 декабря 2018

Это зависит от двоичного формата, который вы просматриваете.Поскольку вы упоминаете 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.

Для Clang это выглядит как

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 может использовать ld из gcc, поэтому даже если исполняемый файл был собран с использованием clang, вы можете увидеть как "GCC", так и "clang" в выводе.

...