在 readelf 的輸出中: 第 1 行,ELF Header: 指名 ELF 檔案頭開始。 第 2 行,Magic 魔數,用來指名該檔案是一個 ELF 目標檔案。第一個位元組 7F 是個固定的數;後面的 3 個位元組正是 E, L, F 三個字母的 ASCII 形式。 第 3 行,CLASS 表示檔案型別,這裡是 32位的 ELF 格式。 第 4 行,Data 表示檔案中的資料是按照什麼格式組織(大端或小端)的,不同處理器平臺數據組織格式可能就不同,如x86平臺為小端儲存格式。 第 5 行,當前 ELF 檔案頭版本號,這裡版本號為 1 。 第 6 行,OS/ABI ,指出作業系統型別,ABI 是 Application Binary Interface 的縮寫。 第 7 行,ABI 版本號,當前為 0 。 第 8 行,Type 表示檔案型別。ELF 檔案有 3 種類型,一種是如上所示的 Relocatable file 可重定位目標檔案,一種是可執行檔案(Executable),另外一種是共享庫(Shared Library) 。 第 9 行,機器平臺型別。 第 10 行,當前目標檔案的版本號。 第 11 行,程式的虛擬地址入口點,因為這還不是可執行的程式,故而這裡為零。 第 12 行,與 11 行同理,這個目標檔案沒有 Program Headers。 第 13 行,sections 頭開始處,這裡 208 是十進位制,表示從地址偏移 0xD0 處開始。 第 14 行,是一個與處理器相關聯的標誌,x86 平臺上該處為 0 。 第 15 行,ELF 檔案頭的位元組數。 第 16 行,因為這個不是可執行程式,故此處大小為 0。 第 17 行,同理於第 16 行。 第 18 行,sections header 的大小,這裡每個 section 頭大小為 40 個位元組。 第 19 行,一共有多少個 section 頭,這裡是 8 個。 第 20 行,section 頭字串表索引號,從 Section Headers 輸出部分可以看到其內容的偏移在 0xa0 處,從此處開始到0xcf 結束儲存著各個 sections 的名字,如 .data,.text,.bss等。 在 Section Headers 這裡,可以看到 .bss 和 .shstrtab 的偏移都為 0xa0 。這是因為,沒有被初始化的全域性變數,會在載入階段被用 0 來初始化,這時候它和 .data 段一樣可讀可寫。但在編譯階段,.data 段會被分配一部分空間已存放資料(這裡從偏移 0x6c 開始),而 .bss 則沒有,.bss 僅有的是 section headers 。 連結器從 .rel.text 就可以知道哪些地方需要進行重定位(relocate) 。 .symtab 是符號表。 Ndx 是符號表所在的 section 的 section header 編號。如 .data 段的 section header 編號是 3,而string1,string2,lenght 都是在 .data 段的。
在 readelf 的輸出中: 第 1 行,ELF Header: 指名 ELF 檔案頭開始。 第 2 行,Magic 魔數,用來指名該檔案是一個 ELF 目標檔案。第一個位元組 7F 是個固定的數;後面的 3 個位元組正是 E, L, F 三個字母的 ASCII 形式。 第 3 行,CLASS 表示檔案型別,這裡是 32位的 ELF 格式。 第 4 行,Data 表示檔案中的資料是按照什麼格式組織(大端或小端)的,不同處理器平臺數據組織格式可能就不同,如x86平臺為小端儲存格式。 第 5 行,當前 ELF 檔案頭版本號,這裡版本號為 1 。 第 6 行,OS/ABI ,指出作業系統型別,ABI 是 Application Binary Interface 的縮寫。 第 7 行,ABI 版本號,當前為 0 。 第 8 行,Type 表示檔案型別。ELF 檔案有 3 種類型,一種是如上所示的 Relocatable file 可重定位目標檔案,一種是可執行檔案(Executable),另外一種是共享庫(Shared Library) 。 第 9 行,機器平臺型別。 第 10 行,當前目標檔案的版本號。 第 11 行,程式的虛擬地址入口點,因為這還不是可執行的程式,故而這裡為零。 第 12 行,與 11 行同理,這個目標檔案沒有 Program Headers。 第 13 行,sections 頭開始處,這裡 208 是十進位制,表示從地址偏移 0xD0 處開始。 第 14 行,是一個與處理器相關聯的標誌,x86 平臺上該處為 0 。 第 15 行,ELF 檔案頭的位元組數。 第 16 行,因為這個不是可執行程式,故此處大小為 0。 第 17 行,同理於第 16 行。 第 18 行,sections header 的大小,這裡每個 section 頭大小為 40 個位元組。 第 19 行,一共有多少個 section 頭,這裡是 8 個。 第 20 行,section 頭字串表索引號,從 Section Headers 輸出部分可以看到其內容的偏移在 0xa0 處,從此處開始到0xcf 結束儲存著各個 sections 的名字,如 .data,.text,.bss等。 在 Section Headers 這裡,可以看到 .bss 和 .shstrtab 的偏移都為 0xa0 。這是因為,沒有被初始化的全域性變數,會在載入階段被用 0 來初始化,這時候它和 .data 段一樣可讀可寫。但在編譯階段,.data 段會被分配一部分空間已存放資料(這裡從偏移 0x6c 開始),而 .bss 則沒有,.bss 僅有的是 section headers 。 連結器從 .rel.text 就可以知道哪些地方需要進行重定位(relocate) 。 .symtab 是符號表。 Ndx 是符號表所在的 section 的 section header 編號。如 .data 段的 section header 編號是 3,而string1,string2,lenght 都是在 .data 段的。