12

objdumpはelfセクションの物理アドレス(LMA)をどのように計算しますか?私の知る限り、elfセクションヘッダーにはセクション[1]の仮想アドレス(VMA)のみが含まれています。

通常、VMAとLMAは同じです。ただし、初期化されたデータセクション(.data)の場合、VMAは変数のRAMの場所であり、LMAは初期値が配置されているROMの場所です。Crt0は、main()が呼び出される前に初期値をRAMにコピーする役割を果たします。例えば:

$ objdump -h my.elf
Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0003c3d0  00080000  00080000  00010000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  5 .data         000008d0  40000000  000d08d4  00060000  2**3
                  CONTENTS, ALLOC, LOAD, DATA

-トム

[1] http://www.ouah.org/RevEng/x430.htm

4

3 に答える 3

9

LMA については、 http ://www-zeuthen.desy.de/dv/documentation/unixguide/infohtml/binutils/docs/ld/Basic-Script-Concepts.html#Basic-Script-Concepts を参照してください。

重要なのは次のとおりです。

すべてのロード可能または割り当て可能な出力セクションには、2 つのアドレスがあります。1 つ目は VMA、つまり仮想メモリ アドレスです。これは、出力ファイルが実行されたときにセクションが持つアドレスです。2 番目は LMA、つまりロード メモリ アドレスです。これは、セクションがロードされるアドレスです。ほとんどの場合、2 つのアドレスは同じになります。それらが異なる場合の例は、データ セクションが ROM にロードされ、プログラムの起動時に RAM にコピーされる場合です (この手法は、ROM ベースのシステムでグローバル変数を初期化するためによく使用されます)。この場合、ROM アドレスは LMA になり、RAM アドレスは VMA になります。

于 2011-09-02T22:17:41.003 に答える
5

セクション ヘッダーには単一のアドレスが含まれます。セクション ヘッダーのアドレスが VMA のように見えます。プログラム ヘッダーには、VMA から LMA へのマッピングが含まれています。

たとえば、私の elf ファイルに対して "objdump -x" が表示する内容のスニペットを次に示します。

Program Header:
<a few lines removed>
    LOAD off    0x00000240 vaddr 0x00000048 paddr 0x0000018c align 2**0
         filesz 0x00000000 memsz 0x00000004 flags rw-

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
<a few lines removed>
  3 .bss          00000004  00000048  0000018c  00000240  2**1
                  ALLOC

したがって、.bss の VMA は 0x48 です。プログラム ヘッダーを調べると、1 つのエントリの「vaddr」が 0x48 で、paddr が 0x18c (LMA) になっています。

于 2013-09-26T12:44:15.143 に答える
1

物理アドレスは、ELF ファイル セグメントの属性です。ELF ファイル セクションには、そのような属性はありません。ただし、セクションを対応するセグメントのメモリにマップすることは可能です。

物理アドレスの意味はアーキテクチャに依存し、OS やハードウェア プラットフォームによって異なる場合があります。

このリンクから:

p_paddr - 物理アドレッシングが関連するシステムでは、このメンバーはセグメントの物理アドレス用に予約されています。System V はアプリケーション プログラムの物理アドレス指定を無視するため、このメンバーには実行可能ファイルと共有オブジェクトの内容が指定されていません。

Crt0 は、ELF ファイルにある物理アドレスの意味について何らかの仮定をしているようです。この仮定は、特定のシステムには当てはまりますが、別のシステムでは保証されません。

于 2011-06-10T00:02:50.643 に答える