linux系统nm命令
-
nm命令是Linux系统下的一个辅助工具,用于查看和分析二进制文件中的符号表信息。它可以帮助开发人员在调试和分析程序时更好地理解程序的结构和依赖关系。下面,我将介绍nm命令的用法和常见的参数。
nm命令的基本用法非常简单,只需要在终端中输入”nm 文件路径”即可。例如,要查看一个名为”test”的可执行文件的符号表信息,可以使用命令”nm test”。使用nm命令后,会按照地址顺序列出二进制文件中的所有符号,并显示它们的属性和地址。
nm命令的常见参数有:
– -A:以16进制形式显示符号的地址。
– -a:显示所有符号,包括隐藏的(以小写字母开头的符号)。
– -C:使用C++符号名的指示符。
– -D:仅显示动态符号。
– -g:显示全局符号。
– -l:显示文件名和行号。
– -s:按字母顺序对符号进行排序。
– -S:显示符号大小。除了基本的参数外,nm命令还可以通过组合使用参数来满足特定的需求。例如,使用命令”nm -A -l test”可以以16进制形式显示符号的地址,并且显示文件名和行号。
nm命令还可以与其他命令结合使用,以便更好地分析程序。例如,结合使用nm和grep命令可以查找特定的符号。命令”nm test | grep symbol”会列出文件中包含”symbol”的所有符号。
总之,nm命令是一个强大的工具,可以帮助开发人员分析和调试程序。通过查看二进制文件的符号表信息,我们可以更好地理解程序的结构和依赖关系,从而加快开发和调试的过程。
2年前 -
nm命令是一个用于查看目标文件中的符号表的工具,它能够显示目标文件中定义和引用的符号。在Linux系统中,nm命令常用于查看可执行文件和共享库文件中的符号信息,帮助开发人员调试和分析程序。
以下是使用nm命令的几个常见用法和功能点:
1. 查看符号信息:nm命令最简单的用法是直接使用文件名作为参数,它会将目标文件中的符号表以默认的格式输出到终端。符号表包括函数名、变量名、常量等,可以帮助开发人员了解程序的结构和逻辑。
2. 过滤符号信息:nm命令支持使用一些选项来过滤符号信息,例如只显示函数名(-j选项)、只显示全局符号(-g选项)等。这些选项可以根据具体的需求来使用,提高查看符号信息的效率和准确性。
3. 查看符号类型:nm命令将符号分为几种类型,如函数(T)、变量(D、B)、常量(C)等。通过nm命令输出的结果,可以很容易地判断符号的类型,并根据需要对程序进行调试或优化。
4. 查看符号地址:nm命令输出的结果中包含了符号的地址信息,通过查看符号的地址,可以帮助开发人员定位问题。例如在程序崩溃时,可以使用nm命令查看崩溃位置附近的符号地址,进而进行问题调试和修复。
5. 查看符号依赖关系:nm命令还可以查看目标文件与其他目标文件或共享库文件之间的符号依赖关系。在开发和编译过程中,这些依赖关系非常重要,它们决定了程序的链接过程和运行时的符号解析。
总结来说,nm命令是一个非常有用的工具,可以帮助开发人员了解程序的符号信息,从而进行调试、优化和分析。通过合理地使用nm命令,可以提高程序开发和维护的效率,并帮助解决各种与符号相关的问题。
2年前 -
标题:Linux系统中的nm命令详解
引言:
nm命令是Linux系统中的一个非常有用的工具,它主要用于查看目标文件或者可执行文件中的符号表信息。通过nm命令,我们可以了解一个程序中使用的函数、全局变量以及库函数等信息。在本文中,我们将详细介绍nm命令的使用方法和操作流程。一、什么是nm命令
nm命令是Linux系统中的一个二进制文件分析工具,它可以用来显示目标文件或者可执行文件中的符号表信息。符号表是编译器在编译过程中生成的一份记录了函数、变量以及其他符号的列表,使用nm命令可以方便地查看这些信息。二、nm命令的基本语法
nm命令的基本语法如下所示:
nm [选项] 文件…三、nm命令的常用选项
nm命令提供了许多选项,下面介绍一些常用的选项:
1. -A 或者 –with-all:
显示目标文件中的所有符号,包括未导出的符号;
2. -D 或者 –defined-only:
只显示已定义的符号,排除未定义的符号;
3. -U 或者 –undefined-only:
只显示未定义的符号,排除已定义的符号;
4. -t 或者 –syms:
只显示符号表,不显示其他信息;
5. -l 或者 –line-numbers:
显示每个符号对应的行号(只在可执行文件中有效)。四、nm命令的使用示例
下面通过几个示例来演示nm命令的使用方法及其输出结果。
1. 查看可执行文件中的符号表:
nm -C a.out输出结果类似于:
0804a004 D _edata
0804a00c B _end
0804a00c B __end__
08049000 T _start
0804909c t deregister_tm_clones
080490e0 T __do_global_dtors_aux这些信息可以告诉我们可执行文件中的全局变量、函数等符号。
2. 查看动态链接库中的符号表:
nm -D /usr/lib/libc.so输出结果类似于:
0001f008 T abort
000660a0 A __aeabi_dadd
00066098 A __aeabi_dcmpeq
00066040 A __aeabi_dcmplt
00066158 A __aeabi_dcmpun
0001f830 T __aeabi_d2lz
…这些信息可以告诉我们库文件中的函数符号。
3. 查找指定函数所在的目标文件:
nm -o a.out printf输出结果类似于:
[Index] Value Symbol
[60] 00000000 w _ITM_deregisterTMCloneTable (in /tmp/cc1fnLAs.o)
[91] 00000000 t __do_global_dtors_aux (in /tmp/cctlCthK.o)
[188] 00000000 T printf (in /usr/lib/libc.so)这个示例显示了目标文件a.out中printf函数的详细信息,同时还显示了函数所在的目标文件。
五、总结
nm命令是Linux系统中的一个非常有用的工具,通过它我们可以查看目标文件或者可执行文件中的符号表信息。本文介绍了nm命令的基本语法、常用选项以及使用示例。希望本文可以帮助读者更好地理解和使用nm命令。2年前