是否有可能让LD打印出符号的值?可能有一种愚蠢的方式来打印价值?
以下是与我的上下文问题相关的详细信息:
我正在使用GCC 4.9编译Cortex-M7的代码。处理器有两组闪存。 0x0020.0000
和0x0800.0000
各占1MB。
在CRT代码中,它尝试将main
到R2
的地址的PC相对负载,然后分支到它。但是,存储在常量表中的值不正确。
来自调试器反汇编:
ldr r2, =APP_ENTRY_POINT
4A29 ldr r2, 0x002003B8
--- thumb_crt0.s -- 226 ------------------------------------
blx r2
4790 blx r2
thumb_crt0.o的objdump:
000000aa <start>:
aa: 2000 movs r0, #0
ac: 2100 movs r1, #0
ae: 4a29 ldr r2, [pc, #164] ; (154 <memory_set+0x8a>)
b0: 4790 blx r2
Word存储在偏移量:
ldr r2, =APP_ENTRY_POINT
080007ED .word 0x080007ED
根据nm
的实际主要地址:
Silverback: nm Nucleo.elf | grep main
002007ec N main
答案 0 :(得分:0)
我找到一个很好的选项ld
将mapfile打印到stdout,然后grep你想要的东西:
g++ a.cpp -Wl,-M | grep -w main
收益率(窗口):
0x00000000004015dc main
注意:当您objdump
未链接的目标文件时,重定位/调用地址通常是错误的:链接器尚未运行。