binutils原始碼工具包中的常用命令:
gcc g++ ld ldd nm strings readelf addr2line strip
objcopy as ar gdb
1、gcc/g++編譯器
示例:gcc -c test.c
gcc -o test test.c
gcc -e -o test.i test.c
gcc -g -o test test.c
2、addr2line 把程式位址轉換為檔名和行號,需要編譯時加-g
示例:addr2line a.out -a 804854c
3、ar 打包提取歸檔檔案
ar rv libtest.a test.o
4、as gcc用來輸出彙編檔案,產生目標檔案由聯結器ld鏈結
示例:gcc -s tty.c -o tty.s
as -o tty.o tty.s
5、nm 檢視匯出符號,列出目標檔案的符號
示例:nm -o libtest.so
6、objcopy 檔案格式轉換
7、objdump 反編譯
示例:objdump -t libtest.so
objdump -d a.out
7、ranlib產生歸檔檔案索引,並將其儲存到這個歸檔檔案
8、readelf 顯示elf格式可執行檔案資訊
示例:readelf -h a.out
9、size 列出目標檔案每一段的大小以及總體大小
示例:size a.out
10、strings 列印目標檔案中的可列印字元
示例:strings /lib64/libc.so.6 | grep glibc_
11、strip 丟棄目標檔案中的全部或特定符號,減少體積
示例:strip a.out
12、ldd 用於判斷某個可執行的elf檔案引用什麼動態庫
示例:ldd -v libtest.so
13、檢視so匯出函式
nm -d 7z.so
objdump -tt 7z.so
GCC編譯工具鏈
編譯過程控制 e 預處理,會呼叫cpp預處理器,但不生成檔案。gcc e main.c o main.i c 預處理時,不刪除注釋資訊 s 生成彙編檔案,gcc合併預編譯和編譯,呼叫ccl程式完成 c 將原始檔編譯成目標檔案,但是不鏈結,呼叫彙編器as o 輸出目標名稱,gcc預設編譯出來的檔案是a...
編譯gcc時關於工具鏈的調整
specs dirname gcc print libgcc file name specs gcc dumpspecs sed e s lib 64 ld tools g e cpp specs echo new specs file is specs unset specs 再設定成預設值 gc...
GCC 的編譯過程及編譯工具
nasm的安裝與使用 總結本文講解了gcc的編譯過程,預處理 編譯 彙編和連線。還有編譯工具nasm的使用。include intmain void 預處理語句 gcc e hello.c o hello.ihello.i檔案內容 gcc s hello.i o hello.shello.s檔案內容...