您的位置:首页 > 其它

Bin格式文件结构及其查看工具

2010-10-27 21:27 701 查看
我们在做嵌入式开发的时候,通常平台的Image文件是.bin格式的,如NK.bin,eboot.bin,xldr.bin等等。下面让我们一睹bin文件的真面目吧~下面是用view bin工具查看的本人项目中的xldr.bin的信息,仅供参考!



一个bin 文件在存储上是按下面的结构存储的:

标记(7)+Image开始地址(1)+Image长度(1)
记录0地址+记录0长+记录0校验和+记录0内容(文件内容)
记录1地址+记录1长+记录1校验和+记录1内容(文件内容)
......
最后一条记录是表示结束,Start = 0x00000000, Length = 0x8C072C3C是StartUp地址, Chksum = 0x00000000

bin 文件的头部(不包括记录)可以用下面的结构表示

struct BinFile{
BYTE signature[7]; // = { ''B'', ''0'', ''0'', ''0'', ''F'', ''F'', ''/a'' }
DWORD ImageStart
DWORD ImageLength
};

一般xldr.bin,nk.bin 都符合正常bin文件格式,包含记录开始0,1,2 记录为特殊记录,2做为cece的标记,其后4byte表示 TOC地址(指向ROMHDR结构的数据),3记录开始都是文件记录。
下面是用viewbin工具查看项目中xldr.bin的信息,贴出来供参考:

ViewBin... xldr.bin
Image Start = 0x9FA00400, length = 0x00002074 /*该bin的开始地址和长度*/
/*每条record都符合
struct Record{DWORD recaddress; DWORD reclength; DWORD chksum;void * recdata}
*/
Record [ 0] : Start = 0x9FA00400, Length = 0x00000004, Chksum = 0x000001ED
0x9FA00400 : FE0500EA ....
Chksum valid
Record [ 1] : Start = 0x9FA00440, Length = 0x00000008, Chksum = 0x000002ED
0x9FA00440 : 45434543 00C0FE1F ECEC....
//CECE是我们在romldr.h中定义的ROM signature,其后的四个字节1FFECOOO是指针pTOC的值
Chksum valid
Record [ 2] : Start = 0x9FA00448, Length = 0x00000004, Chksum = 0x00000020
0x9FA00448 : 00200000 . ..
Chksum valid
Record [ 3] : Start = 0x9FA01400, Length = 0x00000FF8, Chksum = 0x000322B5
0x9FA01400 : 00B8FE1F B1000000 28B0FE1F 14B0FE1F ........(.......
0x9FA01410 : 30BFFE1F 1CB0FE1F 00ACFE1F E91972B1 0.............r.
0x9FA01420 : 00000000 00240000 00000000 00000000 .....$..........
0x9FA01430 : 00000000 00000000 00000000 00000000 ................
0x9FA01440 : 00000000 00000000 00000000 00000000 ................
0x9FA01450 : 00000000 00000000 00000000 00000000 ................
0x9FA01460 : 00000000 00000000 00000000 00000000 ................
0x9FA01470 : 00000000 00000000 00000000 00000000 ................
0x9FA02340 : 52534453 78F2EDF9 113C874D ACBA1FFD RSDSx....<.M....
0x9FA02350 : 88933838 02000000 786C6472 2E706462 ..88....xldr.pdb
0x9FA02360 : 00000000 00C0FE1F 01002201 00180000 ..........".....
0x9FA02370 : 00A0FE1F 06000000 00000100 00300000 .............0..
0x9FA02380 : 00000000 00000000 1EB1C74C 00000000 ...........L....
0x9FA02390 : 00000000 00000000 00000000 00000000 ................
0x9FA023A0 : 00000000 00000000 00000000 00000000 ................
0x9FA023B0 : 00000000 00200000 14000000 801D0000 ..... ..........
0x9FA023C0 : 1C000000 00000000 00000000 00000000 ................
0x9FA023D0 : 00000000 09000000 680F0000 00100000 ........h.......
0x9FA023E0 : 00100000 00B0FE1F 00B0FE1F 20000060 ............ ..`
0x9FA023F0 : 6E6B2E65 78650000 nk.exe..
Chksum valid
Record [ 4] : Start = 0x9FA02400, Length = 0x00000054, Chksum = 0x00000DB4
0x9FA02400 : 01C00140 01C00140 00A0FE1F 74C0FE1F ...@...@....t...
0x9FA02410 : 01000000 00D0FE1F 00E0FE1F 00D00220 ...............
0x9FA02420 : 00000000 00000000 00000000 00000000 ................
0x9FA02430 : 00000000 00000000 80808080 00000000 ................
0x9FA02440 : 00000000 C2010200 00000000 00000000 ................
0x9FA02450 : 00000000 ....
Chksum valid
Record [ 5] : Start = 0x9FA02454, Length = 0x00000020, Chksum = 0x00000D15
0x9FA02454 : 01000000 BE4D3B65 9375CB01 00140000 .....M;e.u......
0x9FA02464 : F0BFFE1F 68BFFE1F D8BFFE1F 00A0FE1F ....h...........
Chksum valid
Record [ 6] : Start = 0x00000000, Length = 0x9FA01C00, Chksum = 0x00000000
Start address = 0x9FA01C00 //是startup的入口地址?是xldr.s中startup函数的入口地址?跳转指令跳转的入口?
Checking record #4 for potential TOC (ROMOFFSET = 0x7FA16400)
Found pTOC = 0x1ffec000
ROMOFFSET = 0x7FA16400
Done.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: