记录 | ubuntu nm命令的基本使用

news/2025/2/6 10:04:59/

什么是nm命令

nm命令是linux下针对某些特定文件的分析工具,能够列出库文件(.a、.lib)、目标文件(*.o)、可执行文件的符号表。

nm命令的常用参数

-A 或 -o 或 --print-file-name:打印出每个符号属于的文件

-a 或 --debug-syms:显示调试符号。

-B:等同于–format=bsd,用来兼容MIPS的nm。

-C 或 --demangle:将低级符号名解码(demangle)成用户级名字。这样可以使得C++函数名具有可读性。

-D 或 --dynamic:显示动态符号。该任选项仅对于动态目标(例如特定类型的共享库)有意义。

-f forma 或 --format=formatt:使用format格式输出。format可以选取bsd、sysv或posix,该选项在GNU的nm中有用。默认为bsd。

-g 或 --extern-only:仅显示外部符号。

-n 、-v 或 --numeric-sort:按符号对应地址的顺序排序,而非按符号名的字符顺序。

-p 或 --no-sort:按目标文件中遇到的符号顺序显示,不排序。

-P 或 --portability:使用POSIX.2标准输出格式代替默认的输出格式。等同于使用任选项-f posix。

-s 或 --print-armap:当列出库中成员的符号时,包含索引。索引的内容包含:哪些模块包含哪些名字的映射。

-r 或 --reverse-sort:反转排序的顺序(例如,升序变为降序)。

--size-sort:按大小排列符号顺序。该大小是按照一个符号的值与它下一个符号的值进行计算的。

-t radix 或 --radix=radix:使用radix进制显示符号值。radix只能为“d”表示十进制、“o”表示八进制或“x”表示十六进制。

--target=bfdname:指定一个目标代码的格式,而非使用系统的默认格式。

-u 或 --undefined-only:仅显示没有定义的符号(那些外部符号)。

-l 或 --line-numbers:对每个符号,使用调试信息来试图找到文件名和行号。对于已定义的符号,查找符号地址的行号。对于未定义符号,查找指向符号重定位入口的行号。如果可以找到行号信息,显示在符号信息之后。

-V 或 --version:显示nm的版本号。

--help:显示nm的任选项。

举个栗子

  1. 编写源文件test.c
#include <stdio.h>const char ch = 'x';
int uninit;
int init = 10;void function() {int *ref = &init;static int sta_int = 10;printf("%c", ch);
}
  1. 编译test.c文件 生成test.o
gcc -c test.c
  1. 用nm命令分析符号表

nm -n test.o(-n以地址排序,方便查看)

输出结果:

                 U putchar
0000000000000000 R ch
0000000000000000 T function
0000000000000000 D init
0000000000000004 d sta_int.2182
0000000000000004 C uninit

各列信息的含义:

第一列:符号值,即该符号的起始地址

第二列:符号类型,各字母代表什么类型在下一小节中介绍

第三列:符号名称

输出符号类型详解

  • 符号类型大写代表全局符号,小写代表本地符号


http://www.ppmy.cn/news/1338211.html

相关文章

数据库(SQL)

目录 1 触发器 1.1 触发器简介 1.2 触发器的创建 语法 说明 1.3 示例 2 存储过程 2.1 什么是存储过程&#xff08;函数&#xff09; 2.1.1 存储过程和存储函数的区别 2.2 优势 2.3 应用场景 2.4 存储过程的创建和使用 说明 各参数类型所实现的存储过程 无参数无返…

leetcode-完全二叉树的节点个数

222. 完全二叉树的节点个数 题解&#xff1a; 使用递归的方法来解决这个问题。完全二叉树的节点个数可以通过以下公式计算&#xff1a; 节点个数 左子树节点个数 右子树节点个数 1&#xff08;根节点&#xff09; 首先&#xff0c;我们需要定义一个辅助函数countNodes(r…

华为云WAF,开启web网站的专属反爬虫防护罩

背景 从保护原创说起 作为一个原创技术文章分享博主&#xff0c;日常除了Codeing就是总结Codeing中的技术经验。 之前并没有对文章原创性的保护意识&#xff0c;直到在某个非入驻的平台看到了我的文章&#xff0c;才意识到&#xff0c;辛苦码字、为灵感反复试验创作出来的文…

湘潭大学-计算机网络-补考

背景 卷面分23&#xff0c;平时分85&#xff0c;各占百分之50&#xff0c;最终54&#xff0c;遗憾挂科 大学第一次补考 计划 首先把湖科大教书匠的计算机网络视频看一遍&#xff0c;并做一些笔记 然后看教材 刚看到老师说最好的复习资料是书和课后作业&#xff08;想起来…

Linux编辑器之vim的使用

文章目录 一、vim简介二、vim的基本概念三、vim的基本操作四、vim正常模式命令集移动光标删除文字复制替换撤销上一次操作更改跳至指定的行vim末行模式命令集列出行号跳到文件中的某一行查找字符保存文件离开vim 五、进阶vim玩法打开文件批量注释代码执行shell命令指定注释窗口…

空间站管理的未来:可视化技术的革命性变革

随着科技的飞速发展&#xff0c;人类在太空探索的道路上越走越远。空间站作为人类在太空中的“家”&#xff0c;其管理变得尤为重要。可视化技术作为现代科技的代表&#xff0c;正在为空间站管理带来革命性的变革。 如图是山海鲸可视化搭建的空间站管理可视化大屏↓↓↓ 一、可…

Django实例_后台管理及分页器

原理步骤参考: Django开发_14_后台管理及分页器-CSDN博客 一、创建Django项目 二、创建page_app python manage.py startapp page_app三、修改settings.py文件 (一)添加app (二)设置每页显示数据个数 (三)设置中文显示 四、总路由添加子路由路径 from django.contrib impo…

Qt Excel读写 - QXlsx的安装配置以及测试

Qt Excel读写 - QXlsx的安装配置以及测试 引言一、安装配置二、简单测试 引言 Qt无自带的库处理Excel 文件&#xff0c;但可通过QAxObject 借助COM接口进行Excel的读写1。亦可使用免费的开源第三方库&#xff1a;QXlsx&#xff0c;一个基于Qt库开发的用于读写Microsoft Excel文…