linuxnm命令解析
-
Linux中的nm命令用于分析可执行文件和共享库中的符号表。它可以列出可执行文件或共享库中定义的全局符号、外部符号和未定义符号的详细信息。
使用nm命令可以了解一个可执行文件或共享库中包含哪些全局变量和函数。我们可以通过nm命令查看符号地址、符号类型以及符号的大小等信息。
nm命令常用的选项有:
– -a或–debug-syms:显示所有符号,包括调试符号。
– -C或–demangle:将C++函数名还原成源代码中的原始形式。
– -D或–dynamic:只显示动态符号。
– -g或–extern-only:只显示外部符号。
– -o或–print-file-name:在每个符号名前面显示文件名。
– -p或–nmformat=posix:以POSIX风格输出符号名。使用nm命令的基本语法如下:
“`
nm [选项] <可执行文件或共享库>
“`举个例子,我们可以使用以下命令查看一个可执行文件的符号表:
“`
nm -C myprogram
“`这个命令会列出myprogram程序中所有的全局变量和函数,并将C++函数名还原成源代码中的原始形式。
除了查看符号表,nm命令还可以用于调试和问题排查。当我们在编译和链接程序时遇到undefined reference错误时,可以使用nm命令查看库文件中是否定义了相关的函数或变量。
综上所述,nm命令是一个强大的工具,可以用来分析可执行文件和共享库中的符号表,帮助我们了解程序中的全局符号、外部符号和未定义符号。它在调试和问题排查过程中也有很大的作用。
2年前 -
Linux的nm命令是一种用于分析目标文件中符号信息的工具。通过nm命令,可以查看一个二进制目标文件(如可执行文件、静态库或动态共享库)中定义和引用的符号列表。以下是对nm命令的解析:
1. 查看符号类型:nm命令可以显示出目标文件中每个符号的类型。其中,常见的符号类型包括函数符号、对象符号、未定义符号等。通过查看符号类型,我们可以了解到目标文件中所定义和引用的符号的具体信息。
2. 查看符号地址:nm命令可以显示出目标文件中每个符号的地址。对于可执行文件而言,符号地址表示该符号在内存中的地址;对于静态库或动态共享库而言,符号地址表示符号在库中的偏移地址。
3. 查看符号大小:nm命令还可以显示出目标文件中每个符号的大小。对于函数符号而言,大小表示函数的代码的大小;对于对象符号而言,大小表示对象的大小。
4. 查看符号绑定:nm命令可以显示出目标文件中每个符号的绑定情况。在ELF文件格式中,符号绑定表示符号与地址之间的关系。常见的绑定类型包括局部绑定、全局绑定和弱绑定。
5. 查看符号值:nm命令还可以显示出目标文件中每个符号的值。对于函数符号而言,值表示函数的入口地址;对于对象符号而言,值表示对象的地址。
总之,nm命令是一种用于分析目标文件中符号信息的工具,通过该命令可以查看符号类型、地址、大小、绑定和值。这些信息对于调试和分析二进制文件非常有用。
2年前 -
Linux nm命令用于显示二进制目标文件(可执行文件、目标文件、库文件)中的符号表。它可以显示目标文件中定义的符号、未定义的符号以及符号的地址等信息。通过运行nm命令,可以查看二进制文件中的函数、变量以及其他符号信息,帮助我们了解二进制目标文件中的符号定义情况。
nm命令的基本语法如下:
“`bash
nm [OPTION] [FILE…]
“`其中,OPTION是可选项,FILE是要分析的目标文件名。如果不指定FILE参数,则默认分析a.out文件。
下面详细介绍nm命令的用法。
## 查看符号表
最简单的用法是不加任何参数,直接运行nm命令来查看符号表。例如:
“`bash
nm a.out
“`
这个命令将打印a.out文件中的符号表。符号表中列出了文件中定义的各种符号,包括函数名、变量名等。每个符号的输出包括符号的地址、类型和符号名。## 显示所有符号
使用-n选项可以显示所有的符号,包括未定义符号。例如:
“`bash
nm -n a.out
“`
这将输出a.out文件中所有的符号。## 显示符号地址
默认情况下,nm命令会显示每个符号的地址。地址使用十六进制表示。例如:
“`bash
nm a.out
0000000000401100 T main
“`
这里的地址为0x401100。## 显示符号的类型
nm命令输出的符号表中每个符号旁边有一个字符来表示该符号的类型。常见的符号类型包括:
– U:未定义符号(Undefined symbol),表示该符号在当前文件中没有定义,需要从其他目标文件或库文件中解析链接。
– T:文本段符号(Text segment symbol),表示函数或代码段的符号。
– B:BSS段符号(Block Started by Symbol),表示未初始化数据段的符号。
– D:数据段符号(Data segment symbol),表示初始化的全局变量或静态变量的符号。
– W:弱符号(Weak symbol),表示可以被定义或未定义符号覆盖的符号。
– A:绝对符号(Absolute symbol),表示具有绝对值地址的符号。
– V:弱命令符号(Weak referral symbol),表示在静态库中有多个弱符号具有相同名称。可以使用-n或–numeric-sort选项按照符号地址来排序显示符号表。
## 仅显示特定类型的符号
可以使用–defined-only选项来仅显示已定义的符号。这对于在大型项目中过滤输出非常有用。例如,下面的命令将仅显示已定义的函数符号:
“`bash
nm –defined-only a.out | grep ‘ T ‘
“`## 输出到文件
可以将nm命令的输出重定向到文件中以便后续分析。例如:
“`bash
nm a.out > symbols.txt
“`
这将把符号表信息输出到symbols.txt文件中。## 总结
nm命令是一个有用的工具,用于查看二进制文件中的符号定义和未定义情况。通过分析符号表,我们可以了解目标文件中定义的函数和变量,帮助我们了解代码的结构和依赖关系。2年前