Linux下GNU工具集介紹

GNU Linux GCC 彙編語言 軟件 UNIX 免費軟件 減肥 編譯器 嵌入式Linux技術分享 2019-06-28

Linux下的GNU工具集包括GNU Compiler Collection,也就是大名鼎鼎的GCC,還包括GNU Binutils,即GNU的二進制工具集。本節主要介紹GNU的二進制集,對我們在Linux下進行代碼的學習、調試非常有用。

readelf:可以顯示elf格式可執行文件的信息。elf格式是Unix/Linux平臺上應用最廣泛的二進制文件之一。

列出elf文件的頭信息:readelf -h a.out

Linux下GNU工具集介紹

Magic表示幻數,用來指明這個文件是一個elf文件,第一個字節7f是固定的數,45 4c 46分別是elf三個字母的ascii值。

nm:列出目標文件中的符號(函數、變量),常在調試時使用。

用法:nm a.out

size:列出目標文件每一段的大小以及總體的大小。

用法:size a.out

strings:列出目標文件中可打印的字符串。

用法:strings test.o

strip:瘦身,用來丟棄目標文件中的全部或者特定的符號,減小文件體積

strip相當於脫衣服,對於嵌入式系統來說,這個命令必不可少。在strip之後,文件變小了,仍然可以執行,這就就節省了很多空間。strip不僅僅可以針對可執行文件,還能針對目標文件和動態庫等。在實際的開發中,經常需要對動態庫.so進行strip操作,減少佔用空間。而在調試的時候(比如用addr2line),就需要符號了。因此,通常的做法是:strip前的庫用來調試,strip後的庫用來實際發佈,他們兩者有對應關係。一旦發佈的strip後的庫出了問題,就可以找對應的未strip的庫來定位。最後囉嗦一句,某某動態庫strip前是18M左右,strip後是3M左右,可見,脫脫衣服還是有明顯好處的。

用法:strip a.out,注意:strip不要瘦身.o的中間文件,否則會導致無法鏈接

file:列出文件的信息

objcopy:目標文件格式轉換

objcopy -O binary a.out a.bin

objcopy -O binary u-boot u-boot.bin

將elf格式的文件轉換為二進制格式。

objdump:主要用來反彙編。

反彙編:把目標代碼轉為彙編代碼的過程,也可以說是把機器語言轉換為彙編語言代碼、低級轉高級的意思,常用於軟件破解、外掛技術、病毒分析、逆向工程、軟件漢化等領域。在此過程中我們可以領悟到軟件作者的編程思想。總之一句話:軟件一切神祕的運行機制全在反彙編代碼裡面。目前網絡上的許多“免費軟件“都跟反彙編息息相關。

objdump -d a.out 輸出到終端

objdump -d a.out > test.dis

反彙編bin格式的文件:

objdump -D -b binary -m arm test.bin > test.dis

addr2line:將程序中的地址對應到文件名和相應的行號,程序運行出錯時,通常會返回一個地址,根據這個地址就可以定位到代碼出錯的位置。通常用於定位內核中的錯誤。

用法:addr2line 地址 -e a.out -f

注意,要想使用addr2line,要求elf文件在編譯的時候必須要添加-g參數。

Linux下GNU工具集介紹

相關推薦

推薦中...