nm命令

作者: visual_ | 来源:发表于2018-08-15 17:39 被阅读133次

    nm命令

    这个命令列出目标文件的符号。如果没有指定目标文件,默认是a.out。

    命令参数

    [-a|--debug-syms]
    [-g|--extern-only] //只显示外部符号.
    [-B] [-C|--demangle[=style]] 
    [-D|--dynamic] 
    [-S|--print-size] 
    [-s|--print-armap] 
    [-A|-o|--print-file-name] 
    [-n|-v|--numeric-sort] 
    [-p|--no-sort] 
    [-r|--reverse-sort] [--size-sort] 
    [-u|--undefined-only] //只显示未定义的符号.
    [-t radix|--radix=radix] //符号值得进制。d 十进制, o 八进制, x 十六进制.
    [-P|--portability] 
    [--target=bfdname] 
    [-fformat|--format=format] //输出的格式,有"bsd","sysv" 或"posix"可选。默认是“bsd”
    [--defined-only] //只显示已定义的符号.
    [-l|--line-numbers] //对每一个符号,使用调试信息去查找文件名和行号
    [--no-demangle] 
    [-V|--version] 
    [-X 32_64] 
    [--help]  //显示帮助
    [objfile...]  
    
    
    

    输出格式

    nm命令的输出包含三个部分:
    1 符号值。默认显示十六进制,也可以指定;
    2 符号类型。小写表示是本地符号,大写表示全局符号(external);
    3 符号名称。
    给个例子:

                    U dyld_stub_binder
                     U _objc_storeStrong
                     U _objc_retainAutoreleasedReturnValue
                     U _objc_retain
                     U _objc_release
                     U _objc_msgSend
                     U _objc_autoreleaseReturnValue
    0000000000007cf8 T _checkName
                     U __objc_empty_cache
                     U ___CFConstantStringClassReference
    00000000000084d8 S _OBJC_METACLASS_$_WillExistModel
                     U _OBJC_METACLASS_$_NSObject
    00000000000083e8 S _OBJC_METACLASS_$_Module1
    0000000000008438 S _OBJC_METACLASS_$_ExistModel3
    0000000000008398 S _OBJC_METACLASS_$_ExistModel2
    0000000000008488 S _OBJC_METACLASS_$_ExistModel1
    0000000000008500 S _OBJC_CLASS_$_WillExistModel
                     U _OBJC_CLASS_$_NSString
                     U _OBJC_CLASS_$_NSObject
    0000000000008410 S _OBJC_CLASS_$_Module1
    0000000000008460 S _OBJC_CLASS_$_ExistModel3
    00000000000083c0 S _OBJC_CLASS_$_ExistModel2
    00000000000084b0 S _OBJC_CLASS_$_ExistModel1
                     U _NSStringFromSelector
    0000000000007f80 S _MTG_Module1VersionString
    0000000000007fb0 S _MTG_Module1VersionNumber
    0000000000007d54 t -[Module1 moduleStyle1:]
    

    符号类型介绍一下

    A: 符号值是绝对的。在进一步的连接中,不会被改变。
    B: 符号位于未初始化数据段(known as BSS).
    C: 共用(common)符号. 共用符号是未初始化的数据。在连接时,多个共用符号可能采用一个同样的名字,如果这个符号在某个地方被定义,共用符号被认为是未定义的引用.
    D: 已初始化数据段的符号
    G: 已初始化数据段中的小目标(small objective)符号. 一些目标文件格式允许更有效的访问小目标数据,比如一个全局的int变量相对于一个大的全局数组。
    I: 其他符号的直接应用,这是GNU扩展的,很少用了.
    N: 调试符号.
    R: 只读数据段符号.
    S: 未初始化数据段中的小目标(small object)符号.
    T: 代码段的符号.
    U: 未定义符号.
    V: 弱对象(weak object)符号. 当一个已定义的弱符号被连接到一个普通定义符号,普通定义符号可以正常使用,当一个未定义的弱对象被连接到一个未定义的符号,弱符号的值为0.
    W: 一个没有被指定一个弱对象符号的弱符号(weak symbol)。
    -: a.out目标文件中的刺符号(stabs symbol). 这种情况下,打印的下一个值是其他字段,描述字段,和类型。刺符号用于保留调试信息.
    ?: 未知符号类型,或者目标文件特有的符号类型.

    原贴地址

    相关文章

      网友评论

          本文标题:nm命令

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