程式設計師的自我修養第三章筆記(目標檔案有什麼)

2021-08-16 04:02:50 字數 640 閱讀 6150

目標檔案主要分為檔案頭 **段 資料段 bss 段等等。

objdump 工具可以分析目標檔案,包括 -d 反彙編 -s 顯示為16進製制的形式等等。

一般情況下**會被放到 text 段,而全域性變數和靜態變數會被放到 data 和 bss 段。

readelf 可以檢視 elf 檔案的檔案頭。

elf檔案的結構可以檢視 elf.h 這個標頭檔案,不過裡面的內容十分繁雜,沒有仔細看。

鏈結的關鍵是符合這個概念,函式和變數都可以稱為符號。名字則稱為符號名。目標檔案引用了定義在外面檔案的符號,叫做外部符號。有時會出現找不到外部符號,很有可能是外面的檔案中沒有定義或者鏈結的設定的沒有找到對應定義的檔案。鏈結的符號名需要進行修飾來避免名字的衝突。之前在編寫驅動程式的 dll 的時候遇到過這個問題,匯出的函式名字需要加上 _ 。而 c++ 則採用了命名空間的規則。

不同的編譯器會採用不同的修飾方法,所以會出現不同的編譯器產生的目標檔案不能正常相互鏈結。

c++ 為了相容 c ,採用extern "c"這個關鍵字用法,使得括號內的**被當成 c 語言來處理。

弱符號和弱引用對庫來說很重要,可以使得使用者覆蓋弱符號。甚至可以根據編譯的選項選擇執行那個版本的程式,比如乙個同時支援單執行緒和多執行緒程式。

《程式設計師的自我修養》第三章學習筆記

1,編譯器編譯源 生成的檔案叫做目標檔案。從結構上說,是編譯後的可執行檔案,只不過還沒有經過鏈結 3.1目標檔案的格式 1,可執行檔案的格式 windows下的pe 和linux下的elf 2,從廣義上說,目標檔案與可執行檔案的格式幾乎是一樣的,所以廣義上可以將目標檔案與可執行檔案看成是一種型別的檔...

elf檔案分析 程式設計師的自我修養第三章學習

今天學習程式設計師的自我修養第三章學習對其中的一些內容提取。elf檔案 linux 作業系統二進位制檔案統一管理的格式檔案,對其分析對於理解編譯和鏈結 整合大型系統,修復 bug很有幫助。源程式都會通過編譯 鏈結成可執行檔案,可執行檔案的elf 檔案格式是固定,下面看如下圖 這個就是c語言 與 el...

程式設計師的自我修養筆記三

目標檔案裡有什麼 3.1目標檔案的格式 windows中動態鏈結庫.dll linux中是.so windows中靜態鏈結庫.lib linux中是.a 可執行檔案在windows下按照pe coff格式儲存,linux下按照elf格式儲存 elf檔案分類 3.2目標檔案是什麼樣的 目標檔案中不僅有...