关于LMA和VMA,这个问题,有点点小复杂,不过,此处,我会把我的理解,尽量通过通俗的方式解释出来,以方便理解。当然,鄙人水平有限,难免有错,希望各位批评指正。
一般提及LMA和VMA,多数情况都是和ld,链接器相关的。在了解这两个名词的详细含义之前,有些基本知识和前提要说一下:
[基础知识]
1。从你写的源代码到执行你的程序,一般经历了这几个过程:源代码编辑 -> 编译 -> 链接 -> 装载 -> 执行
2。编译,简单说就是用编译工具,将你的源码,变成可以执行的二进制代码,也叫做目标文件,当然只是对应某一种硬件平台,比如此处我用的是Intel的X86系列的CPU,编译出来的,就是针对X86的二进制代码。
3。链接就是,将多个目标文件合并为一个目标文件,称作可执行文件。
LMA(装载内存地址)和VMA(虚拟内存地址)是程序加载和执行过程中的关键概念。LMA是指目标文件中的section在内存中被加载的位置,而VMA则是程序运行时的地址。在大多数情况下,LMA和VMA相同,但在嵌入式系统中,如程序存储在ROM中,两者可能不同,需要在运行前将程序从LMA拷贝到VMA。链接器负责将LMA信息写入二进制文件并解析符号,装载器则负责将内容加载到LMA,并在VMA不同时进行数据段的迁移。
订阅专栏 解锁全文
与VMA(虚拟内存地址)&spm=1001.2101.3001.5002&articleId=36738409&d=1&t=3&u=03d1694c971d4872bf837424a02c4a32)
1272

被折叠的 条评论
为什么被折叠?



