.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

时间: 2024-10-07 20:43:10

.elf格式内容的相关文章

ELF格式的重定位原理分析

前面有篇文章分析了ELF格式,也只是让我们对目标文件有了一个大概的了解,并没有说明一个十分重要的问题:重定位,今天重新看了下重定位的资料,终于弄懂了重定位的过程,下面来做一个分析. 我们将使用下面两个源代码中的文件a.c和b.c展开分析: //a.c extern int shared; int main() { int a=100; swap(&a,&shared); } //b.c int shared=1; void swap(int *a,int *b) { *a^=*b^=*a^

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

http://blog.csdn.net/edonlii/article/details/8779075 1. 读取ELF文件头: $ readelf -h signELF Header:  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00  Class:                                                  ELF64  Data:                            

ELF格式的组成结构

LF指的是Executable and Linkable Format.最初是由UNIX系统实验室作为应用程序二进制接口开发和发行的,后来逐渐发展成为了可执行文件的格式标准,在很多操作系统和非操作系统环境中都有非常广泛的应用.完整的ELF格式标准涉及了三个方面的内容.在这里我们只需要关心一个方面,那就是一个ELF格式可执行程序的组成结构. 一个ELF可执行文件格式如图8-1所示. 像图8-1那样,一个ELF可执行文件包含了一个描述全局信息的ELF文件头.若干个Program头.若干个Segmen

elf格式分析

近期研究了一下elf文件格式,发现好多资料写的都比較繁琐,可能会严重打击学习者的热情,我把自己研究的结果和大家分享,希望我的描写叙述可以简洁一些. 一.基础知识 elf是一种文件格式,用于存储Linux程序. 它内部都有一些什么信息呢?大概包含编制好的计算机指令,数据,计算机在须要的时候把这个文件读取到内存中,cpu就能够从内存中一条一条的读取指令来运行了. 所以说想明确elf格式,我们应该了解一下计算机运行程序须要那些信息.所以这一节,我们补充一些计算机系统的基础知识. 进程和虚拟内存: Li

linux下的ELF格式分析

ELF格式文档详解 一,ELF格式综述 ELF(Executable and Linkable Format)是Linux下的一种格式标准,Linux中的ELF格式文件一共有四种: ●可重定位文件(Relocatable File):这类文件包含了代码和数据,可被用来链接成可执行文件或者共享目录文件,扩展名为.o ●可执行文件(Executable File):这类文件包含了可以直接执行的程序,一般没有扩展名 ●共享目录文件(Shared Object File):这类文件包含了代码和数据,扩展

在ASP.NET MVC中使用Knockout实践04,控制View Model的json格式内容

通常,需要把View Model转换成json格式传给服务端.但在很多情况下,View Model既会包含字段,还会包含方法,我们只希望把字段相关的键值对传给服务端. 先把上一篇的Product转换成json格式,通过pre元素显示出来. <input data-bind="value: name"/><hr/> <select data-bind="options: categories, value: category" >&

C#深入解析Json格式内容

继上一篇<浅谈C#手动解析Json格式内容>我又来分析加入了一些功能让 这个解析类更实用 本章节最会开放我最终制作成功的Anonymous.Json.dll这个解析库 需要的拿走~ 功能继上一篇增加了许多上一篇只是讲述了  解析的步骤但是 至于一些扩展的功能却没有涉及 本文将继续讲解 1.如何将json转换为一个类或者结构 甚至属性 2.如何将一个类或者结构甚至属性转换为json 就这两点就已经很头疼了 诶 废话不多说进入正题 上一篇一直有个很神秘的JsonObject没有讲解 现在先来揭开J

ELF格式解析库之抽象数据类型

抽象?抽谁的象? ELF是一种链接执行格式,它规定了对于一个ELF文件的基本数据类型是什么样的.可是,要解析一个ELF文件,而这个ELF文件或者是32Bits 或者是 64Bits,反正字长是未定的,怎么办?难道我们要定义两套解析的接口,以对应不同的字长的ELF文件吗?如果要这样做,不是不可以,只是那样做为接口的设计增加了太大的负担.这里我们采用"抽象"的方式,将已有的两套基础数据结构封装成一个兼容的数据结构.这样,我们设计解析接口时,可以做到尽量的简化,大大的减轻了工作量. 因此,这

检查打开的文件是不是ELF格式的文件,提取“特别”的节中的信息

//检查打开的文件是不是ELF格式的文件 //检验ELF头 //获得节头表的地址 //遍历节头表,依次查看一个节的属性,从节头字符串表中找到其名称,如果名称和"特别"的section名匹配,则找到此节的地址 //提取"特别"的节中的信息 //显示上面提取的信息 #include<stdio.h> #include<elf.h> #include<stdlib.h> #include<string.h> int main