2016-11-16 29 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