我试图在没有重写汇编程序的情况下获取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 :(得分: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