.elf格式内容

时间:2022-09-24 15:19:42

arm-linux-ld

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

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

首先:

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

产生led.o文件

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

产生.elf格式的文件

然后通过:

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

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

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

.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格式内容的更多相关文章

  1. 可执行文件(ELF)格式之讲解

    ELF(Executable and Linking Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西.以及都以什么样的格式去放这些东西.它自 ...

  2. Hex、bin、axf、elf格式文件小结

    转自Hex.bin.axf.elf格式文件小结 一.HEX Hex文件,一般是指Intel标准的十六进制文件.Intelhex 文件常用来保存单片机或其他处理器的目标程序代码.它保存物理程序存储区中的 ...

  3. elf格式分析

    近期研究了一下elf文件格式,发现好多资料写的都比較繁琐,可能会严重打击学习者的热情,我把自己研究的结果和大家分享,希望我的描写叙述可以简洁一些. 一.基础知识 elf是一种文件格式,用于存储Linu ...

  4. 初识ELF格式 ABI,EABI,OABI

    尽管每天都在调用linux的elf文件做各种事,但却很少去了解他,最近尝试在orangepi上编译个elf到android手机上运行,因为两个CPU都是ARMv8的.结果运行失败了.遂查找原因.结果挖 ...

  5. ELF格式文件分析以及运用

    基于本文的一个实践<使用Python分析ELF文件优化Flash和Sram空间的案例>. 1.背景 ELF是Executable and Linkable Format缩写,其官方规范在& ...

  6. ELF格式探析之三:sections

    前文链接: ELF格式探析之一:Segment和Section ELF格式探析之二:文件头ELF Header详解 今天我们讲对目标文件(可重定位文件)和可执行文件都很重要的section. 我们在讲 ...

  7. ELF格式文件符号表全解析及readelf命令使用方法

    http://blog.csdn.net/edonlii/article/details/8779075 1. 读取ELF文件头: $ readelf -h signELF Header:  Magi ...

  8. Linux ELF格式分析

    http://www.cnblogs.com/hzl6255/p/3312262.html ELF, Executable and Linking Format, 是一种用于可执行文件.目标文件.共享 ...

  9. Lab&lowbar;1:练习4——分析bootloader加载ELF格式的OS的过程

    一.实验内容 通过阅读bootmain.c,了解bootloader如何加载ELF文件.通过分析源代码和通过qemu来运行并调试bootloader&OS, bootloader如何读取硬盘扇 ...

随机推荐

  1. 关于Block的简单使用

    Block在整个iOS开发中无所不见,很重要,很重要,文本在这里block的简单使用介绍.我们可以简单地定义.使用block. 1. Block和C的指针函数很像,但比C的函数灵活多了.废话了.... ...

  2. viewBox A-Z滚动样式

    效果图:       代码实现 (其中使用了ionic框架...) html 代码: <ion-content class='page-location'> <div class=' ...

  3. UIGestureRecognizer ios手势识别温习

    1.UIGestureRecognizer介绍 手势识别在iOS上非常重要,手势操作移动设备的重要特征,极大的增加了移动设备使用便捷性. iOS系统在3.2以后,为方便开发这使用一些常用的手势,提供了 ...

  4. geeksforgeeks&commat; Largest Number formed from an Array

    http://www.practice.geeksforgeeks.org/problem-page.php?pid=380 Largest Number formed from an Array G ...

  5. COCOS2D-X 精灵创建随笔

    CCSprite类中创建Sprite的方法都是静态的: static CCSprite* create ( )  创建一个无图片显示的精灵,可随后用 setTexture 方法设置显示图片 stati ...

  6. JS中特殊句子-with

    1 with 语句 为一个或一组语句指定默认对象. 用法:with (<对象>) <语句>; with 语句通常用来缩短特定情形下必须写的代码量.在下面的例子中,请注意 Mat ...

  7. 超赞的OOM检测(除了mat以外)

    今天看了下微博,扔物线分享了个内存检测的工具: 内存泄露是 OOM 最常见的原因,但它的侦测需人工排查,往往眼看瞎也未必能找到泄露的内存.Square 新库 LeakCanary 用一种巧妙的思路实现 ...

  8. Kotlin 继承

    Kotlin 中所有类都继承该 Any 类,它是所有类的超类,对于没有超类型声明的类是默认超类: class Example // 从 Any 隐式继承 Any 默认提供了三个函数: equals() ...

  9. python标准库之random模块

    Python中的random模块用于生成随机数. 下面具体介绍random模块的功能: 1.random.random() #用于生成一个0到1的 随机浮点数:0<= n < 1.0 1 ...

  10. C&num; redis简单的使用

    1.项目一:用于在Redis中添加数据 using System; using System.Collections.Generic; using System.Linq; using System. ...