常用嵌入式Linux二進位調試工具(2)(頂嵌開源)

來源:互聯網
上載者:User
 

Ø      


READELF

readelf
可用來顯示
ELF
格式可執行檔的資訊。比如用
readelf
查看
hello.o
中的各個
Section
的結果如下:

$ readelf -S hello.o

There are 15 section headers, starting at offset 0x228:


 

Section Headers:

 
[Nr] Name             
Type           
Addr    
Off   
Size  
ES Flg Lk Inf Al

 
[ 0]                  
NULL           
00000000 000000 000000 00     
0  

0

 
[ 1] .text            
PROGBITS       
00000000 000034 0000ae 00 
AX 
0  

4

 
[ 2] .rel.text        
REL            
00000000 000754 000060 08    
13  

4

 
[ 3] .data            
PROGBITS       
00000000 0000e4 000000 00 
WA 
0  

4

 
[ 4] .bss             
NOBITS         
00000000 0000e4 000001 00 
WA 
0  

4

 
[ 5] .rodata          
PROGBITS       
00000000 0000e4 00000d 00  

0  

1

 
[ 6] .ctors           
PROGBITS       
00000000 0000f4 000004 00 
WA 
0  

4

 
[ 7] .rel.ctors       
REL            
00000000 0007b4 000008 08    
13  

4

 
[ 8] .eh_frame        
PROGBITS       
00000000 0000f8 000090 00  

0  

4

 
[ 9] .rel.eh_frame    
REL            
00000000 0007bc 000028 08    
13  

4

 
[10] .note.GNU-stack  
NOTE           
00000000 000188 000000 00     
0  

1

 
[11] .comment        
 
PROGBITS       
00000000 000188 000034 00     
0  

1

 
[12] .shstrtab        
STRTAB         
00000000 0001bc 00006a 00     
0  

1

 
[13] .symtab          
SYMTAB         
00000000 000480 000180 10    
14  

4

 
[14] .strtab          
STRTAB     
    
00000000 000600 000153 00     
0  

1

Key to Flags:

 
W (write), A (alloc), X (execute), M (merge), S (strings)

 
I (info), L (link order), G (group), x (unknown)

 
O (extra OS processing required) o (OS specific), p (processor specific)

 

Ø      


SIZE

size
命令可以列出目標檔案每一段的大小以及總體的大小。預設情況下,對於每個目標檔案或者一個歸檔檔案中的每個模組只產生一行輸出。
size
可以用來簡單快速的瞭解
ELF
檔案各個段的情況,比如:

$ size hello.o

  
text   
data    
bss    
dec    
hex filename

   
331      
4      
1    
336    
150 hello.o

 

Ø      


OBJCOPY

objcopy
用來把一種目標檔案中的內容複寫到另一種類型的目標檔案中。一般用來將複製或替換目標檔案中的某些段,或者去掉某些段。

 

Ø      


STRINGS

strings
列印某個檔案的可列印字串,這些字串最少
4
個字元長,也可以使用選項
-n
設定字串的最小長度。預設情況下,它只列印目標檔案初始化和可載入段中的可列印字元;對於其它類型的檔案它列印整個檔案的可列印字元,這個程式對於瞭解非文字檔的內容很有協助。

 

Ø      


STRIP

strip
:丟棄目標檔案中的全部或者特定符號,可以用來減小可執行檔和庫的大小。具體樣本請參見下一章儲存最佳化部分的相關內容。

 

Ø      


ADDR2LINE

addr2line
:把程式地址轉換為檔案名稱和行號。在命令列中給它一個地址和一個可執行檔名,它就會使用這個可執行檔的調試資訊指出在給出的地址上是哪個檔案以及行號。具體樣本請參見後面的
Core Dump
分析(
9.5
節)時,如何通過寄存器
pc
的值和
addr2line
工具找出出錯的
C/C++
原始碼。

 

Ø      


LDD

ldd
可用來顯示執行檔案需要哪些共用庫
,
共用庫裝載管理器在哪裡找到了需要的共用庫。比如:

# ldd hello

       
libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x40026000)

       
libm.so.6 => /lib/tls/libm.so.6 (0x400d9000)

       
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x400fb000)

       
libc.so.6 => /lib/tls/libc.so.6 (0x42000000)

       
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

ldd
最常用的地方是解決運行時找不到庫的錯誤,如程式運行時得到的類似“
error while loading shared libraries: libxxx.so
”的錯誤,這時可以運行
ldd
來具體查看是缺少哪些庫檔案。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.