功能

列出.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函数.

转自:http://itech.cnblogs.com/

转载于:https://www.cnblogs.com/bonelee/p/6524322.html

Linux的nm查看动态和静态库中的符号相关推荐

  1. linux命令之查看动态库中字符串-strings

    strings命令是在对象文件或者二进制文件中查找可打印的字符串,有很多的用途,例如一个用法就是在编译的so中定义字符串常量作为动态库的版本号,然后就可以使用strings+grep 组合命令查看当前 ...

  2. 查看so库中是否有某个定义_论Linux ELF中动态库符号重定义利用 属性/Linker 做隐藏的手法...

    假如libgetthree.so libgetseven.so , 同时这两个so内部都用了internal_do_calculation()函数,并且各自定义了自己的internal_do_calc ...

  3. 使用dumpbin工具查看动态库中函数列表

    一.Windows环境下如何安装dumpbin工具? Dumpbin是Visual Studio自带的一个命令行工具,用于查看可执行文件.静态库和动态库的导入表.导出表.符号表等信息.在Windows ...

  4. 【Linux命令】nm 查看动态库和静态库中的符号

    功能 列出.o .a .so中的符号信息,包括诸如符号的值,符号类型及符号名称等.所谓符号,通常指定义出的函数,全局变量等等. 使用 nm [option(s)] [file(s)] 有用的optio ...

  5. linux命令之查看动态库符号-nm

    在调用动态库的时候,经常出现由于动态库接口修改或者版本不匹配导致调用动态库找不到函数接口符号的情况. 原因可能有如下几种: 1.由于c++动态库编译没有加extern c导致函数编译时加了c++的前缀 ...

  6. linux查看动态库导出的符号,Linux下控制动态库导出

    在Linux中动态库的确给程序带来了良好的扩充性,并减少了内存的使用量,但这是有代价的.例如: #include Int main(int argc, char *argv[]) { Printf(& ...

  7. 查看so库中是否有某个定义_从 Rust 库中公开 FFI

    Wikipedia 将 FFI 定义为一种机制,通过这种机制,用一种编程语言编写的程序可以调用或使用用另一种编程语言编写的服务. FFI 可用于加快程序执行(这在 Python 或 Ruby 这类动态 ...

  8. 如何在LINUX上编译运行UE4库中的新环境

    在WINDOWS上的UE4中新建工程并将UE4中环境导入 具体操作如下网页所示 https://zhuanlan.zhihu.com/p/336673072 将新建的环境工程拷贝到LINUX系统中 进 ...

  9. AD 如何查看元器件库中的3D模型?

    1.选择库: 2.选择元器件: 3.点开model

最新文章

  1. 使用git上传代码到github
  2. 什么叫做多媒体计算机技术,多媒体计算机系统是什么
  3. pycharm提示:Class names should use CamelCase convention(类名命名应遵守驼峰命名约定)
  4. VTK修炼之道83:Pipeline管线执行模型
  5. 谈谈离散卷积和卷积神经网络
  6. 云上“炼”码兵器 GitHub Codespaces
  7. php cdi_CDI和lambda的策略模式
  8. php的内置函数strrpos_php strrpos 字符串查找函数内部源码实现
  9. java 解决时间相减问题
  10. 计算机组装与维护配置清单作业,计算机组装与维护 作业汇.doc
  11. matlab 向量法建数组(推荐)
  12. mysql中having的例子_有关mysql中having子句对组记录进行筛选的例子
  13. mysql 数据表中查找重复记录(条数)
  14. 面试题:React中setState
  15. android shell强制删除文件夹_【代码合集】VBA操作文件夹代码合集
  16. 分享“消防图纸”识图方法,让你一眼秒懂!
  17. 微信表情存入mysql是_Mysql存储微信Emoji表情问题
  18. 局域网vnc远程控制软件,那些超级好用的局域网vnc远程控制软件
  19. 机器人方队解说词_运动会入场式方队解说词
  20. 用户输入日期利用python简单实现农历转阳历功能(1901-2099年之间)

热门文章

  1. 微信小程序asp服务器架设,asp写的微信小程序支付demo-服务器端是asp+mdb的
  2. 好用的 php类,一个好用的php文件上传处理类
  3. linux管理子进程c,Linux 进程管理 CGroup
  4. Linux中pthread源码在哪,pthread - 源码下载|系统编程|Linux/Unix编程|源代码 - 源码中国...
  5. python重现 mysql server has gone away错误以及解决方案
  6. 【mysql】sql查询速度不变?不同数据量下,查询速度不会变化的问题
  7. console.log(text)打印不出来的值,用console.log(text.length)却打印出来长度为1?
  8. Tensorflow【实战Google深度学习框架】编程基础小漂亮总结
  9. 【django轻量级框架】点击前端按钮执行本地python程序(os sys的使用)
  10. linux下echo /dev/ttys* 到字符设备文件,linux之tty pty pts