2016-11-16 6 views
0

ラベルでマークされた命令のアドレスをARMアセンブリ内で取得しようとしています。例えば:私はloopのアドレスをしたい場合は、ここで、各命令は4バイト長であるため、ラベルのセクションとアドレスをセクションに対して静的に取得する(実行時ではなく)

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

はその後、私は、8を取得し、それには2つの命令の後に開始されます。

私はldr r0, =loopを探していないよ、私は私が.sファイルを供給し、事前に

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

おかげのような何かを得るGCCのようなコマンドを探しています明確にする必要があります!

+0

あなたは 'objdumpは-t'を試みたことがありますか? – fuz

+1

あるいは 'nm'コマンドですか? – fuz

+0

@FUZxxl 'nm'コマンドはまさに私が必要とするものです。ありがとう!答えに変換することができます。 – Wazzaps

答えて

4

は、興味のある情報を取得するためにnmまたはobjdump -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 
関連する問題