阅读 9

linux nm命令

linux系统下nm命令是什么呢?下面是nm命令具体介绍:

1、nm命令简介:

nm命令是linux下自带的特定文件分析工具,一般用来检查分析二进制文件、库文件、可执行文件中的符号表,返回二进制文件中各段的信息。

目标文件:常说的目标文件是程序文件(.c/.cpp,.h)经过预编译,编译,汇编过程生成的二进制文件,不经过链接过程,编译生成指令为:

gcc(g++) -c file.c(file.cpp)将生成对应的file.o文件,file.o即为二进制文件

库文件:分为静态库和动态库,这里不做过多介绍,库文件是由多个二进制文件打包而成,生成的.a文件,示例:

ar -rsc liba.a test1.o test2.o test3.o将test1.o test2.o test3.o三个文件打包成liba.a库文件

可执行文件:可执行文件是由多个二进制文件或者库文件(由上所得,库文件其实是二进制文件的集合)经过链接过程生成的一个可执行文件,对应windows下的.exe文件,可执行文件中有且仅有一个main()函数(用户程序入口,一般由bootloader指定,当然也可以改),一般情况下,二进制文件和库文件中是不包含main()函数的,但是在linux下用户有绝对的自由,做一个包含main函数的库文件也是可以使用的。

上述三种文件的格式都是二进制文件。

2、nm命令功能:

目标文件、库文件中、可执行文件用编辑器是无法查看其内容的(乱码),所以当我们有这个需求(例如debug,查看内存分布的时候)去查看一个二进制文件里包含了哪些内容时,这时候就将用到一些特殊工具,linux下只有nm命令可以。

3、用法:

man nm

4、常用命令参数:

-A 或-o或 --print-file-name:打印出每个符号属于的文件-a或--debug-syms:打印出所有符号,包括debug符号-B:BSD码显示-C或--demangle[=style]:对低级符号名称进行解码,C++文件需要添加--no-demangle:不对低级符号名称进行解码,默认参数-D 或--dynamic:显示动态符号而不显示普通符号,一般用于动态库-f format或--format=format:显示的形式,默认为bsd,可选为sysv和posix-g或--extern-only:仅显示外部符号-h或--help:国际惯例,显示命令的帮助信息-n或-v或--numeric-sort:显示的符号以地址排序,而不是名称排序-p或--no-sort:不对显示内容进行排序-P或--portability:使用POSIX.2标准-V或--version:国际管理,查看版本--defined-only:仅显示定义的符号

以上就是小编今天的分享了,希望可以帮助到大家。

文章分类
百科问答
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐