linux中的nm命令详解

不及物动词 其他 55

回复

共3条回复 我来回复
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    nm命令是Linux系统中的一个常用命令,用于显示目标文件中的符号表信息。通过使用nm命令,可以了解一个目标文件中包含的函数、变量以及其他符号的信息,包括它们的地址、类型以及可见性等。

    1. 基本格式

    nm命令的基本格式如下:

    nm [选项] [目标文件]

    在命令行中直接输入nm命令,后面跟着要显示符号表信息的目标文件名即可。如果没有指定目标文件,默认会在当前目录下查找名为a.out的可执行文件,并显示它的符号表信息。

    2. 常用选项

    常用的nm命令选项有以下几种:

    – -A:以十六进制和十进制显示符号的值。
    – -D:只显示动态连接的符号表信息。
    – -g:只显示外部全局符号的信息。
    – -l:只显示动态连接器的符号表信息。
    – -u:只显示未定义的符号信息。
    – -C:显示符号的名称,而不是地址。

    3. 符号类型

    nm命令显示的符号类型有以下几种:

    – T(text):符号位于代码段,表示一个函数或已定义的全局变量。
    – U(undefined):符号未定义,需要在其他目标文件或库文件中解析。
    – C(common):已定义的多个未初始化全局变量。
    – A(absolute):绝对符号,其值不会发生变化。
    – B(bss):已定义的未初始化全局变量。
    – W(weak):弱符号,当出现符号冲突时,会被静态连接器忽略。

    4. 示例

    下面是一些使用nm命令的示例:

    – 显示目标文件的符号表信息:

    nm a.out

    – 以十进制显示符号的值:

    nm -A a.out

    – 只显示动态连接的符号表信息:

    nm -D a.out

    – 只显示外部全局符号的信息:

    nm -g a.out

    总结:nm命令是Linux系统中非常有用的一个命令,通过它可以方便地查看目标文件中的符号表信息。熟练掌握nm命令的使用方法,可以帮助我们更好地理解和调试代码。

    2年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    1. nm命令是Linux系统中的一个非常有用的命令,用于查看目标文件中的符号表。

    2. 符号表是目标文件中保存函数、变量、常量等符号信息的一张表格,它记录了这些符号的地址、大小、类型等信息。

    3. 通过使用nm命令可以查看目标文件中的所有符号,并根据符号的类型、地址等信息进行筛选、排序或过滤。

    4. 执行nm命令时,常见的参数包括:-A表示显示所有符号的地址和类型;-n按符号地址进行排序;-o可以将符号以原始的十六进制格式输出。

    5. nm命令还可以用来检测目标文件中的符号冲突问题,例如多个目标文件中包含了同名的全局函数或变量,在链接时可能会出现冲突错误。通过使用nm命令可以查看这些冲突符号的地址和类型,并找到解决冲突的方法。

    细节化的第二点至少需要解释命令中的几个参数的作用(如-A、-n、-o),以及如何通过nm命令检测目标文件中的符号冲突问题。同时,建议手动示例,在细节化的第五点中给出一个实际的案例展示如何使用nm命令解决冲突符号问题。

    2年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    小标题1:nm命令的基本介绍
    nm命令是Linux系统中的一个用于查看和分析目标文件(包括二进制文件和目标文件)中符号表的工具。符号表是目标文件中存储函数、变量以及其他符号的地方,它们用于链接和加载目标文件时进行符号解析。nm命令可以显示目标文件中的符号列表,并提供一些标记用于标识符号的类型。

    小标题2:nm命令的语法格式
    nm命令的基本语法格式如下:
    nm [OPTIONS] [FILE…]

    其中OPTIONS为可选参数,用于指定nm命令的特定选项和标志;FILE是要查看符号表的目标文件的列表,可以指定一个或多个文件。

    小标题3:nm命令的常用选项
    nm命令有许多选项,常用的选项如下:
    – -A, –debug-syms:显示调试符号。
    – -a, –print-file-name:在每行前面显示文件名。
    – -C, –demangle:对C++符号进行解码。
    – -d, –dynamic:显示动态符号表。
    – -g, –extern-only:仅显示外部符号。
    – -l, –line-numbers:显示行号。
    – -n, –numeric-sort:按照数值排序符号,默认按照符号名称排序。
    – -p, –no-sort:不排序符号。
    – -T, –defined-only:仅显示已定义的符号。
    – -u, –undefined-only:仅显示未定义的符号。
    – -v, –version:显示命令的版本信息。
    – -V, –demangle[=style]:对所有符号进行解码。

    小标题4:nm命令的实际操作示例
    示例1:查看目标文件的符号表
    nm file.o

    示例2:查看目标文件和库文件的符号表
    nm file.o lib.a

    示例3:以数值排序的方式查看目标文件的符号表
    nm -n file.o

    示例4:查看目标文件中的调试符号
    nm -A file.o

    示例5:对C++符号进行解码后查看目标文件的符号表
    nm -C file.o

    小标题5:nm命令的实际应用场景
    1、查看符号表:通过nm命令可以查看目标文件中的符号列表和对应的符号类型,有助于我们了解程序的结构和函数的调用关系。
    2、符号解析:nm命令可以帮助我们解析目标文件中的符号,从而进行调试和修复代码中的错误。
    3、优化程序:通过查看目标文件的符号表,我们可以了解程序中未使用的变量和函数,从而进行代码优化和减小可执行文件的大小。

    小标题6:nm命令的注意事项
    1、nm命令只能查看ELF格式或COFF格式的目标文件,无法查看其他格式的文件。
    2、在使用nm命令时,要注意目标文件和库文件的路径,并确保有权限访问。
    3、nm命令可以通过额外的选项来定制输出结果,可以根据自己的需要灵活使用。

    小标题7:总结
    nm命令是Linux系统中的一个用于查看和分析目标文件中符号表的工具。通过nm命令,我们可以查看目标文件的符号列表、符号类型和符号解析等信息,有助于程序的调试和优化。在使用nm命令时需要注意目标文件的格式和路径,并根据需求灵活使用选项指定输出结果。

    2年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部