HEX文件格式詳解

HEX文件格式詳解

HEX文件格式詳解


HEX文件格式詳解

如圖,其中第一行020000040002f8中,可以看做是0x02 0x00 0x00 0x04 0x02 0x02 0xf8,其前四個字節和最後一個字節有特殊含義。中間爲數據

第一個0×02表示該行數據中有兩個數據

第二個,第三個0x00 0x00表示本行數據的起始地址位

第四個字節有0x00 0x01 0x02 0x03 0x04 0x05,分別有以下含義

'00'Data Rrecord:用來記錄數據,HEX文件的大部分記錄都是數據記錄

'01'文件結束記錄:用來標識文件結束,放在文件的最後,標識HEX文件的結尾

'02'擴展段地址記錄:用來標識擴展段地址的記錄

'03'開始段地址記錄:開始段地址記錄

'04'擴展線性地址記錄:用來標識擴展線性地址的記錄

'05'開始線性地址記錄:開始線性地址記錄

最後一個字節0xf8爲校驗和。校驗和= 0x100 - 累加和。在nodepad++中,如果該校驗和不是綠色,則表示該校驗和是錯的。

注意,0×04標識擴展線性地址的記錄,所以如上圖中的020000040002f8中,拓展地址是0002。那麼第二行數據的起始地址就是0002c000,即0x0002c000開始

補充內容開始:
前面記錄的比較簡單,但看起來還是不好理解,下面是詳細通俗易懂版本的hex文件說明,應該能滿足大部分同學的需要。
HEX文件格式詳解

第一字節表示該行的數據字節數;如第1行只有 0x08 0x00 兩個字節的數據,類型是 04 ,即該行記錄的是一個拓展地址(0x08 0x00 是地址信息,用法是將該地址(0x0800<<16) 後作爲基地址。並且表示在下一個04類型行出現之前都要使用該地址.

例如第2行的地址信息是 0x0000,則表示該行數據從0x08000000( (0x0800<<16) | 0x0000 )開始記錄。

第3行則從 0x08000010 ( (0x0800<<16) | 0x0010 )開始記錄。

另外最後一個字節的校驗和 0xBA = 0xff & ( 0x100- (0x10+4*(0x00)+0x5F+0x00+...+0x00+0x08) ) = 0xff & (0x100-0x246);

沒錯,就是從每行的第一個字節開始計算。
HEX文件格式詳解

小技巧: 在nodepad++中,如果校驗和不是綠色,則表示校驗和錯誤,如上圖中的第6行.正確的應該是 BA
HEX文件格式詳解
16行位置只有四個數據,但是 標註類型是 05, 即他是一個 “開始線性地址記錄”。
說那麼多,什麼是開始線性地址記錄呢?其實他就是函數入口地址
例如我的 .map 文件中可以看到以下信息

Memory Map of the image

Image Entry point : 0x08020189
....
__Vectors_End 0x08020188 Data 0 ......
__main 0x08020189 Thumb Code 0 entry.o(.ARM.Collect
00000000)
_main_stk 0x08020189 Thumb Code 0 entry2.o(.ARM.Collect
00000001)
_main_scatterload 0x0802018d Thumb Code 0 entry5.o(.ARM.Collect
00000004)
HEX文件格式詳解
這一行就是類型是 0x01, 表示文件結束.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章