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的縮寫,表示如果其他函式庫中也有對這個符號的定義,則其他符號的定義可以覆蓋這個定義。
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的縮寫,表示如果其他函式庫中也有對這個符號的定義,則其他符號的定義可以覆蓋這個定義。