天天看點

hex檔案格式解析,hex轉bin(C語言)

前言

hex轉bin檔案網上有很多現成的工具,但還是想了解下其中的資料結構跟原理

差別

hex跟bin都是程式燒寫的檔案,那他們有什麼不同呢?

首先看大小,hex檔案都會大于bin檔案,hex檔案打開可以看到一堆數字,而bin檔案隻會得到一堆亂碼。

其實bin檔案就是你程式執行檔案的二進制檔案,裡面可以看做都是機械碼,晶片可以直接運作的

hex檔案不但包含bin檔案的内容(需要自己轉),還有具體内容存放位址,程式運作開始位置等。是以我們用燒錄器燒程式都需要用hex而不是bin,因為bin沒有程式具體燒錄位址的位置。

分析

首先我們随便用記事本打開一個hex檔案,可以看到

hex檔案格式解析,hex轉bin(C語言)

其格式表示為:

起始 本行資料長度 偏移量 資料類型 資料 校驗碼
:(冒号) len load offset type data checksum
  • 以行為機關,每行以冒号開頭,内容全部為16進制碼(以ASCII碼形式顯示)

其中資料類型有:0x00、0x01、0x02、0x03、0x04、0x05。

'00' Data Rrecord:                                  用來記錄資料,HEX檔案的大部分記錄都是資料記錄

'01' End of File Record:                            用來辨別檔案結束,放在檔案的最後,辨別HEX檔案的結尾

'02' Extended Segment Address Record:用來辨別擴充段位址的記錄

'03' Start Segment Address Record:       開始段位址記錄

'04' Extended Linear Address Record:    用來辨別擴充線性位址的記錄

'05' Start Linear Address Record:           開始線性位址記錄

如上圖第一行(所有的數字兩個為一個位元組,要以16進制的方式去看。但是其存在文本是以ascii去存放的),

:020000040801F1

:   表示這一行的資料起始位

02: 表示這一行的資料有兩個位元組的長度(其中08為一個,01為一個)

0000  表示偏移值

04   表示資料類型,看上面列出的5種。04--辨別擴充線性位址的記錄,

官方文檔解釋為32位擴充線性位址記錄用于指定線性基址的位16-31

0801 表示資料内容,這裡表示具體的擴充線性位址的值為0x0801

F1  是校驗位,運算規則是 0x100 - 前面除冒号所有16進制累加和

       這裡就為 0x100 - ((0x02+0x00+0x00+0x04+0x08+0x01)&0xff) = 0xf1

綜合來看,這一行表示将位址指向0x08010000的位址,後面的所有操作就會根據這個位址來存放資料。注意這裡的偏移值0000是無用的,我說的0x08010000是因為高16位為0x0801,而後面資料存放的具體低16位要看那個資料的偏移值。

看原文解釋:

hex檔案格式解析,hex轉bin(C語言)

分析第二行

:1000000010380120AD010108B5010108B302010853

10  表示資料長度16位元組

0000   偏移量 

00      表示這是資料記錄

10380120AD010108B5010108B3020108   具體的資料(這裡的資料都是低位在前高位在後)

53  校驗

這一行表示将資料存放在基于0x08010000位址,連續16個。其中0x08010就是上面第一行定義的高16位位元組值,0000是這裡所代表的偏移值

在檔案最後的地方,還會有這麼兩行資料

 :040000050801018964

 :00000001FF

同樣來分析

第一個,直接看類型為05,表示開始線性位址記錄,通俗來說就是你main函數的程式入口,具體為0x08010189。大家可以去翻一下自己程式map檔案main的位址跟自己hex對比看看

第二個,直接看類型為01,表示辨別HEX檔案的結尾,看到這個就可以結束讀取hex檔案了。後面一般也不會再有内容(有也當看不到)

剩下還有資料類型02 03

02 跟 04是差不多的作用。有一點差别就是02表示16位擴充段位址記錄用于指定段基址的位4-19

03跟 05也是差不多。

所有的資料類型具體可以看hex格式詳解

根據上面整理的内容做了一份hex轉bin的程式(C語言,壓縮包包含hex格式詳解)

積分支援下載下傳(點我)

百度雲分享:

連結:https://pan.baidu.com/s/1WeddHCokAVscsDvrM6htCA 

提取碼:a1b2

有疑問可以評論回報

繼續閱讀