intel extended格式的hex檔案分析

2021-07-31 18:08:01 字數 3965 閱讀 8973

一、intel hex的具體格式

intel hex檔案是遵循intel hex檔案根式的ascii文字檔案。在intel hex檔案的每一行中都包含了乙個hex記錄。這些記錄是由一些代表機器語言**和常量的16進製制資料組成。intel hex檔案常用來傳輸要儲存在rom、eprom或者flash中的程式和資料。大部分的eprom程式設計器都能使用intel hex檔案。

intel hex由任意數量的十六進製制記錄組成。每個記錄包含6個域,它們按一下格式排列。

| mark | -> (1byte)start code(冒號): 每個 intel hex 記錄都由冒號開頭

| reclen | -> (1byte)byte count(本行資料長度):是資料長度域,它代表記錄當中資料位元組的數量

| offset | -> (2 byte)address(本行資料的起始位址):是位址域,它代表記錄當中資料的起始位址

| rectyp | -> (1 byte)record type(資料型別): 是代表hex記錄型別的域,它可能是以下資料當中的乙個:

00-資料記錄

01-檔案結束記錄

02-擴充套件段位址記錄

03-開始段位址記錄

04-擴充套件線性位址記錄

05-開始線性位址記錄

| data | -> (n byte)data(資料): 是資料域,乙個記錄可以有許多資料位元組.記錄當中資料位元組的數量必須和資料長度域中指定的數字相符

| chksum | -> (1 byte)checksum(校驗碼): 是校驗和域,它表示這個記錄的校驗和.校驗和的計算是通過將記錄當中所有十六進製制編碼數字對的值相加,以256為模進行補足。

二、擴充套件線性位址記錄(32 bit)

| mark | reclen | offset | rectyp | ulba | chksum |

| : | 02 | 0000 | 04 | ulba | chksum |

32位的擴充套件線性位址記錄用在lba(linear base address)的16-31bit,也被當作ulba(upper linear base address),其lba的0-15bit都是0,即該記錄定義了資料存放的基位址(ulba << 16);

示例1、:020000040800f2//(: 02 0000 04  0800 f2)

可見ulba為0800,即基位址為0x0800 << 16,即等於0x08000000。

三、擴充套件段位址記錄(16 bit/32 bit)

| mark | reclen | offset | rectyp | usba | chksum |

| : | 02 | 0000 | 02 | usba | chksum |

16位的擴充套件段位址記錄用於sba(segment base address)的4-19bit,也被當作usba(upper segment base address),其sba的0-3bit為0,即該記錄定義了資料存放的基位址(usba << 4);

四、資料記錄(8 bit/ 16 bit/ 32 bit)

| mark | reclen | offset | rectyp | data | chksum |

| : | reclen | offset | 00 | data | chksum |

offset是相對lba或者sba而言,資料的第乙個位元組的偏移位址;

lba的資料存放位址計算 (lba + drlo + dri) mod 4g

sba的資料存放位址計算 (sba + [drlo + dri] mod 64k)

其中,drlo: offset的值,dri:資料記錄中的資料的索引。

示例:1、

:020000040800f2//(: 02 0000 04 0800 f2)基位址為0x08000000

:104800009004002055940008599200085b9200081b//(: 10 4800 00 09004002055940008599200085b920008 1b)資料存放位址為0x08000000+0x4800,資料長度為0x10,資料內容為:09004002055940008599200085b920008

:104810005d9200085f9200086192000800000000ad//(: 10 4810 00 05d9200085f9200086192000800000000 ad)資料存放位址為0x08000000+0x4810,資料長度為0x10,資料內容為:05d9200085f9200086192000800000000 

:104820000000000000000000000000006592000889//(: 10 4820 00 000000000000000000000000065920008 89)資料存放位址為0x08000000+0x4820,資料長度為0x10,資料內容為:000000000000000000000000065920008 

2、:020000040800f2 //(: 02 0000 04 0800 f2)基位址為0x08000000

:1000000028040020b1170008991700089b17000862//(: 10 0000 00 28040020b1170008991700089b170008 62)資料存放位址為0x08000000+0x0000,資料長度為0x10,資料內容為:28040020b1170008991700089b170008 

:100010009f170008a3170008a7170008000000009a//(: 10 0010 00 9f170008a3170008a717000800000000 9a)資料存放位址為0x08000000+0x0010,資料長度為0x10,資料內容為:9f170008a3170008a717000800000000 

:100020000000000000000000000000002f0c00088d//(: 10 0020 00 0000000000000000000000002f0c0008 8d)資料存放位址為0x08000000+0x0020,資料長度為0x10,資料內容為:0000000000000000000000002f0c0008

五、開始線性位址記錄(32 bit)

這條記錄用於指定intel處理器(例如80386)的開始位址,位址會被載入到處理器的eip暫存器,其他處理器可忽略這條記錄。

| mark | reclen | offset | rectyp | eip | chksum |

| : | 04 | 0000 | 05 | eip | chksum |

指定目標檔案的執行開始位址。

示例:1、

:0400000508009465f6//(: 04 0000 05 08009465 f6)程式從0x08009465開始執行

2、:04000005080017c117//(: 04 0000 05 080017c1 17)程式從0x080017c1開始執行

六、開始段位址記錄(16 bit/ 32 bit)

這條記錄用於指定intel處理器(例如8086)的開始位址,位址的前兩個位元組會被載入到處理器的cs暫存器,位址的後兩個位元組被載入到ip暫存器,其他處理器可忽略這條記錄。

| mark | reclen | offset | rectyp | cs/ip | chksum |

| : | 04 | 0000 | 03 | cs/ip | chksum |

指定目標檔案的執行開始位址

七、檔案結束記錄(8 bit/ 16 bit/ 32 bit)

| mark | reclen | offset | rectyp | eip | chksum |

| : | 00 | 0000 | 01 | chksum |

用於表示hex檔案的結束

示例:1、

:00000001ff//(: 00 0000 01 ff)

RAW格式 RAW RGB格式

1.1 影象感測器 通過乙個乙個的感光點對光進行取樣和量化 通常所說的130萬畫素等,指的是有130萬個感光點。每乙個感光點只能感光rgb中的一種顏色。但是,要還原乙個真正影象,需要 每乙個點都有rgb三種顏色 所以,對於ccir601或656的格式,在sensor模組的內部會有乙個 isp模組 會...

qcow格式 raw格式

與普通的 raw 格式的映象相比,有以下特性 a 更小的空間占用,即使檔案系統不支援空洞 holes b 支援寫時拷貝 cow,copy on write 映象檔案只反映底層磁碟的變化 c 支援快照 snapshot 映象檔案能夠包含多個快照的歷史 d 可選擇基於 zlib 的壓縮方式 e 可以選擇...

rar格式與zip格式

區別一 zip 的安裝比較大,並僅僅有英文版 漢化包 rar有官方的簡體中文版,並且安裝很小,不足一兆 區別二 winrar 的壓縮率較高,而zip 的壓縮率更低 區別三 zip 支援的格式很多,但已經較老,不大流行 rar支援格式也很多,並且還是流行的 區別四 zip 僅僅能夠壓縮成zip 格式,...