博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nm 列出.o .a .so中的符号信息
阅读量:6253 次
发布时间:2019-06-22

本文共 864 字,大约阅读时间需要 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 选项,见 Linux:Gcc。使用nm前,最好先用Linux:File查看对象文件所属处理器架构,然后再用相应交叉版本的nm工具。

例子

nm -u hello.o

显示hello.o 中的未定义符号,需要和其他对象文件进行链接.

nm -A /usr/lib/* 2>/dev/null | grep "T memset"

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

nm -o /lib/*.so||grep sin

转载于:https://www.cnblogs.com/TianchiLiu/p/10001680.html

你可能感兴趣的文章
【BZOJ】2563: 阿狸和桃子的游戏
查看>>
redis 中文字符显示
查看>>
国内外MD5在线解密网站
查看>>
【OC语法要闻速览】一、方法调用
查看>>
Git-命令行-删除本地和远程分支
查看>>
本文将介绍“数据计算”环节中常用的三种分布式计算组件——Hadoop、Storm以及Spark。...
查看>>
顺序图【6】--☆☆
查看>>
Docker Swarm 让你事半功倍
查看>>
string.Format字符串格式说明
查看>>
[转]IC行业的牛人
查看>>
javaScript事件(四)event的公共成员(属性和方法)
查看>>
linux系统常用命令
查看>>
在 Word 中的受支持的区域设置标识符的列表
查看>>
Caffe + Ubuntu 14.04 64bit + CUDA 6.5 配置说明2
查看>>
An easy to use android color picker library
查看>>
Oracle SID爆破工具SidGuess
查看>>
用JAVA生成老电影海报
查看>>
批处理常用命令总结2
查看>>
解读ASP.NET 5 & MVC6系列(9):日志框架
查看>>
MyEclipse生成WAR包并在Tomcat下部署发布(转发)
查看>>