這一節主要是對於可執行目標檔案格式的理解。
與可重定位檔案稍有不同:
1.在elf頭欄位給出執行程式時第一條指令的位址,在可重定位的檔案中則為0
因為可重定位檔案不會被執行,所以不會給出執行**的位址
2.多了乙個程式頭表,也稱段頭表 是乙個結構陣列,因為可執行檔案是為了裝入到儲存器執行的,
程式頭表就說明了這些節和段的對應關係,有些節是要裝入記憶體當中有些不用。
3.多了乙個.init節 用於定義_init函式,該函式用於進行可執行目標檔案執行時的初始化工作。
4.少了兩個重定位節 因為無需重定位
程式頭表描述了可執行檔案中的節與虛擬空間的儲存段之間的對映關係。
乙個表項說明虛擬空間中乙個連續的段或者乙個特殊的節。
對齊方式 問題
深入理解預編譯,編譯,彙編,鏈結的過程 之鏈結
我們接觸程式的時候,一般編譯和鏈結是一起做的,所以不容易看到編譯和鏈結的不同,這裡我們講一下編譯和鏈結的區別。範例1 main.c int main 對main.c生成執行檔案 gcc o main main.c 生成可執行檔案main 沒有字尾名 這個檔案什麼也不幹,但是可以執行。gcc o的過程...
程式的預編譯,編譯,彙編,鏈結過程
預編譯過程主要處理那些源 檔案中的以 開始的預編譯指令。比如 include define 等,主要處理規則如下 1 將所有的 define 刪除,並且展開所有的巨集定義。2 處理所有條件預編譯指令,比如 if ifdef elif else endif 3 處理 include 預編譯指令,將被包...
程式編譯和鏈結原理理解
一 本書解決的問題 本書主要介紹系統軟體的執行機制和原理,涉及在windows和linux兩個系統平台下,乙個應用程式在編譯 鏈結 和執行時所做的事,具體如下 1.windows和linux作業系統下各自的可執行檔案 目標檔案格式?2.普通的c c 程式 如何編譯成目標檔案及程式的目標檔案如何儲存?...