linux系统nm相关命令

fiy 其他 361

回复

共3条回复 我来回复
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    Linux系统中,nm命令是一个非常有用的工具,用于查看可执行文件(应用程序或库文件)中的符号表信息。它可以显示出可执行文件中的所有符号,包括函数名、全局变量等。下面是一些常用的nm相关命令。

    1. nm :该命令用于查看一个可执行文件的符号表信息。其中,可以是一个可执行文件名或者一个共享库文件名。

    2. nm -C :这个命令与上一个命令类似,但是会对C++名字进行一个简化,使得输出结果更易读。

    3. nm -D :这个命令用于查看可执行文件中的动态符号表信息,也就是查看运行时动态链接的符号。

    4. nm -a :这个命令用于显示符号表中的所有符号,包括局部符号和全局符号。

    5. nm -r :这个命令用于显示只读符号,也就是只在可执行文件中使用,而不被外部程序使用的符号。

    6. nm -S :这个命令用于显示文件中的符号与文件中的节(section)的对应关系。

    以上是常用的一些nm相关命令。使用这些命令,我们可以方便地查看可执行文件中的符号信息,对于调试和分析程序非常有帮助。希望以上内容对您有所帮助。

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

    在Linux系统中,nm是一个非常有用的命令,用于显示目标文件中的符号信息。以下是一些常用的nm命令及其功能:

    1. nm -A : 显示所有符号(包括函数、变量和模板)的详细信息。这些信息包括符号类型、大小、绑定状态和所属节段等。

    2. nm -C : 显示符号名称的demangled版本,即消除了C++编译器添加的名称修饰。

    3. nm -D : 仅显示动态符号表中的符号信息,这些符号通常会被动态链接器使用。

    4. nm -g : 仅显示全局符号表中的符号信息,即全局可见的函数和变量。这些符号在目标文件中未定义,因此需要从其他目标文件或共享库中解析。

    5. nm -u : 显示未定义的符号,这些符号在目标文件中被引用,但未在目标文件内部定义。这些符号通常在链接过程中由其他目标文件或共享库提供定义。

    6. nm -r : 显示只读符号的信息,这些符号通常用于只读段中的常量或只读数据。

    7. nm -p : 显示符号的值以16进制格式,用于获取符号的地址。

    8. nm –demangle : 显示C++函数的demangled版本。

    9. nm -n : 显示数字格式的符号地址,用于定位目标文件中的特定符号。

    10. nm –defined-only : 仅显示在目标文件中定义的符号,而不显示引用的外部符号。

    除了以上命令,还有其他一些选项和参数可用于定制nm命令的输出。可以通过man nm命令查看nm命令的详细用法和选项解释。

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

    在Linux系统中,nm命令用于列出目标文件、共享库或可执行文件的符号表。符号表是用来记录程序中定义的全局变量、全局函数和全局对象的地方。nm命令可以帮助我们查看目标文件的符号信息,包括符号类型、符号地址和符号名称等。

    以下是一些常用的nm相关命令和操作流程:

    1. 基本用法

    nm命令的基本用法如下:

    “`
    nm [选项] [目标文件]
    “`

    其中,选项可以是下面几种:

    – -A或–without-arch:不显示体系结构类型。
    – -C或–demangle:将C++函数名还原为可读形式。
    – -D或–dynamic:显示动态符号表。
    – -g或–extern-only:只显示外部符号。
    – -n或–numeric-sort:按照地址排序。
    – -o或–print-file-name:在每个输出行前显示文件名。
    – -p或–portability:一行只显示一个符号。
    – -P或–no-sort:
    – -r或–reverse-sort:以相反的顺序排序。
    – -s或–size-sort:按照大小排序。
    – -S或–print-size:在每个输出行前显示符号大小。

    目标文件可以是二进制文件、目标文件、静态库、共享库等。

    2. 显示符号表

    要查看目标文件的符号表,可以使用以下命令:

    “`
    nm 目标文件
    “`

    例如,查看可执行文件a.out的符号表:

    “`
    nm a.out
    “`

    3. 过滤符号类型

    如果只想显示特定类型的符号,可以使用以下命令:

    “`
    nm -t <类型> 目标文件
    “`

    其中,<类型>可以是以下几种类型之一:

    – b:未初始化的数据(BSS段)。
    – d:已初始化的数据(DATA段)。
    – r:只读数据(TEXT段)。
    – t:代码段。
    – U:未定义的符号。

    例如,只显示代码段的符号:

    “`
    nm -t t a.out
    “`

    4. 查找符号

    可以使用grep命令结合nm命令来查找特定的符号。例如,要查找名为`main`的符号,可以使用以下命令:

    “`
    nm a.out | grep ‘ main’
    “`

    5. 显示符号的地址和大小

    要显示符号的地址和大小,可以使用以下命令:

    “`
    nm -S 目标文件
    “`

    例如,显示a.out的符号地址和大小:

    “`
    nm -S a.out
    “`

    6.将C++函数名还原为可读形式

    如果目标文件中包含了C++的命名空间、类和函数,那么nm命令默认会将它们的名称打印出来,看起来比较晦涩。为了将C++函数名还原为可读形式,可以使用以下命令:

    “`
    nm -C 目标文件
    “`

    例如,将a.out中的C++函数名还原为可读形式:

    “`
    nm -C a.out
    “`

    以上就是在Linux系统中使用nm命令的一些常用操作流程。nm命令非常有用,可以帮助我们了解目标文件的符号信息,从而更好地进行调试和分析。

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

400-800-1024

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

分享本页
返回顶部