.elf格式内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.elf格式内容相关的知识,希望对你有一定的参考价值。

arm-linux-ld

可以将程序链接成我们arm平台下的可运行的程序

以之前使用过的led程序为例:

 

首先:

 

1 arm-linux-gcc -g -c led.S (-g是表示产生调试信息, -c是表示只编译不链接)

 

产生led.o文件

 

1 arm-linux-ld -Tled.lds -o led.elf led.o

产生.elf格式的文件

 

然后通过:

arm-linux-readelf命令:读出.elf的详细内容:

 

1 arm-linux-readelf -a led.elf(显示所有的log信息)

 

 摘网上一幅图显示.elf格式的内容:

技术分享

 

(该图片使用的是Linux C编程作者 宋劲斌的图片)

log信息:(红色的自己修改的

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(可运行在ARM平台上)

  Version:                           0x1

  Entry point address:               0xd0020000

  Start of program headers:          52 (bytes into file)

  Start of section headers:          33192 (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:         1

  Size of section headers:           40 (bytes)

  Number of section headers:         10

  Section header string table index: 7

 

Section Headers:

  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al

  [ 0]                   NULL            00000000 000000 000000 00      0   0  0

  [ 1] .text             PROGBITS        d0020000 008000 00004c 00  AX  0   0  4

  [ 2] .ARM.attributes   ARM_ATTRIBUTES  00000000 00804c 000018 00      0   0  1

  [ 3] .debug_line       PROGBITS        00000000 008064 000045 00      0   0  1

  [ 4] .debug_info       PROGBITS        00000000 0080a9 000061 00      0   0  1

  [ 5] .debug_abbrev     PROGBITS        00000000 00810a 000014 00      0   0  1

  [ 6] .debug_aranges    PROGBITS        00000000 008120 000020 00      0   0  8

  [ 7] .shstrtab         STRTAB          00000000 008140 000066 00      0   0  1

  [ 8] .symtab           SYMTAB          00000000 008338 0000e0 10      9  11  4

  [ 9] .strtab           STRTAB          00000000 008418 000033 00      0   0  1

Key to Flags:

  W (write), A (alloc), X (execute), M (merge), S (strings)

  I (info), L (link order), G (group), x (unknown)

  O (extra OS processing required) o (OS specific), p (processor specific)

 

There are no section groups in this file.

 

Program Headers:

  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align

  LOAD           0x008000 0xd0020000 0xd0020000 0x0004c 0x0004c R E 0x8000

 

 Section to Segment mapping:

  Segment Sections...

   00     .text

 

There is no dynamic section in this file.

 

There are no relocations in this file.

 

There are no unwind sections in this file.

 

Symbol table ‘.symtab‘ contains 14 entries:

   Num:    Value  Size Type    Bind   Vis      Ndx Name

     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND

     1: d0020000     0 SECTION LOCAL  DEFAULT    1

     2: 00000000     0 SECTION LOCAL  DEFAULT    2

     3: 00000000     0 SECTION LOCAL  DEFAULT    3

     4: 00000000     0 SECTION LOCAL  DEFAULT    4

     5: 00000000     0 SECTION LOCAL  DEFAULT    5

     6: 00000000     0 SECTION LOCAL  DEFAULT    6

     7: d0020000     0 NOTYPE  LOCAL  DEFAULT    1 $a

     8: d0020008     0 NOTYPE  LOCAL  DEFAULT    1 led_debug

     9: d0020004     0 NOTYPE  LOCAL  DEFAULT    1 MAIN_LOOP

    10: d0020044     0 NOTYPE  LOCAL  DEFAULT    1 $d

    11: d0020000     0 NOTYPE  GLOBAL DEFAULT    1 _start

    12: d002004c     0 NOTYPE  GLOBAL DEFAULT  ABS __bss_start

    13: d002004c     0 NOTYPE  GLOBAL DEFAULT  ABS _end

 

No version information found in this file.

Attribute Section: aeabi

File Attributes

  Tag_CPU_name: "4T"

  Tag_CPU_arch: v4T

  Tag_ARM_ISA_use: Yes

 

 

log信息:

  Tag        Type                         Name/Value

 0x00000001 (NEEDED)         Shared library: [libc.so.6](这就是需要用到的库) 0x0000000c (INIT)                        0x8274

 0x0000000d (FINI)                       0x841c

 0x00000019 (INIT_ARRAY)                 0x10448

 0x0000001b (INIT_ARRAYSZ)               4 (bytes)

 0x0000001a (FINI_ARRAY)                 0x1044c

 0x0000001c (FINI_ARRAYSZ)               4 (bytes)

 0x00000004 (HASH)                       0x8168

 0x00000005 (STRTAB)                     0x81e0

 0x00000006 (SYMTAB)                     0x8190

 0x0000000a (STRSZ)                      65 (bytes)

 0x0000000b (SYMENT)                     16 (bytes)

 0x00000015 (DEBUG)                      0x0

 0x00000003 (PLTGOT)                     0x1053c

 0x00000002 (PLTRELSZ)                   32 (bytes)

 0x00000014 (PLTREL)                     REL

 0x00000017 (JMPREL)                     0x8254

 0x00000011 (REL)                        0x824c

 0x00000012 (RELSZ)                      8 (bytes)

 0x00000013 (RELENT)                     8 (bytes)

 0x6ffffffe (VERNEED)                    0x822c

 0x6fffffff (VERNEEDNUM)                 1

 0x6ffffff0 (VERSYM)                     0x8222

 0x00000000 (NULL)                       0x0

 

以上是关于.elf格式内容的主要内容,如果未能解决你的问题,请参考以下文章

-bash: /usr/bin/ls: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory(代码片段

ELF文件格式分析

剖析.o文件ELF组成

ELF文件格式

ELF文件格式简介

ELF文件格式简介