Mac下nm命令详解

13 篇文章 0 订阅

简介

从Xcode8开始,苹果在mac上nm工具使用的就是llvm-nm工具(llvm-nm工具用来列出llvm字节码文件,目标文件以及归档文件中的目标中的符号名称)。对大部分nm工具的命令选项来说,他们都有相同的可选项;但-f,-s和-L这几个选项差别较大。本文主要介绍了nm工具的各种常使用的选项的含义。

nm主要用于展示符号文件中的各种符号的名称列表。某些情况下,如果一个文件使用了strip功能也就是-T剖离了符号,这种情况下,使用nmdyld结果会不太一样,这种情况需要使用dyldinfo来查看文件.

如果输入的文件是打包过的,使用nm会列举各个文件的详情。输入的文件可以是标准的libx.a(x.o)文件,会列举.a和.o文件的符号信息。

默认情况下,每个符号名的值都先于符号名出现。当使用-m选项的是,值后面会跟上如下字母,代表各个符号的类型:U(未定义的),A(绝对的),T(Text Section段的符号),D(Data Section的符号),B(bss Section的符号),C(一般符号),S(除了上面几种类型的符号外的符号),或者I(直接符号)。如果符号是本文件有的(非外部引入的),那么type就是小写的。

如果一个符号是Objective-C方法名称,符号名称就会像这样+-[Class_name(category_name) method:name:],显示,+号代表类方法,-号代表示例方法(category_name)代表这是一个类别.
默认情况下,符号是按字母表顺序排序输出的。

nm命令各个选项详细介绍

  • -a表示输出所有的符号

  • -g显示全局变量

  • -n按照符号值的数字大小排序而不是字母表顺序

  • -o 输出符号的所有位置,这种情况,一个符号会多次出现

  • -p符号输出不做排序,按照符号表的顺序输出,如下

  • -r逆序输出符号,如下是按照数字从大到小输出

  • -u只展示未定义的符号

  • -U不展示未定义的符号

  • -m展示N_SECT类型的符号(Mach-O 符号),会按照(segment_name, section_name) 的格式显示符号在哪个位置,会详细显示符号是否是外部引入的,是否未定义,普通符号,直接符号等等描述

  • -x以16进制形式展示符号,后面会跟上符号的名称

  • -j只展示符号,不展示值和类型

  • -s只展示知道(segname,sectname)的值,如下只展示__DATA __objc_data段的符号值。

  • -l展示一个伪符号,需要结婚-s符号一起使用。(暂时不清楚这个符号的具体作用)

  • -arch只展示universal file中指定架构的符号;如果指定文件包含这个符号,则展示指定架构的符号,否则展示所有的符号

  • -f按指定格式输出,支持如下bsd, sysv, posix or darwin四种格式,默认是darwin格式。

  • -A展示每个文件的路径和库名称

  • -P输出可移植接口格式的符号

  • -t给输出可移植接口格式的符号按照自定的数值格式输出,支持-d十进制,-o八进制,-x十六进制。默认十进制

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值