ELF檔案 介紹

2021-09-28 14:29:27 字數 1943 閱讀 7131

elf 檔案格式是乙個開放標準,各種unix系統的可執行檔案都採用elf格式,它有三種不同的型別:

在這裡先詳細解釋一下程式的彙編、鏈結、執行過程:

1、寫乙個匯程式設計序儲存成文字檔案max.s

2、彙編器讀取這個文字檔案轉換成目標檔案max.o,目標檔案由若干個section組成,我們在匯程式設計序中宣告的.section會成為目標檔案中的section,此外彙編器還會自動新增一些section(比如符號表)。

3、然後鏈結器把目標檔案中的section合併成幾個segment,生成可執行檔案max

4、最後載入器(loader)根據可執行檔案中的segment資訊載入執行這個程式。

elf格式提供了兩種不同的視角,鏈結器把elf檔案看成是section的集合,而載入器把elf檔案看成是segment的集合。如下圖所示。

左邊是從鏈結器的視角來看elf檔案,開頭的elf header描述了體系結構和作業系統等基本資訊, 並指出section header tableprogram header table在檔案中的什麼位置,program header table在鏈結過程中用不到,所以是可有可無的,section header table中儲存了所有section的描述資訊,通過section header table可以找到每個section在檔案中的位置。右邊是從載入器的視角來看elf檔案,開頭是elf headerprogram header table中儲存了所有segment的描述資訊,section header table在載入過程中用不到,所以是可有可無的。

從上圖可以看出,乙個segment由乙個或多個section組成,這些section載入到記憶體時具有相同的訪問許可權。有些section只對鏈結器有意義,在執行時用不到,也不需要載入到記憶體,那麼就不屬於任何segment。注意section header tableprogram header table並不是一定要位於檔案的開頭和結尾,其位置由elf header指出,上圖這麼畫只是為了清晰。

目標檔案需要鏈結器做進一步處理,所以一定有section header table;可執行檔案需要載入執行,所以一定有program header table;而共享庫既要載入執行,又要在載入時做動態鏈結,所以 既有section header table又有program header table

ELF檔案格式介紹

elf檔案由4部分組成,分別是elf頭,程式頭表 elf header 程式頭表 programme header table 節 sections 和節頭表 sections 實際上乙個檔案中並不一定含有上述全部的內容,實際上只有elf標頭檔案的位置是固定的,其餘各個部分的位置,大小等資訊由elf...

ELF檔案格式概要介紹

elf 檔案有三種型別 可重定位檔案 也就是通常稱的目標檔案,字尾為.o。共享檔案 也就是通常稱的庫檔案,字尾為.so。可執行檔案 本文主要討論的檔案格式,總的來說,可執行檔案的格式與上述兩種檔案的格式之間的區別主要在於觀察的角度不同 一種稱為連線檢視 linking view 一種稱為執行檢視 e...

ELF檔案分析

乙個程式要想執行,首先要載入到記憶體中,程式的pc指標指向記憶體中的 在執行的時候會使用記憶體中的資料。所以elf檔案主要包含 和資料。資料可以分為兩類 靜態資料。動態資料。什麼是動態資料?動態資料程式執行過程中產生,在堆或者棧上分配記憶體。而靜態資料則不然,靜態資料在 編譯完成後,就應該確定使用的...