常用嵌入式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 命令提示視窗,你可以...