
nm 是 Linux 系统中的一个重要命令行工具,全称是 "Name List"。它用于显示二进制目标文件(如库文件、可执行文件)中的符号信息,是程序员和分析二进制文件时常用的工具。
nm [选项] 文件名
| 选项 | 说明 | 
|---|---|
| -a | 显示所有符号,包括调试符号 | 
| -g | 只显示外部(全局)符号 | 
| -u | 只显示未定义的符号 | 
| -D | 显示动态符号(用于共享库) | 
| -C | 解码(demangle)C++符号名称 | 
| -l | 显示符号所在的行号(需要调试信息) | 
| -S | 显示符号大小 | 
| -t | 指定输出格式(d-十进制,o-八进制,x-十六进制) | 
| --size-sort | 按符号大小排序 | 
| --defined-only | 只显示已定义的符号 | 
nm 输出的符号类型用一个字母表示,常见的有:
| 类型 | 说明 | 
|---|---|
| A | 绝对符号,链接时不会被改变 | 
| B/b | 未初始化数据段(BSS段)中的符号 | 
| D/d | 已初始化数据段中的符号 | 
| T/t | 代码段中的符号(T表示全局,t表示局部) | 
| U | 未定义的符号(需要从其他文件链接) | 
| W/w | 弱符号(weak symbol) | 
| R/r | 只读数据段中的符号 | 
| C | 公共符号(common symbol) | 
| I | 间接引用其他符号 | 
nm /bin/ls
输出示例:
0000000000000000 A _IO_stdin_used 0000000000000000 R _fp_hw 0000000000000000 T _init 0000000000000000 W _ITM_deregisterTMCloneTable 0000000000000000 W _ITM_registerTMCloneTable 0000000000000000 W __cxa_finalize 0000000000000000 W __gmon_start__ 0000000000000000 T __libc_csu_fini 0000000000000000 T __libc_csu_init ...
nm -u /bin/ls
输出示例:
                 U __ctype_toupper_loc
                 U __errno_location
                 U __overflow
                 U __stack_chk_fail
                 U __strtoul_internal
                 U _obstack_begin
                 U _obstack_newchunk
                 U abort
                 U access
...nm -C my_program
输出示例:
0000000000000000 T main 0000000000000000 T std::cout 0000000000000000 T std::basic_ostream<char, std::char_traits >& std::operator<< <std::char_traits >(std::basic_ostream<char, std::char_traits >&, char const*) ...
nm -S --size-sort my_library.so
输出示例:
0000000000000001 0000000000000001 T func1 0000000000000002 0000000000000002 T func2 0000000000000004 0000000000000004 D global_var 0000000000000008 0000000000000008 B large_buffer ...
当遇到"undefined reference"错误时,可以使用 nm 检查哪些符号未定义:
nm -u my_program.o
查看共享库导出的符号:
nm -D libexample.so
nm my_program | grep "main"
nm 可能无法显示有用的信息nm
-D 选项查看-C 选项解码符号名称nm -n my_program > symbol_map.txt
nm 命令是Linux开发者的重要工具之一,掌握它可以:
通过本文介绍的基本用法和实际示例,你应该已经掌握了 nm 命令的核心功能。在实际工作中,可以结合具体需求灵活运用各种选项参数。
以上就是linux显示二进制文件的符号表是什么-nm 命令使用与实例的详细内容,更多请关注php中文网其它相关文章!
 
                        
                        每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
 
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号