ELF和BIN的区别,资料整理
https://www.cnblogs.com/fah936861121/articles/8143556.html
1.Bin
Bin文件是最纯粹的二进制机器代码, 或者说是"顺序格式"。按照assembly code顺序翻译成binary machine code,内部没有地址标记。Bin是直接的内存映象表示,二进制文件大小即为文件所包含的数据的实际大小。 BIN文件就是直接的二进制文件,一般用编程器烧写时从00开始,而如果下载运行,则下载到编译时的地址即可。可以直接在裸机上运行。
2.Hex
Intel hex 文件常用来保存单片机或其他处理器的目标程序代码。它保存物理程序存储区中的目标代码映象。一般的编程器都支持这种格式。 就是机器代码的十六进制形式,并且是用一定文件格式的ASCII码来表示。
简单总结一下这2种文件格式的区别:
1、HEX文件包含地址信息而BIN文件只包含数据本身,烧写或下载HEX文件时,一般不需要用户指定地址,因为HEX文件内部已经包含了地址信息。烧写BIN文件时则需要用户指定烧录的地址信息。
2、HEX文件是用ASCII码来表示二进制的数值。例如8-BIT的二进制数值0x4E,用ASCII来表示就需要分别表示字符‘4’和字符‘E’,每个字符均需要一个字节,因此HEX文件至少需要2倍BIN文件的空间。
3.ELF
ELF(Executableand linking format)文件是x86 Linux系统下的一种常用目标文件(objectfile)格式,有三种主要类型:
(1)适于连接的可重定位文件(relocatablefile),可与其它目标文件一起创建可执行文件和共享目标文件。
(2)适于执行的可执行文件(executable file),用于提供程序的进程映像,加载到内存执行。
(3)共享目标文件(shared object file),连接器可将它与其它可重定位文件和共享目标文件连接成其它的目标文件,动态连接器又可将它与可执行文件和其它共享目标文件结合起来创建一个进程映像。
小结:可由elf文件转化为hex和bin两种文件,hex也可以直接转换为bin文件,但是bin要转化为hex文件必须要给定一个基地址。而hex和bin不能转化为elf文件,因为elf的信息量要大。Axf文件可以转化为bin文件,KEIL下可用以下命令fromelf -nodebug xx.axf -bin xx.bin即可。
4.AXF
Axf文件由ARM编译器产生,除了包含bin的内容之外,还附加其他调试信息,这些调试信息加在可执行的二进制数据之前。调试时这些调试信息不会下载到RAM中,真正下载到RAM中的信息仅仅是可执行代码。因此,如果ram的大小小于axf文件的大小,程序是完全有可能在ram中调试的,只要axf除去调试信息后文件大小小于ram的大小即可。
调试信息有以下功用:
1、 可将源代码包括注释夹在反汇编代码中,这样我们可随时切换到源代码中进行调试。
2、 我们还可以对程序中的函数调用情况进行跟踪(通过Watch & Call Stack Window查看)。
3、对变量进行跟踪(利用Watch & Call Stack Window)。
注意:
(1)axf和elf都是编译器生成的可执行文件。区别是:ADS编译出来的是AXF文件。gcc编译出来的是ELF文件。两者虽然很像,但还是有差别的。这是文件格式的差别,不涉及调试格式。
(2)axf/elf是带格式的映象,bin是直接的内存映象的表示。
(3)Linux OS下,ELF通常就是可执行文件,通常gcc -o test test.c,生成的test文件就是ELF格式的,在Linux Shell下输入./test就可以执行。在Embedded中,上电开始运行,没有OS系统,如果将ELF格式的文件烧写进去,包含一些ELF格式的东西,arm运行碰到这些指令,就会导致失败,如果用bin文件,程序就可以一步一步运行。
所以:HEX和bin文件可以在裸机上运行,而ELF文件是在有OS的环境中运行的。
elf(executable and link format)文件里面包含了符号表,汇编,调试信息等,并不能直接运行。
BIN文件是将elf文件中的代码段,数据段,还有一些自定义的段抽取出来做成的一个内存的镜像。
BIN文件需要用objcopy工具,将ELF中的上述信息拷贝出来。(objcopy只是完成两个obj文件内容的拷贝,那如何控制elf生成bin呢?)
下面这个是ELF格式的详细介绍,还有Linux下ELF文件的运行原理和过程。
http://jzhihui.iteye.com/blog/1447570
ELF和BIN的区别,资料整理的更多相关文章
- BIOS/MBR UEFI/GPT关系与区别-资料整理
---恢复内容开始--- 关于 BIOS/MBR UEFI/GPT他们之间的关系一直比较疑惑, 首先一点前提 BIOS UEFI 是一类,是控制硬件,引导启动的:MBR GPT是硬盘的分区定义.. 后 ...
- hex、bin、elf、axf文件区别
AXF和ELF axf文件是ARM的调试文件,除了包含bin的内容之外,还附加了其他的调试信息,这些调试信息加在可执行的二进制数据的前面.在调试的时候,这些调试信息是不必下到RAM中去的,真正下到RA ...
- http post,get,put,delete区别(收集整理)
摘要: 这篇文章想从restful角度来分析下http的方法get,post,put,delete的区别.先暂时收集下资料~~~ 一 Http 规范中的get与post 根据 HTTP 规范,GET ...
- [转帖] select、poll、epoll之间的区别总结[整理] + 知乎大神解答 https://blog.csdn.net/qq546770908/article/details/53082870 不过图都裂了.
select.poll.epoll之间的区别总结[整理] + 知乎大神解答 2016年11月08日 15:37:15 阅读数:2569 http://www.cnblogs.com/Anker/p/3 ...
- word2vec剖析,资料整理备存
声明:word2vec剖析,资料整理备存,以下资料均为转载,膜拜大神,仅作学术交流之用. word2vec是google最新发布的深度学习工具,它利用神经网络将单词映射到低维连续实数空间,又称为单词嵌 ...
- 可执行文件格式elf和bin
区别 常用的可执行文件包含两类:原始二进制文件(bin)和可加载执行的二进制文件,在linux中可加载执行的二进制文件为elf文件. BIN文件是直接的二进制文件,内部没有地址标记.bin文件内部数据 ...
- Java资料整理
Java资料整理 原创 2017年08月25日 17:20:44 14211 1.LocalThread的应用场景,数据传输适合用LocalThread么 2.linux的基本命令 软链接.更 ...
- JNA的步骤、简单实例以及资料整理
1.步骤 1.编写dll文件,放入项目的bin目录(在window上是dll文件,在Linux上是so文件,dll和so都是由C程序生成) 2.新建接口继承Library 3.加载对应的dll或者 ...
- MySQL常用指令,java,php程序员,数据库工程师必备。程序员小冰常用资料整理
MySQL常用指令,java,php程序员,数据库工程师必备.程序员小冰常用资料整理 MySQL常用指令(备查) 最常用的显示命令: 1.显示数据库列表. show databases; 2.显示库中 ...
随机推荐
- vue vuex开发中遇到的问题及解决小技巧
1.在vue的开发中,如果使用了vuex,数据的组装,修改时在mutations中,页面是建议修改变量值的,如果强制修改,控制台就会出现错误.如下: 这种错误虽然不会影响结果,但是是vuex不提倡的方 ...
- dp-最长递增子序列 (LIS)
首先引出一个例子 问题 : 给你一个长度为 6 的数组 , 数组元素为 { 1 ,4,5,6,2,3,8 } , 则其最长单调递增子序列为 { 1 , 4 , 5 , 6 , 8 } , 并且长度为 ...
- 【转】oracle条件子句执行顺序
Oracle WHERE条件执行顺序:ORACLE采用自下而上的顺序解析WHERE子句 1.据此那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾例如:SELECT … FROM EMP E ...
- 设置Linux主机SSH访问服务
检查是否开启22端口访问权限. 检查是否安装openssh-server 开启ssh服务:sudo service sshd start 使用ssh客户端进行访问:ssh userName@IP
- [bzoj4942] [洛谷P3822] [NOI2017] 整数
题目链接 https://www.luogu.org/problemnew/show/P3822 想法 这个啊,就是线段树哇 最初的想法是每位一个节点,然后进位.退位找这一位前面第一个0或第一个1,然 ...
- Oracle 11g 安装过程及测试方法
大家可以根据自己的操作系统是多少位(32位或64位)的,到官网下载相应的安装程序,如下图所示. 有一点需要注意,Oracle的安装程序分成2个文件,下载后将2个文件解压到同一目录即可. 下载完 ...
- 【java面试】数据库篇
1.SQL语句分为哪几种? SQL语句主要可以划分为以下几类: DDL(Data Definition Language):数据定义语言,定义对数据库对象(库.表.列.索引)的操作. 包括:CREAT ...
- Can you answer these queries III(线段树)
Can you answer these queries III(luogu) Description 维护一个长度为n的序列A,进行q次询问或操作 0 x y:把Ax改为y 1 x y:询问区间[l ...
- Centos 7 部署lnmp集群架构
前言介绍 lnmp的全程是 linux + nginx + mysql + php; lnmp就是上述系统及应用程序的简写组合: lnmp其实已经代表了一个用户正常对一个页面请求的流程,nginx接收 ...
- C# 定时器导致的内存泄露问题
C# 中有三种定时器,System.Windows.Forms 中的定时器和 System.Timers.Timer 的工作方式是完全一样的,所以,这里我们仅讨论 System.Timers.Time ...