linux的nm命令详解

fiy 其他 106

回复

共3条回复 我来回复
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    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.out

    3.2. nm命令显示符号的大小:
    nm -s a.out

    3.3. nm命令显示符号所在的行号:
    nm -l a.out

    3.4. nm命令显示动态连接库的符号表信息:
    nm -R libexample.so

    以上就是关于nm命令的基本用法和常用选项的详细解释。通过使用nm命令,我们可以方便地查看可执行文件和动态连接库的符号表信息,帮助我们进行代码调试和分析工作。

    2年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    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年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    一、什么是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年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

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

分享本页
返回顶部