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. MySQL建表语句生成Golang代码

    1. 背景 对于后台开发新的需求时,一般会先进行各种表的设计,写各个表的建表语句 然后根据建立的表,写对应的model代码.基础的增删改查代码(基础的增删改查服务可以划入DAO(Data Access ...

  2. Base64加密、解密

    #region Base64加密方法 /// <summary> /// Base64加密,采用utf8编码方式加密 /// </summary> /// <param ...

  3. IK分词器实现原理剖析 —— 一个小问题引发的思考

    前言: 网上很多的文章都建议在使用IK分词器的时候,建立索引的时候使用ik_max_word模式:搜索的时候使用ik_smart模式.理由是max_word模式分词的结果会包含smart分词的结果,这 ...

  4. 我的Go并发之旅、01 并发哲学与并发原语

    注:本文所有函数名为中文名,并不符合代码规范,仅供读者理解参考. 上下文 上下文(Context)代表了程序(也可以是进程,操作系统,机器)运行时的环境和状态,联系程序整个生命周期与资源调用,是程序可 ...

  5. Django ORM 事务和查询优化

    一.事务操作 模块 from django.db import transaction 1 开启事务:with transaction.atomic() from django.db import t ...

  6. 基于深度学习的文本分类案例:使用LSTM进行情绪分类

    Sentiment classification using LSTM 在这个笔记本中,我们将使用LSTM架构在电影评论数据集上训练一个模型来预测评论的情绪.首先,让我们看看什么是LSTM? LSTM ...

  7. ProxySQL 配置ProxySQL

    转载自:https://www.jianshu.com/p/212397a1be67 假定你已经对ProxySQL的架构有所了解.本文对ProxySQL的所有配置都是使用Admin管理接口完成的,该管 ...

  8. K8S容器HeadlessService间动态IP通信

    文件网址:https://www.kubebiz.com/KubeBiz/MongoDB?k8sv=v1.20 使用文件网址中提供的yaml文件安装三节点的mongodb集群,其service是hea ...

  9. 第四章:Django表单 - 3:Django表单字段汇总

    Field.clean(value)[source] 虽然表单字段的Field类主要使用在Form类中,但也可以直接实例化它们来使用,以便更好地了解它们是如何工作的.每个Field的实例都有一个cle ...

  10. Fluentd采集示例

    Fluentd通过读取配置文件来加载各插件,日志经由各插件的处理完成输入到输出的整个路由. 本文通过一个最简单的示例来说明配置文件的结构.td-agent.conf默认位于/etc/td-agent/ ...