• 如何查看程序被哪个版本编译器编译的linux-gcc


    如何查看程序被哪个版本编译器编译的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://stackoverflow.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:

     

  • 相关阅读:
    springboot整合springmvc应用
    spring注解使用
    亨元模式 四大引用 逃逸引用 池化思想
    springboot整合连接池
    springboot整合mybatis(待更新)
    php安装imagick扩展
    js复制功能代码
    PHP7兼容mysql_connect的方法
    linux开机启动
    centos8安装php扩展memcached报错
  • 原文地址:https://www.cnblogs.com/mylinux/p/5836795.html
Copyright © 2020-2023  润新知