查看静态库(.a)、可执行文件(.out、.o)里的符号信息--nm命令

应用场景:

对于可执行文件和静态库文件,我们无法直接打开查看源码,因为打开后都是乱码。但是有时候我们有想知道文件包含哪些符号信息,比如函数、变量等等,这时候nm命令就派上用长,这里只是介绍nm常用的用法,详细的用法请另外查询。

nm命令用法:nm + 目标文件

nm libexample.a > a.txt //将libexample.a的符号信息保存在a.txt文件里,可用cat命令查看
nm libexample.a //直接在终端打印出库包含的符号信息

信息的解读:

nm命令的输出包含三个部分:1 符号值。默认显示十六进制; 2 符号类型。小写表示是本地符号,大写表示全局符号(external); 3 符号名称。 给个例子:
00000000 b .bss
00000000 d .data
00000000 r .rdata
00000000 t .text
U ___main
00000000 T _add
0000000d T _main
00000000 D _num1
00000004 D _num2
U _printf
解析:T是代码段,全局的链接属性,一般修饰函数名(add 、main),并且函数可以被外部引用,如果是 t 修饰的函数名,则函数用了static关键字进行修饰,是不能被外部应用的。U是表示未定义的符号,这里只是引用,具体的实现是在其他文件。至于其他的符号这里不一一解读,有需要自行去查询。

你可能感兴趣的:(软件工具的用法,linux)