解析NK.BIN

最近做NBOOT,EBOOT,对TOC参数不是很明白,老大说得先熟悉一下NK.bin。故找到以下好文,对NK.bin有了一个深入的了解。感谢作者。

study NK.bin format

The information from WINCE500\PRIVATE\WINCEOS\COREOS\NK\TOOLS\ROMIMAGE\VIEWBIN

1. 初始識別字組

檔案開頭的7個位元組是固定的識別字組("B000FF\x0A", 0x42, 0x30, 0x30, 0x30, 0x46, 0x46, 0x0A)

image

2. 映射檔案在記億體中對應的起始位址

在這個檔案可以看到,對應到 0x801A0000,這個值是用 Config.bib 在Memory Section 裡面設定的。當makeimg時,會呼叫 Fmerge.exe 去合併所有用到的 Binary Image Builder Files (.BIB)檔案,最後產生一個 CE.BIB,之後會在呼叫Romimage.exe(Rom image Builder Tool),依照CE.BIB裡面的設定,去定址所有檔案與在安排在記憶體中的位址

image

3. 映射檔案長度

這個檔案長度值是 0x20D34C8

image

4. 資料錄(Record)

    接下來是 Data Record , 在WinCE 5.0 的 ViewBin 中,可以看出定義最大不會超過 2048 個,每個Record 有 3個 DWORD的資料紀錄,依序代表資料起始位址(Start address of Record)、資料長度(Length of Record)檢查碼(Chksum of Record),資料起始位址與檢查欄位同時為零時,則代表起始位址。基本上是一個 List 結構的資料錄

在下圖用了紅色框,框出Record的起始、長度、檢查碼,緊跟的白色框,則是該Record的實際資料內容。

image 

用 Pseudo code 表示可以視為

     struct {

DWORD  StartAddr;

DWORD  Length;

DWORD  ChkSum;

BYTE*     pDATA;

} Record;

Record  LRec[2048];

LRec[0].StartAdd = 0x801A0000;

LRec[0].Length = 0x00000004;

LRec[0].ChkSum = 0x000001EB;

LRec[0].pData = { 0xFE, 0x03, 0x00, 0xEA };

LRec[1].StartAddr = 0x801A0040;

LRec[1].Length = 0x00000008;

LRec[1].ChkSum = 0x000001FB;

LRec[1].pData = { 0x45, 0x43, 0x45, 0x43, 0x40, 0x02, 0x27, 0x82 };

5. 資料內容紀錄 (Table Of Context Record)

當檔案中的資料錄全部找出來後,首先需要找出那個是 TOC 資料錄,首先從頭開始在一次找尋資料錄,首先找出資料錄長度為 8的,然後比較識別字元,這個識別字元定義在 WINCE500\PUBLIC\COMMON\OAK\INC\romldr.h (在 WinCE 5.0中,這個識別字元 ROM_SIGNATURE 內容為 0x43454345(它使用 DWORD型態,所以在PC上的檔案位址排列會變成 0x45434543,恰恰等於目前觀察檔案的 Record 1。Record 1 剩下的資料,就是 TOC的位址 0x82270240。

接下來繼續找資料錄大小為 ROMHDR大小的,這個ROMHDR 一樣定義在 romldr.h中,在WinCE 5.0中定義是 84 (0x54) ,恰好 Record 282 大小為 0x54,而起始值為 0x82270240(註: 在ViewBin 中可以看到,也許有可能會發生找錯資料錄的情況,ViewBin  中針對這種情況有雙重確認機制)。

image

6. 讀取 ROMHDR (ROM Header Record)

假設找到正確的 ROMHDR 後,開始分析ROMHDR的內容

ROMHDR.dllfirst  -> 在Slot 0 (Current Process 空間中)的DLL的起始位址

ROMHDS.dlllast   -> 在 Slot 0 的結束位址

DLL 在 Slot 0的空間位址映射,是為了當 DLL 被系統載入時,所有的 Process 可以共享DLL的程式碼與資料的一種設計,在早期算是一種折衷設計,這是為了減少 context switch與記憶體的消耗,算是一種必要之惡,也因此原本在執行時其中的程式空間的 32MB 會被扣除這塊 DLL所佔用的空間。但這幾年嵌入式系統的CPU與記憶體的能力也是大幅的提昇,許多嵌入式系統的驅動程式,與相關應用需求,讓嵌入式系統必須18般武藝樣樣俱全。為了能讓WinCE 放進更多DLL,在WinCE 4.0 ~ WinCE 5.x 中,Microsoft 提出了另一個方法 XIP DLLs,Slot 1 成為 XIP Dlls 的空間。

image

 

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

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

相关文章

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

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

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

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

【转】应用架构之道:分离业务逻辑和技术细节

架构 什么是架构? 关于架构这个概念很难给出一个明确的定义,也没有一个标准的定义。 硬是要给一个概述,我认为架构就是对系统中的实体以及实体之间的关系所进行的抽象描述。 架构始于建筑,是因为人类发展(原始人自…

ARM9之NAND FLASH总结

/*author----->Armking*/ /*data----->2008年9月2*/ /*ps:本人总结,备于日后查阅,如若转载,请注明出处*/ /*QQ:382750150*/ 写于篇头: 终于又开始接着学习了,只是不知道为什么JTAG又连不上目标板了,如…

【转】SD-WAN,到底是什么*****

作为一个热门概念,SD-WAN近年以来频繁地出现在我们的视野当中。 很多人说,它是未来最具发展潜力的通信技术之一,极具商业价值。 行业里的老牌通信设备商和运营商对它一致看好,新兴创业企业也把它视为千载难逢的风口机遇&#xff0…

ffmpeg 截图太模糊了_PPT图片模糊?导师说放大!

今日分享图片智能放大●●●●重庆大学PPT图片太模糊了,要用原图!放大,放大导师如是说,小硕表示,图片本就这样这咋办?不愁,稳住接着看在做PPT时还是做论文时想用某张图片,但是直接拉…

【转】全了!临港四镇最新对口地段小学,中学都在这里,看看你的孩子能读哪个学校

临港的家长们关于自己的孩子就读哪个学校,家长们一直都很关心和关注,每个家长对孩子的教育很是重视,有部分家长买临港的房子就冲着学区去的,临港的优质教育资源一直是被居民所称赞的,学校也没家长失望,个别…

【转】Azure Az-900认证 04——-考取AZ900所有知识点总结--获取证书!

结合最近所做的模拟题,把一些容易考的知识和概念重新回顾记录一下。标红的字要注意一下,有可能这几个简单的字,就是最能概括这个概念的关键点,个人在回顾的时候把这些点红色标出来了,会在题干中以不同的案例形式来考察…

怎么用vc采集ni卡数据_8bit,200MS/s 低成本模拟输入高速采集卡FCFR-PCI9850

FCFR-PCI98508bit,200MS/s 低成本模拟输入高速采集卡FCFR-PCI9850(简称PCI9850)是低成本高速数字化化仪,AD分辨率8bit,AD采样率200MS/s,硬件FIFO缓存32M字节,采集卡支持50MS/s的高速连续采集,触…

S3C6410启动模式介绍

目前的ARM处理器都支持多种启动模式,S3C6410和以前的Samsung的ARM处理器一样,通过外部管脚OM[4:0]的拉高拉低来决定是从哪个存储设备上启动。我认为S3C6410的User Manual并没有说的很清楚,所以我在最开始使用的时候,也对其启动模式…

如何用木板做桥_如何辨别使用的公园椅是否需要保养

如何辨别使用的公园椅存在哪些问题新城市公园椅小编与您分享,每一项事物都会有它的使用寿命,公园椅也不例外。公园椅使用有几年后后,我们通过公园椅的哪些表现来发现公园椅存在哪些隐患呢?通过观察、触摸、按压这三种方式来发现公…

c语言删除文件remove_Python中的文件和目录操作

对于文件和目录的处理,虽然可以通过操作系统命令来完成,但是Python语言为了便于开发人员以编程的方式处理相关工作,提供了许多处理文件和目录的内置函数。重要的是,这些函数无论是在Unix、Windows还是Macintosh平台上,…

漏洞:Client ReDos From Regex Injection

漏洞描述: 扫描漏洞如下:代码: // In IE6, the hash fragment and search params are incorrect if the // fragment contains ?. getSearch: function() { var match this.location.href.replace(/#.*/, ).match(/\?./); …

WinCE Boot方式及 Bootloader架构概述

Bootloader的概念就是一个用于引导的loader,在系统上电的时候最先被运行,然后对硬件平台做最基本的初始化,最后把操作系统加载起来。不同的嵌入式操作系统都有自己的Bootloader,但是本质功能都是一样的。 在WinCE中用的最多的就是…

静物摄影用光技巧_摄影技巧:摄影如何用光?摄影大师总结的10点,非常受用!...

点击上方蓝字关注「摄影技巧入门教程」ID:sheying116找到右上角点击?... 设为星标/置顶 丨摄影技巧丨丨摄影入门丨丨摄影教程丨丨摄影图片丨摄影技巧:光线的运用在摄影中至关重要,但很多摄影新手却不知道该如何用光,今天我们就来…

Python如何创建相同值的数组/列表

题目要求 现在有这样的一个需求:创建一个数组或列表,列表中的所有值是相同的。 解决方法 找到两种解决方法,第一种是使用Python的基础语法,第二种是借助numpy包提供的函数实现。分别为大家进行介绍。 方法一:使用P…

【转】肺小结节就诊指南:4种CT的区别及如何选择?

又到医院体检的季节,胸外科医师又要忙着给本院同事看片子了。目前体检查出的早期肺癌越来越多,主要归功于CT检查的普及,相较于X-ray胸片,CT对肺内小结节,特别是小于1cm的结节诊断率更高。因此,要提高早期肺…

CTL_CODE说明

我们在说DeviceIoControl函数时其第二个参数dwIoControlCode就是由CTL_CODE宏定义的,下边我们可以了解一下CTL_CODE的内容。CTL_CODE:用于创建一个唯一的32位系统I/O控制代码,这个控制代码包括4部分组成:DeviceType(设…

修改Linux主机名和IP

问题描述 又到了例行的系统安全测试时间,公司部署的一套系统需要做安全测试了,首先要做主机渗透,显然不可能在正式环境直接测,于是就把几台服务器做了个镜像,作为测试环境。 现在问题是,测试环境的ip要修…

可以获得索引值码_搜索引擎优化最适合什么样子的工作?

有些人一直在学习搜索引擎优化,并一直想学习搜索引擎优化。这里是一个关于搜索引擎优化职位的简要介绍。1、 搜索引擎优化的位置是什么?随着电子商务产业的发展,搜索引擎优化的地位越来越重要。它主要负责优化网页的自然排名,这与…