深入理解.bin文件和.nb0文件的结构

 .bin文件是一个描述性质的映像文件,它由文件头(head)、镜像数据目的起始地址(ImageStart)、镜像数据长度(ImageLength)和多条相对独立的记录(record)构成。

  文件头(head)由7个字节组成,内容是:42 30 30 30 46 46 0A,即“B000FF/x0A”,这是判断镜像文件是.bin类型的依据。

  镜像数据目的起始地址(ImageStart)由4个字节组成,它定义了镜像文件解析后装载在内存中的起始地址。

  镜像数据长度(ImageLength)也由4个字节组成,它表示.bin镜像文件解析后在内存中占用的总的存储空间大小。

  每条记录(record)由4字节的起始存储地址(RecordStart)、4字节的数据长度(RecordLength)、4字节的校验码(RecordCheckSum)和RecordLength个字节的记录数据(RecordData)组成。

  由以上.bin的文件格式可知,.bin文件不是内存程序空间的一个简单的拷贝。所以它不能直接用串口烧写进内存或FLASH空间来直接运行,必须通过PB下载,通过EBOOT按照.bin文件的格式解析出来具体的内容并重新装载后才能运行。

  而.nb0文件就不一样,它是内存运行程序映像的一个硬拷贝,其数据内容和程序运行时在内存中的数据是一样的。鉴于此,.nb0可以通过串口下载到指定的位置直接运行。很明显,.nb0是一个不存在格式的映像文件。

  下面,我通过一个具体的.bin文件以及对应的nb0文件来帮助大家加深对以上概念的理解:

  用UltraEdit打开我们要分析的NK.bin文件和NK.nb0文件,为了方便分析,我分别截取了NK.bin和NK.nb0文件的一小部分:

           NK.bin文件的部分内容:

           00000000h: 42 30 30 30 46 46 0A 00 00 00 80 64 67 FA 00 00

           00000010h: 00 00 80 04 00 00 00 EB 01 00 00 FE 03 00 EA 40

           00000020h: 00 00 80 08 00 00 00 EE 02 00 00 45 43 45 43 1C

           00000030h: 48 FA 80 48 00 00 80 04 00 00 00 5E 01 00 00 1C

           00000040h: 48 FA 00 00 10 00 80 A0 3D 05 00 14 E3 F3 01 00

           00000050h: 00 0F E1 13 00 A0 E3 80 00 80 E3 40 00 80 E3 00

           ..................: ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...

           00053dd0h: F7 03 80 BC F7 03 80 A0 F7 03 80 01 00 00 00 84

           00053de0h: F2 04 80 A8 F2 04 80 EC F2 04 80 AC F2 04 80 A0

           ..................: ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...

           00f40960h: 12 00 00 00 12 00 00 64 AE 80 80 1C 36 FA 80 00

           00f40970h: 00 00 00 00 10 00 80 00 00 00 00

           对应的NK.nb0文件的部分内容:

           00000000h: FE 03 00 EA 00 00 00 00 00 00 00 00 00 00 00 00

           00000010h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

           00000020h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

           00000030h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

           00000040h: 45 43 45 43 1C 48 FA 80 1C 48 FA 00 00 00 00 00

           00000050h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

           ..................: ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...

           000000ff0h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

           00001000h: 00 00 0F E1 13 00 A0 E3 80 00 80 E3 40 00 80 E3

           00001010h: 00 F0 23 E1 10 0F 11 EE 01 0A C0 E3 04 00 C0 E3

           ..................: ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...

           00054D90h: 84 F2 04 80 A8 F2 04 80 EC F2 04 80 AC F2 04 80

           ..................: ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...

            00fa6760h: 1C 36 FA 80 00 00 00 00 00 00 00 00 00 00 00 00

            00fa6770h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

           ..................: ...  ...  ... 填充0一直到文件末尾...    ...  ...  ...  ...  ...  ...
           下面我们来分析上面的映像:
            首先看.bin映像:
            1.最开始是7字节的文件头42 30 30 30 46 46 0A;
            2.接下是4字节映像数据目的起始地址00 00 00 80,指出目的起始地址0x80000000;从而也告诉我们对应的.nb0文件运行时将装载到0x80000000去运行。
            3.接下来是4字节的映像数据长度64 67 FA 00,指出映像数据解析后所占的存储空间长度是0X00FA6764字节;我们再看.nb0文件地址0x00fa6760处的16字节的数据是1C 36 FA 80 00 00 00 00 00 00 00 00 00 00 00 00,而且从此以后的数据全部是00,由此可知0x00fa6764是最后的有效数据的地址。我想到这里朋友们已经知道.bin文件和.nb0文件之间的联系了。
            4.接下来4字节是第1条记录的起始地址00 00 00 80,指出第1条记录的起始地址是0x80000000;
            5.接下来4字节是第1条记录的长度 04 00 00 00,指出第1条记录的数据域长度是4个字节。
            6.接下来4字节是第1条记录的校验码EB 01 00 00;
            7.接下来4字节是第1条记录的数据内容FE 03 00 EA。到这里,我相信朋友们已经想起点什么。查看.nb0文件的起始4字节,正是我们刚才分析的第1条记录的数据内容。
            8.接下来4字节是第2条记录的起始地址40 00 00 80,指出第2条记录的起始地址是0x80000040;
            9.接下来4字节是第2条记录的长度 08 00 00 00,指出第2条记录的数据域长度是8个字节。
            10.接下来4字节是第2条记录的校验码EE 02 00 00;
            11.接下来8字节是第2条记录的数据内容45 43 45 43 1C 48 FA 80。再查看.nb0文件中0x00000040地址8字节内容:45 43 45 43 1C 48 FA 80,正是.bin文件中第2条记录的数据域内容。
            如此类推,我们采用同样的方法可以解析出.bin文件中的所有记录项。并能根据.bin的记录构造出对应的.nb0文件。
            到此,我相信朋友们已经很深入的了解了.bin文件的格式,并清楚了.bin文件和.nb0文件的区别和联系了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436489.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ajax中怎么验证data,我应该在jQuery的ajax成功处理程序中验证响应数据吗?

假设我有一个后AJAX调用,我想将返回的数据放入一些HTML元素中。$.post(settings.url, function(data) {$(#someElement).text(data.someData1);$(#someElement2).text(data.someData2);});我是一名后端开发人员,我必须对来自用户的任何数据进行服务器端验…

number 限制最长数字_Java源码阅读-Number

抽象类Number是BigDecimal, BigInteger,Byte,Double,Float,Integer, Long, Short类的父类,实现了java.io.Serializable接口,这个接口以后再说。其中的抽象方法主要是基本数据类型的转换,这些方法都可能涉及到四舍五入和截断Integer类实现了父…

(JavaScript)实现在客户端动态改变Treeview节点的选中状态

Asp.net 2.0 中的 Treeview 非常好用,而且轻便。但在使用过程中,往往会发现一些不够人性化的地方。例如您要设计一棵树,里面放置了一些收藏的网址。在这棵树中,节点的 SelectAction 只有 Expand 和 NavigateUrl 状态,也…

【转】Castle中AdditionalInterfaces用法介绍

首先见下图(图一),其中FooController是一个没有实现任何Interface的空类。需要实现的效果是:通过FooController对象调用FooService的Do方法。设置这一不常见的场景主要是为了说明Castle中AdditionalInterfaces的用法。 这个场景诡…

WinCE上BINFS实现详解

网上不少介绍三星24x0系列的BINFS启动方式实现,有 些内容上描述的不是非常全面。 下面就WinCE6上的BINFS实现,从基本原理到修改BSP ,再到如何烧录启动做一个较全面的讲解。 一 BINFS到底是什么? 其实BINFS就是MS给CE做的一种存放…

服务器升级文件 不推送就无法打开吗,Win7升Windows10有获取通知,但是就不推送的解决方法...

js鼠标滚轮滚动图片切换效果效果体验网址:http://keleyi.com/keleyi/phtml/image/12.htm HTML文件代码: /p>Python for Infomatics 第12章 网络编程六(译)注:文章原文为Dr. Charles Severance 的 .文中代码用3.4版改写,并在本机测试通过. 12.9 词汇表 Beautif ...Linux下配置…

ffmpeg添加到环境变量_Windows + MSVC环境编译ffmpeg

实测成功环境: WIN7 VS2013 FFmpeg4.3 和 WIN10 VS2019 FFmpeg4.3(N-98819-ge2589ac)源码下载FFmpeg源码依赖工具MSYS2​YASM下载安装MSYS2; 下载YASM,将文件名改为yasm.exe,将它所在的目录加入到环境变量中。配置头文件和库搜索路径以下几种方法任选一种1.使用…

自动化测试框架:没有Surprise的原因

今日将框架完整走通,给测试试用。但从测试表情看,显然没有Surprise的意思,反而有种因为改变使用习惯并要学习新框架的厌烦。 尽管事前,我们已经对需求做过自认为相当全面的分析,而且在框架设计上也充分进行了斟酌和权衡…

【转】阿里技术专家详解 DDD 系列 第一讲- Domain Primitive

导读 对于一个架构师来说,在软件开发中如何降低系统复杂度是一个永恒的挑战,无论是 94 年 GoF 的 Design Patterns , 99 年的 Martin Fowler 的 Refactoring , 02 年的 P of EAA ,还是 03 年的 Enterprise Integratio…

wince编译报错

新建了工程,加入之前完整的BSP,怎么也编译不过,提示: [01:0000009403:ERRORE] NMAKE : U1073: dont know how to make C:\WINCE600\OSDesigns\xyjhht30\xyjhht30\Wince600\SMDK6410_ARMV4I\cesysgen\sdk\lib\ARMV4I\retail\ddraw.…

服务器怎么把信息发送给用户,java中怎么用tcp/ip将服务器的消息发送给多个用户...

java中怎么用tcp/ip将服务器的消息发送给多个用户关注:253 答案:2 mip版解决时间 2021-01-31 01:26提问者╬═掵中注定2021-01-30 20:03java中怎么用tcp/ip将服务器的消息发送给多个用户最佳答案二级知识专家往事叫我剪短发2021-01-30 20:09你服务器accept方法后是不是会得到…

stick和stuck的区别_怎样区别“stick to”、“stick with”和“stick by”这三个表达?...

我小时候有一次把口香糖粘到头发里去了。Verb form: stick, stuck, stuckVerb form: stick, stuck, stuck动词形式:stick, stuck(过去式), stuck(过去分词)2、Stick to:字面意思:粘着字面意思:粘着E.g.The gum is stuck to my shoe.香糖粘我鞋…

VS2005 .vs. Orcas

这两天正在开发自己的一套信息管理系统,开发环境采用 VS2005 C# XP。由于习惯用Dreamweaver 布局,这可好,在DW中布局完成之后,在VS中就完全走形了。郁闷!刚好龙卷风版 Vista 有了,那就装一个试试IIS7和 Orcas。Good&…

解析NK.BIN

最近做NBOOT,EBOOT,对TOC参数不是很明白,老大说得先熟悉一下NK.bin。故找到以下好文,对NK.bin有了一个深入的了解。感谢作者。 study NK.bin format The information from WINCE500\PRIVATE\WINCEOS\COREOS\NK\TOOLS\ROMIMAGE\VI…

查询链接服务器信息,SQL Server链接服务器

SQL Server提供链接到另一个服务器的选项。这通常被用来连接到其他SQL Server数据库,但它也可以被用来连接到一个Microsoft Access数据库。这是通过链接服务器节点成为可能。链接服务器节点可以连接到另一个数据库,通常/通常在不同的机器上运行&#xff…

【转】阿里技术专家详解DDD系列 第二讲 - 应用架构

填坑。谢谢大家对这个系列的期待,持续更新,欢迎关注此账号。 第一篇内容附地址: 阿里巴巴淘系技术:阿里技术专家详解 DDD 系列 第一讲- Domain Primitive​zhuanlan.zhihu.com 架构这个词源于英文里的“Architecture“&#xff…

正三角形旋转一周得到的图形是_七年级数学上册_第一章《基本的几何图形》_知识点...

第一章 基本的几何图形复习范围:基本的几何图形知识点回顾:知识点一:几何体的认识1.我们常见的几何体有:正方体、长方体、圆锥、圆柱、棱柱、棱台、棱锥、球,其中____________属于柱体, _________属于锥体。…

CEO、COO、CFO、CTO、CIO是什么意思

CEO(Chief executive officer)首席执行官 类似总经理、总裁,是企业的法人代表。COO(Chief operating officer)首席运营官 类似常务总经理CFO(Chief financial officer)首席财务官 类似财务总经理CTO(Chief technology officer)首席技术官 类似总工程师CIO(Chief inf…

Nand Flash原理分析与编程

NAND Flash 在嵌入式系统中的地位与PC机上的硬盘是类似的。用于保存系统运行所必需的操作系统,应用程序,用户数据,运行过程中产生的各类数据,系统掉电后数据不会护丢失。现在的Flash主要有两咱,一种是NAND Flash 一种是…

NetTiers模板中各个选项的一些解释

名称ChooseSourceDatabase选择数据库MappingFileMapping文件位置(会根据output目录自动更改,不需要设置)OutputDirectory文件输出目录RootNameSpace根节点的命名空间Filter by Individual Objects - OptionalEnumTables枚举表,表中的所有数据都会被用作枚举类型,要求:第一列为主…