elf文件格式_elf文件,readelf

汽车电子开发过程中,代码完成后,程序编译完成 会生成 elf文件 或 hex文件,可以烧录到MCU中调试,那么究竟什么是 elf文件呢? elf 文件中又包含哪些信息? 如何解析 elf文件呢?

1. What is elf file

ELF(Executable and Linking Format),elf文件是 Linux下定义的一种文件格式。

elf Bible,Linux Standard Base 定义如下 。文末放链接。

78b9dd8af8fcd85e31d4c190859712dd.png

e16d218df5ea98db1c2b098aee660d0f.png

1.1 elf type

广义上 elf文件 不止包含后缀为elf的 *.elf 文件

ELF文件有三种类型:

  • 可重定位的对象文件(Relocatable file)
.o文件是 由汇编器汇编生成的对象文件,里面包含的内容就是01这样的机器可执行的指令,当程序要执行时还需要进行链接(link).链接就是把多个.o文件链成一个可执行文件。
.a 文件,.a文件是多个.o文件的组合。
  • 可执行的对象文件(Executable file)可执行应用程序
嵌入式中 .elf文件, 后缀为elf的文件
Windows 下的 .exe
  • 可被共享的对象文件(Shared object file)动态库文件,也即 .so 文件

1.2 how generate elf file

编译过程:

>预编译 >

>编译 >

>汇编 >

>link -生成 elf

dece6272d117bded01bcc8848f09927d.png

1.3 elf 结构

ELF文件由4部分组成,分别是ELF头(ELF header)、程序头表(Program header table)、节(Section)和节头表(Section header table)。实际上,一个文件中不一定包含全部内容,而且它们的位置也未必如同所示这样安排,只有ELF头的位置是固定的,其余各部分的位置、大小等信息由ELF头中的各项值来决定。

  • ELF头部(ELF_Header): 每个ELF文件都必须存在一个ELF_Header,这里存放了很多重要的信息用来描述整个文件的组织,如: 版本信息,入口信息,偏移信息等。程序执行也必须依靠其提供的信息。
  • 程序头部表(Program_Header_Table): 可选的一个表,用于告诉系统如何在内存中创建映像,在图中也可以看出来,有程序头部表才有段,有段就必须有程序头部表。其中存放各个段的基本信息(包括地址指针)。
  • 节区头部表(Section_Header_Table): 类似与Program_Header_Table,但与其相对应的是节区(Section)。
  • 节区(Section): 将文件分成一个个节区,每个节区都有其对应的功能,如符号表,哈希表等。
  • 段(Segment): 嗯…就是将文件分成一段一段映射到内存中。段中通常包括一个或多个节区

f86e2f0655c6129a9346e7811090ced6.png

2. readelf

  • readelf命令是gcc中的分析ELF文件的命令,安装MINGW后,会在其目录中发现 readelf.exe

9f44a589fe2e7ac6a3d0d1fa59d2d5d9.png
  • In cmd window,>> readelf -h Enter,then command windown echo all usage

fc2ebb97633f26f43bc3be4e5da03553.png
  • Usage: readelf <option(s)> elf-file(s)
    • readelf --a file.elf >Info.txt
      • Show all info, it is equivalent to: -h -l -S -s -r -d -V -A -I
      • >Info.txt can help user print information to txt file in current directory
    • 用该命令可以读出 elf 中所有信息

Refernce:

Linux Standard Base Linux标准库中 elf 官方文档

https://refspecs.linuxbase.org/elf/elf.pdf​refspecs.linuxbase.org

声明: 文章源于作者个人兴趣研究,只包含领域内公共信息,不包含任何商业信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433541.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

是人是谁_其实,我们每个人心中都有一把尺子,谁好谁歹谁心里都明白……

有一些人&#xff0c;对别人有一点好&#xff0c;就能整天挂在嘴边&#xff0c;生怕别人能忘了似的&#xff0c;还有一些人&#xff0c;对谁好&#xff0c;都不喜欢说在嘴上&#xff0c;就愿意那么默默无闻地善良着&#xff0c;把温暖悄悄传递给别人的心灵&#xff0c;这是我们…

一个伟大计划终于完成了(粉丝联盟网正式上线了)

一个伟大的计划是指 搭建一个拥有独立顶级域名的网站。&#xff08;2009年时&#xff0c;我就有这个想法&#xff0c;今天终于实现了。&#xff09;网站&#xff1a;http://FansUnion.cn/ ; 粉丝联盟网FansUnion的含义 大一时&#xff0c;我开始玩网络游戏-天龙八部。当时取了个…

vector的reserve和resize

vector 的reserve增加了vector的capacity&#xff0c;但是它的size没有改变&#xff01;而 resize 改变了vector的capacity 同时也增加了它的size&#xff01;原因如下&#xff1a;reserve是容器预留空间&#xff0c;但在空间内不真正创建元素对象&#xff0c;所以在没有添加新…

是否要运行此应用程序_使用Delve调试Go应用程序

调试器任何编程语言中最简单的调试形式是使用打印语句或日志来写入标准输出。这肯定没有问题&#xff0c;但是当我们的应用程序规模增加并且逻辑变得更加复杂时&#xff0c;这种方式变得极其困难。将打印语句添加到应用程序的每个代码路径并不容易。这是调试器派上用场的地方。…

mysql5.7.18压缩包下载_Windows安装MySQL5.7教程

我们日常学习可能会需要在本地安装MySQL服务&#xff0c;也遇到过小伙伴探讨关于Windows系统安装MySQL的问题。在这里建议大家安装MySQL5.7版本&#xff0c;当然想尝试8.0版本的同学也可以参考安装。本篇文章以MySQL5.7.23版本为例&#xff0c;一步步的为大家总结出安装步骤&am…

pentaho DI--- Tutorial (spoon)

Pentaho Data Integration (PDI, also called Kettle),是pentaho的etl工具.虽然etl工具一般都用在数据仓库环境中,可是,PDI还是可以做以下事情: 1)在数据库或应用系统间迁移数据. 2)把数据导成为检系统 3)大数据的批量倒入数据库。 4&#xff09;系统整合。 5&#xff09;数据清…

linux 系统调用

5.1.5 如何使用系统调用 如图5.2所示&#xff0c;用户应用可以通过两种方式使用系统调用。第一种方式是通过C库函数&#xff0c;包括系统调用在C库中的封装函数和其他普通函数。 图5.2 使用系统调用的两种方式 第二种方式是使用_syscall宏。2.6.18版本之前的内核&#xff0…

python3 csv读写_python3 csv

一、python3 csv 的中文乱码解决方案 将文件保存为 csv 格式的话&#xff0c;用记事本打开是没有问题的&#xff0c;但用excel 打开就会乱码&#xff0c;在网上找了些解决方法都是适用python2 这里提供下一个解决方案 >>> import csv >>> import codecs >…

通用返回_Springboot项目整合通用mapper

1.简介什么是通用mapper什么是通用mapper&#xff0c;用一句话概括就是&#xff0c;它就是一个辅助mybatis开发的组件&#xff0c;它不是替代mybatis&#xff0c;而是使mybatis更方便的开发。通用mapper提供极其方便的单表的增删改查&#xff0c;可以按照自己的需要使用通用方法…

C++总结笔记(二)面向对象

面向对象&#xff08;OOP&#xff09; 面向对象&#xff08;Object-oriented programming&#xff09;程序设计是一种适用于设计、开发各类软件的泛型&#xff1b;面向对象采用了自顶向下&#xff0c;逐步求精的原则&#xff1b; 面向对象主要包括对象、类、数据抽象、继承、动…

Linux下获取线程TID的方法——gettid()

如何获取进程的PID&#xff08;process ID&#xff09;? 可以使用&#xff1a; #include <unistd.h> pid_t getpid(void); 通过查看头文件说明&#xff0c;可以得到更详细的信息&#xff1a;find /usr/include -name unistd.h /usr/include/asm/unistd.h /usr/…

差值平方和匹配_机器学习实战 | 简单目标识别与意图分析之模板匹配

(点击上方快速关注并设置为星标&#xff0c;一起学Python)一天&#xff0c;我正在学校楼下撸猫&#xff0c;同学发来消息&#xff0c;他的老师给了他一个研究课题&#xff0c;大致的方向是对图片或者视频里面的内容进行识别&#xff0c;然后判断意图&#xff0c;而且举了个例子…

python切片操作的几种格式_【Python杂记】第四篇:序列切片

使用python处理问题的过程中&#xff0c;经常会遇到从某个序列中抽取部分值的情况。“切片”操作正是专门用于实现这一目的的方法。 实际上&#xff0c;可以通过单次或多次切片操作实现任意目标值切取。切片操作的基本语法很简单&#xff0c;下面就以列表来举例&#xff0c;说明…

grep用法

命令选项-?同时显示匹配行上下的&#xff1f;行&#xff0c;如&#xff1a;grep -2 pattern filename同时显示匹配行的上下2行。-a, --text等价于匹配text,用于&#xff08;Binary file (standard input) matches&#xff09;报错-b&#xff0c;--byte-offset打印匹配行前面打…

vector利用swap()函数进行内存的释放

首先&#xff0c;vector与deque不同&#xff0c;其内存占用空间只会增长&#xff0c;不会减小。比如你首先分配了10,000个字节&#xff0c;然后erase掉后面9,999个&#xff0c;则虽然有效元素只有一个&#xff0c;但是内存占用仍为10,000个。所有空间在vector析构时回收。 1、…

SAP常用术语

SD 常用术语汇集 SD (Sales and Distribution) : 销售和分销 Sold-to-party : 下订单客户 Ship-to-party : 收货之客户 Bill-to-party : 仅指收发票之客户 Payer-to-party : 付款人 Customer Code : 客户代码 Sales Organization : 销售业务组织&#xff0c;指台达的某一事业部…

如何创建_如何创建自己的微信圈子?圈子创建运营指南

原创&#xff1a;爱捣鼓的猿 袁小猴最近很多小伙伴在问微信圈子是什么&#xff0c;如何才能创建自己的微信圈子&#xff1f;于是小编花时间去研究了下&#xff0c;整理了一些微信圈子的规则&#xff0c;方便大家使用。一、微信圈子是什么&#xff0c;圈子入口&#xff1f;其实曾…

python爬虫淘宝评论_Python爬取淘宝店铺和评论

1 安装开发需要的一些库(1) 安装mysql 的驱动&#xff1a;在Windows上按winr输入cmd打开命令行&#xff0c;输入命令pip install pymysql&#xff0c;回车即可。(2) 安装自动化测试的驱动selenium&#xff1a;在命令行中输入pip install selenium回车。(3) 安装标签解析库pyque…

A20 网卡驱动分析

网卡芯片为realteak 8201 1. net_device结构体的分配和注册 1) "/drivers/net/ethernet/sun7i/sun7i_wemac.c" wemac_probe() ndev alloc_etherdev(sizeof(struct wemac_board_info)); 分配 ret register_netdev(ndev); …

安装用户debian7安装oracle11g

改章节笔者在北京游玩的时候突然想到的...这几周就有想写几篇关于安装用户的笔记&#xff0c;所以回家到之后就奋笔疾书的写出来发表了 apt-get install gcc g make binutils libc6 libc6-dev libstdc6 libstdc5 rpm gawk alien ksh lesstif2 libaio1 linux-headers elfutils…