elf文件中节的虚拟和物理地址 [英] virtual and physical addresses of sections in elf files
问题描述
objdump如何计算elf节的物理地址(LMA)?据我所知,精灵节头仅包含节[1]的虚拟地址(VMA).
How does objdump compute the physical address (LMA) of elf sections? As far as I can tell, elf section headers only contain the virtual address (VMA) of sections [1].
通常,VMA和LMA是相同的.但是对于已初始化的数据段(.data),VMA是变量的RAM位置,而LMA是初始值所在的ROM位置. Crt0负责在调用main()之前将初始值复制到RAM中.例如:
Usually, VMA and LMA are the same. But for initialized data sections (.data), the VMA is the RAM location of the variables and LMA is the ROM location where the initial values are located. Crt0 is responsible for copying the initial values into RAM before main() is called. For example:
$ 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
推荐答案
Find this about LMA: http://www-zeuthen.desy.de/dv/documentation/unixguide/infohtml/binutils/docs/ld/Basic-Script-Concepts.html#Basic-Script-Concepts
重要的是:
每个可装入或可分配的输出节都有两个地址.第一个是VMA或虚拟内存地址.这是运行输出文件时该节将具有的地址.第二个是LMA,即加载内存地址.这是将加载该节的地址.在大多数情况下,这两个地址是相同的.当它们可能不同时,一个示例是将数据段加载到ROM中,然后在程序启动时将其复制到RAM中(此技术通常用于在基于ROM的系统中初始化全局变量).在这种情况下,ROM地址为LMA,RAM地址为VMA
Every loadable or allocatable output section has two addresses. The first is the VMA, or virtual memory address. This is the address the section will have when the output file is run. The second is the LMA, or load memory address. This is the address at which the section will be loaded. In most cases the two addresses will be the same. An example of when they might be different is when a data section is loaded into ROM, and then copied into RAM when the program starts up (this technique is often used to initialize global variables in a ROM based system). In this case the ROM address would be the LMA, and the RAM address would be the VMA
这篇关于elf文件中节的虚拟和物理地址的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!