当前位置: 首页 > news >正文

Linux的nm查看动态和静态库中的符号


功能

列出.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 选项,见 Linux:Gcc。
  • 使用nm前,最好先用Linux:File查看对象文件所属处理器架构,然后再用相应交叉版本的nm工具。


举例

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

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

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

 

 

 

相关文章:

  • 产品验证环节的失语现象
  • LDR指令的应用
  • iptables应用
  • 天啊,原来计算机就是佛,信则灵
  • 如何利用HTTP缓存提高网页性能
  • mysql体系架构
  • 运维自动化之使用Cobbler自动化安装系统与FAQ
  • 凯易讯的笔试
  • 高清电影下载推荐
  • Linux系统启动5个阶段
  • 初学tcp/ip协议
  • hrbeu 哈工程 Who Is In Front of Me
  • Linux命令行下常用svn命令
  • 一个form中对应多个动作
  • 关于技术
  • 【EOS】Cleos基础
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • centos安装java运行环境jdk+tomcat
  • ESLint简单操作
  • ucore操作系统实验笔记 - 重新理解中断
  • uva 10370 Above Average
  • Vue.js-Day01
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 从零搭建Koa2 Server
  • 对超线程几个不同角度的解释
  • 关于for循环的简单归纳
  • 面试总结JavaScript篇
  • 用简单代码看卷积组块发展
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 白色的风信子
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • mysql面试题分组并合并列
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • #、%和$符号在OGNL表达式中经常出现
  • (31)对象的克隆
  • (转载)Linux 多线程条件变量同步
  • ***通过什么方式***网吧
  • 、写入Shellcode到注册表上线
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET CF命令行调试器MDbg入门(一)
  • .net core使用ef 6
  • .net framework profiles /.net framework 配置
  • .net 程序发生了一个不可捕获的异常
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • []新浪博客如何插入代码(其他博客应该也可以)
  • [AIR] NativeExtension在IOS下的开发实例 --- IOS项目的创建 (一)
  • [Angular] 笔记 21:@ViewChild
  • [C/C++随笔] char与unsigned char区别
  • [emacs] CUA的矩形块操作很给力啊
  • [ERROR] 不再支持目标选项 5。请使用 7 或更高版本
  • [gdc19]《战神4》中的全局光照技术
  • [HDU5685]Problem A
  • [Java性能剖析]Sun JDK基本性能剖析工具介绍
  • [LeetCode] 178. 分数排名