nm命令介绍
一、参考文章
网址1:https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/nm.html
参考2: man nm
参考3:《linux编程一站式学习》第20章 链接详解 的例20.1
二、功能
nm 命令显示关于指定 File 中符号的信息,文件可以是对象文件、可执行文件或对象文件库。如果文件没有包含符号信息,nm 命令报告该情况,但不把它解释为出错条件。(list symbols from object files)
三、截图
  
  
四、符号说明
对于每一个符号来说,其类型如果是小写的,则表明该符号是local的;大写则表明该符号是global(external)的。
- 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就是一个只读数据区的符号。
- 值得注意的是,如果在一个函数中定义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 选项,则 nm 命令只报告与该文件有关的或者库或者对象名。
五、选项说明
- -a或–debug-syms:显示所有的符号,包括debugger-only symbols。
- -B:等同于–format=bsd,用来兼容MIPS的nm。
- -C或–demangle:将低级符号名解析(demangle)成用户级名字。这样可以使得C++函数名具有可读性。
- –no-demangle:默认的选项,不需要将低级符号名解析成用户级名。
- -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:按大小排列符号顺序。该大小是按照一个符号的值与它下一个符号的值进行计算的。
- –target=bfdname:指定一个目标代码的格式,而非使用系统的默认格式。
- -u或–undefined-only:仅显示没有定义的符号(那些外部符号)。
- –defined-only:仅显示定义的符号。
- -l或–line-numbers:对每个符号,使用调试信息来试图找到文件名和行号。
- -V或–version:显示nm的版本号。
- –help:显示nm的选项。
nm命令介绍的更多相关文章
- 打包静态库.a文件的方法(ar,ranlib,nm命令介绍)
		一 常用脚本 1 打包脚本 脚本如下,下面附上ar 和 ranlib命令参考(命令来自于网络) ALLLIB=*.aFILE=`ls *.a`#原来的库解压重命名 for F in $FILEdo ... 
- nm命令中符号类型详解
		摘自http://blog.csdn.net/solmyr_biti/article/details/6565479 nm命令介绍的很多,但大多不介绍其函数符号标志的含义.最近在调试动态库时常用到,其 ... 
- linux中的nm命令简介
		转:http://blog.csdn.net/stpeace/article/details/47089585 一般来说, 搞linux开发的人, 才会用到nm命令, 非开发的人, 应该用不到. 虽然 ... 
- ar命令和nm命令(建库!)
		ar 命令详解 今天,跟着我们的技术大牛学了不少东西,首先就是这个ar命令啦. 当我们的程序中有经常使用的模块,而且这些模块在其他程序中也会用到,为了实现代码重用减少软件开发周期,我们可以将它们生成库 ... 
- Linux操作系统安全-OpenSSL工具常用命令介绍
		Linux操作系统安全-OpenSSL工具常用命令介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.OpenSSL开源项目有三个组件 openssl: 多用途的命令行工具,包 ... 
- linux下nm命令的使用
		linux下强大的文件分析工具 -- nm 什么是nm nm命令是linux下自带的特定文件分析工具,一般用来检查分析二进制文件.库文件.可执行文件中的符号表,返回二进制文件中各段的信息. 目标文件. ... 
- 怎么查看二进制文件内容?linux下nm命令告诉你!
		linux下强大的文件分析工具 -- nm 什么是nm nm命令是linux下自带的特定文件分析工具,一般用来检查分析二进制文件.库文件.可执行文件中的符号表,返回二进制文件中各段的信息. 目标文件. ... 
- 12个Linux进程管理命令介绍(转)
		12个Linux进程管理命令介绍 [日期:2015-06-02] 来源:Linux中国 作者:Linux [字体:大 中 小] 执行中的程序在称作进程.当程序以可执行文件存放在存储中,并且运行的 ... 
- 2.SDK目录结构和adb工具及命令介绍
		安卓开发学习笔记 1.安卓开发之环境搭建 2.SDK目录结构和adb工具及命令介绍 1.SDK目录介绍: ******************************** add-ons:Androi ... 
随机推荐
- (二分查找)LowerBound
			在包含size个元素的,从小到大顺序的int数组a里查找比给定整数p小的,下标最大的元素,找不到返回-1 题解: int LowerBound(int a[],int size,int p) { in ... 
- Webpack - 把json文件打包进js文件
			把html文件打包进index.js 1 新建文件 typings.d.ts declare module "*.html" { const content: st ... 
- 77.Q表达式详解
			Q表达式可以包裹查询条件,可以在多个条件之间进行操作:与或非等.Q表达式一般会放在filter()中进行使用,F表达式一般是放在update()中进行使用. 定义模型的models.py文件中,示例代 ... 
- 第二阶段scrum-3
			1.整个团队的任务量: 2.任务看板: 会议照片: 产品状态: 前端制作完成,数据库正在配置 
- [题解] LuoguP4381 [IOI2008]Island
			LuoguP4381 [IOI2008]Island Description 一句话题意:给一个基环树森林,求每棵基环树的直径长度的和(基环树的直径定义与树类似,即基环树上一条最长的简单路径),节点总 ... 
- 实验吧-密码学-js(Chrome用console.log调试js)
			题目就是js,可能就是一个js的代码,查看源码并复制,在Chrome中打开网页,审查元素. 将复制的代码输入,将eval改成console.log,再回车执行,就得到一段js代码. 代码中有Unico ... 
- SASS - @extend(继承)指令
			SASS – 简介 SASS – 环境搭建 SASS – 使用Sass程序 SASS – 语法 SASS – 变量 SASS- 局部文件(Partial) SASS – 混合(Mixin) SASS ... 
- Codeforces Round #604 (Div. 2) 部分题解
			链接:http://codeforces.com/contest/1265 A. Beautiful String A string is called beautiful if no two con ... 
- 网格视图GridView
			1.常用属性 2.Adapter接口 3.Demo演示 今天观看了GridView的相关视频,并且根据案例,进行了代码的编写和实例 新建GridViewActivity.java继承AppCompat ... 
- [SDOI2016]游戏(树剖+李超树)
			趁着我把李超树忘个一干二净的时候来复习一下吧,毕竟马上NOI了. 题解:看着那个dis就很不爽,直接把它转换成深度问题,然后一条直线x->y,假设其lca为z,可以拆分成x->z和z-&g ... 
