linux的nm命令
-
nm命令是Linux操作系统中的一个工具,用于显示二进制文件中的符号表。符号表是二进制文件中包含的函数、全局变量和其他符号的列表。通过使用nm命令,可以查看二进制文件中定义和引用的所有符号,并对它们进行排序和过滤。
nm命令的基本用法是在终端中输入”nm”,后面跟着要查看符号表的二进制文件的路径。例如,要查看一个名为”example”的可执行文件中的符号表,可以使用以下命令:
nm example
nm命令会输出符号表中的每个符号的地址、类型和名称。它将符号分为三个主要类型:函数(Function)、全局变量(Global variable)和局部变量(Local variable)。
对于函数符号,nm命令会显示函数的地址和所在的文件名。例如,以下输出显示了一个名为”myFunction”的函数符号和它所在的文件路径:
0000000000401160 T myFunction
对于全局变量符号,nm命令会显示变量的地址和所在的文件名。例如,以下输出显示了一个名为”myVariable”的全局变量符号和它所在的文件路径:
0000000000601000 D myVariable
对于局部变量符号,nm命令会显示变量的相对地址和所在的文件名。例如,以下输出显示了一个名为”myLocalVariable”的局部变量符号和它所在的文件路径:
0000000000601000 d myLocalVariable
除了默认输出,nm命令还可以使用一些选项和参数来改变输出的方式。例如,使用”-C”选项可以将符号名中的特殊字符转义为可打印字符,使用”-r”选项可以按照逆序显示符号,使用”-a”选项可以显示所有符号,包括未定义的符号。可以通过在终端中输入”man nm”来查看所有可用的选项和参数的详细说明。
总之,nm命令是一个非常有用的工具,可以帮助我们分析和了解二进制文件中的符号信息。它在调试和分析代码、查找符号冲突和链接问题等方面都具有重要作用。
2年前 -
nm命令是Linux系统中的一个工具,主要用来查看二进制文件的符号表信息。它可以帮助开发人员分析和调试二进制文件,了解其包含的符号、函数和变量等信息。以下是关于nm命令的一些重要用法和功能:
1. 查看符号表信息:使用“nm 文件名”命令可以查看二进制文件的符号表信息。符号表是二进制文件中存储程序所使用的函数、变量和其他符号的表格。通过使用nm命令,我们可以查看二进制文件中包含的所有符号和相关信息,比如符号的地址、类型和大小等。
2. 筛选特定类型的符号:nm命令支持使用选项来筛选特定类型的符号。比如,“nm -u 文件名”命令可以只列出未定义的符号,而“nm -g 文件名”命令可以只列出全局符号。这种筛选功能有助于开发人员定位和分析特定类型的符号。
3. 查看静态库中的符号:nm命令可以用来查看静态库(.a文件)中的符号表信息。静态库是一种将多个目标文件打包成一个文件的方式,使用静态库可以在链接时将所需的符号直接复制到可执行文件中。通过使用nm命令查看静态库中的符号表信息,我们可以了解库中包含的函数和变量等信息。
4. 查看共享库中的符号:nm命令也可以用来查看共享库(.so文件)中的符号表信息。共享库是一种可以在运行时加载的二进制文件,它可以被多个进程共享使用,有助于提高系统的资源利用率和程序的灵活性。通过使用nm命令查看共享库中的符号表信息,我们可以了解库中包含的函数和变量等信息。
5. 符号表重定位:nm命令支持使用选项来进行符号表的重定位。重定位是指将符号表中的符号与实际地址进行匹配的过程,通过使用nm命令的重定位选项,我们可以将未找到的符号链接到正确的地址上,从而解决符号找不到的问题。
总结起来,nm命令是一个非常有用的工具,它可以让开发人员在Linux系统中查看和分析二进制文件的符号表信息。无论是进行代码分析、调试或者解决符号找不到的问题,都离不开nm命令的帮助。
2年前 -
一、介绍
nm命令是一个非常有用的Linux命令,用于显示目标文件或者是可执行程序中所存储的符号表。它可以显示目标文件中定义的符号、已经定义的符号以及未定义的符号。符号可以是函数名、变量名或者是对象名等。nm命令可以在Linux系统中用于以下两方面:
1. 用于开发人员在调试过程中定位函数的地址或者是查看各模块函数的调用关系;
2. 用于系统管理员或者是其他人员查看二进制文件中的符号。二、语法
nm命令的语法如下所示:
“`
nm [options] [file…]
“`三、操作选项
常用的操作选项如下所示:
1. -n:按照数值的顺序显示符号表;
2. -p:不进行排序,按照文件中的顺序显示符号表;
3. -r:只显示未定义的符号;
4. -a或者–debug-syms:除了默认情况下显示的符号外,还显示所有调试符号;
5. -o或者–only-undefined:只显示未定义的符号;
6. -u或者–undefined-only:只显示未使用的符号;
7. -j或者–section:只显示指定的节(section)中的符号;
8. –plugin:加载指定名称的插件模块;
9. –version:显示nm命令的版本信息。四、示例
1. 显示目标文件的符号表
“`
nm object_file
“`
这个命令将会显示目标文件object_file中定义的符号表。2. 显示可执行程序的符号表
“`
nm executable_file
“`
这个命令将会显示可执行文件executable_file中存储的符号表。3. 显示符号的地址
“`
nm -n executable_file
“`
这个命令将会显示可执行文件executable_file中定义的符号,并按照符号的地址排序。4. 显示未定义的符号
“`
nm -u executable_file
“`
这个命令将会显示可执行文件executable_file中未定义的符号。5. 过滤只显示指定节的符号
“`
nm -j .data executable_file
“`
这个命令将会只显示可执行文件executable_file中.data节(section)存储的符号。2年前