nm 全称 Name List,读取二进制符号表(函数、全局变量)

nm 极简说明

全称 Name List,读取二进制符号表(函数、全局变量),支持 .o/.a/.so/ 可执行文件。

核心用途

  1. 查看文件包含哪些函数、变量
  2. 排查链接报错:nm -u 查未定义符号
  3. nm -D 查看 so 对外导出接口
  4. -C 还原 C++ 编译后的乱码函数名

常见符号标识

  • T:全局函数;U:外部未定义符号;D:全局初始化变量;B:未初始化全局变量

易混区分

nm(符号工具)≠ nmcli(NetworkManager 网络命令)
再给出命令实例和结果

nm 极简实例 + 输出示例

1. 基础查看目标文件符号 nm main.o

命令
bash
 
运行
 
 
 
nm main.o
 
示例输出
plaintext
 
 
0000000000000000 T main
                 U printf
 
  • T main:本文件定义的 main 函数
  • U printf:依赖外部 printf,未定义

2. 只看未定义符号(排查链接报错)nm -u main.o

命令
bash
 
运行
 
 
 
nm -u main.o
 
输出
plaintext
 
 
printf
 

3. 查看动态库导出接口 nm -D libtest.so

命令
bash
 
运行
 
 
 
nm -D libtest.so
 
输出
plaintext
 
 
0000000000001122 T add
0000000000001144 T sub
 

4. C++ 解码乱码符号 -C

无 - C 原始输出
plaintext
 
 
0000000000001234 T _Z3sumii
 
带 - C 命令 nm -C app
plaintext
 
 
0000000000001234 T sum(int, int)
 

5. 检索指定函数 grep 过滤

bash
 
运行
 
 
 
nm app | grep main
 
输出
plaintext
 
 
0000000000001040 T main
 

符号速记

  • T:代码段全局函数
  • U:外部未定义符号
  • D:初始化全局变量
  • B:未初始化全局变量 (.bss)
posted @ 2026-06-15 14:32  你说夕阳很美  阅读(28)  评论(0)    收藏  举报