開心生活站

位置:首頁 > IT科技 > 

linux,nm命令

IT科技2.47W

1、nm命令簡介:

nm命令是linux下自帶的特定文件分析工具,一般用來檢查分析二進制文件、庫文件、可執行文件中的符號表,返回二進制文件中各段的信息。

目標文件:常說的目標文件是程序文件(.c/.cpp,.h)經過預編譯,編譯,彙編過程生成的二進制文件,不經過鏈接過程,編譯生成指令爲:

gcc(g++) -c file.c(file.cpp)
將生成對應的file.o文件,file.o即爲二進制文件

庫文件:分爲靜態庫和動態庫,這裏不做過多介紹,庫文件是由多個二進制文件打包而成,生成的.a文件,示例:

ar -rsc liba.a test1.o test2.o test3.o
將test1.o test2.o test3.o三個文件打包成liba.a庫文件

可執行文件:可執行文件是由多個二進制文件或者庫文件(由上所得,庫文件其實是二進制文件的集合)經過鏈接過程生成的一個可執行文件,對應windows下的.exe文件,可執行文件中有且僅有一個main()函數(用戶程序入口,一般由bootloader指定,當然也可以改),一般情況下,二進制文件和庫文件中是不包含main()函數的,但是在linux下用戶有絕對的自由,做一個包含main函數的庫文件也是可以使用的。

上述三種文件的格式都是二進制文件。

2、nm命令功能:

目標文件、庫文件中、可執行文件用編輯器是無法查看其內容的(亂碼),所以當我們有這個需求(例如debug,查看內存分佈的時候)去查看一個二進制文件裏包含了哪些內容時,這時候就將用到一些特殊工具,linux下只有nm命令可以。

3、用法:

 man nm

4、常用命令參數:

-A 或-o或 --print-file-name:打印出每個符號屬於的文件
-a或--debug-syms:打印出所有符號,包括debug符號
-B:BSD碼顯示
-C或--demangle[=style]:對低級符號名稱進行解碼,C++文件需要添加
--no-demangle:不對低級符號名稱進行解碼,默認參數
-D 或--dynamic:顯示動態符號而不顯示普通符號,一般用於動態庫
-f format或--format=format:顯示的形式,默認爲bsd,可選爲sysv和posix
-g或--extern-only:僅顯示外部符號
-h或--help:國際慣例,顯示命令的幫助信息
-n或-v或--numeric-sort:顯示的符號以地址排序,而不是名稱排序
-p或--no-sort:不對顯示內容進行排序
-P或--portability:使用POSIX.2標準
-V或--version:國際管理,查看版本
--defined-only:僅顯示定義的符號

linux nm命令

標籤:linux nm 命令