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

    技术2022-05-19  25

    一、  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


    最新回复(0)