博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux的nm查看动态和静态库中的符号
阅读量:7078 次
发布时间:2019-06-28

本文共 800 字,大约阅读时间需要 2 分钟。

功能

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

使用

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

有用的options:

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

常见的符号类型:

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

注意几点:

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

举例

更详细的内容见man page。这里举例说明:

nm -u hello.o
显示hello.o 中的未定义符号,需要和其他对象文件进行链接.
nm -A /usr/lib/* 2>/dev/null | grep "T memset"

在 /usr/lib/ 目录下找出哪个库文件定义了memset函数. 

 

 

 

转载地址:http://tndml.baihongyu.com/

你可能感兴趣的文章
大数据资源争夺战此起彼伏 对用户而言是福是祸?
查看>>
一文读懂分布式系统
查看>>
Flask中的请求上下文和应用上下文
查看>>
Web应用防护系统OpenWAF开源CC防护模块
查看>>
重拾百度定位之踩坑篇(上)
查看>>
联想Luigi Brochard:高性能计算三大战略, 推动人工智能飞速发展
查看>>
芒果贴冯振:我是怎么做老年人产品的
查看>>
软银集团任命新董事 ARM与Sprint CEO正式进入董事会
查看>>
“630”后市场急冷 台湾光伏企业营收下滑
查看>>
Facebook调整动态消息算法:更加重视朋友家人的帖子
查看>>
内蒙古云计算 向国家级基地迈进
查看>>
中生代嘉年华 | OKR管理
查看>>
详解让乌克兰总理都“哭泣”的勒索病毒,你到底要不要怕
查看>>
发展人工智能让用户丧失隐私?库克说不
查看>>
智能家居热潮引来资本大佬
查看>>
经济学人:富士康收购夏普风险不小
查看>>
视频会议新格局确立 云计算开启技术叠加时代
查看>>
云存储安防领域应用面广 系视频监控中不可或缺的一环
查看>>
观点:苹果需要一位像微软纳德拉似的CEO
查看>>
【云栖精选7月刊】抛开晦涩的算法、模型,让我们来谈谈互联网架构
查看>>