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格式的内容:

(该图片使用的是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_1:练习4——分析bootloader加载ELF格式的OS的过程

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

随机推荐

  1. FineUIMvc随笔 - 动态创建表格列

    声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版. 用户需求 用户希望实现动态创建表格列,在 WebForms 中,我们通过在 Page_Init 中创建列来实现: 但是在 MVC ...

  2. angular : ng-options

    基本调用,得到name 属性 <select ng-model="target" ng-options="obj.name as obj.name for obj ...

  3. js检测数据类型的方法你都掌握了几个?

    //1.typeof检测/*var obg = {};var ary = [];var reg = /^$/;var fn = function () {};var num = 1;var bool ...

  4. MyBatis从入门到放弃四:一对多关联查询

    前言 上篇学习了一对一关联查询,这篇我们学习一对多关联查询.一对多关联查询关键点则依然是配置resultMap,在resultMap中配置collection属性,别忽略了ofType属性. 搭建开发 ...

  5. ABP入门系列(13)——Redis缓存用起来

    ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 1. 引言 创建任务时我们需要指定分配给谁,Demo中我们使用一个下拉列表用来显示当前系统的所有用 ...

  6. smarty实例登陆、显示、分页

    1.先建立登陆页面,登陆页面的PHP文件和HTML文件是分开写的. 先建立一个登陆页的PHP文件, <?php include("../init.inc.php");//引入 ...

  7. Java8中 Parallel Streams 的陷阱 [译]

    译注:文本有所精简和意译 原文链接 : Java Parallel Streams Are Bad for Your Health!原作者:OLEG SHELAJEV 翻译:Hason 转载请保留相关 ...

  8. Hadoop伪分布安装配置

    安装环境: 系统:Ubuntu 14.10   64bit hadoop:2.5.1 jdk:1.8.0_11 安装步骤: 一.安装JDK 安装 jdk,并且配置环境以及设置成默认 sudo gedi ...

  9. grpc-gateway:grpc对外提供http服务的解决方案

    我所在公司的项目是采用基于Restful的微服务架构,随着微服务之间的沟通越来越频繁,就希望可以做成用rpc来做内部的通讯,对外依然用Restful.于是就想到了google的grpc. 使用grpc ...

  10. 用Use Case获取需求的方法是否有什么缺陷,还有什么地方需要改进?

    一.用例解释 用例是一种在开发新系统或者软件改造时捕获潜在需求的技术.每个用例提供了一个或多个场景,该场景揭示了系统是如何同最终用户或其它系统交互的,从而获得一个明确的业务目标.用例要避免技术术语,取 ...