То, как получить версию GCC, раньше компилировало данный исполняемый файл ELF?

Я хотел бы получить версию GCC, используемую для компиляции данного исполняемого файла. Я попробовал readelf но не получил информацию. Какие-либо мысли?

67
задан Daniel Serodio 13 August 2014 в 18:02
поделиться

2 ответа

Эта информация не сохраняется в скомпилированном объекте (c).

На самом деле, с кодом на C вам совсем не повезло. Однако для кода C ++ вы можете найти некоторую информацию из версий символов. Некоторые функции из библиотек времени выполнения C ++ зависят от версии и помечены как таковые в объектных файлах. Попробуйте следующее:

readelf -Wa file.exe | grep 'GCC[[:alnum:]_.]*' --only-match | sort | uniq | tail -n 1

Однако он не покажет вам используемую версию GCC. Он показывает версию символов во время выполнения, предоставленную компилятору. Обычно среда выполнения - это среда поставки компилятора, а его версия не меньше , чем та, которая показана с помощью приведенной выше команды.

2
ответ дан 24 November 2019 в 14:41
поделиться

Чтобы завершить то, что говорили другие: он не хранится в объектном (или 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 (предварительная версия) .

20
ответ дан 24 November 2019 в 14:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: