美文网首页
mac下nm命令详解

mac下nm命令详解

作者: 落叶情思 | 来源:发表于2020-12-19 21:59 被阅读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表示输出所有的符号

      image
    • -g显示全局变量

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      image

    相关文章

      网友评论

          本文标题:mac下nm命令详解

          本文链接:https://www.haomeiwen.com/subject/wfxhnktx.html