For programs, it appears in the .comment
section of ELF executables, if your system is using ELF.
$ cat main.c
int main() { }
$ gcc main.c
$ objdump -s -j .comment a.out
a.out: file format elf64-x86-64
Contents of section .comment:
0000 00474343 3a202844 65626961 6e20342e .GCC: (Debian 4.
0010 372e322d 35292034 2e372e32 00474343 7.2-5) 4.7.2.GCC
0020 3a202844 65626961 6e20342e 342e372d : (Debian 4.4.7-
0030 33292034 2e342e37 00 3) 4.4.7.
The compiler used to compile the kernel is available from the string in /proc/version
, for example:
$ cat /proc/version
Linux version 3.8.5 (...) (gcc version 4.7.2 (Debian 4.7.2-5) ) ...
A major caveat
The .comment
section is optional. Many distributions will strip it from the executable when the executable is bundled into a package. The section will be placed in a separate debug package.
For example, on my system:
$ objdump -s -j .comment /usr/lib/x86_64-linux-gnu/libcurl.so.4.2.0
/usr/lib/x86_64-linux-gnu/libcurl.so.4.2.0: file format elf64-x86-64
objdump: section '.comment' mentioned in a -j option, but not found in any input
file
After installing the libcurl3-dbg
package, we get an image with the stripped sections by following the GNU debug link:
$ objdump -s -j .comment \
/usr/lib/debug/.build-id/8c/4ae0ad17a4e76bab47c487047490061bd49de3.debug
/usr/lib/debug/.build-id/8c/4ae0ad17a4e76bab47c487047490061bd49de3.debug:
file format elf64-x86-64
Contents of section .comment:
0000 4743433a 20284465 6269616e 20342e37 GCC: (Debian 4.7
0010 2e322d35 2920342e 372e3200 .2-5) 4.7.2.