shell命令之nm

nm命令

http://blog.chinaunix.net/uid-7749031-id-2044727.html

linux@ubuntu:~/work/test$ nm libhello.a 

1.o:
00000000 B a
00000000 T fun1
         U printf

2.o:
00000000 T fun2
         U printf
linux@ubuntu:~/work/test$ nm  libhisi_ext.a

sample_comm_vi_ext.o:
00000000 t $a
00000058 t $a
000001dc t $a
00000000 d $d
00000000 r $d
00000038 t $d
000001bc t $d
00000000 b $d
0000025c t $d
00000010 N $d
000000e0 d DEV_ATTR_6114_720P_2MUX_BASE
00000070 d DEV_ATTR_BT656D1_2MUX
00000000 d DEV_ATTR_BT656D1_4MUX
         U HI_MPI_VB_CreatePool
         U HI_MPI_VENC_AttachVbPool
000001dc T HI_MPI_VENC_CreateChn_Ext
         U HI_MPI_VI_EnableDev
         U HI_MPI_VI_SetDevAttr
         U SAMPLE_COMM_VI_SetMask
00000000 T SAMPLE_COMM_VI_StartDev_ext
0000007c r __FUNCTION__.11721
00000000 b m_vbhanle
         U memcpy
         U memset
         U printf
linux@ubuntu:~/work/test$ nm -g --defined-only libhisi_ext.a

sample_comm_vi_ext.o:
000001dc T HI_MPI_VENC_CreateChn_Ext
00000000 T SAMPLE_COMM_VI_StartDev_ext
linux@ubuntu:~/work/test$ nm -g --undefined-only libhisi_ext.a

sample_comm_vi_ext.o:
         U HI_MPI_VB_CreatePool
         U HI_MPI_VENC_AttachVbPool
         U HI_MPI_VI_EnableDev
         U HI_MPI_VI_SetDevAttr
         U SAMPLE_COMM_VI_SetMask
         U memcpy
         U memset
         U printf

输出信息符号对照表(参照 man nm)

符号意义
AGlobal absolute 符号。
aLocal absolute 符号。
BGlobal bss 符号。
C该符号为common。common symbol是未初始话数据段。该符号没有包含于一个普通section中。只有在链接过程中才进行分配。符号的值表示该符号需要的字节数。例如在一个c文件中,定义int test,并且该符号在别的地方会被引用,则该符号类型即为C。否则其类型为B
bLocal bss 符号。
DGlobal data 符号。
dLocal data 符号。
f源文件名称符号。
G该符号也位于初始化数据段中。主要用于small object提高访问small data object的一种方式
TGlobal text 符号。
I该符号是对另一个符号的间接引用
tLocal text 符号。
U未定义符号。
RRead only symbol. 比如在代码中有一个const MAXDATA = 3095; 则MAXDATA就是一个Read only symbol . 该符号位于只读数据区。例如定义全局const int test[] = {123, 123};则test就是一个只读数据区的符号。注意在cygwin下如果使用gcc直接编译成MZ格式时,源文件中的test对应_test,并且其符号类型为D,即初始化数据段中。但是如果使用m6812-elf-gcc这样的交叉编译工具,源文件中的test对应目标文件的test,即没有添加下划线,并且其符号类型为R。一般而言,位于rodata section。值得注意的是,如果在一个函数中定义const char *test = “abc”, const char test_int = 3。使用nm都不会得到符号信息,但是字符串“abc”分配于只读存储器中,test在rodata section中,大小为4。
N这是一个调试符号
D这是一个已经初始化的变量的符号。比如代码中int i = 1和char *str = "Hello"则i和str都是这种类型的符号
TText段的符号。子程序都是这种符号,比如文件中实现了一个函数function,则function就是这种符号
U未定义的符号。如果文件中引用了不存在的函数,则这些未定义的函数符号就是这种类型
Vweak object
WThe symbol is a weak symbol that has not been specifically tagged as a weak object symbol.
-该符号是a.out格式文件中的stabs symbol
S未初始化的符号,比如全局变量int s;则s的符号就是此类型
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值