Linux NM命令完全指南: 解析NM命令功能与用法(linuxnm命令详解)

  Linux NM命令主要用于查看子程序、符号的定义,该命令是由Object Code 编译器Gold提供的,绝大多数在GNU/Linux系统中使用的二进制文件(Imanges)中都会存在其特有的可执行程序,它可以会动态库加载,编译连接时就会到系统默认的公共类库目录和用户自己定义的指定目录下去搜索,NM是查找这些动态库内部结构和符号信息的利器,它可以查看函数、类型、数据成员的地址和大小等信息。本文将介绍NM命令的功能及用法,以更加深入的理解其在Linux系统中的作用。

  NM的基本命令格式如下:

nm [-BdosC] [-A arch] [-n] [-l] [-t format] [-u] [-A|-D] [--size-sort] [--help] [--version] [objfile...]

  NM有下面几个子功能模式:

(1) -B:忽略动态链接库(注意:仅用于Solaris版本的NM)

(2)-d:显示所有符号,包括未定义符号

(3)-o:在NM输出中显示文件名 (主要是用于多文件处理)

(4)-C:假定对符号表的排序已经发生改变,并显示定义的成员名

(5)-A arch:指定架构arch (处理多架构的文件)

(6)-n:按照符号名字排序

(7)-l:显示每个符号上下文

(8)-t format:设置输出格式,可以是一种格式字符串,也可以使用几个特殊缩写选项:posix, sysv, or bsd

(9)-u:只显示未被定义的符号

(10)–size-sort:根据符号大小进行排序

  除了上述功能参数,NM命令还可以使用-A、-D参数将输出从地址和类型分开,两者之间用双列输出显示。例如:

nm –D sample  
! symbol_name type size
! test_func2 T 0

  以上的输出结果表明,sample文件中定义了一个叫做test_func2的函数,它的类型是T ,大小是0。

  总结以上,NM命令可以帮助我们查看可执行文件内的符号信息,能够更加有效的将链接或者绑定函数库和符号信息,让我们有效率的去使用可执行文件中的函数或者结构体,为我们提供很大的便利,特别是我们在debug的时候,节省了很多不必要的排查时间,所以NM命令非常值得我们去学习。


数据运维技术 » Linux NM命令完全指南: 解析NM命令功能与用法(linuxnm命令详解)