nm用法小記


nm用於顯示目標文件的符號,也是二進制工具集(info binutils)里的一員

先來看一個例子,源碼和對應的命令結果

四部分分別表示的意義

  1. 符號所在的obj文件名
  2. 符號的值,這里應該是指符號所在段的偏移地址。
  3. 符號類型
  4. 符號名

 

其中,'3'的符號類型有以下幾類,小寫表示局部,大寫表示全局

A

符號的值不會在連接時發生改變,是固定的

b\B

符號在未初始化數據段(BSS)

C

The symbol is common. Common symbols are uninitialized data. When linking, multiple common symbols may appear with the same name. If the symbol is defined anywhere, the common symbols are treated as undefined references.

D\d

符號在初始化的數據段里(.data)

G\g

符號在初始化的數據段里(small objects),個別的允許小數據的目標文件

N

符號是調試符號

p

符號在stack unwind段里

R\r

符號在只讀數據段里

S\s

符號在未初始化的數據段里(for small objects)

T\t

符號在代碼(text)段(code)

U

符號未定義

u

符號是一個唯一的全局符號

 

命令概述

 

選項解釋

只介紹有用的

-a

--debug-syms

顯示所有的符號。

-D

--dynamic

顯示動態符號而不是通常的符號,通常用來顯示動態庫

-g

--extern-only

只顯示外部的(external)符號

-l

--line-numbers

用調試信息盡量找出符號對應的文件名和行數(有時候會不准確)

-n

-V

--numeric-sort

用地址排序符號而不是用名字的字母排序

-r

--reverse-sort

反轉排序序列

-S

--print-size

以bsd風格同時打印符號的地址和大小

-s

--print-armap

同時打印出索引(由ar或ranlib生成),可以知道符號是哪個模塊的。(用於庫文件)

-t radix

--radix=radix

指定基地址數制,

d 十進制

o 八進制

x 十六進制

-u

--undefined-only

只打印未定義的符號

--size-sort

以符號的大小排序

 

 


本文由 劉英皓 創作,采用 知識共享 署名-非商業性使用-相同方式共享 3.0 中國大陸 許可協議進行許可。歡迎轉載,請注明出處:
轉載自:http://www.cnblogs.com/yinghao1991/p/6395566.html

 

 

參考

【1】 man nm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM