nm命令参数解释

-A 或-o或 --print-file-name:打印出每个符号属于的文件
-a或--debug-syms:打印出所有符号,包括debug符号
-B:BSD码显示
-C或--demangle[=style]:对低级符号名称进行解码,C++文件需要添加
--no-demangle:不对低级符号名称进行解码,默认参数
-D 或--dynamic:显示动态符号而不显示普通符号,一般用于动态库
-f format或--format=format:显示的形式,默认为bsd,可选为sysv和posix
-g或--extern-only:仅显示外部符号
-h或--help:国际惯例,显示命令的帮助信息
-n或-v或--numeric-sort:显示的符号以地址排序,而不是名称排序
-p或--no-sort:不对显示内容进行排序
-P或--portability:使用POSIX.2标准
-V或--version:国际管理,查看版本
--defined-only:仅显示定义的符号

符号类型含义

* 对于每一个符号来说,其类型如果是小写的,则表明该符号是local的;大写则表明该符号是global(external)的。

符号类型 含义
A 该符号的值是绝对的,在以后的链接过程中,不允许进行改变。这样的符号值,常常出现在中断向量表中,例如用符号来表示各个中断向量函数在中断向量表中的位置。
b,B 该符号的值出现在非初始化数据段(BSS)中。例如,在一个文件中定义全局static int test。则该符号test的类型为b,位于bss section中。其值表示该符号在BSS段中的偏移。
C 该符号为common。common symbol是未初始化的数据。该符号没有包含在一个普通section中,只有在链接过程中才进行分配。符号的值表示该符号需要的字节数。例如在一个C文件中,定义int test,并且该符号在别的地方会被引用,则该符号类型即为C,否则其类型为B。
d,D 该符号位于初始化数据段(data section)。例如定义全局变量 int baud_table[5] = {9600, 19200, 38400, 57600, 115200},则会被分配在初始化数据段中。
g,G 该符号也位于初始化数据段中。主要用于small object提高访问small data object的一种方式。
i 这是对标准ELF符号类型集的GNU扩展。它表示一个符号如果被重定位引用,不会计算该符号的地址,而是必须在运行时计算。
N 该符号是一个debugging符号。
p 该符号在stack unwind section。
r,R 该符号位于只读数据段(read only data section)。例如定义全局const int test[] = {123, 123};则test就是一个只读数据段的符号。
s,S 符号位于非初始化数据区,用于small object。
t,T 该符号位于代码段(text section);T表示导出符号,t表示内部符号。
u 符号是唯一的全局符号。这是GNU对标准ELF符号绑定集的扩展。对于这样的符号,动态链接器将确保在整个过程中只有一个使用此名称和类型的符号。
U 该符号在当前文件中是未定义的,即该符号定义在别的文件中。例如,当前文件调用另一个文件中定义的函数,这个被调用的函数在当前文件就是未定义的,但是在定义它的文件中类型是T。对于全局变量来说,在定义它的文件中,其符号类型为B或D,在使用它的文件中,其类型为U。Linux允许编译DSO时,不链接依赖的DSO;但在编译最终可执行时,需要链接所有需要的符号。
v,V 该符号是一个弱符号。当弱定义符号与正常定义符号链接时,使用正常定义符号时不会出错。当链接未定义的弱定义符号,弱符号的值将变为零,且没有错误。在某些系统上,大写表示已指定默认值。
w,W 该符号是一个弱符号,未专门标记为弱对象符号。当弱定义符号与正常定义符号链接时,使用正常定义符号时不会出错。当链接未定义的弱未定义符号时,该符号的值将以系统特定的方式确定,且不会出错。在某些系统上,大写表示已指定默认值。
- 该符号是a.out格式文件中的stabs symbol。在这种情况下,打印的下一个值是stabs other字段、stabs desc字段和stab类型。stabs符号用于保存调试信息。
? 该符号类型没有定义。

示例

  • 查看静态库:nm -g --defined-only libxxx.a
  • 查看动态库:nm -D -C libxxx.so

参考

Linux nm 命令使用及符号含义_xuq09的专栏-CSDN博客_linux nm

Linux命令 ---- nm 显示目标文件符号_pekwing的博客-CSDN博客

nm命令解释的更多相关文章

  1. nm 命令 程序符号信息查看

    http://www.cnblogs.com/wangkangluo1/archive/2012/07/02/2572438.html 用途 显示关于对象文件.可执行文件以及对象文件库里的符号信息. ...

  2. nm命令介绍

    一.参考文章 网址1:https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/nm.html 参考2: man nm 参考3:<linux ...

  3. 理解docker容器和镜像(layer,ufs)和docker命令解释

    博客好文1:http://blog.csdn.net/x931100537/article/details/49633107(理解docker容器和镜像,理解简单,从原理入手,什么是layer,什么是 ...

  4. linux中的nm命令简介

    转:http://blog.csdn.net/stpeace/article/details/47089585 一般来说, 搞linux开发的人, 才会用到nm命令, 非开发的人, 应该用不到. 虽然 ...

  5. ar命令和nm命令(建库!)

    ar 命令详解 今天,跟着我们的技术大牛学了不少东西,首先就是这个ar命令啦. 当我们的程序中有经常使用的模块,而且这些模块在其他程序中也会用到,为了实现代码重用减少软件开发周期,我们可以将它们生成库 ...

  6. strings和nm命令

    strings和nm命令 strings 一.简介: 显示文件中的可打印字符 二.用法 strings [option(s)] [file(s)] 选项说明: -a – –all 扫描整个文件而不是只 ...

  7. nm命令中符号类型详解

    摘自http://blog.csdn.net/solmyr_biti/article/details/6565479 nm命令介绍的很多,但大多不介绍其函数符号标志的含义.最近在调试动态库时常用到,其 ...

  8. nm命令

    它用来列出一个目标文件中的各种符号. nm命令还是比较简单而且强大的.它用来列出一个目标文件中的各种符号.符号的种类很多,以下是一些常见的符号类型 nm输出字符 含义 R Read only symb ...

  9. 【转】nagios 命令解释

    nagios 命令解释 check_ssh                 界面拼装参数格式如下共3个元素:                         命令!端口!连接超时时间          ...

  10. nginx配置文件结构,语法,配置命令解释

    摘要: nginx的配置文件类似于一门优雅的编程语言,弄懂了它的规范就可以自定义配置文件了,这个很重要~ 1,结构分析 nginx配置文件中主要包括六块:main,events,http,server ...

随机推荐

  1. Python 第四次实验

    1.(程序设计)定义函数def GetRandomChar(),返回一个随机的数字或大写或小写字母,每个符号出现的机会相等.调用该函数8次,生成并输出一个8位的验证码.用户输入该验证码,如果验证码正确 ...

  2. Exchange 2019中的Unified Messaging(UM)

    前天,刚刚安装了测试用的Exchange 2019.安装过程和之前的2016一样,非常顺利.但是在用ECP管理服务器的时候遇到了一个报错.The term 'Get-UMService' is not ...

  3. 使用mbr2gpt将MBR磁盘转换为GPT磁盘

    随着越来越多的新PC的到来,UEFI启动渐渐的取代了BIOS启动方式.不过UEFI需要从GPT磁盘启动,原来的MBR磁盘不行.如果你更换了硬件,只想把磁盘拿到新平台上用又不想重装系统的话就麻烦了.以前 ...

  4. Java SE final关键字

    final关键字 final可以修饰类.属性.方法和局部变量 如下情况,可以使用final 当不希望类被继承时,可以用final修饰 当不希望父类的某个方法被子类覆盖/重写(override)时,可以 ...

  5. Nessus-8.11.1-x64.msi安装包

    希望能给那些和我一样迷茫受挫的小伙伴们一些帮助,这玩意儿下载挺慢的,我把安装包分享出来,如果有博客园账号的,点个赞呗,CSDN那些用着别人的软件还要积分,呸! 08-18更新,截止到现在,已更新到最新 ...

  6. Linux宝塔如何开启指定的目录浏览功能

    哈喽,各位运维晚上好, 今天突发奇想,想给我的个人博客加一个功能,就是如何去打开一个网站文件夹的目录浏览功能,这个还是挺有趣的. 为了以后我还能想起怎么用,我决定记录下来,以便能用,也能给大家一个参考 ...

  7. 我也是一个“翻译家”——关于“robust”

    每次看到"鲁棒性",总是不知道是什么意思,一度怀疑自己是不是中国人,是不是说汉语.每次都要查英汉字典,然后一次次看到: robust(adj.精力充沛的; 坚定的; 粗野的,粗鲁的 ...

  8. 官方文档----ProxySQL 1.4.2 现在支持原生集群!!!

    官方文档地址:https://proxysql.com/blog/proxysql-cluster/ 前言 ProxySQL 是一个去中心化的代理,建议靠近应用部署.这种方法甚至可以很好地扩展到数百个 ...

  9. CentOS系统一键部署jdk,maven,tomcat,mysql

    #!/bin/bash ####使用方法############### # chmod a+x JdTomK-Auto.sh # source JdTomK-Auto.sh ############# ...

  10. useContext 解决函数父子组件传值

    1在父组件外部定义变量A创建上下文,2在父组件使用变量A<A.Provider> <子组件/> </A.Provider> ,3.在子组件中创建变量使用useCon ...