Bin、Hex、ELF、AXF的區別

1.Bin

Bin文件是最純粹的二進制機器代碼, 或者說是"順序格式"。按照assembly code順序翻譯成binary machine code,內部沒有地址標記。Bin是直接的內存映象表示,二進制文件大小即為文件所包含的數據的實際大小。 BIN文件就是直接的二進制文件,一般用編程器燒寫時從00開始,而如果下載運行,則下載到編譯時的地址即可。可以直接在裸機上運行。

2.Hex

Intel?hex?文件常用來保存單片機或其他處理器的目標程序代碼。它保存物理程序存儲區中的目標代碼映象。一般的編程器都支持這種格式。?就是機器代碼的十六進制形式,并且是用一定文件格式的ASCII碼來表示。

簡單總結一下這2種文件格式的區別:
1、HEX文件包含地址信息而BIN文件只包含數據本身,燒寫或下載HEX文件時,一般不需要用戶指定地址,因為HEX文件內部已經包含了地址信息。燒寫BIN文件時則需要用戶指定燒錄的地址信息。
2、HEX文件是用ASCII碼來表示二進制的數值。例如8-BIT的二進制數值0x4E,用ASCII來表示就需要分別表示字符‘4’和字符‘E’,每個字符均需要一個字節,因此HEX文件至少需要2倍BIN文件的空間。

3.ELF

ELF(Executableand linking format)文件是x86 Linux系統下的一種常用目標文件(objectfile)格式,有三種主要類型:

(1)適于連接的可重定位文件(relocatablefile),可與其它目標文件一起創建可執行文件和共享目標文件。
(2)適于執行的可執行文件(executable file),用于提供程序的進程映像,加載到內存執行。
(3)共享目標文件(shared object file),連接器可將它與其它可重定位文件和共享目標文件連接成其它的目標文件,動態連接器又可將它與可執行文件和其它共享目標文件結合起來創建一個進程映像。?

小結:可由elf文件轉化為hex和bin兩種文件,hex也可以直接轉換為bin文件,但是bin要轉化為hex文件必須要給定一個基地址。而hex和bin不能轉化為elf文件,因為elf的信息量要大。Axf文件可以轉化為bin文件,KEIL下可用以下命令fromelf -nodebug xx.axf -bin xx.bin即可。

4.AXF

Axf文件由ARM編譯器產生,除了包含bin的內容之外,還附加其他調試信息,這些調試信息加在可執行的二進制數據之前。調試時這些調試信息不會下載到RAM中,真正下載到RAM中的信息僅僅是可執行代碼。因此,如果ram的大小小于axf文件的大小,程序是完全有可能在ram中調試的,只要axf除去調試信息后文件大小小于ram的大小即可。

調試信息有以下功用:
1、 可將源代碼包括注釋夾在反匯編代碼中,這樣我們可隨時切換到源代碼中進行調試。
2、 我們還可以對程序中的函數調用情況進行跟蹤(通過Watch & Call Stack Window查看)。
3、對變量進行跟蹤(利用Watch & Call Stack Window)。

注意:

(1)axf和elf都是編譯器生成的可執行文件。區別是:ADS編譯出來的是AXF文件。gcc編譯出來的是ELF文件。兩者雖然很像,但還是有差別的。這是文件格式的差別,不涉及調試格式。

(2)axf/elf是帶格式的映象,bin是直接的內存映象的表示。

(3)Linux OS下,ELF通常就是可執行文件,通常gcc -o test test.c,生成的test文件就是ELF格式的,在Linux Shell下輸入./test就可以執行。在Embedded中,上電開始運行,沒有OS系統,如果將ELF格式的文件燒寫進去,包含一些ELF格式的東西,arm運行碰到這些指令,就會導致失敗,如果用bin文件,程序就可以一步一步運行。

所以:HEX和bin文件可以在裸機上運行,而ELF文件是在有OS的環境中運行的。

elf(executable ?and ? link ? format)文件里面包含了符號表,匯編,調試信息等,并不能直接運行。
BIN文件是將elf文件中的代碼段,數據段,還有一些自定義的段抽取出來做成的一個內存的鏡像。

BIN文件需要用objcopy工具,將ELF中的上述信息拷貝出來。(objcopy只是完成兩個obj文件內容的拷貝,那如何控制elf生成bin呢?)

下面這個是ELF格式的詳細介紹,還有Linux下ELF文件的運行原理和過程。

ELF文件的加載和動態鏈接過程 - - ITeye博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/166453.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166453.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166453.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于python 語音轉字幕,字幕轉語音大雜燴

文字轉語音 Python語音合成之第三方庫gTTs/pyttsx3/speech橫評(內附使用方法)_python_腳本之家 代碼示例 from gtts import gTTStts gTTS(你好你在哪兒!,langzh-CN)tts.save(hello.mp3)import pyttsx3engine pyttsx3.init() #創建對象"""語速"…

目前比較好用的護眼臺燈,小學生適合的護眼臺燈推薦

隨著技術的發展,燈光早已成為每家每戶都需要的東西。但是燈光不好可能會對眼睛造成傷害是很多人沒有注意到的。現在隨著護眼燈產品越來越多,市場上臺燈的選擇越來越多樣化,如何選擇一個對眼睛無傷害、無輻射的臺燈成為許多家長首先要考慮的問…

【C++初階】四、類和對象(構造函數、析構函數、拷貝構造函數、賦值運算符重載函數)

相關代碼gitee自取: C語言學習日記: 加油努力 (gitee.com) 接上期: 【C初階】三、類和對象 (面向過程、class類、類的訪問限定符和封裝、類的實例化、類對象模型、this指針) -CSDN博客 引入:類的六個默認成員函數…

如何使用springboot服務端接口公網遠程調試——實現HTTP服務監聽

🌈個人主頁:聆風吟 🔥系列專欄:網絡奇遇記、Cpolar雜談 🔖少年有夢不應止于心動,更要付諸行動。 文章目錄 📋前言一. 本地環境搭建1.1 環境參數1.2 搭建springboot服務項目 二. 內網穿透2.1 安裝…

ATA-2042高壓放大器在細胞的剪切應力傳感器研究中的應用

微流控技術是一種通過微小的通道和微型裝置對流體進行精確操控和分析的技術。它是現代醫學技術發展過程中的一種重要的生物醫學工程技術,具有廣泛的應用前景和重要性。它在高通量分析、個性化醫療、細胞篩選等方面有著巨大的潛力,Aigtek安泰電子今天就將…

.Net面試題4

1.請解釋一下泛型(Generics)在C#中的作用。 泛型是一種將數據類型參數化的機制,使得代碼可以在編譯時具有更強的類型安全性和靈活性。C#中的泛型可以用于類、接口、方法等的定義和實例化。泛型允許在編寫代碼時使用具有不同實參的類型&#x…

HR8833 雙通道H橋電機驅動芯片

HR8833為玩具、打印機和其它電機一T化應用提供一種雙通道電機驅動方案。HR8833提供兩種封裝,一種是帶有L露焊盤的TSSOP-16封裝,能改進散熱性能,且是無鉛產品,引腳框采用100%無錫電鍍。另一種封裝為SOP16,不…

智駕芯片全矩陣「曝光」,這家企業的車載品牌正式官宣

隨著汽車智能化加速,智能駕駛芯片格局逐漸清晰。 針對L0-L2,業內基本采用智能前視一體機方案;要實現高速NOA、城市NOA等更為高階的智駕功能等,則基本采用域控制器方案。從前視一體機至域控,再逐步演進到艙駕一體、中央…

python基于DETR(DEtection TRansformer)開發構建鋼鐵產業產品智能自動化檢測識別系統

在前文中我們基于經典的YOLOv5開發構建了鋼鐵產業產品智能自動化檢測識別系統,這里本文的主要目的是想要實踐應用DETR這一端到端的檢測模型來開發構建鋼鐵產業產品智能自動化檢測識別系統。 DETR (DEtection TRansformer) 是一種基于Transformer架構的端到端目標檢…

springboot項目修改項目名稱

參考該文章正確修改項目名稱:SpringBoot項目怎么重命名_springboot修改項目名稱-CSDN博客

【Lodash】 Filter 與Map 的結合使用

用Filter過濾數據之后,想給某個字段重新賦值 在使用 filter() 方法過濾數據后,如果你想給某個字段賦值,你可以使用 map() 方法來修改數組中的元素。map() 方法可以對數組中的每個元素應用一個函數,并返回一個新的數組。 以下是一…

【Django使用】10大章31模塊md文檔,第5篇:Django模板和數據庫使用

當你考慮開發現代化、高效且可擴展的網站和Web應用時,Django是一個強大的選擇。Django是一個流行的開源Python Web框架,它提供了一個堅實的基礎,幫助開發者快速構建功能豐富且高度定制的Web應用 全套Django筆記直接地址: 請移步這…

外匯天眼:多名投資者賬戶被惡意清空,遠離volofinance!

最近,外匯平臺volofinance因有多名投資者投訴,“榮幸”成為外匯天眼黑平臺榜單中的一員,那么volofinance到底做了什么導致投資者前來投訴曝光呢? 起底volofinace 在網絡搜索中,關于volofinance的信息少之又少&#xf…

成為AI產品經理——模型評估指標

目錄 一、模型評估分類 1.在線評估 2.離線評估 二、離線模型評估 1.特征評估 ① 特征自身穩定性 ② 特征來源穩定性 ③ 特征成本 2.模型評估 ① 統計性評估 覆蓋度 最大值、最小值 分布形態 ② 模型性能指標 分類問題 回歸問題 ③ 模型的穩定性 模型評估指標分…

配置mvn打包參數,不同環境使用不同的配置文件

方法一: 首先在/resource目錄下創建各自環境的配置 要在不同的環境中使用不同的配置文件進行Maven打包,可以使用Maven的profiles特性和資源過濾功能。下面是配置Maven打包參數的步驟: 在項目的pom.xml文件中,添加profiles配置…

python 負數 處理

num_negative -4 print(num_negative) num_dec_to_hex hex(num_negative) print(負數轉十六進制: num_dec_to_hex) /---------------------------------------------------------/ -4 負數轉十六進制:-0x4通過上面代碼片段可以看到,python…

第一個Mybatis項目

(一)為什么要用Mybatis? (1)Mybatis對比JDBC而言,sql(單獨寫在xml的配置文件中)和java編碼分開,功能邊界清晰,一個專注業務,一個專注數據。 (2&…

【C++】:多態

朋友們、伙計們,我們又見面了,本期來給大家解讀一下有關多態的知識點,如果看完之后對你有一定的啟發,那么請留下你的三連,祝大家心想事成! C 語 言 專 欄:C語言:從入門到精通 數據結…

Linux(CentOS7)上安裝mysql

在CentOS中默認安裝有MariaDB(MySQL的一個分支),可先移除/卸載MariaDB。 yum remove mariadb // 查看是否存在mariadb rpm -qa|grep -i mariadb // 卸載 mariadb rpm -e --nodeps rpm -qa|grep mariadb yum安裝 下載rpm // 5.6版本 wge…

XML映射文件

<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"org.mybatis.example.BlogMapper&q…