2016-05-20 26 views
0

私はどのようにelfファイルが正しいメモリアドレスをロードして正常に実行されましたか?

BINファイルはビットのみ含まれているか、あなたはそれをメモリにロードする際にデータのバイトとあなたはメモリのアドレスを与える必要があることbinとエルフの基本的な違いを知っているように、

ながらエルフの場合シンボルルックアップとリロケータブルテーブルを持っているので、プログラムするときにアドレスを与える必要はありません。

attached imageを参照してください。私はLPCexpressoを使ってデバイスのelfファイルをプログラムしています。ベースアドレスを指定しないと、デフォルトで0x00000000になります。今私は最初にプログラムbootloader.elfを、その後main.elfをプログラムします。どちらの場合も、私はベースアドレスを与えていません。

ここで私はアドレスを与えていない場合、elfファイルが正しい場所をプログラムする方法を決めて、別のイメージをプログラムすると1つのイメージをプログラムした後に最初のものを上書きしないのですか? (どちらの場合もアドレスを指定せず、デフォルトでは0x00000000)

答えて

2

通常、この情報はリンカースクリプトで作成されたELFファイル内にあります。

GNU binutilsの一部として、 "readelf"というツールがあり、ELFセクションとヘッダーに関する情報が表示されます。不幸にも、これらのツールは、設定ツールに応じて接頭辞を持つために使用されます。おそらく、これは "arm-none-readelf"と呼ばれます。あなたがそう精算http://www.yagarto.org/

、それを持っていない場合は、入力した場合、「アーム-なし-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ファイルと呼ばれる)を指定できるリンカのオプションがあります。

希望します。

関連する問題