linuxnm命令解析

不及物动词 其他 217

回复

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

    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年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Linux的nm命令是一种用于分析目标文件中符号信息的工具。通过nm命令,可以查看一个二进制目标文件(如可执行文件、静态库或动态共享库)中定义和引用的符号列表。以下是对nm命令的解析:

    1. 查看符号类型:nm命令可以显示出目标文件中每个符号的类型。其中,常见的符号类型包括函数符号、对象符号、未定义符号等。通过查看符号类型,我们可以了解到目标文件中所定义和引用的符号的具体信息。

    2. 查看符号地址:nm命令可以显示出目标文件中每个符号的地址。对于可执行文件而言,符号地址表示该符号在内存中的地址;对于静态库或动态共享库而言,符号地址表示符号在库中的偏移地址。

    3. 查看符号大小:nm命令还可以显示出目标文件中每个符号的大小。对于函数符号而言,大小表示函数的代码的大小;对于对象符号而言,大小表示对象的大小。

    4. 查看符号绑定:nm命令可以显示出目标文件中每个符号的绑定情况。在ELF文件格式中,符号绑定表示符号与地址之间的关系。常见的绑定类型包括局部绑定、全局绑定和弱绑定。

    5. 查看符号值:nm命令还可以显示出目标文件中每个符号的值。对于函数符号而言,值表示函数的入口地址;对于对象符号而言,值表示对象的地址。

    总之,nm命令是一种用于分析目标文件中符号信息的工具,通过该命令可以查看符号类型、地址、大小、绑定和值。这些信息对于调试和分析二进制文件非常有用。

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

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

400-800-1024

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

分享本页
返回顶部