1. 程式人生 > >linux中物件檔案的符號表symbols檢視工具nm簡介

linux中物件檔案的符號表symbols檢視工具nm簡介

1.nm工具作用

nm工具列出.o檔案、.a檔案、.so檔案等的符號資訊,包括諸如符號的值,符號型別及符號名稱等。所謂符號,通常指定義出的函式,全域性變數等等。

2.nm的使用方法

nm [option] filename

例如,nm -C a.out

 常用的選項有:

         -A    打印出來的每個符號所屬的物件檔案的名稱

         -C    使用nm工具打印出來的符號名稱看不懂,使用-C選項後就可以看懂了。

3.使用舉例

源程式main.c為:

#include "stdio.h"

int cc = 4;

int func_1(){
        int a = 4;
        int b = 3;
        int c = a + b;

}

int main(){
        int stack_of[100000000];
        int b=1;
        int* a;
        *a=b;
}
使用gcc main.c -o main後生成名稱為main的可執行檔案。
<span style="color:#660000;">#nm -C main
000000000050087c A __bss_start
00000000004003dc t call_gmon_start
0000000000500878 D </span><span style="color:#ff0000;">cc</span><span style="color:#660000;">
000000000050087c b completed.1
0000000000500688 d __CTOR_END__
0000000000500680 d __CTOR_LIST__
0000000000500860 D __data_start
0000000000500860 W data_start
0000000000400550 t __do_global_ctors_aux
0000000000400400 t __do_global_dtors_aux
0000000000500868 D __dso_handle
0000000000500698 d __DTOR_END__
0000000000500690 d __DTOR_LIST__
00000000005006a8 D _DYNAMIC
000000000050087c A _edata
0000000000500880 A _end
0000000000400588 T _fini
0000000000500680 A __fini_array_end
0000000000500680 A __fini_array_start
0000000000400440 t frame_dummy
0000000000400678 r __FRAME_END__
0000000000400468 T func_1
0000000000500840 D _GLOBAL_OFFSET_TABLE_
                 w __gmon_start__
0000000000400370 T _init
0000000000500680 A __init_array_end
0000000000500680 A __init_array_start
0000000000400598 R _IO_stdin_used
00000000005006a0 d __JCR_END__
00000000005006a0 d __JCR_LIST__
                 w _Jv_RegisterClasses
0000000000400510 T __libc_csu_fini
00000000004004b0 T __libc_csu_init
                 U 
[email protected]
@GLIBC_2.2.5 0000000000400485 T </span><span style="color:#ff0000;">main</span><span style="color:#660000;"> 0000000000500870 d p.0 0000000000500680 A __preinit_array_end 0000000000500680 A __preinit_array_start 00000000004003b0 T _start</span>

在上圖結果輸出中,第一列是符號的值,一般表示記憶體偏移量,但要視具體的符號型別來決定。第二列時符號的型別,具體各種型別的含義可以參見man nm。第三列是符號名稱,例如
上面飄紅的就是我們定義的全域性函式和全域性變數的名稱。

相關推薦

linux物件檔案符號symbols檢視工具nm簡介

1.nm工具作用 nm工具列出.o檔案、.a檔案、.so檔案等的符號資訊,包括諸如符號的值,符號型別及符號名稱等。所謂符號,通常指定義出的函式,全域性變數等等。 2.nm的使用方法 nm [option] filename 例如,nm -C a.out  常用的選項有:

linux 的除錯符號檔案

安裝軟體的時候,經常會發現有一些 -dbg 的包,比如 iceweasel-dbg,軟體包資訊中指出這個包中包含了 iceweasel 的除錯符號資訊。那麼除錯符號資訊是如何生成的呢,生成的除錯符號資訊

恢復二進制文件的block符號

crete sym mbo pos symbol lob code 運行腳本 tar 前篇博客中,使用 楊君的小黑屋 提供的工具恢復二進制文件的符號表,只恢復了函數的符號表,本篇講述如何恢復block符號表,楊君的博客中使用IDA分析二進制文件,本篇則使用MacOS系統上體

Linux歸檔檔案並在系統間傳輸檔案

檔案歸檔tar tar命令能夠列出存檔內容,或者將其檔案提取到當前系統。通過tar,使用者可以將大型檔案集彙集為一個檔案(存檔),該存檔可用gzip,bzip2,xz壓縮方式壓縮 使用歸檔檔案和目錄tar 在建立tar存檔之前,先驗證目錄中沒有其他存檔與要建立的新存檔名稱相同,tar命令

linux檔案鎖(勸告性上鎖和強制性上鎖)

上午在看UNP卷二這一節的時候及其想睡覺,就草草了事,夜晚沒有事情幹,就來找找部落格看看這兩個鎖到底是怎麼回事吧! 參考文章:https://www.ibm.com/developerworks/cn/linux/l-cn-filelock/index.html 背景知識:在早期的

Linux檔案許可權

1.檔案許可權存在的意義    系統最底層安全設定方法之一    保證檔案可以被可用的使用者做相應操作 2.檔案許可權的檢視     ls  -l  file ls  -ld  dir ll  file   ll   -d   dir 3.檔案許可權的讀取 - |rw-rw-r--

linuxoffice檔案預覽方案

在Linux上提供office檔案預覽功能時,若不採用商業庫,較為可行的方案為:利用開源軟體轉換檔案的格式;利用新格式的檔案的瀏覽器開啟檔案。 能夠轉換成的檔案格式包括:PDF、HTML和PS。 支援轉換office檔案的軟體包括:libreoffice、openoffice和WPS企業版。

企業級LinuxNFS檔案系統

NFS檔案系統簡介 網路檔案系統(NFS)是Unix系統和網路附加儲存檔案管理器常用的網路檔案系統,允許多個客戶端通過網路共享檔案訪問。它可用於提供共享二進位制目錄的訪問,也可用於允許使用者在同一工作組中從不同客戶端訪問檔案 NFS協議有很多版本:linux支援版本4,版本3,版

3.1 Linux檔案IO (13、14節)

3.1.13.fcntl函式介紹 3.1.13.1、fcntl的原型和作用 (1)fcntl函式是一個多功能檔案管理的工具箱,接收2個引數+1個變參。第一個引數是fd表示要操作哪個檔案,第二個引數是cmd表示要進行哪個命令操作。變參是用來傳遞引數的,要配合cmd來使用。 (2)cmd的樣子類

3.1 Linux檔案IO (11、12節)

3.1.11.檔案描述符的複製1 3.1.11.1、dup和dup2函式介紹 3.1.11.2、使用dup進行檔案描述符複製 (1)dup系統呼叫對fd進行復制,會返回一個新的檔案描述符(譬如原來的fd是3,返回的就是4) (2)dup系統呼叫有一個特點,就是自己不能指定複製後得到的fd

Linux檔案處理-拷貝,刪除和移動

複製檔案/目錄(命令:cp) 命令 解釋 (file表示檔案,dir表示目錄) cp file1 file2 拷貝 file1 為 file2 cp file1

Linux檔案屬性

ls命令的-l選項檢視檔案的屬性 -l:以長格式顯示目錄下的內容列表。輸出的資訊從左到右依次包括檔案型別、許可權模式、硬連線數、所有者、組、檔案大小和檔案的最後修改時間等; 圖中的“1” d:表示目錄 -:表示檔案 l:連線檔案 b:裝置檔案,提供儲存的介面裝置 c:裝置檔案,提供序列

關於LinuxMakefile 檔案的使用

                               關於Linux中Makefile 檔案的使用 大學有陣子做嵌入式的時候覺得

linux檔案搜尋命令

一、locate命令 是在後臺數據庫中按檔名搜尋(也只能按檔名搜尋),搜尋速度較快 這個資料庫的目錄,不同的linux發行版不同,在centos6.10中,這個資料庫的目錄為:/var/lib/mlocate/mlocate.db 這個資料庫預設一天一更新,所以一般新建的檔案,如果不手動

Linux檔案判斷引數 -a至-z的意思

[ -a FILE ] 如果 FILE 存在則為真。  [ -b FILE ] 如果 FILE 存在且是一個塊特殊檔案則為真。  [ -c FILE ] 如果 FILE 存在且是一個字特殊檔案則為真。  [ -d FILE ] 如果 FILE 存在且是一個目錄則為真

虹軟人臉識別在 linuxso檔案載入不到的問題

                      其實是可以載入到的,不過是so檔案放的位置不一對,最簡單的方式是放在 /usr/lib64 目錄下,也可自己設定。 so檔案載入不到會報這個錯誤:

使用WinSCP軟體在windows和Linux進行檔案傳輸

當我們的開發機是Windows,伺服器是Linux時,如何在windows作業系統和linux作業系統之間進行檔案傳輸呢?大部分使用ScureCRT或者putty遠端登入,使用scp、wget等命令拷貝檔案,也有不怕麻煩的在伺服器上安裝FTP伺服器,或者啟用samba甚至NFS。只是用Linux作為網頁伺服器

linux檔案和資料夾的新建、查詢、刪除

新建資料夾 使用的mkdir命令可以新建資料夾。 mkdir filename 這樣就建立了一個叫做filename資料夾。 新建一個檔案 新建的檔案可以包括任何副檔名,.txt/.cpp/.csv 使用的是vi命令。 vi a.txt 這

每天進步一點點——Linux檔案描述符與開啟檔案之間的關係

    在Linux系統中一切皆可以看成是檔案,檔案又可分為:普通檔案、目錄檔案、連結檔案和裝置檔案。檔案描述符(file descriptor)是核心為了高效管理已被開啟的檔案所建立的索引,其是一個非負整數(通常是小整數),用於指代被開啟的檔案,所有執行I/O操作的系統呼叫都通過檔案描述符。程式剛剛啟動的

Linux檔案與目錄管理

在Linux中,一切皆檔案 1.0Linux中的檔案型別 1.普通檔案(regular fille)第一個字元為[ - ] 包括: ①純文字文件(ASCII):這是Linux系統中最多的一種檔案型