转自https://blog.csdn.net/qq_16683355/article/details/52297884

功能

列出.o、.a、.so中的符号信息,包括符号的值,符号类型及符号名称等。所谓符号,通常指定义出的函数,全局变量等

使用

$ nm [option(s)] [file(s)]

常用的option

  • -A 在每个符号信息的前面打印所在对象文件名称;
  • -C 输出demangle过了的符号名称;
  • -D 打印动态符号;
  • -l 使用对象文件中的调试信息打印出所在源文件及行号;
  • -n 按照地址/符号值来排序;
  • -u 打印出那些未定义的符号;

常见的符号类型

  • -A 该符号的值在今后的链接中将不再改变;
  • -B 该符号放在BSS段中,通常是那些未初始化的全局变量;
  • -D 该符号放在普通的数据段中,通常是那些已经初始化的全局变量;
  • -T 该符号放在代码段中,通常是那些全局非静态函数;
  • -U 该符号未定义过,需要自其他对象文件中链接进来;
  • -W 未明确指定的弱链接符号;同链接的其他对象文件中有它的定义就用上,否则就用一个系统特别指定的默认值.

注意几点

  • -C 总是适用于c++编译出来的对象文件。还记得c++中有重载么?为了区分重载函数,c++编译器会将函数返回值/参数等信息附加到函数名称中去形成一个mangle过的符号,那用这个选项列出符号的时候,做一个逆操作,输出那些原始的、我们可理解的符号名称。
  • 使用 -l 时,必须保证你的对象文件中带有符号调试信息,这一般要求你在编译的时候指定一个-g选项,见Linux:Gcc。
  • 使用nm前,最好先用Linux:File查看对象文件所属处理器架构,然后再用相应交叉版本的nm工具。

举例

更多信息见man nm。这里举例说明

$ nm -u hello.o
# 显示hello.o 中的未定义符号,需要和其他对象文件进行链接.
$ nm -A /usr/lib/* 2>/dev/null | grep "T memset"
# 在 /usr/lib/ 目录下找出哪个库文件定义了memset函数.

最新文章

  1. URAL 2089 Experienced coach Twosat
  2. npm 使用记录
  3. Activiti 查询最新版本的流程定义
  4. python datetime模块参数详解
  5. SSH框架是个怎么回事?
  6. 记录:Ubuntu下安装mysql
  7. hdu 2955 Robberies 背包DP
  8. 数值统计 AC 杭电
  9. Html内容超出标记宽度后自动隐藏
  10. c++ 容器、继承层次、句柄类
  11. 4-jQuery - AJAX post()
  12. NavigationBar的显隐和颜色设置
  13. 利用URL protocol在网页打开本地exe
  14. sql语句回忆录1-多表连接子查询
  15. 学习图像算法阶段性总结 (附一键修图Demo)
  16. 10-Python入门学习-函数的对象与嵌套、名称空间与作用域、闭包函数
  17. php使用redis的GEO地理信息类型
  18. Add correct host key in /root/.ssh/known_hosts to get rid of this message
  19. PHP字符串反转
  20. Linux指令范例速查手册

热门文章

  1. CentOS 使用firewalld打开防火墙与端口
  2. Python+MapReduce实现矩阵相乘
  3. vue-router的简单理解
  4. logic pro x 下载
  5. R语言并行运算示例 parallel 包
  6. 自定义Cordova插件(基础篇)
  7. [python]目录及文件操作
  8. 微信小程序 swiper轮播 自定义indicator-dots样式
  9. PHP随机生成要求位数个字符(大小写字母+数字)
  10. hadoop 安装之 hadoop、hive环境配置