是什么决定了内存重新映射操作后的位置独立性?

问题描述 投票:0回答:1

我已经开始阅读Miro Samek的"Building Bare-Metal ARM Systems with GNU",发现自己陷入了某个问题。在PDF的第10页上找到的注释之一中发现了引起我困惑的原因:

注意:函数low_level_init()可以使用以下限制在C / C ++中进行编码。该函数必须在ARM状态下执行,并且不得依赖于.data节的初始化或.bss节的清除。另外,如果完全执行了内存重新映射,则它必须在low_level_init()函数内部发生,因为此函数返回后代码不再与位置无关。

代码“不再与位置相关”的精确度如何?从low_level_init返回之后/在_cstartup标签之后,似乎引用的代码(在PDF的第7-9页上可见)仍然与位置无关。 _cstartup标签后的指令似乎唯一不同之处是它们引用了链接描述文件中定义的标签(本指南的第3节)。

那么重映射如何精确地影响紧随其后的指令是否与位置无关?

我已经开始阅读Miro Samek的“用GNU构建裸机ARM系统”,发现自己陷入了某个问题。我感到困惑的原因是在...

assembly memory arm gnu remap
1个回答
1
投票

与位置无关的是加载时概念,而不是运行时概念。位置无关是一种质量的代码,它可以将其加载到内存中的任何地址,并且仍然可以工作,但是位置无关并不是正在运行的程序的质量。

© www.soinside.com 2019 - 2024. All rights reserved.