鏈結 裝載與庫 目標檔案(1)

2021-07-30 04:57:48 字數 1209 閱讀 7710

*一直被催更。。。*

pc平台流行的可執行檔案格式(executable)主要為windows下的pe(portableexecutable)和linux下的elf(executable linkableformat),都是coff(common file format)格式的變種。

編譯器編譯源**後生成的目標檔案,其結構已經是編譯後的可執行檔案格式,但還沒有經過鏈結,有些符號或位址還未調整,所以一般跟可執行檔案採用相同格式儲存。在windows下將它們統稱為pe-coff檔案格式,在linux下將它們統稱為elf檔案。動態鏈結庫(dll,dynamic linking library)windows的.dll和linux的.so)、靜態鏈結庫(static linking library)windows的.lib和linux的.a)都按照可執行檔案格式儲存。靜態鏈結庫是把很多目標檔案**在一起形成乙個檔案再加上索引,簡單理解為乙個包含很多目標檔案的檔案包。

1.目標檔案檔案中至少包含編譯後的機器指令**、資料、鏈結時所需資訊(如符號表、除錯資訊、字串等)。一般目標檔案將這些資訊按不同屬性以「(section)的形式儲存,有時也叫段(segment)(其實這兩個是不同的角度的定義,看到後面時才理解),一般情況下他們都表示乙個一定長度的區域。

2.程式源**被編譯後主要分為兩種段:程式指令程式資料。區分好處如下:

*先大概了解目標檔案裡面有什麼,下次再逐個深入。。。*

鏈結 裝載與庫 目標檔案(3)

總結的速度,追不上看書的速度了。elf檔案的基本結構是什麼樣子?elf目標檔案的最前部是elf檔案頭 elf header 其包含描述整個檔案的基本屬性,如elf檔案版本 目標機器型號 程式入口位址等。接著是各段。之後為段表 section header table 該錶描述了elf檔案包含的所有段...

裝載 鏈結與庫

第五部分 windows動態鏈結 1 dll函式和變數必須在檔案顯示是匯入還是匯出,declspec dllexport 匯出,declspec dllimport 匯入.建立dll檔案的時候.c檔案生成.dll,lib,exp檔案,然後用.lib檔案和exe中的.c檔案生成的目標檔案鏈結在一起,生...

鏈結 裝載與庫

鏈結 裝載與庫 在linux下,當我們使用 gcc來編譯 helloword 程式時,只需要 gcc hello.c a.out hello world 其中實際包括4步驟 預處理 prepressinng 編譯 compliation 彙編 assembly 鏈結 linking 1.預編譯 gc...