nm用于显示目标文件的符号,也是二进制工具集(info binutils)里的一员
先来看一个例子,源码和对应的命令结果
四部分分别表示的意义
- 符号所在的obj文件名
- 符号的值,这里应该是指符号所在段的偏移地址。
- 符号类型
- 符号名
其中,'3'的符号类型有以下几类,小写表示局部,大写表示全局
A | 符号的值不会在连接时发生改变,是固定的 |
bB | 符号在未初始化数据段(BSS) |
C | The symbol is common. Common symbols are uninitialized data. When linking, multiple common symbols may appear with the same name. If the symbol is defined anywhere, the common symbols are treated as undefined references. |
Dd | 符号在初始化的数据段里(.data) |
Gg | 符号在初始化的数据段里(small objects),个别的允许小数据的目标文件 |
N | 符号是调试符号 |
p | 符号在stack unwind段里 |
R | 符号在只读数据段里 |
Ss | 符号在未初始化的数据段里(for small objects) |
T | 符号在代码(text)段(code) |
U | 符号未定义 |
u | 符号是一个唯一的全局符号 |
命令概述
选项解释
只介绍有用的
-a --debug-syms | 显示所有的符号。 |
-D --dynamic | 显示动态符号而不是通常的符号,通常用来显示动态库 |
-g --extern-only | 只显示外部的(external)符号 |
-l --line-numbers | 用调试信息尽量找出符号对应的文件名和行数(有时候会不准确) |
-n -V --numeric-sort | 用地址排序符号而不是用名字的字母排序 |
-r --reverse-sort | 反转排序序列 |
-S --print-size | 以bsd风格同时打印符号的地址和大小 |
-s --print-armap | 同时打印出索引(由ar或ranlib生成),可以知道符号是哪个模块的。(用于库文件) |
-t radix --radix=radix | 指定基地址数制, d 十进制 o 八进制 x 十六进制 |
-u --undefined-only | 只打印未定义的符号 |
--size-sort | 以符号的大小排序 |
本文由 刘英皓 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
转载自:http://www.cnblogs.com/yinghao1991/p/6395566.html
参考
【1】 man nm