gcc version

10 отговора 257 прегледа
#1

gcc version

Може ли някой да ми каже как да разбера с коя версия на gcc е компилирана дадена програма?

Четох някъде, че Mozilla-та е компилирана с 2.96 в новите Mdk и RH, вместо с 3.2, понеже иначе не работела Java-та. Реших да проверя дали е така, ама ударих на камък. Пробвах какво ли не - strings и търсене на 'gcc', info-то на gdb, nm, objdump, какво ли още не... Явно нещо пропускам.

Отговор
в отговор на hoopla #2

Re: gcc version

to e malko trudno da se razbere - zashtoto mozhe da ima ili izpolzwa biblioteki kompilirani s drug fail... No za wseki fail mozhe da se widi s kakvo e bil kompiliran (ili pone sekcia)... I az ne sum mnogo siugren - no mi beshe interesno - i sega probvah slednoto (wurhu edna igra kojato imam tuka wuw /usr/bin/Maelstrom)


malkia:/usr/bin> readelf -a Maelstrom | less


otzade mi dade slednata informatzia:


Version symbols section '.gnu.version' contains 125 entries:
Addr: 0000000008049346 Offset: 0x001346 Link: 4 (.dynsym)
000: 0 (*local*) 0 (*local*) 0 (*local*) 0 (*local*)
004: 2 (GLIBC_2.0) 2 (GLIBC_2.0) 0 (*local*) 0 (*local*)
008: 0 (*local*) 0 (*local*) 0 (*local*) 0 (*local*)
00c: 1 (*global*) 2 (GLIBC_2.0) 0 (*local*) 0 (*local*)
010: 0 (*local*) 0 (*local*) 0 (*local*) 2 (GLIBC_2.0)
014: 0 (*local*) 2 (GLIBC_2.0) 0 (*local*) 2 (GLIBC_2.0)
018: 2 (GLIBC_2.0) 2 (GLIBC_2.0) 2 (GLIBC_2.0) 0 (*local*) 2 (GLIBC_2.0) 3 (GLIBC_2.1.3) 0 (*local*)
020: 0 (*local*) 0 (*local*) 4 (GLIBCPP_3.2) 5 (GLIBC_2.0)
024: 2 (GLIBC_2.0) 0 (*local*) 2 (GLIBC_2.0) 0 (*local*)
028: 0 (*local*) 0 (*local*) 2 (GLIBC_2.0) 1 (*global*)
02c: 0 (*local*) 0 (*local*) 0 (*local*) 2 (GLIBC_2.0)
030: 0 (*local*) 0 (*local*) 2 (GLIBC_2.0) 2 (GLIBC_2.0)
034: 4 (GLIBCPP_3.2) 0 (*local*) 0 (*local*) 0 (*local*)
038: 0 (*local*) 2 (GLIBC_2.0) 0 (*local*) 2 (GLIBC_2.0)
03c: 2 (GLIBC_2.0) 2 (GLIBC_2.0) 2 (GLIBC_2.0) 0 (*local*)
040: 0 (*local*) 0 (*local*) 0 (*local*) 2 (GLIBC_2.0)
044: 0 (*local*) 2 (GLIBC_2.0) 2 (GLIBC_2.0) 0 (*local*)
048: 0 (*local*) 2 (GLIBC_2.0) 0 (*local*) 6 (CXXABI_1.2)
04c: 2 (GLIBC_2.0) 1 (*global*) 0 (*local*) 0 (*local*)
050: 2 (GLIBC_2.0) 0 (*local*) 0 (*local*) 4 (GLIBCPP_3.2)
054: 2 (GLIBC_2.0) 1 (*global*) 2 (GLIBC_2.0) 0 (*local*)
058: 7 (GLIBC_2.1) 2 (GLIBC_2.0) 2 (GLIBC_2.0) 0 (*local*)
05c: 2 (GLIBC_2.0) 2 (GLIBC_2.0) 2 (GLIBC_2.0) 0 (*local*)
060: 0 (*local*) 2 (GLIBC_2.0) 1 (*global*) 1 (*global*)
064: 1 (*global*) 2 (GLIBC_2.0) 2 (GLIBC_2.0) 0 (*local*)
068: 0 (*local*) 2 (GLIBC_2.0) 7 (GLIBC_2.1) 8 (GCC_3.0)
06c: 0 (*local*) 0 (*local*) 1 (*global*) 4 (GLIBCPP_3.2)
070: 0 (*local*) 0 (*local*) 4 (GLIBCPP_3.2) 2 (GLIBC_2.0)
074: 0 (*local*) 2 (GLIBC_2.0) 0 (*local*) 0 (*local*)
078: 2 (GLIBC_2.0) 4 (GLIBCPP_3.2) 0 (*local*) 0 (*local*)
07c: 2 (GLIBC_2.0)

Version needs section '.gnu.version_r' contains 4 entries:
Addr: 0x0000000008049440 Offset: 0x001440 Link to section: 5 (.dynstr)
000000: Version: 1 File: libgcc_s.so.1 Cnt: 1
0x0010: Name: GCC_3.0 Flags: none Version: 8
0x0020: Version: 1 File: libpthread.so.0 Cnt: 1
0x0030: Name: GLIBC_2.0 Flags: none Version: 5
0x0040: Version: 1 File: libstdc++.so.5 Cnt: 2
0x0050: Name: CXXABI_1.2 Flags: none Version: 6
0x0060: Name: GLIBCPP_3.2 Flags: none Version: 4
0x0070: Version: 1 File: libc.so.6 Cnt: 3
0x0080: Name: GLIBC_2.1 Flags: none Version: 7
0x0090: Name: GLIBC_2.1.3 Flags: none Version: 3
0x00a0: Name: GLIBC_2.0 Flags: none Version: 2


izglezhda sus dosta razlichni versii i neshta e kompilirana....

tirulirutatuutuu
Отговор
в отговор на hoopla #3

Re: gcc version

Аз ползвам нещо от типа на
objdump -j .comment -s ./a.out
не е кой знае какво ама е повече от нищо. А readelf дето malkia я споменава явно не върви със стандартната дистрибуция на Slackware, та ще трябва да я търся на freshmeat.

Отговор
в отговор на malkia #4

Re: gcc version

$ readelf -a /usr/lib/mozilla-1.1/mozilla-bin | grep gcc

Горното нищо не дава.

$ readelf -a /usr/bin/galeon-bin | grep gcc
[17] .gcc_except_table PROGBITS 08111bb0 0c9bb0 0089d8 00 WA 0 0 4
03 .data .eh_frame .gcc_except_table .dynamic .ctors .dtors .got .bss

И това не помага много. Пробвах и с 'GCC' вместо 'gcc' - тц.

Отговор
в отговор на Penguin #5

Re: gcc version

$ objdump -j .comment -s /usr/bin/galeon-bin

/usr/bin/galeon-bin: file format elf32-i386


$ objdump -j .comment -s /usr/lib/mozilla-1.1/mozilla-bin

/usr/lib/mozilla-1.1/mozilla-bin: file format elf32-i386

От нийде надежда взорът не види :)

Отговор
в отговор на hoopla #6

Re: gcc version

Кофти. Явно действат на принципа няма .comment, няма го и проблема :-)
За момента единственото което ми хрумва е пробваш с някоя програма дето
може по генерирания код да определи компилатора. За момента единствената за която се сещам е IDA PRO. Има я на
[линк]. Шансовете са минимални, но все пак... Ако се сетя за нещо друго ще постна едно съобщение тук.

Отговор
в отговор на hoopla #7

Още идея

намираш си SRPM, намираш make-файловете в него, или изобщо разбираш как се build-ва binary-то, и от какво зависи - и те нещата ще излязат

Пролетта е дяволски далече............
Отговор
в отговор на Яceн #8

Re: Още идея

ili puk kompilirash s dve razlichni versii na GCC - 2.95.3 i 2.95.2 i gledash kakva e razlikata - ama instaliraneto na dve razlichni versii na GCC si e druga hamalogia

tirulirutatuutuu
Отговор
в отговор на hoopla #9

Re: gcc version

Аз съм със Slack и съм си компилирал mozilla-1.1 с gcc-3.2. При изпълнение на горната комадка получавам следните редове:

000000: Version: 1 File: libc.so.6 Cnt: 1
0x0010: Name: GLIBC_2.0 Flags: none Version: 3
0x0020: Version: 1 File: libstdc++.so.5 Cnt: 2
0x0030: Name: GLIBCPP_3.2 Flags: none Version: 4
0x0040: Name: CXXABI_1.2 Flags: none Version: 2

Където "GLIBCPP_3.2" означава, най-вероятно предпроцесора с верията на компилатора, а "Version: 1 File: libstdc++.so.5" е сдандартната c++ библиотека с която е линкнат (libstdc++.so.5 идва с gcc-3.2).
Така, че виж какво ти дава за версията на предпроцесора.

Отговор
в отговор на p_t_n #10

Re: gcc version

wsushnost mislja che e wuzmozhno polovinata mozilla (pone chisto C koda) da se kompilira s edin kompilator, ostanalata s drug. Ako sa C++ mozhe da ima nesuwmestimost - otkum ABI-to...

zatova e malko trudno da se otgovori na podobno neshto kato che li....

Drug variant e naprimer da se razgleda kato HEX faila - tam otkrih na edno mjasto mnogo "GCC 3.2" stringove + GCC 2.95.2 i GCC 2.95.3 (mi se struva).

tirulirutatuutuu
Отговор
в отговор на malkia #11

Re: gcc version

> Drug variant e naprimer da se razgleda kato HEX faila - tam otkrih na edno mjasto mnogo "GCC 3.2" stringove + GCC 2.95.2 i GCC 2.95.3 (mi se struva).
"Едното място" с многото gcc стрингове най-вероятно е .comment секцията, ама във файла на hoopla, просто е изрязана за пестене на място.

Отговор