zoukankan      html  css  js  c++  java
  • nm命令

    它用来列出一个目标文件中的各种符号。

     

    nm命令还是比较简单而且强大的。它用来列出一个目标文件中的各种符号。符号的种类很多,以下是一些常见的符号类型

    nm输出字符

    含义

    R

    Read only symbol. 比如在代码中有一个const MAXDATA = 3095; 则MAXDATA就是一个Read only symbol

    N

    这是一个调试符号

    D

    这是一个已经初始化的变量的符号。比如代码中int i = 1和char *str = "Hello"则i和str都是这种类型的符号

    T

    Text段的符号。子程序都是这种符号,比如文件中实现了一个函数function,则function就是这种符号

    U

    未定义的符号。如果文件中引用了不存在的函数,则这些未定义的函数符号就是这种类型

    S

    未初始化的符号,比如全局变量int s;则s的符号就是此类型

    nm命令的详细用法以及例子见正文。

    先来例子,以下是a.c的内容:

    #include <stdio.h>

    static int s_global;
    int i = 1;
    char *str = "hello, world";
    const ID = 10;
    extern int e_global;
    void function()
    {
            printf("Hello");
    }
    int get_x()
    {
            int x;
            x = 33;
            return x;
    }

    在执行"gcc -g -O -c a.c"产生a.o之后,用"nm -A a.o"的输出为:

    a.o:00000000 R ID
    a.o:00000000 T function
    a.o:00000014 T get_x
    a.o:00000000 D i
    a.o:         U printf
    a.o:00000000 b s_global
    a.o:00000004 D str

    nm的用法

    nm的用法很简单,以下几个关键字比较常用:

    1"-A",列出符号名的时候同时显示来自于哪个文件。

    这在同时列出多个文件(比如一个链接库)的符号时比较有用

    2"-a",列出所有符号

    这将会把调试符号也列出来。默认状态下调试符号不会被列出。

    3"-l",列出符号在源代码中对应的行号

    指定这个参数后,nm将利用调试信息找出文件名以及符号的行号。对于一个已定义符号,将会找出这个符号定义的行号,对于未定义符号,显示为空

    4"-n",根据符号的地址来排序

    默认是按符号名称的字母顺序排序的

    5"-u",只列出未定义符号

    同"--undefined-only", 而"--defined-only"将只列出已定义符号

  • 相关阅读:
    程序员下班去超市购物与收银员的一段搞笑对白 续集
    2010年9月02日周四_Deploying ArcGIS Mobile applications_4.1
    2010年8月30日周一_Adding layers _7.2
    2010年8月30日周一_Creating A Map_7.1
    2010年9月01日周三_CreatingAndPublishingaMobileWebService_3.2
    2010年8月29日周日_Deployment_6
    2010年8月31日周二_Navigating the map_7.3
    2010年8月30日周一_Introduction to ArcGIS Mobile SDK_1
    2010年9月01日周三_Using GPS data and devices_3.3
    2010年8月29日周日_Using the Sample Xcode Projects_5
  • 原文地址:https://www.cnblogs.com/sdgwc/p/3300294.html
Copyright © 2011-2022 走看看