1. 程式人生 > >《程式設計師的自我修養——連結、裝載與庫》讀書筆記(1)

《程式設計師的自我修養——連結、裝載與庫》讀書筆記(1)

         大部分人都知道我們寫的程式碼要經過預處理、編譯、彙編成目標檔案,然後經過連結生成最終的可執行檔案,但是細節上是怎麼一回事就懶得管了。編譯的過程我還算有點了解,什麼詞法分析、語法分析、語義分析之類一系列複雜的步驟,最終得到目標檔案,然而連結就完全不知道是怎麼一回事了。讀這本書前,我曾經一直以為目標檔案就是一系列機器碼,連結就是把一些庫函式嵌入進去,然後程式就可以跑了。直到書中提了一個問題:不同檔案中互相呼叫函式或者全域性變數的時候如何確定地址呢?再仔細想,那些呼叫了別的檔案中函式或全域性變數的目標檔案該如何區分這些變數和自己檔案內的靜態變數?我頓時感覺連結的過程並沒有那麼簡單,而且目標檔案應該也不僅僅是我們寫的程式碼對應的機器碼而已,應該也包含了關於函式、變數的資訊,而如果要把這一切組織起來,需要更嚴謹、有效率的檔案結構,這就是
COFF檔案,即Windows上的PE檔案和LinuxELF檔案。