在平時,原始檔到目標檔案是如下圖轉換,我們今天來著重分析hello.o,也就是標題的重定位目標檔案。
目標檔案有三種形式。
可重定位目標檔案,包含二進位制**和資料,在編譯時可以與其他可重定位檔案合併,建立乙個可執行目標檔案。
可執行目標檔案, 包含二進位制**和資料,其可被直接複製到記憶體並執行。
共享目標檔案,一種特殊型別的可重定位目標檔案,可以在載入或者執行時被動態的載入進記憶體並鏈結。
我在ubuntu裡面先編寫乙個hello world 的c程式。
#include
intmain()
然後使用linux的gcc命令使生成可重定位檔案
gcc -c hello.c
如圖
我們可以在檔案中發現多了乙個 hello.o的檔案
這個就是前面提到的可重定位目標檔案。
1.elf:可執行可鏈結格式(executable and linkable format, elf)。
其中夾在elf頭和字頭部表之間的都是節。
乙個典型的elf可重定位目標檔案就包含上圖中幾個節。
我們可以用如下幾個指令進行檢視並運用。
2.使用readelf -s檢視hello.o
3.使用readelf -h檢視hello.o
4.使用readelf -s檢視hello.o
可重定位目標檔案
目標檔案有三種形式 1.可重定位目標檔案 2.可執行目標檔案 3.共享目標檔案 編譯器和彙編器生成可重定位目標檔案 共享目標檔案,聯結器生成可執行目標檔案。在這裡我們首先介紹可重定位目標檔案。可重定位目標檔案 包含二進位制 和資料,可以在編譯時與其他可重定位目標檔案合併起來,建立乙個可執行目標檔案。...
可重定位目標檔案
可重定位目標檔案經由源程式預處理,編譯,彙編之後得到的檔案。其中包括不可讀的二進位制 擴充套件名為.o。現有兩個模組的 main.c int sum int a,int n int array 2 int main sum.c int sum int a,int n return s 一.在linu...
7 4 可重定位目標檔案
下圖展示了乙個典型的elf可重定位目標檔案的格式。elf頭 elf header 以乙個16位元組的序列開始,這個序列描述了生成該檔案的系統的字的大小和位元組順序,elf頭剩下的部分包含幫助鏈結器語法分析和解釋目標檔案的資訊。其中包括elf頭的大小,目標檔案的型別 如可重定位,可執行性,或者共享的 ...