Я хотел бы получить версию GCC, используемую для компиляции данного исполняемого файла. Я попробовал readelf
но не получил информацию. Какие-либо мысли?
Эта информация не сохраняется в скомпилированном объекте (c).
На самом деле, с кодом на C вам совсем не повезло. Однако для кода C ++ вы можете найти некоторую информацию из версий символов. Некоторые функции из библиотек времени выполнения C ++ зависят от версии и помечены как таковые в объектных файлах. Попробуйте следующее:
readelf -Wa file.exe | grep 'GCC[[:alnum:]_.]*' --only-match | sort | uniq | tail -n 1
Однако он не покажет вам используемую версию GCC. Он показывает версию символов во время выполнения, предоставленную компилятору. Обычно среда выполнения - это среда поставки компилятора, а его версия не меньше , чем та, которая показана с помощью приведенной выше команды.
Чтобы завершить то, что говорили другие: он не хранится в объектном (или exe) файле, , если вы не компилируете с отладочной информацией ! (опция -g
). Если вы компилируете с отладочной информацией, вы можете вернуть ее с помощью readelf
:
$ cat a.c
int main(void){ return 0; }
$ gcc a.c
$ readelf -wi a.out
$ gcc a.c -g
$ readelf -wi a.out
Contents of the .debug_info section:
Compilation Unit @ offset 0x0:
Length: 0x42 (32-bit)
Version: 2
Abbrev Offset: 0
Pointer Size: 4
<0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
< c> DW_AT_producer : (indirect string, offset: 0x0): GNU C 4.4.3 20100108 (prerelease)
<10> DW_AT_language : 1 (ANSI C)
<11> DW_AT_name : a.c
<15> DW_AT_comp_dir : (indirect string, offset: 0x22): /tmp
<19> DW_AT_low_pc : 0x8048394
<1d> DW_AT_high_pc : 0x804839e
<21> DW_AT_stmt_list : 0x0
<1><25>: Abbrev Number: 2 (DW_TAG_subprogram)
<26> DW_AT_external : 1
<27> DW_AT_name : (indirect string, offset: 0x27): main
<2b> DW_AT_decl_file : 1
<2c> DW_AT_decl_line : 1
<2d> DW_AT_prototyped : 1
<2e> DW_AT_type : <0x3e>
<32> DW_AT_low_pc : 0x8048394
<36> DW_AT_high_pc : 0x804839e
<3a> DW_AT_frame_base : 0x0 (location list)
<1><3e>: Abbrev Number: 3 (DW_TAG_base_type)
<3f> DW_AT_byte_size : 4
<40> DW_AT_encoding : 5 (signed)
<41> DW_AT_name : int
Посмотрите, как написано GNU C 4.4.3 20100108 (предварительная версия)
.