首頁>Club>
6
回覆列表
  • 1 # 使用者藍天一小片

    nm基本用法命令


    nm用來列出目標檔案的符號清單。下面是nm命令的格式:


    nm[-a|--debug-syms][-g|--extern-only][-B]


    [-C|--demangle][-D|--dynamic][-s|--print-armap]


    [-o|--print-file-name][-n|--numeric-sort] 輸出符號所對應的庫的名字,在查詢符號在那個庫中被定義時比較有用


    [-p|--no-sort][-r|--reverse-sort][--size-sort]


    [-u|--undefined-only][-l|--line-numbers][--help]


    [--version][-tradix|--radix=radix]


    [-P|--portability][-fformat|--format=format]


    [--target=bfdname][objfile...]


    如果沒有為nm命令指出目標檔案,則nm假定目標檔案是a.out。下面列出該命令的任選項,大部分支援“-”開頭的短格式和“-“開頭的長格式。


    -A、-o或--print-file-name:在找到的各個符號的名字前加上檔名,而不是在此檔案的所有符號前只出現檔名一次。


    例如nmlibtest.a的輸出如下:


    CPThread.o:


    00000068TMain__8CPThreadPv


    00000038TStart__8CPThread


    00000014T_._8CPThread


    00000000T__8CPThread


    00000000?__FRAME_BEGIN__


    …………………………………


    則nm-A的輸出如下:


    libtest.a:CPThread.o:00000068TMain__8CPThreadPv


    libtest.a:CPThread.o:00000038TStart__8CPThread


    libtest.a:CPThread.o:00000014T_._8CPThread


    libtest.a:CPThread.o:00000000T__8CPThread


    libtest.a:CPThread.o:00000000?__FRAME_BEGIN__


    …………………………………………………………..


    -a或--debug-syms:顯示除錯符號。


    -B:等同於--format=bsd,用來相容MIPS的nm。


    -C或--demangle:將低階符號名解碼(demangle)成使用者級名字。這樣可以使得C++函式名具有可讀性。


    -D或--dynamic:顯示動態符號。該任選項僅對於動態目標(例如特定型別的共享庫)有意義。


    -fformat:使用format格式輸出。format可以選取bsd、sysv或posix,該選項在GNU的nm中有用。預設為bsd。


    -g或--extern-only:僅顯示外部符號。


    -n、-v或--numeric-sort:按符號對應地址的順序排序,而非按符號名的字元順序。


    -p或--no-sort:按目標檔案中遇到的符號順序顯示,不排序。


    -P或--portability:使用POSIX.2標準輸出格式代替預設的輸出格式。等同於使用任選項-fposix。


    -s或--print-armap:當列出庫中成員的符號時,包含索引。索引的內容包含:哪些模組包含哪些名字的對映。


    -r或--reverse-sort:反轉排序的順序(例如,升序變為降序)。


    --size-sort:按大小排列符號順序。該大小是按照一個符號的值與它下一個符號的值進行計算的。


    -tradix或--radix=radix:使用radix進位制顯示符號值。radix只能為“d”表示十進位制、“o”表示八進位制或“x”表示十六進位制。


    --target=bfdname:指定一個目的碼的格式,而非使用系統的預設格式。


    -u或--undefined-only:僅顯示沒有定義的符號(那些外部符號)。


    -l或--line-numbers:對每個符號,使用除錯資訊來試圖找到檔名和行號。對於已定義的符號,查詢符號地址的行號。對於未定義符號,查詢指向符號


    重定位入口的行號。如果可以找到行號資訊,顯示在符號資訊之後。


    -V或--version:顯示nm的版本號。


    --help:顯示nm的任選項。


    ar cs libmy.a//建立一個庫


    ar rs libmy.a 1.o//增加一個模組


    ar t libmy.a//顯示庫裡的模組


    ar d libmy.a 1.o//刪除一個模組


    nm命令的輸出:

    關於符號的型別,這裡我們再多討論一下。符號的型別是以一個字母的形式顯示的,小寫字母表示這個符號是本地(local)的,而大寫字母則表示這個


    符號是 全域性的(global,externel)。

    一般來說,型別有一下幾種:T、D、B、U、W。各自的含義如下:

    T表示在程式碼段中定義的一般變數符號;

    D表示是初始化過的資料段;

    B表示初始化的資料段;

    U表示沒有定義的,在這個庫裡面使用了,但是在其他庫中定義的符號;

    W,weak的縮寫,表示如果其他函式庫中也有對這個符號的定義,則其他符號的定義可以覆蓋這個定義。

  • 中秋節和大豐收的關聯?
  • 農村自建房一層客廳有滴水是怎麼回事?