NM命令

nm命令是linux中用來列出某些文件中的符號表的辨液,是names的縮寫靠瞎,可以針對oc,c++ 唉工,c語言
nm有很多參數研乒,下面說幾個常用的參數
-m 顯示完整信息
-a,顯示所有符號淋硝,包括那些專門用來調試的符號雹熬。

-g,只顯示全局符號谣膳,不顯示局部符號橄唬。

-n,按照數字而不是默認的字符排序参歹。

-p,不排序隆判,按照符號在符號表中出現(xiàn)的次序顯示犬庇。

-r,符號按照反序顯示(默認就是按照符號名字字符排序的反序侨嘀,如果帶上-p參數就是按照在符號表中出現(xiàn)次序的反序臭挽,如果帶上-n參數就是按照符號名數字排序的反序)。

-u咬腕,只顯示未定義的符號欢峰。

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

-j宠漩,只顯示符號的名字,而不顯示符號對應的數值和類型
下面來用nm命令來看下一個文件的符號表是什么樣的
TestModuleA.c文件

include "TestModuleA.h"

include <stdio.h>

int aa;
static char *bb;
int cc=10;
static int *dd;
static int *ee=1;
extern int ff;
int testFun(int a, int b){
return a+b;
}

int testFunLocal(int a, int b){
printf("%d",aa);
printf("%s",bb);
printf("%d",cc);
printf("%d",dd);
printf("%d",ee);
printf("%d",ff);
return testFun(a,b);
}

補充幾點知識懊直,

1.一個目標文件和可執(zhí)行文件結構類似有以下部分組成

File Header 扒吁、 .text secton 、 .data secton 室囊、 .bss secton 四大部分雕崩。 File Header是文件頭,描述整個文件的文件屬性融撞,包括是否可執(zhí)行文件盼铁、目標操作系統(tǒng)、目標硬件等信息尝偎。文件頭還包括一個段表(Section Table)描述下面幾個段的偏移地址以及屬性饶火。 .text section是代碼段,存放編譯生成的指令冬念; .data section是數據段趁窃,存放已初始化的靜態(tài)常量數據; .bss section存放未初始化的靜態(tài)常量

2.全局變量搭配static后急前,可分為2種

a外部變量:定義的變量能被本文件和外部文件訪問的變量醒陆。(默認的全局變量就是外部變量)

b內部變量:定義的變量只能被本件訪問,不能被其他文件訪問裆针。(使用static修飾)

如:

static int a; 定義的全局變量只能在本文件中使用刨摩。

int a ; 定義的全局變量默認就是外部變量。

加上關鍵字 extern int a; 意思就是 聲明了一個外部變量世吨。

經過編譯之后生成TestModuleA.c.o目標文件澡刹,使用如下命令
nm -m TestModuleA.c.o結果如下
0000000000000004 (common) (alignment 2^2) external _aa
00000000000006d8 (__DATA,__bss) non-external _bb
00000000000000d8 (__DATA,__data) external _cc
00000000000006e0 (__DATA,__bss) non-external _dd
00000000000000e0 (__DATA,__data) non-external _ee
(undefined) external _ff
(undefined) external _printf
00000000000000c0 (__TEXT,__text) non-external _testFun
0000000000000000 (__TEXT,__text) external _testFunLocal
其中0000000000000004表示符號的地址, external表示全局變量耘婚,通過上面補充知識就可以理解nm -m的輸出含義罢浇,
aa是默認全局變量,但是因為沒有exter關鍵字沐祷,所以是定義了aa而不僅僅是聲明嚷闭,它是由默認值的,為0赖临,

bb使用static修飾胞锰,非全局,但是因為它沒有初始化兢榨,所以位于bss段

cc使用extern修改嗅榕,而且初始化了顺饮,這里代表定義了一個全局的變量cc,所以位于data段

dd同bb

ee使用static修飾凌那,非全局兼雄,但是因為它初始化了,所以位于data段

ff使用extern修改案怯,但是因為它沒有初始化君旦,這里表示只是聲明了一個全局變量,并沒有定義嘲碱,所以這里顯示undefined external

printf是系統(tǒng)函數金砍,這里只是調用,并不是定義麦锯,所以是 (undefined) external

_testFun和_testFunLocal是函數恕稠,位于代碼段,一個是非全局的扶欣,一個是全局的

如果不加-m參數
nm TestModuleA.c.o那么輸出如下鹅巍,請自行體會區(qū)別
0000000000000004 C _aa
00000000000006b0 b _bb
00000000000000b8 D _cc
00000000000006b8 b _dd
00000000000000c0 d _ee
U _printf
00000000000000a0 t _testFun
0000000000000000 T _testFunLocal
其實縮寫而已,一一對應即可

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末料祠,一起剝皮案震驚了整個濱河市骆捧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌髓绽,老刑警劉巖敛苇,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異顺呕,居然都是意外死亡枫攀,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門株茶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來来涨,“玉大人,你說我怎么就攤上這事启盛”钠” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵僵闯,是天一觀的道長笤闯。 經常有香客問我,道長棍厂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任超陆,我火速辦了婚禮牺弹,結果婚禮上浦马,老公的妹妹穿的比我還像新娘。我一直安慰自己张漂,他們只是感情好晶默,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著航攒,像睡著了一般磺陡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上漠畜,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天币他,我揣著相機與錄音,去河邊找鬼憔狞。 笑死蝴悉,一個胖子當著我的面吹牛,可吹牛的內容都是我干的瘾敢。 我是一名探鬼主播拍冠,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼簇抵!你這毒婦竟也來了庆杜?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤碟摆,失蹤者是張志新(化名)和其女友劉穎晃财,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體焦履,經...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡拓劝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了嘉裤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片郑临。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖屑宠,靈堂內的尸體忽然破棺而出厢洞,到底是詐尸還是另有隱情,我是刑警寧澤典奉,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布躺翻,位于F島的核電站,受9級特大地震影響卫玖,放射性物質發(fā)生泄漏公你。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一假瞬、第九天 我趴在偏房一處隱蔽的房頂上張望陕靠。 院中可真熱鬧迂尝,春花似錦、人聲如沸剪芥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽税肪。三九已至溉躲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間益兄,已是汗流浹背锻梳。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留偏塞,地道東北人唱蒸。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像灸叼,于是被迫代替她去往敵國和親神汹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容

  • 一 常用腳本 1 打包腳本 腳本如下氓拼,下面附上ar 和 ranlib命令參考(命令來自于網絡) 2 更新靜態(tài)庫 使...
    火星來的農民閱讀 12,668評論 0 4
  • nm命令 這個命令列出目標文件的符號。如果沒有指定目標文件抵碟,默認是a.out桃漾。 命令參數 輸出格式 nm命令的輸出...
    visual_閱讀 5,448評論 0 3
  • 很多時候我們并不首要關注庫本身的實現(xiàn),或者根本無法看到其底層邏輯拟逮,但又必須確認某些函數或變量的命名(如排查定義沖突...
    團不慌閱讀 24,616評論 0 6
  • 在C語言中,五種基本數據類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 3,325評論 0 2
  • 轉載請注明地址:涼鞋的筆記 為毛要實現(xiàn)這個工具???1.在我小時候,每當游戲在真機運行時,我們看到的日志是這樣的撬统。...
    光明程輝閱讀 644評論 0 0