2016-11-16 28 views
0

我试图在没有重写汇编器的情况下获取由ARM汇编中的标签标记的指令的地址。例如:静态地(而不是在运行时)获取标签的部分和地址

.text 
nop   # 0 
mov r1, r2 # 4 
loop: 
mov r0, #170 # 8 

如果我想的loop的地址,然后我拿到8,因为每个指令这里是4个字节长,而且后两个指令开始。

我要澄清,我不是在寻找ldr r0, =loop,我正在寻找像GCC的命令,我喂.s文件,并事先得到类似

loop=.text+0x0000ad4e 
abc=.data+0x0000007a 

谢谢!

+0

你试过'objdump的-t'? – fuz

+1

甚至是'nm'命令? – fuz

+0

@FUZxxl'nm'命令正是我需要的,谢谢!您可以将其转换为答案。 – Wazzaps

回答

4

使用nmobjdump -t命令来检索您感兴趣的信息:在重定位发生之前,由nm打印的符号值是相对于您想要的段开始的。

输出看起来是这样的:

$ nm moves.o 
00000000 T attack_map 
00000280 T generate_moves 
00000160 T gote_in_check 
     U moves_for 
00000320 T play_move 
00000110 T sente_in_check 
000001b0 T turn_board 
00000000 r turn_board.turned_board 

objdump -t

$ objdump -t moves.o 

moves.o:  file format elf32-i386-freebsd 

SYMBOL TABLE: 
00000000 l df *ABS* 00000000 moves.c 
00000000 l  O .rodata 0000001d turn_board.turned_board 
00000000 l d .rodata 00000000 .rodata 
00000000 g  F .text 00000106 attack_map 
00000280 g  F .text 00000099 generate_moves 
00000160 g  F .text 00000047 gote_in_check 
00000000   *UND* 00000000 moves_for 
00000320 g  F .text 00000169 play_move 
00000110 g  F .text 0000004a sente_in_check 
000001b0 g  F .text 000000c7 turn_board