精华内容
下载资源
问答
  • Linux下的nm命令详解nm命令的输出包含三个部分:1 符号值。默认显示十六进制,也可以指定; 2 符号类型。小写表示是本地符号,大写表示全局符号(external); 3 符号名称。 给个例子:00000000 b .bss00000000 d .data...

    Linux下的nm命令详解

    nm命令的输出包含三个部分:1 符号值。默认显示十六进制,也可以指定; 2 符号类型。小写表示是本地符号,大写表示全局符号(external); 3 符号名称。 给个例子:00000000 b .bss00000000 d .data00000000 r .rdata00000000 t .text         U ___main00000000 T _add0000000d T _main00000000 D _num100000004 D _num2                 U _printf其中符号名称的含义:A 符号值是绝对的。在进一步的连接中,不会被改变。

    B 符号位于未初始化数据段(known as BSS).

    C 共用(common)符号. 共用符号是未初始化的数据。在连接时,多个共用符号可能采用一个同样的名字,如果这个符号在某个地方被定义,共用符号被认为是未定义的引用.

    D 已初始化数据段的符号

    G 已初始化数据段中的小目标(small objective)符号. 一些目标文件格式允许更有效的访问小目标数据,比如一个全局的int变量相对于一个大的全局数组。

    I 其他符号的直接应用,这是GNU扩展的,很少用了. N 调试符号.

    R 只读数据段符号. S 未初始化数据段中的小目标(small object)符号.

    T 代码段的符号.

    U 未定义符号.

    V 弱对象(weak object)符号. 当一个已定义的弱符号被连接到一个普通定义符号,普通定义符号可以正常使用,当一个未定义的弱对象被连接到一个未定义的符号,弱符号的值为0.

    W 一个没有被指定一个弱对象符号的弱符号(weak symbol)。 - a.out目标文件中的刺符号(stabs symbol). 这种情况下,打印的下一个值是其他字段,描述字段,和类型。刺符号用于保留调试信息.

    ? 未知符号类型,或者目标文件特有的符号类型.

    命令参数-tradix  --radix=radix符号值得进制。d 十进制, o 八进制, x 十六进制.

    -D  --dynamic显示动态符号,只在对象是动态时有用.

    -fformat  --format=format输出的格式,有"bsd","sysv" 或"posix"可选。默认是“bsd”.

    -g  --extern-only只显示外部符号.

    -l  --line-numbers对每一个符号,使用调试信息去查找文件名和行号。

    -u  --undefined-only只显示未定义的符号.

    --defined-only只显示已定义的符号.--help

    展开全文
  • linux nm命令

    2019-11-29 10:00:43
    nm是names的简称,通过该指令可以列举文件中的符号(一般是库文件),因为很多时候我们并不首要关注库逻辑实现,只需要知道某些函数或变量的命名冲突等问题,这个时候就可以使用nm命令,当然,类似的命令还有其他的,...

    功能

    nm是names的简称,通过该指令可以列举文件中的符号(一般是库文件),因为很多时候我们并不首要关注库逻辑实现,只需要知道某些函数或变量的命名冲突等问题,这个时候就可以使用nm命令,当然,类似的命令还有其他的,这里我只讲nm。

    Usage: nm [option(s)] [file(s)]
     List symbols in [file(s)] (a.out by default).
     The options are:
      -a, --debug-syms       只显示调试信息
      -A, --print-file-name   在每行符号信息前,打印查询的文件名
      -C, --demangle[=STYLE] 将低级别的符号名称转换为用户级别的名称,意思是转换为用户较容易理解的形式
      -D, --dynamic          显示动态符号信息
      -f, --format=FORMAT    设置信息输出格式. 它可以是`bsd',`sysv' 或者 `posix'. 默认为 `bsd'
      -g, --extern-only      只显示外部符号;封装成动态库时,需要被外部调用的函数必须是外部符号,否则无法使用
      -l, --line-numbers     显示每个符号的文件名和行号
      -n, --numeric-sort     将符号按地址排序
      -r, --reverse-sort     反向排序
      -S, --print-size       显示定义符号的大小
      -u, --undefined-only   仅显示未定义符号
      -X 32_64               (ignored)

    一般显示格式

    值(the symbol value)、类型(the symbol type)、名字(the symbol name) 

    类型

    nm 将找到的符号值使用十六进制缺省表示,并在函数前添加其类型,类型主要有:

    描述
    A 符号绝对,链接过程不允许被改变
    B/b 非初始化符号,出现在bss段中
    C 公有符号,链接时会被同名符号覆盖
    D/d 初始化符号
    G/g 初始化符号,面向小数据访问优化
    I 其它符号的间接引用
    N 调试符号
    P 栈区符号(清空)
    R/r 符号只读
    S/s 非初始化符号,面向小数据访问优化
    T/t 代码区符号
    U 未定义或在外部定义的符号
    u 全局唯一,GNU保留符
    V/v 弱定义符(详见C++强弱符号定义)
    W/w 弱符号,但是还没有被弱对象定义
    - stabs格式符号
    ? 无法识别的符号

     

     

     

    展开全文
  • linux NM 命令使用介绍

    千次阅读 2018-07-13 20:02:23
    nm -AU file | grep XXX -A 每行或者显示全路径名称或者显示对象库名。 -U 未定义符号。 nm 用途介绍 nm命令被用于显示二进制目标文件的符号表。二进制目标文件包括:对象文件(.out)、可执行文件、静态库、动态...
    1. 快速使用
      nm -Au file | grep XXX
      -A 每行或者显示全路径名称或者显示对象库名。
      -u 未定义符号。
      XXX 你需要查找的变量名或者函数名

    2. nm 用途介绍
      nm命令被用于显示二进制目标文件的符号表。二进制目标文件包括:对象文件(.out)、可执行文件、静态库、动态库。

    3. 什么时候需要用到 NM 命令(可以在什么场景下帮助我们什么地方?)
      当我们编译或者运行程序,出现如下错误时,由于这个错误原因较多,因此需要排除某些原因:

     undefined reference to “XXX”
    

    有可能是我们依赖的库有问题,此时可以用 nm 查看该库的符号表,已查看 XXX 对应符号是否存在该库中,如果不存在,说明库不对,需要重新下载或编译该依赖库。

    当然该错误出现的原因不止库不正确,也有可能是我们程序源码本身的问题,比如名称不对,形参类型不对(出现重载)。

    下图是在 Ubuntu1804 平台显示静态库符号表的输出:
    nm

    参考链接:
    1)用 nm 排查错误
    2)nm 命令简介

    展开全文
  • Linux nm命令介绍

    2014-10-14 09:11:02
    Linux nm命令介绍  2012-12-09 13:50:35| 分类: 默认分类|举报|字号 订阅 nm用来列出目标文件的符号清单。下面是nm命令的格式: nm [-a | --debug-syms] [-g | --extern-only] [-B][-C | --...

    Linux nm命令介绍  

    2012-12-09 13:50:35|  分类: 默认分类|举报|字号 订阅

    nm用来列出目标文件的符号清单。下面是nm命令的格式:
    nm [-a | --debug-syms] [-g | --extern-only] [-B][-C | --demangle] [-D | --dynamic] [-s | --print-armap][-o | --print-file-name] [-n | --numeric-sort][-p | --no-sort] [-r | --reverse-sort] [--size-sort][-u | --undefined-only] [-l | --line-numbers] [--help][--version] [-t radix | --radix=radix][-P | --portability] [-f format | --format=format][--target=bfdname] [objfile...]

           对于每一个符号,nm列出其值(the symbol value),类型(the symbol type)和名字(the symbol name)
      如果没有为nm命令指出目标文件,则nm假定目标文件是a.out。下面列出该命令的任选项,大部分支持“-”开头的短格式和“—“开头的长格式。


    例如nm libtest.a的输出如下:
    CPThread.o: 
    00000068 T Main__8CPThreadPv 
    00000038 T Start__8CPThread 
    00000014 T _._8CPThread 
    00000000 T __8CPThread 
    00000000 ? __FRAME_BEGIN__ 
    …………………………………

     

    下表列出了每种符号类型的意义:

    符号 
    类型

    说明

    A

    该符号的值是绝对的,在以后的链接过程中,不允许进行改变。这样的符号值,常常出现在中断向量表中,例如用符号来表示各个中断向量函数在中断向量表中的位置。

    B

    该符号的值出现在非初始化数据段(bss)中。例如,在一个文件中定义全局static int test。则该符号test的类型为b,位于bss section中。其值表示该符号在bss段中的偏移。一般而言,bss段分配于RAM中

    C

    该符号为common。common symbol是未初始话数据段。该符号没有包含于一个普通section中。只有在链接过程中才进行分配。符号的值表示该符号需要的字节数。例如在一个c文件中,定义int test,并且该符号在别的地方会被引用,则该符号类型即为C。否则其类型为B。

    D

    该符号位于初始话数据段中。一般来说,分配到data section中。例如定义全局int baud_table[5] = {9600, 19200, 38400, 57600, 115200},则会分配于初始化数据段中。

    G

    该符号也位于初始化数据段中。主要用于small object提高访问small data object的一种方式。

    I

    该符号是对另一个符号的间接引用。

    N

    该符号是一个debugging符号。

    R

    该符号位于只读数据区。例如定义全局const int test[] = {123, 123};则test就是一个只读数据区的符号。注意在cygwin下如果使用gcc直接编译成MZ格式时,源文件中的test对应_test,并且其符号类型为D,即初始化数据段中。但是如果使用m6812-elf-gcc这样的交叉编译工具,源文件中的test对应目标文件的test,即没有添加下划线,并且其符号类型为R。一般而言,位于rodata section。值得注意的是,如果在一个函数中定义const char *test = “abc”, const char test_int = 3。使用nm都不会得到符号信息,但是字符串“abc”分配于只读存储器中,test在rodata section中,大小为4。

    S

    符号位于非初始化数据区,用于small object。

    T

    该符号位于代码区text section。

    U

    该符号在当前文件中是未定义的,即该符号的定义在别的文件中。例如,当前文件调用另一个文件中定义的函数,在这个被调用的函数在当前就是未定义的;但是在定义它的文件中类型是T。但是对于全局变量来说,在定义它的文件中,其符号类型为C,在使用它的文件中,其类型为U。

    V

    该符号是一个weak object。

    W

    The symbol is a weak symbol that has not been specifically tagged as a weak object symbol.

    -

    该符号是a.out格式文件中的stabs symbol。

    ?

    该符号类型没有定

    符号 
    类型

    说明

    A

    该符号的值是绝对的,在以后的链接过程中,不允许进行改变。这样的符号值,常常出现在中断向量表中,例如用符号来表示各个中断向量函数在中断向量表中的位置。

    B

    该符号的值出现在非初始化数据段(bss)中。例如,在一个文件中定义全局static int test。则该符号test的类型为b,位于bss section中。其值表示该符号在bss段中的偏移。一般而言,bss段分配于RAM中

    C

    该符号为common。common symbol是未初始话数据段。该符号没有包含于一个普通section中。只有在链接过程中才进行分配。符号的值表示该符号需要的字节数。例如在一个c文件中,定义int test,并且该符号在别的地方会被引用,则该符号类型即为C。否则其类型为B。

    D

    该符号位于初始话数据段中。一般来说,分配到data section中。例如定义全局int baud_table[5] = {9600, 19200, 38400, 57600, 115200},则会分配于初始化数据段中。

    G

    该符号也位于初始化数据段中。主要用于small object提高访问small data object的一种方式。

    I

    该符号是对另一个符号的间接引用。

    N

    该符号是一个debugging符号。

    R

    该符号位于只读数据区。例如定义全局const int test[] = {123, 123};则test就是一个只读数据区的符号。注意在cygwin下如果使用gcc直接编译成MZ格式时,源文件中的test对应_test,并且其符号类型为D,即初始化数据段中。但是如果使用m6812-elf-gcc这样的交叉编译工具,源文件中的test对应目标文件的test,即没有添加下划线,并且其符号类型为R。一般而言,位于rodata section。值得注意的是,如果在一个函数中定义const char *test = “abc”, const char test_int = 3。使用nm都不会得到符号信息,但是字符串“abc”分配于只读存储器中,test在rodata section中,大小为4。

    S

    符号位于非初始化数据区,用于small object。

    T

    该符号位于代码区text section。

    U

    该符号在当前文件中是未定义的,即该符号的定义在别的文件中。例如,当前文件调用另一个文件中定义的函数,在这个被调用的函数在当前就是未定义的;但是在定义它的文件中类型是T。但是对于全局变量来说,在定义它的文件中,其符号类型为C,在使用它的文件中,其类型为U。

    V

    该符号是一个weak object。

    W

    The symbol is a weak symbol that has not been specifically tagged as a weak object symbol.

    -

    该符号是a.out格式文件中的stabs symbol。

    ?

    该符号类型没有定


    -A、-o或--print-file-name:在找到的各个符号的名字前加上文件名,而不是在此文件的所有符号前只出现文件名一次。 
    则nm –A 的输出如下:
    libtest.a:CPThread.o:00000068 T Main__8CPThreadPv 
    libtest.a:CPThread.o:00000038 T Start__8CPThread 
    libtest.a:CPThread.o:00000014 T _._8CPThread 
    libtest.a:CPThread.o:00000000 T __8CPThread 
    libtest.a:CPThread.o:00000000 ? __FRAME_BEGIN__ 
    …………………………………………………………
    -a或--debug-syms:显示调试符号。 
    -B:等同于--format=bsd,用来兼容MIPS的nm。 
    -C或--demangle:将低级符号名解码(demangle)成用户级名字。这样可以使得C++函数名具有可读性。 
    -D或--dynamic:显示动态符号。该任选项仅对于动态目标(例如特定类型的共享库)有意义。 
    -f format:使用format格式输出。format可以选取bsd、sysv或posix,该选项在GNU的nm中有用。默认为bsd。 
    -g或--extern-only:仅显示外部符号。 
    -n、-v或--numeric-sort:按符号对应地址的顺序排序,而非按符号名的字符顺序。 
    -p或--no-sort:按目标文件中遇到的符号顺序显示,不排序。 
    -P或--portability:使用POSIX.2标准输出格式代替默认的输出格式。等同于使用任选项-f posix。 
    -s或--print-armap:当列出库中成员的符号时,包含索引。索引的内容包含:哪些模块包含哪些名字的映射。 
    -r或--reverse-sort:反转排序的顺序(例如,升序变为降序)。 
    --size-sort:按大小排列符号顺序。该大小是按照一个符号的值与它下一个符号的值进行计算的。 
    -t radix或--radix=radix:使用radix进制显示符号值。radix只能为“d”表示十进制、“o”表示八进制或“x”表示十六进制。 
    --target=bfdname:指定一个目标代码的格式,而非使用系统的默认格式。 
    -u或--undefined-only:仅显示没有定义的符号(那些外部符号)。 
    -l或--line-numbers:对每个符号,使用调试信息来试图找到文件名和行号。对于已定义的符号,查找符号地址的行号。对于未定义符号,查找指向符号重定位入口的行号。如果可以找到行号信息,显示在符号信息之后。 
    -V或--version:显示nm的版本号。 
    --help:显示nm的任选项。

    展开全文
  • 目录nm命令的基本使用什么是nm命令nm命令的常用参数举个栗子输出符号类型详解 nm命令的基本使用 什么是nm命令 nm命令是linux下针对某些特定文件的分析工具,能够列出库文件(.a、.lib)、目标文件(*.o)、可执行...
  • Linux nm 命令

    千次阅读 2009-07-15 15:03:00
    nm [‘-a’|‘--debug-syms’] [‘-g’|‘--extern-only’] [‘-B’] [‘-C’|‘--demangle’[=style]] [‘-D’|‘--dynamic’] [‘-S’|‘--print-size’] [‘-s’|‘--print-armap’] [‘-A’|‘-o’|‘--print...
  • nm -helpOVERVIEW: llvm symbol table dumperUSAGE: nm [options] --s Dump only symbols from this segment and section name, Mach-O onlyOPTIONS:General options:-B - Alias for --form...
  • 原文转自:...     1. Linux nm 命令 nm [‘-a’|‘--debug-syms’] [‘-g’|‘--extern-only’] [‘-B’] [‘-C’|‘--demangle’[=style]] [‘-D’|‘--dynamic’]
  • linuxnm 命令

    2015-04-07 17:01:26
    PC操作系统:ubuntu 11.10 使用的开发板:am335x_evm 开发板使用的操作系统:linux 3.2 ...nm [ -A ] [ -C ] [ -X {32|64|32_64}] [ -f ] [ -h ] [ -l ] [ -p ] [ -r ] [ -T ]
  • 00. 目录 文章目录00. 目录01. 命令概述02....如果没有为nm命令指出目标文件,则nm假定目标文件是a.out。下面列出该命令的任选项,大部分支持“-”开头的短格式和“—“开头的长格式。 -A、-o或--...
  • Linuxnm和ldd 命令

    2014-10-20 11:20:33
    1. Linux nm 命令 nm [‘-a’|‘--debug-syms’] [‘-g’|‘--extern-only’] [‘-B’] [‘-C’|‘--demangle’[=style]] [‘-D’|‘--dynamic’] [‘-S’|‘--print-size’] [‘-s’|‘--print-armap’] [‘-A...
  • linuxnm命令的使用

    2019-10-09 06:02:31
    linux下强大的文件分析工具 -- nm 什么是nm nm命令是linux下自带的特定文件分析工具,一般用来检查分析二进制文件、库文件、可执行文件中的符号表,返回二进制文件中各段的信息。 目标文件、库文件、可执行文件 首先...
  • nm 命令输出项解析

    2019-11-27 09:27:38
    Linux下的nm命令详解 nm命令的输出包含三个部分:1 符号值。默认显示十六进制,也可以指定; 2 符号类型。小写表示是本地符号,大写表示全局符号(external); 3 符号名称。 给个例子: 00000000 b .bss 00000000 d ....
  • DATE: 2018.11.13 ... nm命令介绍的很多,但大多不介绍其函数符号标志的含义。 最近在调试动态库时常用到...nm -A * |grep “aaa” | c++filt // -A 为了显示文件, c++filt转换为可读风格,好像有个参数也能实现类似...
  • 文章目录Linux 命令(1)—— nm 命令一、命令简介二、使用方法三、命令选项四、常用示例五、其它输出结果:符号类型: 一、命令简介 nm是names的缩写, nm命令主要是用来查看文件中的符号信息。可以查看的文件包括...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,766
精华内容 5,106
关键字:

linuxnm输出

linux 订阅