讀《程序員的自我修養》有感---編譯&靜態連接

    編譯型的語言程序,須要通過大致的編譯、連接、裝載三個步驟,也就是源代碼->機器指令(文件),單獨的指令文件(帶有符號引用)->總體的指令文件(符號已解析),指令文件->實例進程三個過程,這是概略的說。下圖能夠給出一個稍微具體的過程概覽函數

    在彙編以後,獲得一個目標文件(obj,.o格式),大致如圖所示因爲每一個編譯獲得的目標文件都或多或少地有引用到外部文件符號(變量/函數等),因此在目標文件中此時符號的地址仍是待定狀態(由0x00000000或者其餘當即數代替),而靜態連接就是將各個目標文件整合並肯定各個待定符號的具體地址,從而成爲可執行文件。具體分爲兩個關鍵步驟:進程

  1. 空間與地址分配:掃描全部的輸入目標文件,得到他們各個段的長度、屬性和位置,以後合併相同段,計算出新段的長度和位置,而且將全部符號表合併爲一個全局符號表
  2. 符號解析與重定位:使用第一步收集到的信息,讀取輸入目標文件中的重定位信息,進行符號解析與重定位、調整代碼中的地址等(地址分爲絕對和相對)
相關文章
相關標籤/搜索