【发布时间】:2025-12-19 17:30:12
【问题描述】:
我有 ARM Cortex-M 目标文件 (.o),其中包含以下代码:BL $testFunc。在同一个目标文件中,我还可以找到testFunc 的实现。我能得到程序执行期间调用的绝对地址吗?我只有目标文件
【问题讨论】:
-
目标文件不包含绝对地址。绝对地址仅在链接后可用。
-
实际上,@Tarik,这并不完全正确。实际上,绝对地址只能在执行时知道,因为它取决于操作系统将其加载到内存的位置。
-
@SGeorgiades 我使用的是裸机 ARM Cortex-M。不是链接描述文件定义的吗?
-
@SGeorgiades :除了这是一个 Cortex-M MCU,因此可执行文件通常由链接器显式定位并写入闪存 ROM。
-
@SGeorgiades 嗯,你说的确实是 80 年代后期学到的。我们为理论机器实现了汇编器、链接器和加载器。但是,我不愿提及运行时,因为可执行文件是从虚拟内存 0 开始加载的。我没有足够的知识来判断这是否意味着链接期间的静态地址。你怎么看?
标签: c arm cortex-m machine-code