linux下nm命令详解
-
在Linux系统中,nm命令用于显示目标文件(可执行文件、共享库和目标文件)中的符号表信息。符号表是记录了程序中定义的所有符号(如变量、函数、类等)的地方,包括其名称、类型、大小等信息。通过使用nm命令,我们可以查看、分析和调试目标文件的符号信息。
1. 语法:
nm [options] [file…]
使用nm命令时,可以指定多个目标文件,也可以通过选项来控制输出。
2. 常用选项:
-a:显示全部符号表信息,包括文件名、行号和地址等;
-C:对C++符号进行修正,将符号名进行反混淆;
-g:展示全局符号表信息,包括所有函数、变量和静态变量等;
-D:只展示动态符号表信息,过滤掉静态变量和函数等;
-u:只展示未定义的符号,即需要从其他库中引用的符号;
-p:以可读方式展示符号的地址,即十六进制形式;
-r:展示每个符号的重定位信息,包括其引用的符号和类型等。3. 示例:
– 查看某个目标文件的符号表信息:
$ nm file.o
– 查看可执行文件的符号表信息:
$ nm a.out
– 查看共享库的符号表信息:
$ nm lib.so
– 查看多个文件的符号表信息:
$ nm file1.o file2.o
– 查看符号表信息,并过滤掉静态变量和函数等:
$ nm -D file.o
– 查看符号表信息,并展示每个符号的地址:
$ nm -p file.o
– 查看未定义的符号:
$ nm -u file.o
4. 注意事项:
– 使用nm命令产生的输出信息需要使用合适的工具进行解析和分析,以便更好地理解目标文件的符号信息;
– nm命令输出的信息可以帮助我们了解程序的结构、引用关系,以及在调试时查找问题。以上就是对于Linux下nm命令的详解,通过使用这个命令,我们可以方便地查看目标文件的符号表信息,以便在分析和调试程序时更加准确和高效。
2年前 -
在Linux中,nm命令用于显示目标文件、可执行文件或者共享库中定义的符号信息。它可以用于分析目标文件的符号表以及查看动态链接库的导出的符号。在本文中,我将详细介绍nm命令的用法和一些常用的选项。
1. 基本语法
nm命令的基本语法如下:
nm [选项] 文件其中,选项可以是以下之一:
– -A:以十六进制显示符号地址。
– -C:显示C++语言的符号,包括类名和成员函数。
– -g:只显示全局符号。
– -D:只显示动态链接库的导出符号。
– -P:不显示函数的地址。
– -S:在每个符号的行下面显示源码。2. 显示符号地址
使用-n选项,可以显示符号的地址。例如,以下命令显示了目标文件test.o中所有符号的地址:
nm -n test.o3. 显示全局符号
使用-g选项,可以只显示全局符号。全局符号通常是在源代码中定义的函数或变量。以下命令显示了目标文件test.o中所有的全局符号:
nm -g test.o4. 显示动态链接库导出符号
使用-D选项,可以只显示动态链接库的导出符号。动态链接库是运行时加载的共享库,它可以被多个程序同时使用。以下命令显示了共享库libtest.so中的导出符号:
nm -D libtest.so5. 显示C++符号
使用-C选项,可以显示C++语言的符号,包括类名和成员函数。以下命令显示了目标文件test.o中的C++符号:
nm -C test.o除了上述常用选项外,nm命令还有许多其他选项,如-f、-l、-r等,用于显示更详细的符号信息。通过结合使用不同的选项,可以根据需要来分析目标文件或共享库中的符号信息。
总结:
nm命令是一个非常有用的工具,它可以用于显示目标文件、可执行文件或共享库中定义的符号信息。通过使用不同的选项,可以显示符号的地址、显示全局符号、显示动态链接库导出符号、显示C++符号等。这些功能可以帮助开发者进行目标文件的分析和调试工作。
2年前 -
Linux下的nm命令是一种用于分析目标文件(可执行文件、目标文件、共享库等)的实用工具。 nm命令主要用于查看目标文件中的符号表,可以显示目标文件中已定义的符号和引用的符号。
nm命令的基本语法为:
“`
nm [option] [file]
“`其中,option是可选的命令选项,file是待分析的目标文件。如果没有指定file,则nm命令会默认对a.out文件进行分析。
下面我们来详细介绍一下nm命令的常用选项和操作流程。
### 1. 显示符号表
“`
nm [file]
“`
没有任何选项时,nm命令会默认显示目标文件中的符号表。符号表中包含了目标文件中定义的符号和引用的符号。### 2. 显示符号类型
“`
nm -t [file]
“`
使用-t选项可以显示符号的类型。常见的符号类型包括:
– `U`:未定义符号(外部引用)
– `T`:文本段中的代码
– `D`:数据段中的已初始化数据
– `B`:数据段中的未初始化数据
– `C`:只读数据段中的只读数据
– `R`:共享库中的只读数据
– `W`:数据段中的未初始化数据,已被初始化为0
– `A`:ARM映像中变量符号的节位置描述符
– `C`:硬件寄存器
– `I`:导入符号
– `V`:虚拟符号
– `N`:可忽略的符号### 3. 显示符号值
“`
nm -v [file]
“`
使用-v选项可以显示符号的地址值。### 4. 按符号名称排序
“`
nm -p [file]
“`
使用-p选项可以按符号名称进行排序。### 5. 显示外部符号和文件名
“`
nm -u [file]
“`
使用-u选项可以只显示未定义的符号和外部引用的符号,以及文件名。### 6. 以十六进制格式显示地址值
“`
nm -x [file]
“`
使用-x选项可以以十六进制格式显示地址值。### 7. 以反序显示符号表
“`
nm -r [file]
“`
使用-r选项可以以反序显示符号表。### 8. 显示符号的大小
“`
nm -S [file]
“`
使用-S选项可以显示符号的大小。### 9. 只显示动态符号
“`
nm -D [file]
“`
使用-D选项可以只显示动态符号,即在共享对象中定义或引用的符号。这是nm命令的一些常用选项,通过这些选项,我们可以对目标文件进行更加详细的分析。
总结:
本文详细介绍了Linux下nm命令的用法,包括显示符号表、显示符号类型、显示符号值、按符号名称排序等操作。通过对nm命令的使用,可以更好地了解和分析目标文件中的符号信息。2年前