静态获取与其相关的标签的部分和地址(不是在运行时)

时间:2016-11-16 18:52:11

标签: gcc assembly arm

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

提前致谢!

1 个答案:

答案 0 :(得分: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