GNU Binutils之nm

Binutils工具集 解析 对于嵌入式系统开发,掌握相应的工具至关重要,它能使我们解决问题的效率大大提高。目前,可以说嵌入式系统的开发工具是GNU的天下,因为来自GNU的GCC编译器支持大量的目标处理器。除了GCC,还有一个非常重要的、同样来自于GNU的工具集(toolchain) —— binutils toolchain。这一工具集中存在的一些工具,可以说是我们开发和调试不可缺少的利器。 Binutils中的工具不少 阅读详情
GNU Binutils之nm

 作者:makethyme

nm用于列出目标文件的符号清单,如果没有指定目标文件,则默认为“a.out”。nm的格式如下:

nm [‘-a’|‘--debug-syms’] [‘-g’|‘--extern-only’]
         [‘-B’] [‘-C’|‘--demangle’[=style]] [‘-D’|‘--dynamic’]
         [‘-S’|‘--print-size’] [‘-s’|‘--print-armap’]
         [‘-A’|‘-o’|‘--print-file-name’][‘--special-syms’]
         [‘-n’|‘-v’|‘--numeric-sort’] [‘-p’|‘--no-sort’]
         [‘-r’|‘--reverse-sort’] [‘--size-sort’] [‘-u’|‘--undefined-only’]
         [‘-t’ radix|‘--radix=’radix] [‘-P’|‘--portability’]
         [‘--target=’bfdname] [‘-f’format|‘--format=’format]
         [‘--defined-only’] [‘-l’|‘--line-numbers’] [‘--no-demangle’]
        [‘-V’|‘--version’] [‘-X 32_64’] [‘--help’] [objfile...]
 
对于每一个符号,nm列出其值(the symbol value),类型(the symbol type)和其名字(the symbol name)。
如下例:
 
     00000024 T cleanup_before_linux
     00000018 T cpu_init
     00000060 T dcache_disable
     00000054 T dcache_enable
     0000006c T dcache_status
     00000000 T do_reset
     0000003c T icache_disable
     00000030 T icache_enable
     00000048 T icache_status
 
上面的显示是使用nm cpu.o的输出,对于cleanup_before_linux这个符号来说,00000024是以16进制显示的其值,T为其类型,而cleanup_before_linux是其名字。可以看出,上面显示的cleanup_before_linux这个symbol的值实际上是该函数在text section中的偏移。但是,每个符号的值的具体含义依其类型而异。当然,对于每个符号的值,其类型、其值以及它们所属的section是密切相关的。
下面说明符号类型:
对于每一个符号来说,其类型如果是小写的,则表明该符号是local的;大写则表明该符号是global(external)的。

 

符号
类型
说明
A
该符号的值是绝对的,在以后的链接过程中,不允许进行改变。这样的符号值,常常出现在中断向量表中,例如用符号来表示各个中断向量函数在中断向量表中的位置。
B
该符号的值出现在非初始化数据段(bss)中。例如,在一个文件中定义全局static int test。则该符号test的类型为b,位于bss section中。其值表示该符号在bss段中的偏移。一般而言,bss段分配于RAM中
C
该符号为common。common symbol是未初始话数据段。该符号没有包含于一个普通section中。只有在链接过程中才进行分配。符号的值表示该符号需要的字节数。例如在一个c文件中,定义int test,并且该符号在别的地方会被引用,则该符号类型即为C。否则其类型为B。
D
该符号位于初始话数据段中。一般来说,分配到data section中。例如定义全局int baud_table[5] = {9600, 19200, 38400, 57600, 115200},则会分配于初始化数据段中。
G
该符号也位于初始化数据段中。主要用于small object提高访问small data object的一种方式。
I
该符号是对另一个符号的间接引用。
N
该符号是一个debugging符号。
R
该符号位于只读数据区。例如定义全局const int test[] = {123, 123};则test就是一个只读数据区的符号。注意在cygwin下如果使用gcc直接编译成MZ格式时,源文件中的test对应_test,并且其符号类型为D,即初始化数据段中。但是如果使用m6812-elf-gcc这样的交叉编译工具,源文件中的test对应目标文件的test,即没有添加下划线,并且其符号类型为R。一般而言,位于rodata section。值得注意的是,如果在一个函数中定义const char *test = “abc”, const char test_int = 3。使用nm都不会得到符号信息,但是字符串“abc”分配于只读存储器中,test在rodata section中,大小为4。
S
符号位于非初始化数据区,用于small object。
T
该符号位于代码区text section。
U
该符号在当前文件中是未定义的,即该符号的定义在别的文件中。例如,当前文件调用另一个文件中定义的函数,在这个被调用的函数在当前就是未定义的;但是在定义它的文件中类型是T。但是对于全局变量来说,在定义它的文件中,其符号类型为C,在使用它的文件中,其类型为U。
V
该符号是一个weak object。
W
The symbol is a weak symbol that has not been specifically tagged as a weak object symbol.
-
该符号是a.out格式文件中的stabs symbol。
?
该符号类型没有定义

下面是关于命令选项的一些说明。 

 

命令选项
                说明
-A      -o
--print-file-name
在每个符号前,指明其所属的archieve或者是file。如libtest.a:interrupt.o:00000024 T cleanup_before_linux
-a     --debug-syms
显示所有的符号,包含debugging-only symbols.
-B
等同于—format=bsd,用于兼容MIPS的nm。
-C
--demangle[=style]
将低级符号名解析成用户级符号名。这样可以使C++函数具有可读性。例如00000000 T _ZN6MyTest3sumEii被解析成00000000 T MyTest::sum(int, int)。这样一来这样的符号便具有可读性。
--no-demangle
默认的选项。不需要将低级符号名解析成用户级符号名。
-f format
--format=format
使用format格式输出,format可以选取为bsd, sysv或posix。默认为bsd。区别如下例:
00000000 T _ZN6MyTest3sumEii
_ZN6MyTest3sumEii   |00000000|   T |              FUNC|00000021|     |.text
_ZN6MyTest3sumEii T 00000000 00000021
-g    --extern-only
仅显示外部符号
-l     --line-numbers
对于每一个行号,使用调试信息来找到文件名和行号。对于定义的符号,显示该符号定义的文件和行号。对于未定义的符号,给出符号重定位入口的文件和行号。
-n     -v
--numberic-sort
将符号按对应的地址进行排序,而不是采用默认的按符号名进行排序。
-p    --no-sort
显示符号时,不进行排序,按其在目标文件出现的顺序进行显示。
-P    --portability
等同于-f posix。
-S    --print-size
使用BSD格式输出时,显示符号的大小。
-s     --print-armap
当列出库中的符号名时,包含索引。索引的内容指那一个符号定义在那一个模块(文件)中。
-r     --reverse-sort
反序输出
--size-sort
按符号的大小排序输出。
-t radix
--radix=radix
使用指定的进制来打印符号值
--target=bfdname
指定目标代码的格式,而不是使用系统的默认格式。
-u    --undefined-only
显示没有定义的符号
--defined-only
显示定义的符号
-V --version
显示nm的版本号
--help
帮助

 
nMmake 命令行 参考 nMmake, Microsoft的项目维护工具,类似于Linux中的make命令行 立即下载

相关推荐

告别Sourceforge安装器!手把手教你下载MinGW-w64离线包并配置环境变量(Windows 10/11)

本文详细介绍了如何在Windows 10/11系统上通过下载MinGW-w64离线包并配置环境变量,完全绕过Sourceforge安装器的问题。从选择正确的版本、解压到本地目录,到设置系统环境变量和验证编译环境,手把手指导开发者快速搭建稳定的GCC编译环境,解决常见的安装困扰。

weixin_30896825的博客 335

二进制工具:nm_列出目标文件中的符号表]

一.nm介绍 nm用来列出目标文件的符号清单.这里的目标文件,一般是指.a扩展名的静态连接库文件和编译过的目标文件. linux下的有两种库文件,一种是动态连接库(.so),一种是静态连接库(.a). nm就是可以用来显示一个静态连接库中符号列表的工具.二.nm基本用法 下面以一

batoom的专栏 4197

国产大模型编程能力深度分析报告(2026年5月更新版)

2026年5月国产大模型编程能力报告显示,主流模型迎来重大升级。DeepSeek V4以1.6T参数创性能新高,Qwen3.6-Plus支持原生多模态编程,MiniMax M2.7转向闭源并优化Agent编码,Kimi K2.6成为商业化成熟的主力模型,GLM-5开源并涨价30%。阿里云百炼推出双轨订阅体系,区分团队和个人开发者需求。各模型在参数规模、上下文长度、性能表现和适用场景上各具优势,国产AI编程服务正加速向订阅制转型,成本效益显著提升。

Willin Wang 的全栈升级指南 1638

1630_GNU的二进制分析工具nm简单使用探索

它的功能主要是显示出一个指定文件的符号信息的,而这个指定的文件可以是目标文件、可执行文件或者目标文件库文件。当然,IBM的这个nm并不是我这次要看得GNU的工具的nm,但是两者的功能类似。这个是使用nm分析目标文件的一个测试,这里面的信息分了三列,分别是地址信息、类型、名字。这里可以看得出来,其实这个地址信息的默认显示形式是十六进制,这个跟IBM的工具也是不同的。中间的类型,U代表符号未定义,T代表的是代码段,C代表的是未初始化的common数据。在GNU的工具中,大写的通常是代表全局而小写的则代表局部。

小灰笔记 946

银河麒麟Arm64 v10 sp1系统QT5.12.8离线环境配置全攻略

本文详细介绍了在银河麒麟Arm64 v10 sp1系统上配置QT5.12.8离线开发环境的完整流程。从安装包获取、依赖检查到环境变量配置,逐步指导开发者解决飞腾处理器架构下的常见问题,包括OpenGL库冲突、中文乱码处理等,特别适合军工、政务等需要离线部署的场景。

weixin_26899659的博客 504

智能电网中的智能调度与优化算法研究

本文研究智能电网中的智能调度与优化算法,旨在提高电网运行的效率与可靠性,减少能源浪费和设备故障的风险。在智能电网日益复杂化的背景下,传统的调度方法已难以满足高效、稳定的运行要求,因此亟需借助先进的优化算法对电网进行智能调度。本文第一深入分析智能电网调度中的关键问题与挑战,探讨优化算法在智能电网中的应用现状,并分析常见的优化算法,如遗传算法、粒子群算法和模拟退火算法。随后,本文构建智能电网的调度优化数学模型,并对电网负荷、发电模型及约束条件进行详细建模。在算法部分,本文提出改进的粒子群算法和遗传算法,并结合M

weixin_44553616的博客 1888

GNU的ar,ranlib和nm

参考:http://study.chyangwa.com/IT/AIX/aixcmds1/ar.htm#a0949a5b 摘自:http://hi.baidu.com/doyee/blog/item/ad4c4a341089ed47251f1484.html 摘自:http://hi.baidu.com/kkernel/blog/item/e729cffa9036318e9f51465

Tyrion Lannister's Special column 1084

Zabbix-获取客户端的SNMP数据

网口状态(ifOperStatus)的 OID 是1.3.6.1.2.1.2.2.1.8,查询时需要用1.3.6.1.2.1.2.2.1.8.1(第 1 个网口)、1.3.6.1.2.1.2.2.1.8.2(第 2 个网口)等。表格对象是指 “包含多个同类实例的对象”(如设备的多个网口、多个进程等,每个实例需要单独标识)。在 SNMP 规范中,标量对象的完整 OID 必须以.0结尾,.0是标量对象的唯一实例编号。标量对象是指 “单一值的对象”(如设备的名称、温度、状态等,整个设备只需要一个值来表示)。

徐子元 1726

GNU 工具 nm

linux中,nm用来列出目标文件的符号清单。   下面是nm命令的格式: nm [-a|--debug-syms] [-g|--extern-only] [-B][-C|--demangle] [-D|--dynamic] [-s|--print-armap][-o|--print-file-name] [-n|--numeric-sort][-p|--no-sort] [-r|--re

dysh1985的专栏 1504

Lattice CrosslinkNx LIFCL-40实战解析:MIPI D-PHY硬核IP配置与CSI-2数据解析全流程

本文详细解析了Lattice CrosslinkNx LIFCL-40 FPGA中MIPI D-PHY硬核IP的配置与CSI-2数据解析全流程。通过实战案例,介绍了硬件环境搭建、寄存器配置、数据包结构解析及视频流重构技巧,帮助开发者快速掌握高速图像采集系统的设计与优化方法。

weixin_29159613的博客 198

4.DJI-PSDK云台x-port控制:

使用PSDK 的“云台控制”功能,开发者需要先设计负载设备的云台并开发出控制云台的程序,将云台的控制函数注册到PSDK 指定的接口后,用户通过使用DJI Pilot、基于MSDK 开发的移动端App 及遥控器即可控制基于PSDK 开发的具有云台功能的负载设备,同时获得负载设备的相关信息,如姿态等。云台的姿态如 图2.云台姿态 所示,根据用户的控制指令,云台能够调整姿态;云台的关节如 图1.云台关节 所示,云台关节是云台上带动负载设备转动的结构件:云台电机,云台关节角即云台电机转动的角度。

哒宰的博客 855

nm 提示 no symbol 的问题(strip)

转自:http://blog.youkuaiyun.com/cjsycyl/article/details/37929971 动态链接库文件(windows里的dll)在linux里以.so结尾,称为shared object library 。该文件是elf(Executable and Linkable Format)文件的一种,有两个符号表,“.symtab”和“.dynsym”。“.dynsym

蓝松SDK 4417

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

note - gnu/gcc tool binutils nm - binary breakdown analysis

note - tool

qq_28917491的博客 251

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

gnu binutils(addr2line ar gprof nm objcopy ...)

GNU binutils是一组二进制工具集。包括:addr2line ar gprof nm objcopy objdump ranlib size strings strip. 本文归纳他们的常用法。arar用于建立、修改、提取档案文件(archive)。archive是一个包含多个被包含文件的单一文件(也称之为库文件),其结构保证了可以从中检索并得到原始的被包含文件(称之为arc...

tuyerv的博客 233

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

GNU开发工具——GNU Binutils快速入门

一、GNU Binutils简介 GNU Binutils(GNU二进制工具集),即GNU Binary Utilities,是一套用于创建、管理和维护二进制目标文件的工具集合,包括addr2line、ar、gprof 、nm、objcopy、objdump、ranlib、size、strings、strip。 Binutils官网地址:https://www.gnu.org/software/binutils/ 二、GNU Binutils工具使用 1、addr2line addr2line用于

天山老妖 8546

gnu binutils使用方法指南

GNU binutils是一组二进制工具集,包括:ar nm objcopy objdump gprof ld ranlib size strings strip addr2line。下面将对它们的用法做一个简单的介绍。 1、    ar ar用于建立、修改、提取档案文件(archive)。archive是一个包含多个被包含文件的单一文件(也称之为库文件),其结构保证了可以从中检索

如丧 2168

GNU binutils学习笔记

GNU binutils学习笔记 参考:[1] http://sources.redhat.com/binutils/docs-2.12/binutils.info/index.html            [2] http://blog.chinaunix.net/u/13991/showart_104690.htmlGNU binutils是一组二进制工具集。包括如下工具, 本文归纳他们的常

liuyu790810的专栏 1679

GNU binutils笔记

GNU binutils是一组二进制工具集。包括:addr2line   ar   gprof   nm   objcopy   objdump   ranlib   size   strings   strip. 本文归纳他们的常用法。ar    ar用于建立、修改、提取档案文件(archive)。archive是一个包含多个被包含文件的单一文件(也称之为库文件),其结构保证了可以从中检

记录、分享 502

GNU binutils笔记(zt)

原文出处: http://www.cublog.cn/u/13991/showart.php?id=104690GNU binutils笔记 GNU binutils是一组二进制工具集。包括:addr2line   ar   gprof   nm   objcopy   objdump

DonaldErvinKnuth的专栏 566

GNU Binutils简介及基本用法

[时间:2017-06] [状态:Open] [关键词:GNU, binutils, as, ld, ar, 基础工具,linux,链接器,汇编器] 0 简介 GNU Binary Utilities或binutils是一整套的编程语言工具程序,用来处理许多格式的目标文件。当前的版本原本由在Cygnus Solutions的程序员以Binary File Descriptor library(li...

weixin_30415801的博客 242

GNU binutils工具集

GNU binutils工具提供了一系列二进制工具,用于日常开发过程中对程序调试和维护,经常会用到的工具如下:下文会简单描述上述部分工具的基本用法,更为详细的使用方法建议查看对应工具的man和info信息。addr2line可根据程序指令地址查找到所对应的函数名、以及函数所在的源文件名和行号。当含有调试信息的执行程序出现crash时,可使用addr2line快速定位出错代码的位置。其基本使用格式如下: nm nm工具用于列出程序文件中的符号信息。以一个简单的hello world程序为例: nm所列出的每一

Aspiresky的专栏 827

GNU binutils工具使用

 GNU binutils是一组二进制工具集。包括:addr2line   ar   gprof   nm   objcopy   objdump   ranlib   size   strings   strip. 本文归纳他们的常用法。ar    ar用于建立、修改、提取档案文件(archive)。archive是一个包含多个被包含文件的单一文件(也称之为库文件),其结构保证了可以

小耗子の洞穴 3089

GNU binutils 二进制工具集

GNU binutils工具集 命令 功能描述 翻译 ld the GNU linker. GNU 链接器 as the GNU assembler. GNU 汇编器 gold A new, faster, ELF only linker, still in beta test. 新的更快的,仅支持ELF的链接器,还在测试阶段 addr2line Converts addresses into filenames and line numbers.

evil222的博客 643
上一篇: GNU Binutils之objdump
下一篇: GNU Binutils之objdump
TrueLie
博客等级 码龄24年 85粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值