1. 程式人生 > >Mac平臺下使用nm命令檢視檔案的符號表

Mac平臺下使用nm命令檢視檔案的符號表

在Mac平臺下,可以使用nm命令來檢視一個檔案的符號表資訊。nm命令列工具是附帶在Xcode中的,因此在使用之前請事先安裝好Xcode。

nm命令的格式大致如下:

nm  [ -agnoprumxjlfPA [ s segname sectname ] ] [ - ] [ -t format ] [ [ -arch arch_flag ]... ] [ file ... ]

如果不帶任何可選引數的話,使用nm命令將會列出指定檔案中的所有符號,符號出現的次序預設按照字元排序。如果符號代表的是一個由Object C語言編寫的函式,那麼其名字將是+-[Class_name(category_name) method:name:]。

對於每一個符號,其格式是“符號值符號型別符號名”:

不過可以看到,nm命令也有許多的引數可選,這些引數的大致作用如下:

-a,顯示所有符號,包括那些專門用來除錯的符號。

-g,只顯示全域性符號,不顯示區域性符號。

-n,按照數字而不是預設的字元排序。

-p,不排序,按照符號在符號表中出現的次序顯示。

-r,符號按照反序顯示(預設就是按照符號名字字元排序的反序,如果帶上-p引數就是按照在符號表中出現次序的反序,如果帶上-n引數就是按照符號名數字排序的反序)。

-u,只顯示未定義的符號。

-U,不顯示未定義的符號,與-u的作用剛好相反。

-j,只顯示符號的名字,而不顯示符號對應的數值和型別。

-s segname sectname

只解析位於檔案中segname段裡sectname節內的符號。

-arch archtype

OS X和iOS系統都是支援所謂的肥(Fat)檔案的,也就是一個大檔案中包含了分別對不同平臺支援的檔案。

預設情況下,nm會將其中每一個平臺檔案中所包含的符號都列出來。如果你只想看某一個平臺檔案中的符號,可以用這個選項指定。

例如,對於包含了32位armv7指令集和64位armv8指令集的iOS可執行檔案來說,如果只想看錶示32位armv7指令集部分的符號,可以加上-arch arm引數;而如果想看錶示64位armv8指令集部分的符號,可以加上-arch arm64引數。

-x,將以16進位制的形式顯示符號表中所有符號每一項的值,格式如下:

-A,在每一行符號的前面加上檔名。

-P,以簡單格式顯示每一個符號,格式如下:

-t format,如果使用前面的-P引數,則符號的數值將使用16進製表示,但是可以再加上-t引數來指定用別的格式顯示符號的值。主要有下面幾種:

d:以10進位制顯示;

o:以8進位制顯示;

x:以16進位制顯示(預設)。

一般來說,在每個符號的前面,都有一個字母來表示這個符號的型別。對於每一個符號來說,其型別如果是小寫字母表示的的,則說明該符號是本地(Local)的或者說是內部(Internal)的,而如果是大寫字母表示的,則說明該符號是全域性的,也就是可供外部(External)訪問的。

一共主要有以下幾種型別:

1)U,未定義符號

表示這個符號沒有在本檔案中定義,需要解析別的檔案從而找出對應符號的定義。

例如,當前檔案呼叫另一個檔案中定義的函式或者全域性變數,這個被呼叫的函式或全域性變數在當前檔案中就是未定義的。(但是,在定義它的檔案中,如果是函式則對應的型別是T,而如果是全域性變數則其符號型別為C)。

2)A,絕對符號

表示該符號的值是絕對的,在以後的連結過程中,不允許進行改變。這種型別的符號常常出現在中斷向量表中,例如用符號來表示各個中斷向量函式在中斷向量表中的位置。

3)T,定義在__TEXT段__text區(程式碼區)中的符號

表示該符號位於程式碼區中,其值表示該符號在整個檔案當中的所處的位置。

有點奇怪的是符號“__mh_execute_header”竟然型別也為T,算作在程式碼區定義的符號。

4)D,定義在__DATA段__data區中的符號

表明該符號位於初始化資料區中,其值表示該符號在整個檔案當中的所處的位置。

5)B,定義在__DATA段__bss區中的符號

表明該符號位於非初始化資料區中,其值表示該符號在bss段中的偏移。

6)C,所謂的普通(Common)符號,定義在__DATA段__common區中的符號

普通符號是定義在一個未初始化資料段內的符號。該符號沒有包含於一個普通的區中,只有在連結過程中才進行分配,符號的值表示該符號需要的位元組數。例如在一個C檔案中,定義int test,並且該符號在別的地方會被引用,則該符號型別即為C,否則其型別為B。

7)I,間接符號

說明這個符號是僅僅是對另一個符號的間接引用。

8)S,其它符號

定義在除前所述其它地方的符號,例如出現在__TEXT段__const區中的符號。

相關推薦

Mac平臺下使用nm命令檢視檔案符號

在Mac平臺下,可以使用nm命令來檢視一個檔案的符號表資訊。nm命令列工具是附帶在Xcode中的,因此在使用之前請事先安裝好Xcode。 nm命令的格式大致如下: nm [ -agnoprumxjlfPA [ s segname sectname ] ] [ - ] [

nm命令檢視檔案符號

nm列出的符號有很多,常見的有三種:一種是在庫中被呼叫,但並沒有在庫中定義(表明需要其他庫支援),用U表示;一種是庫中定義的函式,用T表示,這是最常見的;另外一種是所謂的“弱態”符號,它們雖然在庫中被定義,但是可能被其他庫中的同名符號覆蓋,用W表示。更多功能請檢視 man n

nm命令 檢視符號檔案

nm命令介紹的很多,但大多不介紹其函式符號標誌的含義。 最近在除錯動態庫時常用到,其中用的最多的用法: nm -A * |grep “aaa” | c++filt // -A 為了顯示檔案, c++filt轉換為可讀風格,好像有個引數也能實現類似功能 其

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

顯示關於物件檔案、可執行檔案以及物件檔案庫裡的符號資訊。 語法 nm [ -A ] [ -C ] [ -X {32|64|32_64}] [ -f ] [ -h ] [ -l ] [ -p ] [ -r ] [ -T ] [ -v ] [ -B | -P ]

Linux下用ls和du命令檢視檔案以及資料夾大小 (轉載)

ls的用法 ls -l |grep "^-"|wc -l或find ./company -type f | wc -l  檢視某資料夾下檔案的個數,包括子資料夾裡的。 ls -lR|grep "^-"|wc -l   檢視某資料夾下資料夾的個數,包括子資料夾裡的

Windows命令檢視檔案MD5

certutil -hashfile yourfilename.ext MD5   certutil -hashfile yourfilename.ext SHA1   certutil -hashfile yourfilename.ext SHA

利用linux的df和du命令檢視檔案和目錄的記憶體佔用

版權宣告:本文為博主原創文章,轉載請超連結註明出處。    https://blog.csdn.net/ljc1026774829/article/details/74935658 當磁碟大小超過標準時會有報警提示,這時如果掌握df和du命令是非常明智的選擇。 df

hadoop 命令檢視檔案前幾行

wechat:812716131 ------------------------------------------------------ 技術交流群請聯絡上面wechat ----------------------------------------------

Linux下用ls和du命令檢視檔案以及資料夾大小

ls -l |grep "^-"|wc -l或find ./company -type f | wc -l  檢視某資料夾下檔案的個數,包括子資料夾裡的。 ls -lR|grep "^-"|wc -l   檢視某資料夾下資料夾的個數,包括子資料夾裡的。 ls -lR|grep "^d"|wc -l  說明:

Mac臺下Opencv開發環境搭建

OpenCV(Open Source Computer Vision Library),是一個開源的跨平臺的計算機視覺庫,它實現了影象處理和計算機視覺領域的很多通用演算法,可以在多種計算機平臺上執行,支援C++、C#、Python等語言,也提供了Ruby、Matlab等語言

linux命令檢視檔案尾部內容

【tail -f filename】檢視filename尾部內容。 【tailf filename】 相似於tail -f filename操作。 日誌跟蹤常用尾部內容查詢命令,可以實時監控最新日誌變化。

DOS批處理列舉所有碟符 和 fsutil命令檢視檔案系統

dos批處理列舉所有驅動器,在最後一個驅動器上建立你指定的目錄。   在純dos環境下你可以使用goto來指定它的走向,純dos環境下沒有vbscript可以使用,而dos命令就成為了較通用的指令碼。 @REM  其中redtek這個名字為你想要建立的目錄名稱

ELF格式檔案符號全解析及readelf命令使用方法

readelf 命令引數 以 hello.c 程式為例 #include <stdio.h> #include <stdlib.h> int main() { int a=100; print

linux 臺下C語言建立檔案

#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys

window下cmd通過Type命令檢視檔案文字內容和通過Echo命令新增文字內容到檔案

CMD是Command的簡寫,是Windows系統下的類DOS精簡系統。 在CMD視窗中,檢視文字檔案內容是用的命令是:TYPE 按下快捷鍵:WIN+R,調出執行視窗,輸入:CMD CMD的TYPE指令,語法:type 驅動器:\資料夾\檔名 示例參考: typ

linux du命令檢視檔案檔案大小資訊

du命令功能說明:統計目錄(或檔案)所佔磁碟空間的大小。 語  法:du [-abcDhHklmsSx] [-L <符號連線>][-X <檔案>][--block-size][--exclude=<目錄或檔案>] [--max-depth=<目錄層數>][--

Mac臺下iTerm終端工具配置快捷鍵登入伺服器

iTerm是在Mac系統中很好用的終端工具,可以配置很多東西來打造一個強大的互動終端,這裡記錄一下如何配置使用快捷鍵登入伺服器: 1. 在使用者主目錄下新建檔案".ssh_centos_mysql_m

Linux下tail命令檢視檔案內容

linux ---tail命令 linux中tail命令---用於檢視檔案內容 ,最基本的是cat、more和less。 1. 如果你只想看檔案的前5行,可以使用head命令,如: head -5 /etc/passwd 2. 如果你想檢視檔案的後10行,可以使用tail命令,如:tail -10 /etc

linux命令--檢視檔案系統 df -T

linux141:/etc/ssh # df -T Filesystem    Type   1K-blocks      Used Available Use% Mounted on /dev/sda2     ext3    82573140  28105508  50

Mac臺下boost安裝及使用

轉載連結 http://blog.csdn.net/xujiezhige/article/details/8230493 方法一: 去Macports官網的下載頁面(https://distfiles.macports.org/MacPorts/)下載對用Mac系