如何查看程序被哪个版本编译器编译的linux-gcc http://bbs.csdn.net/topics/380000949
那是不可能的,除非你加入了调试信息,也就是编译的时候加入了-g参数,然后用gdb调试就可以显示。最大程度上查看一个elf文件信息。
{
readelf -Wa a.out | head
readelf -wi a.out
readelf -p .comment a.out
objdump -s --section .comment audioplayer
}
如下:
[root@localhost rootfs]# readelf -Wa bin/gzip
ELF Header: Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V ABI Version: 0 Type: EXEC (Executable file) Machine: ARM Version: 0x1 Entry point address: 0xa080 Start of program headers: 52 (bytes into file) Start of section headers: 1975444 (bytes into file) Flags: 0x5000002, has entry point, Version5 EABI Size of this header: 52 (bytes) Size of program headers: 32 (bytes) Number of program headers: 6 Size of section headers: 40 (bytes) Number of section headers: 25 Section header string table index: 24 Section Headers: [Nr] Name Type Addr Off Size ES Flg Lk Inf Al [ 0] NULL 00000000 000000 000000 00 0 0 0 [ 1] .note.ABI-tag NOTE 000080f4 0000f4 000020 00 A 0 0 4 [ 2] .init PROGBITS 00008114 000114 00000c 00 AX 0 0 4 [ 3] .text PROGBITS 00008120 000120 17fcfc 00 AX 0 0 16 [ 4] __libc_freeres_fn PROGBITS 00187e1c 17fe1c 000f20 00 AX 0 0 4 [ 5] __libc_thread_fre PROGBITS 00188d3c 180d3c 0000e4 00 AX 0 0 4 [ 6] .fini PROGBITS 00188e20 180e20 000008 00 AX 0 0 4 [ 7] .rodata PROGBITS 00188e28 180e28 058147 00 A 0 0 8 [ 8] __libc_subfreeres PROGBITS 001e0f70 1d8f70 00005c 00 A 0 0 4 [ 9] __libc_atexit PROGBITS 001e0fcc 1d8fcc 000004 00 A 0 0 4 [10] __libc_thread_sub PROGBITS 001e0fd0 1d8fd0 000008 00 A 0 0 4 [11] .ARM.extab PROGBITS 001e0fd8 1d8fd8 001b04 00 A 0 0 4 [12] .ARM.exidx ARM_EXIDX 001e2adc 1daadc 006ea8 00 AL 3 0 4 [13] .tdata PROGBITS 001f1984 1e1984 000018 00 WAT 0 0 4 [14] .tbss NOBITS 001f199c 1e199c 000034 00 WAT 0 0 4 [15] .init_array INIT_ARRAY 001f199c 1e199c 000004 00 WA 0 0 4 [16] .fini_array FINI_ARRAY 001f19a0 1e19a0 000008 00 WA 0 0 4 [17] .jcr PROGBITS 001f19a8 1e19a8 000004 00 WA 0 0 4 [18] .data.rel.ro PROGBITS 001f19ac 1e19ac 00002c 00 WA 0 0 4 [19] .got PROGBITS 001f19d8 1e19d8 00007c 04 WA 0 0 4 [20] .data PROGBITS 001f1a58 1e1a58 0008f7 00 WA 0 0 8 [21] .bss NOBITS 001f2350 1e234f 004828 00 WA 0 0 8 [22] __libc_freeres_pt NOBITS 001f6b78 1e234f 00003c 00 WA 0 0 4 [23] .ARM.attributes ARM_ATTRIBUTES 00000000 1e234f 00002b 00 0 0 1 [24] .shstrtab STRTAB 00000000 1e237a 000118 00 0 0 1 Section to Segment mapping: Segment Sections... 00 .ARM.exidx 01 .note.ABI-tag .init .text __libc_freeres_fn __libc_thread_freeres_fn .fini .rodata __libc_subfreeres __libc_atexit __libc_thread_subfreeres .ARM.extab .ARM.exidx 02 .tdata .init_array .fini_array .jcr .data.rel.ro .got .data .bss __libc_freeres_ptrs 03 .note.ABI-tag 04 .tdata .tbss Attribute Section: aeabi File Attributes Tag_CPU_name: "5TE" Tag_CPU_arch: v5TE Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-1 Tag_ABI_PCS_wchar_t: 4 Tag_ABI_FP_denormal: Needed Tag_ABI_FP_exceptions: Needed Tag_ABI_FP_number_model: IEEE 754 Tag_ABI_align8_needed: Yes Tag_ABI_align8_preserved: Yes, except leaf SP Tag_ABI_enum_size: int Tag_unknown_44: 1 (0x1)
How to retrieve the GCC version used to compile a given ELF executable? http://*.com/questions/2387040/how-to-retrieve-the-gcc-version-used-to-compile-a-given-elf-executable
QUES: I'd like to retrieve the GCC version used to compile a given executable. I tried readelf
but didn't get the information. Any thoughts?
ANS: To complete what others have said: it's not stored in the object (or exe) file, unless you compile with debugging information! (option -g
). If you compile with debug info, you can get it back with readelf
:
[root@localhost test]# gcc a.c [root@localhost test]# readelf -wi a.out [root@localhost test]# gcc a.c -g [root@localhost test]# readelf -wi a.out The section .debug_info contains: Compilation Unit @ offset 0x0: Length: 135 Version: 2 Abbrev Offset: 0 Pointer Size: 8 <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit) DW_AT_stmt_list : 0 DW_AT_high_pc : 0x400453 DW_AT_low_pc : 0x400448 DW_AT_producer : GNU C 4.1.2 20080704 (Red Hat 4.1.2-55) DW_AT_language : 1 (ANSI C) DW_AT_name : a.c DW_AT_comp_dir : /work/farsight/test <1><61>: Abbrev Number: 2 (DW_TAG_subprogram) DW_AT_external : 1 DW_AT_name : main DW_AT_decl_file : 1 DW_AT_decl_line : 4 DW_AT_prototyped : 1 DW_AT_type : <83> DW_AT_low_pc : 0x400448 DW_AT_high_pc : 0x400453 DW_AT_frame_base : 0 (location list) <1><83>: Abbrev Number: 3 (DW_TAG_base_type) DW_AT_name : int DW_AT_byte_size : 4 DW_AT_encoding : 5 (signed)
ANS2: