linux的nm命令详解
-
nm命令是Linux下的一个非常实用的工具,用于查看可执行文件和动态连接库的符号表信息。下面我们来详细了解一下nm命令的用法和功能。
1. nm命令的基本用法
nm命令的基本用法格式如下:
nm [选项] [可执行文件]选项说明:
– 可执行文件:指定要查看符号表信息的可执行文件。2. nm命令的常用选项
2.1. -A:显示所有符号的信息,包括未导出的符号。
2.2. -a/–debug-syms:显示调试符号的信息。
2.3. -B/–print-file-name:在每个符号前显示其所在的文件名。
2.4. -C/–demangle[=style]:将C++符号进行反编译,显示其原始的函数名。
2.5. -f/–external-ref:显示外部引用(external reference)符号的信息。
2.6. -g/–extern-only:只显示全局外部符号。
2.7. -l/–line-numbers:显示符号所在的行号。
2.8. -n/–numeric-sort:按照符号值进行排序。
2.9. -o/–no-sort:不进行排序,按照原始顺序显示符号。
2.10. -p/–portability:以可移植的方式显示符号的值。
2.11. -R/–dynamic:显示动态连接库的符号表信息。
2.12. -S/–size-sort:按照符号大小进行排序。
2.13. -s/–print-size:显示符号的大小。
2.14. -t/–defined-only:只显示已定义的符号。
2.15. -u/–undefined-only:只显示未定义的符号。3. nm命令的使用示例
3.1. nm命令查看可执行文件的符号表信息:
nm a.out3.2. nm命令显示符号的大小:
nm -s a.out3.3. nm命令显示符号所在的行号:
nm -l a.out3.4. nm命令显示动态连接库的符号表信息:
nm -R libexample.so以上就是关于nm命令的基本用法和常用选项的详细解释。通过使用nm命令,我们可以方便地查看可执行文件和动态连接库的符号表信息,帮助我们进行代码调试和分析工作。
2年前 -
nm命令是一个用于显示目标文件(二进制文件或者库文件)中的符号表的Linux工具。它的主要用途是帮助开发人员解析二进制文件,并查看其中定义的符号,如函数、变量等。以下是对nm命令的详细解释和使用示例。
1. 显示符号表:
使用nm命令时,最基本的用法是直接传入目标文件的路径。例如,对于一个名为test.o的目标文件,可以使用以下命令显示它的符号表:
“`
nm test.o
“`
这将输出目标文件中的所有符号以及它们的地址和类型。2. 过滤输出:
nm命令默认会输出所有符号,包括函数、变量、全局符号等。有时我们只关心某一类符号,可以使用过滤选项进行筛选。例如,要只显示函数符号,可以使用`-t`或者`–defined-only`选项:
“`
nm -t test.o
“`
这将仅显示目标文件中定义的函数符号。3. 查看符号的具体地址:
nm命令默认显示符号的地址是十六进制格式的,但有时我们希望以十进制格式显示。可以使用`-n`或者`–numeric-sort`选项来实现:
“`
nm -n test.o
“`
这将以十进制格式显示符号的地址。4. 输出格式化:
nm命令默认输出的格式比较简洁,但如果需要更详细的信息,可以使用`-C`或者`–demangle`选项来对C++函数名进行解码:
“`
nm -C test.o
“`
这将对C++函数名进行解码,并显示可读的函数名。5. 查看动态符号表:
nm命令除了可以查看目标文件的符号表外,还可以查看动态链接库中的符号表。只需要将动态链接库的路径作为参数传给nm命令即可:
“`
nm libtest.so
“`
这将显示libtest.so库文件中的符号表。以上是对nm命令的详细解释和使用示例。通过使用nm命令,开发人员可以更好地理解二进制文件,并从中获取所需的信息。
2年前 -
一、什么是nm命令?
nm命令是一个用于查看二进制目标文件符号表的实用工具。它可以显示目标文件或共享库中定义和引用的符号,并根据不同的标志显示不同的信息。nm命令可以帮助开发人员了解目标文件的结构,查找符号定义和引用的位置,以及查找符号的类型和存储位置。
二、nm命令的基本用法
nm命令的基本语法如下:
“`
nm [option] file…
“`
其中,option为nm命令的选项,file为要查看的目标文件。1. 查看目标文件中的符号表
使用nm命令最常见的使用方式是查看目标文件中的符号表,该命令将所有的符号依次列出,并给出对应符号的地址和类型等信息。
“`
$ nm myfile.o
“`2. 格式化输出
nm命令支持不同的输出格式,通过加上不同的选项可以得到不同的输出结果。常见的选项有:
– -A:以16进制输出地址和符号的值。
– -C:执行C++名称修饰。
– -D:显示动态符号。
– -n:按符号名称排序。
– -p:显示符号的值。
– -S:显示每个符号的大小。
– -r:按地址逆序显示。
– –defined:显示定义的符号。
– –undefined:显示未定义的符号。“`
$ nm -A myfile.o
“`3. 查看共享库中的符号
nm命令还可以查看共享库中的符号,只需要将共享库文件名作为参数即可。
“`
$ nm mylib.so
“`4. 结合其他命令使用
nm命令通常结合其他命令一起使用,以实现更复杂的功能。例如,通过管道将nm的输出传递给grep命令,可以查找特定的符号。
“`
$ nm myfile.o | grep my_symbol
“`三、nm命令的高级用法
除了基本的用法外,nm命令还有一些高级用法,可以帮助开发人员更深入地了解目标文件。
1. 查看符号的地址和大小
nm命令可以显示每个符号的地址和大小,这对于调试和优化程序非常有帮助。
“`
$ nm -S myfile.o
“`2. 根据符号类型过滤结果
可以通过使用选项来过滤符号表中的结果。例如,可以使用选项”–defined-only”只显示已定义的符号,使用选项”–undefined-only”只显示未定义的符号。
“`
$ nm –defined-only myfile.o
$ nm –undefined-only myfile.o
“`3. 查找特定符号
nm命令可以根据符号名称查找特定的符号。可以使用选项”–demangle”将符号名称反编译,使之更易读。
“`
$ nm –demangle myfile.o | grep main
“`4. 输出结果到文件
nm命令还可以将结果输出到文件中,以便离线查看。
“`
$ nm -A myfile.o > symbols.txt
“`4. 结语
nm命令是一个非常有用的工具,可以用于查看目标文件中的符号表。通过掌握nm命令的基本用法和高级用法,可以更好地理解目标文件的结构和符号的定义与引用关系,帮助开发人员进行调试和优化工作。
2年前