深入学习 Linux nm 命令,精准地检测编译后的程序(linux下nm命令)

Linux系统应用广泛,而系统上有很多值得深入学习的优质工具,其中包括 nm 命令,其全称为 symbol table management,具有极强的精准度。它可以在编译后的程序中,根据传递参数模糊检测、读取或直接列出程序定义的符号表信息。我们可以通过nm命令,检测我们的程序有哪些符号表信息,这些信息会帮助我们的更好的理解和调试程序,通常支持如下符号:

U:表示未定义的符号

D:表示可以从内存导出的符号

R:表示只读取的符号

T:表示global初始化(在程序启动时初始化)的符号

A:表示global未初始化的符号

B:表示bsS符号

C:表示编译器特殊的签名符号

好了准备工作完成后,我们就可以深入学习使用 nm 命令了。它的使用方式比较简单,直接在终端输入如下代码:

# nm [程序文件]

如果程序文件参数正确,此代码执行后,会显示出该程序定义的符号表信息,详细信息包括:

编程类型

符号名

地址

符号描述

如果想更加精准地检测编译后的程序,可以在上面命令后面加上:– defines 或 — externs 选项,这样就只会输出定义和外部符号表信息,得到更加精准更加及时的检测结果。

此外,nm还可以支持正则表达式搜索,可以搜索程序中某个特定的符号表信息,代码如下:

# nm [程序文件] | grep [正则表达式]

例如:

# nm [程序文件] | grep ‘main‘

我们通过精准的搜索功能,可以快速查找出 main 函数是由哪一部分源码定义的,以及它的符号信息是什么。

由上可见,Linux nm 命令是一个强大精准的程序检测工具,它可以在查找、精准检测编译后的程序中,精准地搜索出定义符号信息。如果对其更多特性有兴趣,可以通过man或–help参数查看它的所有帮助信息。


数据运维技术 » 深入学习 Linux nm 命令,精准地检测编译后的程序(linux下nm命令)