1. 程式人生 > >nm命令檢視物件,可執行及庫檔案

nm命令檢視物件,可執行及庫檔案

顯示關於物件檔案、可執行檔案以及物件檔案庫裡的符號資訊。

語法

nm [ -A ] [ -C ] [ -X {32|64|32_64}] [ -f ] [ -h ] [ -l ] [ -p ] [ -r ] [ -T ] [ -v ] [ -B -P ] [-e -g | -u ] [ -d -o -x -t Format ] File ...

描述

nm 命令顯示關於指定 File 中符號的資訊,檔案可以是物件檔案、可執行檔案或物件檔案庫。如果檔案沒有包含符號資訊,nm 命令報告該情況,但不把它解釋為出錯條件。 nm 命令預設情況下報告十進位制符號表示法下的數字值。

nm 命令把以下符號資訊寫入標準輸出:

  • 物件名

    如果您指定了 -A 選項,則 nm 命令只報告與該檔案有關的或者庫或者物件名。

  • 符號名稱
  • 符號型別

    nm 命令使用以下符號(用同樣的字元表示弱符號作為全域性符號)之一來表示檔案符號型別:

    A Global absolute 符號。
    a Local absolute 符號。
    B Global bss 符號。
    b Local bss 符號。
    D Global data 符號。
    d Local data 符號。
    f 原始檔名稱符號。
    T Global text 符號。
    t Local text 符號。
    U 未定義符號。
  • 大小

    如果可應用,nm 命令報告與符號有關的大小。

標誌

-A 每行或者顯示全路徑名稱或者顯示物件庫名。
-B 在 Berkeley 軟體分發(BSD)格式中顯示輸出:
值   型別   名稱
-C 限制解碼(demangle) C++ 名稱。預設是解碼所有 C++ 符號名。

注:

C++ 物件檔案中的符號在被使用前它們的名稱已經被解碼了。

-d 用十進位制顯示符號的值和大小。這是預設的。
-e 只顯示靜態的和外部的(全域性)符號。
-f 顯示完整的輸出,包括冗餘的 .text、 .data 以及 .bss 符號,這些在通常都是被限制的。
-g 只顯示外部的(全域性)符號。
-h 限制輸出頭資料的顯示。
-l 通過給 WEAK 符號的編碼鍵附加一個 * 來區分 WEAK 和 GLOBAL 符號。如果和 -P選項一起使用, WEAK 符號的符號型別顯示如下:
V
Weak Data 符號
W
Weak Text 符號
w
Weak 未定義符號
Z
Weak bss 符號
-o 用八進位制而不是十進位制數來顯示符號的值和大小。
-P 以標準可移植輸出格式顯示資訊:
庫/物件名  名稱   型別   值   大小

該格式以十六進位制符號表示法顯示數字值,除非您用 -t-d 或 -o 標誌指定不同的格式。

如果您指定了 -A 標誌 -P 標誌只顯示 庫/物件名欄位。同樣,-P 標誌只顯示大小適用的符號大小欄位。

-p 不排序。輸出按符號表順序列印。
-r 倒序排序。
-T 把可能會溢位它的列的每個名字截短,使顯示的名字的最後一個字元是星號(*)。預設情況下,nm 顯示列出的符號的全名,並且一個比為其設定的列的寬度長的名稱會引起名稱後的每個列無法對齊。
-t Format 顯示指定格式下的數字值,其中 Format 引數是以下符號表示法之一:
d
十進位制符號表示法。這是 nm 命令的預設格式。
o
八進位制符號表示法。
x
十六進位制符號表示法。
-u 只顯示未定義符號。
-v 按值而不是按字母表順序排序輸出。
-x 用十六進位制而不是十進位制數來顯示符號的值和大小。
-X mode 指定 nm 應該檢查的物件檔案的型別。 mode 必須是下列之一:
32
只處理 32 位物件檔案
64
只處理 64 位物件檔案
32_64
處理 32 位和 64 位物件檔案

預設是處理 32 位物件檔案(忽略 64 位物件)。 mode 也可以 OBJECT_MODE 環境變數來設定。例如,OBJECT_MODE=64 使 nm 處理任何 64 位物件並且忽略 32 位物件。 -X 標誌覆蓋 OBJECT_MODE 變數。

注:

nm 命令支援 -- (雙連字元)標誌。如果檔名會被曲解為一個選項,該標誌區別於 File 運算元。例如,要指定檔名以連字元開始,請使用 -- 標誌。

退出狀態

該命令返回下列出口值:

0 成功完成。
>0 發生錯誤。

示例

  1. 列出 a.out 物件檔案的靜態和外部符號,請輸入:
    nm -e a.out
  2. 以十六進位制顯示符號大小和值並且按值排序符號,請輸入:
    nm -xv a.out
  3. 顯示 libc.a 中所有 64 位物件符號,忽略所有 32 位物件:
    nm -X64 /usr/lib/libc.a

檔案

/usr/ccs/bin/nm 包含 nm 命令。