nm命令是linux系统下用于列出指定文件(二进制文件)中的符合,比如常用的将.c文件编译成可执行程序,里面的函数名,变量名等,以及里面变量对应存储的区域。
语法格式:nm 参数 文件名
图1
如图1,将可执行程序,使用nm命令打开,显示许多符号和参数,这些符号和参数的的说明如下:
第一列是符号值,为一长串数字,默认是十六进制的
第二列是符号类型,有多种符号类型,通常为字母,为小写字母时,表示符合是本地的,为大写字母时,符号是全局的
符合类型有以下类型:
A:符号值且是一个绝对值,不会通过链接而改变
B/b:符号在BSS数据段中
C(大写):表示未初始化的数据
D/d:表示符号在初始化数据段中
G/g:符合也在初始化数据段中,不过是用于small object提高访问small data object的一种方式
i:对标准ELF符号类型集的GNU扩展。它表示一个符号如果被重定位引用,不会计算该符号的地址,而是必须在运行时计算
I(大小i):该符合是对另一个符号的间接引用
N:为调试符号
P:符号在堆栈中
R/r:位于只读数据段中
S/s:符号位于非初始化数据区,用于small object。
在Linux系统中,可以使用nm命令查看运行程序的函数,全局变量等相关信息,可以更好的帮助开发人员了解链接库.so文件的运行结构,提供编程能力。