2015年1月7日 星期三

objdump 教學


objdump常用指令

-D/d/S: .a是一個靜態lib , 裡面可能包含多的 .o 檔
         這個指令會把裡面包含的.o 列出 , 還有.o的 format

-s   :   Display the full contents of all sections requested

-t    :   列出所有的symbol , 依各.o 分別列出.


-h    :  列出每個.o中的secton. (Link的時候會把所有.o檔的section統一放一起 ,e.g. 把所有的.txt集合起來)

e.g. 

objdump  -t libbsp.a   
                                                           
000006b8 g     F   .text       000000c4 webPost
00000000            *UND*  00000000 netSet
00000000            *UND*  00000000 action1Post
00000000            *UND*  00000000 action2Post
00000000            *UND*  00000000 action3Post
00000000            *UND*  00000000 action4Post
00000000            *UND*  00000000 memcpy
00000000            *UND*  00000000 OSSemPost

上面的例子是說 , 裡面有一個webPost 的 function (放在.txt sector) .  裡面用到其他 function , netSet , action1Post.... 等等.(所以是*UND* = undefine)


nm 指令


nm用來列出目標文件的符號(symbol)清單
$ nm librom.a         
偏移量     類型   名稱

00000004 C removePCB_F

00000004 C removePortFilterTable_F
                U removePortFilterTableEP
                U removeSerivce
00000004 C removeSerivce_F
                U removePCB_F
0000368c T removeProvPCB
000016ac T removePCB
               U removePCB_F
               U removePortFilterTable_F
0000101c T removePortFilterTableEP
000002c8 T removeSerivce

關於nm的符號的類型
A :該符號的值是絕對的,在以後的鏈接過程中,不允許進行改變。
B :該符號的值出現在非初始化數據段(.bss)中。例如,比如全局沒初始值的變量global_uninit_num; 
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. For more details on common symbols, see the discussion of –warn-common in Linker options
D :該符號放在普通的數據段(.data)中,通常是那些已經初始化的全局變量;
R :The symbol is in a read only data section,比如全局的const_num;
T :該符號放在代碼段中,通常是那些全局非靜態函數
U :該符號未定義過,需要自其他對象文件中鏈接進來
:未明確指定的弱鏈接符號;同鏈接的其他對象文件中有它的定義就用上,否則就用一個系統特別指定的default值(0x00) 。
V :The symbol is a weak object.  When a weak defined symbol is linked with a normal  defined  symbol, the normal defined symbol is used with no error.



nm的常用參數:

-C :加上此參數,會讓符號變成”適合閱讀”的樣式;
-A在每個符號信息的前面打印所在對象文件名 ​​稱;
-l使用對象文件中的調試信息打印出所在源文件及行號, gcc -g參數可以讓打印更為詳盡;

沒有留言:

張貼留言