2016-11-16 1 views
0

어셈블러를 다시 작성하지 않고 섹션과 관련하여 레이블로 표시된 명령어의 주소를 ARM 어셈블리에서 가져 오려고합니다. 예를 들어 각 명령 여기에 4 바이트이기 때문에 섹션과 관련하여 섹션의 레이블과 섹션 주소를 정적으로 얻음 (런타임이 아님)

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

내가 loop의 주소를 원하는 경우

는 내가 8 얻고 두 개의 명령 후 시작됩니다.

내가 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 
관련 문제