linux中的nm命令简介
-
nm命令是Linux操作系统中常用的一个工具,用于查看二进制文件中的符号表信息。它可以显示共享库、目标文件和可执行文件中定义或引用的符号。
nm命令的基本用法如下:
“`
nm [option] 文件名
“`
其中,option为可选参数,文件名为需要查看符号表的二进制文件。下面是nm命令常用的选项及其功能:
1. -A:显示所有符号表条目,包括未绑定的局部符号。
2. -C:显示C++符号的符号名。
3. -D:仅显示外部定义的符号。
4. -g:仅显示全局符号。
5. -r:递归显示子目录中的文件符号表。
6. -S:显示符号的大小。
7. -t:按照地址顺序对符号进行排序。
8. –demangle:解析C++符号名。使用nm命令可以帮助我们了解目标文件或可执行文件中所定义的符号以及引用的外部符号,方便我们进行调试和分析。通过nm命令可以查看函数、变量、可执行文件的入口地址等信息。这对于开发人员和系统管理员来说是非常有用的。
总之,nm命令是Linux系统中一个非常有用的工具,它可以帮助我们查看二进制文件中的符号表信息,提供了丰富的选项来满足不同的需求。对于开发和调试工作来说,掌握nm命令的使用方法是非常重要的。
2年前 -
nm命令是Linux操作系统中的一个重要命令,用于查看可执行文件、目标文件或共享库中的符号表。nm命令可以帮助开发人员、系统管理员或安全人员分析二进制文件的结构和依赖关系。下面是关于nm命令的一些重要信息和用法:
1. 查看符号表:nm命令最常用的功能是显示二进制文件中的符号表。符号表包含了函数、变量和其他符号的信息,可以帮助我们了解程序的结构和调用关系。可以使用以下命令来查看符号表:nm
2. 符号类型:nm命令会为每个符号指定一个类型,这些类型表示符号的属性和用途。常见的类型包括函数(T)、对象(D)、未初始化的数据(B)、局部符号(t)、全局符号(T)等。可以使用命令选项来过滤并显示特定类型的符号。
3. 符号地址:nm命令可以显示每个符号的地址。地址可以是十进制或十六进制格式。地址通常用于调试和跟踪程序执行,可以帮助我们定位问题和分析性能。
4. 依赖关系:nm命令还可以查看二进制文件的依赖关系,即查看文件所依赖的共享库。这对于解决程序的运行时错误和冲突非常有用。可以使用命令选项来显示依赖信息。
5. 打印文件格式:nm命令支持多种二进制文件格式,包括ELF(Executable and Linkable Format)、COFF(Common Object File Format)、Mach-O(Mach Objects)等。可以通过指定适当的命令选项来打印特定格式的文件。
需要注意的是,nm命令对于已经被剥离了符号表的二进制文件或者被加密保护的文件可能无法正常工作。在这些情况下,可以尝试使用其他工具,如objdump和readelf等来查看二进制文件的信息。
总之,nm命令是一个强大而灵活的工具,可以帮助我们分析和调试二进制文件。通过查看符号表、类型、地址和依赖关系等信息,我们可以更好地理解程序的结构和行为。无论是开发、调试还是安全分析,nm命令都是一个不可或缺的工具。
2年前 -
小标题:1. nm命令概述
2. nm命令的常用选项
3. nm命令的使用示例1. nm命令概述:
nm命令是一个用于显示目标文件或共享库中的符号信息的工具。它可以用于查看可执行文件中的符号表、静态库中的符号表以及动态库中的导出符号表等。2. nm命令的常用选项:
– -A, –with-debug-syms:同时显示调试符号表中的符号。
– -C, –demangle:对C++函数名进行解码,让其更具可读性。
– -D, –dynamic:显示动态符号表。
– -P, –private:显示私有符号。
– -a, –all:显示所有符号,包括隐藏符号。
– -g, –extern-only:只显示全局符号表中定义的符号。
– -l, –line-numbers:显示行号信息。
– -S, –print-size:显示符号的大小。
– –defined-only:只显示已定义的符号。
– –demangle[=style]:解码函数名,可用选项为auto, gnu, gnu-v3, or lara.
– –special-syms:显示特殊符号。3. nm命令的使用示例:
示例1:查看可执行文件中的符号表
“`
nm -C a.out
“`
该命令将会显示a.out可执行文件中的符号表,包括函数名、变量名以及其他符号信息。示例2:查看静态库中的符号表
“`
nm -C libtest.a
“`
该命令将会显示libtest.a静态库中的符号表,用于查看静态库中的函数和变量定义。示例3:查看动态库中的导出符号表
“`
nm -D libtest.so
“`
该命令将会显示libtest.so动态库中的导出符号表,用于查看动态库中的函数和变量定义。示例4:查看动态库中的私有符号
“`
nm -D -P libtest.so
“`
该命令将会显示libtest.so动态库中的私有符号,用于查看动态库中的私有函数和变量定义。示例5:显示符号地址和所属模块
“`
nm -apD –defined-only libtest.so
“`
该命令将会显示libtest.so动态库中的已定义符号的地址和所属模块。通过这些示例,可以更好地理解并熟练使用nm命令来查看目标文件或共享库中的符号信息。
2年前