常用嵌入式Linux二進位制除錯工具 2

2021-04-23 18:35:13 字數 3438 閱讀 4244

常用嵌入式linux二進位制除錯工具(1) ø

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 *** lk inf al

[ 0]                   null            00000000 000000 000000 00      0   0  0

[ 1] .text             progbits        00000000 000034 0000ae 00  ax  0   0  4

[ 2] .rel.text         rel             00000000 000754 000060 08     13   1  4

[ 3] .data             progbits        00000000 0000e4 000000 00  wa  0   0  4

[ 4] .bss              nobits          00000000 0000e4 000001 00  wa  0   0  4

[ 5] .rodata           progbits        00000000 0000e4 00000d 00a

0   0  1

[ 6] .ctors            progbits        00000000

0000f

4 000004 00  wa  0   0  4

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

[ 8] .eh_frame         progbits        00000000

0000f

8 000090 00a

0   0  4

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

[10] .note.gnu-stack   note            00000000 000188 000000 00      0   0  1

[11] .comment          progbits        00000000 000188 000034 00      0   0  1

[12] .shstrtab         strtab          00000000 0001bc

00006a

00      0   0  1

[13] .symtab           symtab          00000000 000480 000180 10     14   e  4

[14] .strtab           strtab          00000000 000600 000153 00      0   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: lib***.so

」的錯誤,這時可以執行

ldd來具體檢視是缺少哪些庫檔案。

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...

判斷二進位製半整數(二進位制)

10年後,tokitsukaze大佬已經變成了年收入超百萬的的精英程式設計師,家裡沒錢也沒礦的teitoku,找tokitsukaze大佬借1000塊錢,然後tokitsukaze大佬說,借你1024吧,湊個整數。沒錯在2進製下1024是 二進位制整數 乙個正整數滿足其值為2的k次方 k為正整數 我...

mysql二進位制 MySql二進位制連線方式詳解

使用mysql二進位制方式連線 您可以使用mysql二進位制方式進入到mysql命令提示符下來連線mysql資料庫。例項以下是從命令列中連線mysql伺服器的簡單例項 root host mysql u root p enter password 在登入成功後會出現 mysql 命令提示視窗,你可以...