程式碼(CODE)到二進位制(BIN)檔案的編譯過程補充formelf工具

流水江湖發表於2024-05-12

這些步驟將原始碼轉換成可以在目標硬體上執行的機器程式碼。以下是這個過程的一般描述:

預處理(Preprocessing):
原始碼(如 .c、.cpp、.s 等)首先被預處理。
前處理器處理原始檔中的宏定義、條件編譯指令、包含指令(如 #include)等。
前處理器的輸出通常是一個 .i 或 .ii 檔案,它包含了所有宏替換後的原始碼。


編譯(Compilation):
編譯器將預處理後的程式碼轉換成彙編程式碼。
對於高階語言(如 C 或 C++),編譯器會進行語法分析、語義分析、最佳化等步驟。
編譯器的輸出通常是一個或多個 .s 或 .asm 檔案,這些檔案包含了彙編指令。


彙編(Assembly):
彙編器將彙編程式碼轉換成機器程式碼。
彙編器處理彙編指令,將其對映到對應的機器指令,並生成相應的二進位制資料。
彙編器的輸出是物件檔案(.o 或 .obj),這些檔案包含了機器程式碼、除錯資訊和符號表。


連結(Linking):
連結器將多個物件檔案以及庫檔案(.lib 或 .a)組合成一個單一的程式。
連結器解決外部引用,將分散在不同物件檔案中的函式和變數進行地址重定位。
連結器還負責將程式中的各個部分放置到正確的記憶體地址,並新增啟動程式碼、中斷向量等。
連結器的輸出是一個可執行檔案(格式可能因作業系統和編譯器而異,如 .exe、.out 或 .elf、.axf、.FLM)。


轉換到二進位制格式(Conversion to Binary):
在嵌入式開發中,通常需要將可執行檔案轉換成二進位制格式,以便可以直接燒錄到目標硬體上。
這個步驟可以透過不同的工具完成,如程式設計器或燒錄軟體。
轉換工具將可執行檔案中的機器程式碼和資料轉換成目標硬體可以直接執行的二進位制格式(.bin)。
在這個過程中,可能會根據目標硬體的要求進行額外的格式轉換或資料調整。


燒錄(Flashing):
最後,將生成的二進位制檔案燒錄到目標硬體的儲存器中。
燒錄可以透過程式設計器、偵錯程式或專門的燒錄軟體完成。

檔案說明:
.bin 二進位制檔案
.hex 十六進位制檔案
.txt 文字檔案
.asm 彙編檔案
.axf 可執行檔案(keil編譯)
.elf 可執行檔案(gcc編譯)
.out 可執行檔案(iar編譯)

.o 檔案在Keil中的 是一個物件檔案(Object File),它是編譯器在編譯原始碼(如 .c 或 .cpp 檔案)後生成的中間檔案。物件檔案包含了編譯後的機器程式碼,以及一些除錯資訊和符號表,但它們還沒有被連結到一起形成一個可執行檔案。

fromelf 是一個工具From+ELF,可以把elf、axf、flm檔案轉換成bin也可以生成反彙編檔案

1、fromelf --help;檢視幫助
2、fromelf --bin --output test.bin test.axf;.axf檔案生成.bin檔案
3、fromelf --i32 --output test.hex test.axf;.axf檔案生成.hex檔案
4、fromelf --elf --output test.elf test.axf;.axf檔案生成.elf檔案
6、fromelf --text -c test.axf;檢視.axf檔案的反彙編程式碼(程式碼很長,不方便檢視)
7、fromelf --text -c --output test.asm test.axf .axf檔案生成.asm檔案(生成反彙編檔案.asm 方便檢視)
8、fromelf --text --output test.txt test.axf;.axf檔案生成.txt檔案
9、fromelf --text -a -c --output=@L.lst !L //生成反彙編檔案
10、fromelf --text -a -c --output="$L@L.dis" "#L"
原文連結:https://blog.csdn.net/tyustli/article/details/90049930


程式碼(CODE)到二進位制(BIN)檔案的編譯過程補充formelf工具

相關文章