2016-05-20 57 views
0

據我所知bin和精靈之間的基本區別在於elf文件如何加載正確的內存地址併成功執行?

.bin文件只包含位或字節的數據,你需要給的內存地址,當你在內存中加載它,

而在精靈之情況下,有符號查找和可重新定位的表格,所以在編程時無需給出地址。

現在看到attached image。我正在使用LPCexpresso在設備中編寫elf文件。如果你沒有給基地址,那麼默認情況下它將需要0x00000000。現在我第一次編程bootloader.elf,然後main.elf。在這兩種情況下,我都沒有給出基地址。

現在我的問題是,如果我不給地址,那麼elf文件如何決定編程正確的位置,並編程一個圖像後,如果我編程另一個圖像,那麼不是它覆蓋第一個? (因爲在這兩種情況下我們都沒有給出地址,默認情況下它是0x00000000)

回答

2

通常,這些信息位於由鏈接器腳本創建的ELF文件中。

作爲GNU binutils的一部分,有一個名爲「readelf」的工具,它顯示有關ELF部分和標題的信息。不幸的是,這些工具根據其配置工具使用前綴,很可能它將被稱爲「arm-none-readelf」。如果沒有它,結賬http://www.yagarto.org/

所以,如果你輸入「手臂-NONE-readelf main.elf -a」它應該顯示類似:

ELF Header: 
    Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
    Class:        ELF32 
    Data:        2's complement, little endian 
    Version:       1 (current) 
    OS/ABI:       UNIX - System V 
    ABI Version:      0 
    Type:        EXEC (Executable file) 
    Machine:       YOUR ARCHITECTURE 
    Version:       0x1 
    Entry point address:    YOUR ENTRY ADDRESS 
    Start of program headers:   52 (bytes into file) 
    Start of section headers:   YOUR SIZE 
    Flags:        0x300 
    Size of this header:    52 (bytes) 
    Size of program headers:   32 (bytes) 
    Number of program headers:   36 
    Size of section headers:   40 (bytes) 
    Number of section headers:   55 
    Section header string table index: 52 

(請注意,這只是示例數據)。

通常在所有編譯器中都有鏈接器的選項,允許指定ELF的加載地址(用於調用.ld文件)。

希望它有幫助。

相關問題