|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
一、ELFExecutable and linking format(ELF)文件是x86Linux系统下的一种常用目标文件(object file)格式,有三种主要类型:: J U# ]6 M, W+ C1 H4 f
(1)适于连接的可重定位文件(relocatable file),可与其它目标文件一起创建可执行文件和共享目标文件。
5 m b6 M5 k( C! g$ c0 H; b0 Z(2)适于执行的可执行文件(executable file),用于提供程序的进程映像,加载的内存执行。 : V8 e: [+ R& V* K$ C- [8 g7 C
(3)共享目标文件(shared object file),连接器可将它与其它可重定位文件和共享目标文件连接成其它的目标文件,动态连接器又可将它与可执行文件和其它共享目标文件结合起来创建一个进程映像。 ( \1 B* C' Y5 |! i+ R9 e
ELF文件格式比较复杂。
: q2 |% [# @. M8 `2 a, K @" D& s6 J8 A/ t1 i2 n0 [
二、HEX
{0 q* B- ?7 K W- C5 xIntel HEX文件是记录文本行的ASCII文本文件,在Intel HEX文件中,每一行是一个HEX记录,由十六进制数组成的机器码或者数据常量,Intel HEX文件经常被用于将程序或数据传输存储到ROM、EPROM,大多数编程器和模拟器使用Intel HEX文件。
2 ], `' z1 P* f# [/ O' N记录格式
2 @( p4 @) j& y+ z# j$ Q: t, Z一个Intel HEX文件可以包含任意多的十六进制记录,每条记录有五个域,下面是一个记录的格式。 : O* A5 l! o$ Z( |/ j
: llaaaatt[dd。。。]cc ' j+ N" m) ?" v* J, I0 E% J" |; d: K
每一组字母是独立的一域,每一个字母是一个十六进制数字,每一域至少由两个十六进制数字组成,下面是字节的描述。
3 N) r2 Y$ k+ ~0 M: ]' [ : 冒号 是每一条Intel HEX记录的开始
' ^2 p$ C; F4 s" W! h ll 是这条记录的长度域,他表示数据(dd)的字节数目。 . j$ e' ^4 A, a+ Y- ]
aaaa 是地址域,他表示数据的起始地址 5 }; E/ Y9 k t0 w4 L x
tt 这个域表示这条HEX记录的类型,他有可能是下面这几种类型 " p2 A9 q4 X% z6 M. Q4 x, F# ]5 T
00 —-数据记录
7 I6 W9 E; C3 @( e5 w 01 —-文件结束记录 8 |4 @9 G( N) U, l" c
02 —-扩展段地址记录 : p# B4 `8 \3 J [) c: V
04 —-扩展线性地址记录 ' J, e; s7 S8 U" J
dd 是数据域,表示一个字节的数据,一个记录可能有多个数据字节,字节数目可以 查看ll域的说明
4 Q6 A, u1 k1 w" `, Y# p" E cc 是效验和域,表示记录的效验和,计算方法是将本条记录冒号开始的所有字母对所表示的十六进制数字
/ J# u/ F Z, D 都加起来然后模除256得到的余数最后求出余数的补码即是本效验字节cc。 7 V! p; Q$ R4 }! ~
: 0300000002005E9D 8 @* } ~& h D6 Q/ ^/ i
cc=0×01+NOT((0×03+0×00+0×00+0×00+0×02+0×00+0×5E)%0×100)=0×01+0×9C=0×9D >
g2 j8 b8 I. T2 ? 数据记录
& k7 Y9 O# h+ j9 P( B' n! e Intel HEX文件由若干个数据记录组成,一个数据记录以一个回车和一个换行结束比如下面的一条数据记录 0 N9 w' z& i4 n6 K1 g
: 10246200464C5549442050524F46494C4500464C33
5 C6 v: b* K1 p- f 10 是此行记录数据的字节数目
+ o# a: k* j4 j+ P 2462 是数据在内存中的起始地址
/ w+ n8 ^3 t K8 `9 j/ a# A( D 00 是记录类型00(是一个数据记录) , {' q) a6 E* ]# {4 |4 h
464C 到 464C 是数据 . N7 ~+ C/ c0 }! S. R
33 是此行记录的效验和
, `& e0 j& }1 A* v% p1 K p% l7 R! `
三、BIN
9 g+ I% _# s; }7 K, ~/ c& Y; \* q( v
BIN文件就是直接的二进制文件,内部没有地址标记。一般用编程器烧写时从00开始,而如果下载运行,则下载到编译时的地址即可。( j4 Z0 E) R7 h/ i
总结:可以由ELF文件转化为其它两种文件,HEX也可以直接转换为BIN文件,但是BIN要转化为HEX文件必须要给定一个基地址。而HEX和BIN不能转化为elf文件,因为ELF的信息量要大。另外还有一种ads的调试文件axf,
" [: }! u, T0 }9 e它可以转化为BIN文件,用以下命令 fromelf -nodebug xx。axf -bin xx。bin即可。2 p- R: `2 N2 U: f, a
5 h, Z: f* J+ @% L( F
9 N, s6 a: p' S3 H/ |) ?+ s v, r# o2 C3 f* M/ A
: O+ u2 W1 f: M9 F( R7 x$ Q
/ e7 K( l0 q. {1 j+ L! ~0 C- \
|
|