標籤:
在binutils工具集中,以下工具是我們在做嵌入式軟體開發時需要掌握的:
as是彙編編譯器,用於將彙編代碼轉換為目標檔案。
add2line使用者得到程式指令地址所對應的函數,以及函數所在的源檔案名稱和函號;
ar用於建立和修改檔案檔案,以及從檔案檔案中抽取檔案。靜態庫(.a檔案)就是一種檔案檔案,需要用它產生和管理;
ld:連結器;
nm:用於列出程式檔案中的符號及符號在記憶體中的(開始)地址;符號包含C程式中的函數名和變數名;
objcopy:用於用來從程式檔案中拷貝出我們所指定的段。代碼格式轉換。
objdump:能顯示程式檔案的相關資訊和對程式檔案進行反組譯碼;
ranlib:用於產生一個檔案檔案的內容索引,以加快對檔案檔案的尋找速度。將該工具運用於靜態庫能提高庫參與連結的效率。
size:用於瞭解程式檔案中各段的大小。
strings:用於查看程式檔案內的可顯示字串。
strip:用於剝去程式檔案的調試資訊,以減少檔案所佔用的儲存空間。
以下是他們具體的用法:
1、addr2line [地址] -f -e [應用程式名稱]
2、ar:靜態庫產生器
ar的參數:
c:表示建立一個檔案檔案;
r:指示將檔案增加到所建立的庫檔案中;
s:為了產生庫索引以提高庫被連結時的效率。
3、nm符號顯示器
總體來說,nm用於列出程式檔案中的符號。nm所列出的每一行由三個部分組成。
第一列:是指程式運行時符號在記憶體中的地址。它表示函數或變數的開始地址;
第二列:是指相應的符號存放在哪一個段;
第三列:是符號的名稱;
針對第二列:
A:表示符號所對應的值時絕對的且在以後的串連過程中也不會改變;
B或b:表示符號位於未初始化的資料區段中;
C:表示沒有被初始化的公用符號;
D或者d:表示符號位於初始化的資料區段(.data段)中。
N:表示符號是沒有調試用的。
p:表示符號位於一個棧回溯段中。
R或者r:表示符號位於唯讀資料區段(.rdata段)中 。
T 或者t:表示符號位於程式碼片段(.text段)中。
U:表示符號沒有被定義。
4、objdump -h hello
5、objcopy
6、ranlib庫索引產生器: nm -s libmy.a
7、size
8、strings 字串窺視器 : strings hello
9、strip 程式檔案瘦身器。
參考文獻:專業嵌入式軟體開發 李雲。
binutils工具集,軟體開發利器