Linker elf文件中节的虚拟和物理地址

Linker elf文件中节的虚拟和物理地址,linker,elf,objdump,Linker,Elf,Objdump,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

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] 物理地址是ELF文件段的一个属性。ELF文件节不具有此属性。不过,也可以将节映射到相应段的内存中

物理地址的含义取决于体系结构,在不同的操作系统和硬件平台之间可能有所不同

由此:

p_paddr-在系统上 物理寻址是相关的,这 成员是为段的 物理地址。因为系统V 忽略的物理寻址 应用程序,此成员具有 可执行文件的未指定内容 文件和共享对象

看起来您的Crt0对ELF文件中物理地址的含义做了一些假设。这一假设可能适用于特定系统,但不适用于其他系统。

找到LMA的相关信息:

重要的是:


每个可加载或可分配的输出部分都有两个地址。第一个是VMA或虚拟内存地址。这是运行输出文件时节将具有的地址。第二个是LMA,或加载内存地址。这是将加载节的地址。在大多数情况下,这两个地址是相同的。它们可能不同的一个例子是,将数据段加载到ROM中,然后在程序启动时复制到RAM中(这种技术通常用于在基于ROM的系统中初始化全局变量)。在这种情况下,ROM地址将是LMA,RAM地址将是VMA。节头包含一个地址。在我看来,部分标题中的地址是VMA。程序头包含VMA到LMA的映射

例如,下面是“objdump-x”为我的elf文件显示的内容的一个片段:

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
程序头:
加载0x00000240 vaddr 0x00000048 paddr 0x0000018c校准2**0
filesz 0x00000000 memsz 0x00000004标志rw-
部分:
Idx名称大小VMA LMA文件关闭Algn
3.bss 00000004000000480000018C 000002402**1
阿洛克

因此,.bss的VMA为0x48。如果您查看程序标题,其中一个条目的“vaddr”为0x48,paddr为0x18c,这就是LMA。

关于这个主题,我不知道任何内容,但似乎LMA是由(使用
AT
)给出的。什么是文件关闭?我想您的猜测是正确的。这里有一个相关的问题:作者说:这有助于认识到“VMA”和“LMA”是GNU实用术语,而不是ELF规范中的术语。。。。有些环境使用p_paddr不是物理地址,而是加载地址(因此称为“LMA”)。。。。