我有 ARM Cortex-M 对象文件 (.o),其中包含以下代码:BL $testFunc
。在同一个目标文件中,我还可以找到 testFunc
的实现。我能得到程序执行过程中调用的绝对地址吗?我只有目标文件
答案 0 :(得分:2)
$testFunc
是未解析的链接。在确定绝对地址之前,您必须将目标文件与 C 运行时和 MCU 初始化代码以及任何其他依赖项(库分离目标模块)链接起来。
编译器不知道目标的内存环境。链接器采用单独的目标代码模块和链接器脚本(定义内存映射)并解析链接并定位代码和数据。
链接器可以输出一个 MAP 文件,该文件将包含所有外部链接器代码和数据项的绝对地址。