NK.BIN,NK.NB0文件结构简析

NK.BIN,NK.NB0文件结构简析

转自http://loveyiba.spaces.live.com/default.aspx

一、  NK.BIN

NK.BIN是结构体文件,它是对NK.NB0文件进行了压缩,以方便下载操作,主要是节省下载时间,提高效率。下位机在接收到此文件后,可以解压缩后直接运行,也可以烧写到Flash上。

NK.BIN相比NK.NB0多了三个信息:

1.      映像文件起始地址: 指明此映像文件应该被装载到的地址

2.      文件大小

3.      启动地址: PC指针跳转到此,以启动此映像文件

 

NK.BIN主要的结构信息:

              头标志(7个字节)+起始地址(4字节)+文件大小(4字节)

接跟着的是由下面的块信息组成的数据:   

              块地址(4字节)+块大小(4字节)+校验(4字节)+内容(长度为上面指定的块大小)

       块地址指明内容数据应被装载到的地址

       所有的这样的块信息组成了Nk.BIN文件结构

       注意最后一个块信息的块地址为0,校验也为0,块大小的内容为启动地址(Lanuch Address)

 

NK.BIN文件按照这些块信息可以解压或者说还原成NK.NB0文件。

 

二、NK.NB0

       首先说一下TOC信息.在相对地址为0x40,有两个四字节的数据,第一个为校验信息(ECEC),第二个即指明了ROMHDR结构体的地址.这个ROMHDR结构体包含了很多有用的信息,像映像文件的模块,文件等,还有一些段(Section)信息,如eboot就是用此来重定位全局变量。

typedef struct ROMHDR {

    ULONG   dllfirst;               // first DLL address

    ULONG   dlllast;                // last DLL address

    ULONG   physfirst;              // first physical address

    ULONG   physlast;               // highest physical address

    ULONG   nummods;                // number of TOCentry's

    ULONG   ulRAMStart;             // start of RAM

    ULONG   ulRAMFree;              // start of RAM free space

    ULONG   ulRAMEnd;               // end of RAM

    ULONG   ulCopyEntries;          // number of copy section entries

    ULONG   ulCopyOffset;           // offset to copy section

    ULONG   ulProfileLen;           // length of PROFentries RAM

    ULONG   ulProfileOffset;        // offset to PROFentries

    ULONG   numfiles;               // number of FILES

    ULONG   ulKernelFlags;          // optional kernel flags from ROMFLAGS .bib config option

    ULONG   ulFSRamPercent;         // Percentage of RAM used for filesystem

    ULONG   ulDrivglobStart;        // device driver global starting address

    ULONG   ulDrivglobLen;          // device driver global length

    USHORT  usCPUType;              // CPU (machine) Type

    USHORT  usMiscFlags;            // Miscellaneous flags

    PVOID   pExtensions;            // pointer to ROM Header extensions

    ULONG   ulTrackingStart;        // tracking memory starting address

    ULONG   ulTrackingLen;          // tracking memory ending address

} ROMHDR;

 

紧跟着这个ROMHDR的是所有的TOCentry结构,也就是模块信息,然后是所有的FILESentry结构,也就是包含的文件信息.

这些结构的定义可以在romldr.h文件中找到

具体的信息,可以参数WINCE自带的ViewBin.exe的源程序.位置在C:/WINCE420/PRIVATE/WINCEOS/COREOS/NK/TOOLS/ROMIMAGE/VIEWBIN

猜你喜欢

转载自blog.csdn.net/miller1026/article/details/5898639