查看函数库.a函数符号信息

一、概述

nm命令可以列出一个函数库文件中的符号表。它对于静态的函数库和共享的函数库都起作用。对于一个给定的函数库,nm命令可以列出函数库中定义的所有符号,包括每个符号的值和类型。还可以给出在原程序中这个函数(符号)是在多少行定义的,不过这必须要求编译该函数库的时候加“-l”选项。 

关于符号的类型,这里我们再多讨论一下。符号的类型是以一个字母的形式显示的,小写字母表示这个符号是本地(local)的,而大写字母则表示这个符号是全局的(global,externel)。一般来说,类型有一下几种:T、D、B、U、W。各自的含义如下:T表示在代码段中定义的一般变量符号;D表示时初始化过的数据段;B表示初始化的数据段;U表示没有定义的,在这个库里面使用了,但是在其他库中定义的符号;W,weak的缩写,表示如果其他函数库中也有对这个符号的定义,则其他符号的定义可以覆盖这个定义。 

二、nm命令详述:

用途

查看函数库.a函数符号信息

显示关于对象文件、可执行文件以及对象文件库里的符号信息。


语法

nm [ -A ] [ -C ] [ -X {32|64|32_64}] [ -f ] [ -h ] [ -l ] [ -p ] [ -r ] [ -T ] [ -v ] [ -B -P ] [ -e -g | -u ] [ -d -o -x -t Format ] File ...


描述

nm 命令显示关于指定 File 中符号的信息,文件可以是对象文件、可执行文件或对象文件库。如果文件没有包含符号信息,nm 命令报告该情况,但不把它解释为出错条件。 nm 命令缺省情况下报告十进制符号表示法下的数字值。

nm 命令把以下符号信息写入标准输出:对象名,如果您指定了 -A 选项,则 nm 命令只报告与该文件有关的或者库或者对象名。

  • nm 命令使用以下符号(用同样的字符表示弱符号作为全局符号)之一来表示文件符号类型:

    • 符号名称    符号类型
    A Global absolute 符号。
    aLocal absolute 符号。
    BGlobal bss 符号。
    bLocal bss 符号。
    DGlobal data 符号。
    dLocal data 符号。
    f源文件名称符号。
    TGlobal text 符号。
    tLocal text 符号。
    U未定义符号。
  • 如果可应用,nm 命令报告与符号有关的大小。

标志

-A 每行或者显示全路径名称或者显示对象库名。
-B在 Berkeley 软件分发(BSD)格式中显示输出: 

值   类型   名称
-C限制解码(demangle) C++ 名称。缺省是解码所有 C++ 符号名。 
注:
C++ 对象文件中的符号在被使用前它们的名称已经被解码了。
-d用十进制显示符号的值和大小。这是缺省的。
-e只显示静态的和外部的(全局)符号。
-f显示完整的输出,包括冗余的 .text、 .data 以及 .bss 符号,这些在通常都是被限制的。
-g只显示外部的(全局)符号。
-h限制输出头数据的显示。
-l通过给 WEAK 符号的编码键附加一个 * 来区分 WEAK 和 GLOBAL 符号。如果和 -P 选项一起使用, WEAK 符号的符号类型显示如下: 
Weak Data 符号 
Weak Text 符号 
Weak 未定义符号 
Weak bss 符号 
-o用八进制而不是十进制数来显示符号的值和大小。
-P以标准可移植输出格式显示信息: 

库/对象名  名称   类型   值   大小

该格式以十六进制符号表示法显示数字值,除非您用 -t-d 或 -o 标志指定不同的格式。

如果您指定了 -A 标志 -P 标志只显示 库/对象名字段。同样,-P 标志只显示大小适用的符号大小字段。

-p不排序。输出按符号表顺序打印。
-r倒序排序。
-T把可能会溢出它的列的每个名字截短,使显示的名字的最后一个字符是星号(*)。缺省情况下,nm 显示列出的符号的全名,并且一个比为其设置的列的宽度长的名称会引起名称后的每个列无法对齐。
-t Format显示指定格式下的数字值,其中 Format 参数是以下符号表示法之一: 
d
十进制符号表示法。这是 nm 命令的缺省格式。 
o
八进制符号表示法。 
x
十六进制符号表示法。 
-u只显示未定义符号。
-v按值而不是按字母表顺序排序输出。
-x用十六进制而不是十进制数来显示符号的值和大小。
-X mode指定 nm 应该检查的对象文件的类型。 mode 必须是下列之一: 
32 
只处理 32 位对象文件 
64 
只处理 64 位对象文件 
32_64 
处理 32 位和 64 位对象文件 

缺省是处理 32 位对象文件(忽略 64 位对象)。 mode 也可以 OBJECT_MODE 环境变量来设置。例如,OBJECT_MODE=64 使 nm 处理任何 64 位对象并且忽略 32 位对象。 -X 标志覆盖 OBJECT_MODE 变量。

注:
nm 命令支持 -- (双连字符)标志。如果文件名会被曲解为一个选项,该标志区别于 File 操作数。例如,要指定文件名以连字符开始,请使用 -- 标志。

退出状态

该命令返回下列出口值:

0 成功完成。
>0发生错误。

示例

  1. 列出 a.out 对象文件的静态和外部符号,请输入: 

    nm -e a.out
  2. 以十六进制显示符号大小和值并且按值排序符号,请输入: 

    nm -xv a.out
  3. 显示 libc.a 中所有 64 位对象符号,忽略所有 32 位对象: 

    nm -X64 /usr/lib/libc.a

文件

/usr/ccs/bin/nm 包含 nm 命令。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499912.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重构,体现一个工程师的基本素养和底蕴(细节篇)

重构小记(重构,改善既有代码的设计读后总结) 方法级别 提炼函数: 将一个大方法,拆成多个小方法,难点在于小方法的命名。 假如有早上上学的一个大方法, 那么就应该在里面有起床,穿衣…

MVPVM模式介绍

一、概述MVPVM即:Model-View-Presenter-ViewModel。此模式是MVVM和MVP模式的结合体。但是交互模式发生了比较大的变化。MVVM参考本博客文章:iOS-MVVM-模式介绍MVP参考本博客文章:MVP模式介绍 二、原理:Presenter同时持有View、Mod…

[线程池] ------ 形象的描述线程池,用一个特好记的例子来记忆

线程池 为了减少线程频繁的创建和销毁过程,引入池的概念。 将一些线程先创建好放在线程池中,每次来任务就用池中的线程执行,空闲时池中线程就等待,但不销毁。 原始线程池的创建: ThreadPoolExecutor executor1 new …

分组密码的工作模式

一、理论基础1.概述密码学中,块密码的工作模式允许使用同一个块密码密钥对多于一块的数据进行加密,并保证其安全性。块密码自身只能加密长度等于密码块长度的单块数据,若要加密变长数据,则数据必须先被划分为一些单独的密码块。通…

数据仓库基本认知

数据仓库概念: 数据仓库,英文名称Data Warehouse,简写为DW。 是一种面向分析的存储系统。 他是一个很大的数据存储集合,出于企业的分析性报告和决策支持目的而创建,对多样的业务数据进行筛选与整合。 它为企业提供一…

PBOC3.0中使用的国密SM2算法

一、知识准备 PBOC3.0规范就是《中国金融集成电路(IC)卡规范》3.0版本。SM2是国密局推出的一种他们自己说具有自主知识产权的非对称商用密码算法。本身是基于ECC椭圆曲线算法的,所以要讲SM2, 先要弄懂ECC。 完全理解ECC算法需要一定的数学功底…

mapper注入失败,NoSuchBeanDefinitionException: No qualifying bean of type [com.xxx.XxxMapper] found for d

mapper注入失败: Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.xxx.XxxMapper] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependen…

战地体能训练模拟器

一、名称:战地体能训练模拟器二、整体介绍: 1.体验者身处一个封闭空间的正中央,空间内部表面全部附着显示器,包含地板(因为地板是平的,可以使用投影的方式实现),经过视角上的设计,体验者就像身处…

java读文件写文件

使用了try-with-resource语法(JDK1.7及以上),代码更加便捷 Junit测试样例,先写入文件,再读出来: RunWith(SpringJUnit4ClassRunner.class) ContextConfiguration(locations "classpath:spring-conf…

Markdown入门

Markdown 是一种轻量级的「标记语言」,它的优点很多,目前也被越来越多的写作爱好者,撰稿者广泛使用。看到这里请不要被「标记」、「语言」所迷惑,Markdown 的语法十分简单。常用的标记符号也不超过十个,这种相对于更为…

bean注入失败的几种情况和解决思路:NoSuchBeanDefinitionException: No qualifying bean of type

bean注入失败,无非是两种情况,要么注入的写法出错,要么被注入的Bean未定义。 1.Bean未定义 如果是直接在XML中配置bean标签的时候 检查id和class是否写对 如果是用注解形式申明Bean 先检查Controller、Service、Repository、 Component …

通过AVFoundation框架获取摄像头数据

一、概述 从iOS4开始,AVFoundation框架增加了几个类,AVCaptureDevice、AVCaptureSession等,可以获取摄像头的数据,而不会弹出类似于ImagePicker一样的界面,我们可以将数据转为一张张的图片,然后我们可以即时…

mysql数据库支持emoji表情的详解

mysql存储emoji表情的时候,就会报错,如下: Error updating database. Cause: java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x98\x8A\xF0\x9F…’ for column ‘这是我表中的字段’ at row 1 初步定位是我的数据库是utf8编码…

CoreText使用介绍

一、概述 1.CoreText是苹果创建的一个用于文字排版的框架,可以实现文字排版、图文混排等复杂的界面效果。从iOS3.2启用。2.一个开源工具类-OHAttributedLabel,就是使用CoreText框架实现的,能够实现一个Label中有不同的文字大小、文字颜色、字…

编程规范:长函数的思考

在工作,我们应该都不想看到非常的长函数。对于一个运行5年左右的项目,极有可能出现这种情况。由于长函数的长、if/else嵌套,导致代码的可读性非常差,这对于项目的维护和开发带来了极大的困难。所以我们应该避免写长函数&#xff0…

用redis实现延迟队列

现在在用的redis实现延迟队列的主流程

iPhone各版本屏幕尺寸

设备宽高对角线逻辑分辨率(point)Scale Factor设备分辨率(pixel)PPI iPhoneWidthHeightDiagonal 3GS2.4 inches (62.1 mm)4.5 inches (115.5 mm)3.5-inch320x4801x320x480163 4(s)2.31 inches (58.6 mm)4.5 inches (115.2 mm)3.5-inch320x4802x640x960326 5c2.33 inches (59.2…

maven更新快照不起作用的解决方法

问题:maven的快照包更新后,调用方使用idea点下面这个地方更新maven,并没有拉到最新的快照 解决方法1 删除本地仓库的快照包,再重新拉一次 解决方法2 下图,这里点进去 下图,这个勾上就行了,再…

iOS中frame和Bounds之间的区别

frame frame是每个view必备的属性,代表的是当前视图的位置和大小,没有设置他,当前视图是看不到的。位置需要有参照物才能确定,数学中我们用坐标系来确定坐标系中的某个点的位置,iOS中有他特有的坐标系,如下…

[数据库]-----mysql数据的冷热分离 第二版

1.前提 这次数据库的冷热分离算是第二次做了 其实之前已经做过一次冷热分离了,涉及到数据库复制时,当时是趋近于业务的(后面会详细讲),整体来讲不是很好用,这次算是重构了吧 做的最终结果还是和前一次一样: 数据库中的订单数据,是每时每刻都在增加 我们认为3个月以内的数据,用…