ELF檔案格式定義

2021-08-21 12:55:11 字數 1772 閱讀 2609

elf檔案格式有32位及64位的兩種,本質上差別不是很大,主要關注elf 32位的檔案處理方式。

elf為executable and linking format的縮寫,為編譯生成的目標檔案,編譯生成的目標檔案有幾種格式 relocatable file、executable file 和 shared object file三種,linking file 及 execution file的格式如下:

在圖示的各個元素中,只有elf header要求嚴格固定的位置,其他模組的位置可以變化。在elf header中可以配置 program header table及 section header table的偏移位置,以及相應的個數和占用位元組大小等等,目前主要關心linking file的組成格式。

由於不同的機器環境對資料表達的空間格式存在差異,elf檔案的資料格式大小做了如下規定:

其中包含了program header的資訊: phoff 偏移,phnum個數,phentsize大小,section header的資訊: shoff 偏移、shnum section的個數及 section的大小 shentsize等。

section header結構體重包含了相應名字,位址、檔案中的偏移、大小等等。一些特殊的section命名如下,包含了我們常用的.bss 堆疊段、.data資料段、.text**段等等:

program header結構中包含偏移 offset、虛擬位址、實體地址等,program header的內容僅僅對excutable 和 shared object的檔案有效。

在編譯link的時候可以生成elf檔案,而編譯過程中可以設定相應內容存放位置,對應在elf檔案中的不同section,在處理elf檔案時,通過elf header獲取相應資訊,得到section header table的位置,而section header table 的資訊將相應的編譯結果分段存放elf檔案中。通過elf檔案的資訊,可以生成相應的二進位制檔案,在gnu編譯系統中,通過工具objcopy轉換得到。

如下所示 編譯處理的過程,個人理解 c 原始檔需要轉換為.s 再編譯為.o,抑或至少先編譯成.o檔案才相對更為合理。

elf 64位的資料定義如下,可以看到其和32位的資料格式定義存在一些變化

在資料型別的定義中 unsigned char的大小沒有發生變化,所以在elf header的定義中e_ident的結構不會發生變化,在e_ident中定義了乙個元素用來指示檔案格式為elf32或elf64。

ELF檔案格式

在介紹elf格式之前,先簡單說明一下可執行檔案的生成流程 1 編寫c原始檔,或彙編原始檔 2 準備共享庫格式的目標檔案 shared object file 如數學庫 標準庫 2 用編譯器 compiler 將c編譯成可重定位格式的目標檔案 relocatable object file 用彙編器 ...

ELF檔案格式

1.目標檔案 編譯器和彙編器生成可重定位目標檔案 包括共享目標檔案 鏈結器生成可執行目標檔案。2.可重定位目標檔案和可執行目標檔案的格式 可重定位目標檔案格式 可執行目標檔案格式 3.下面我們開始分析上面 而對於未被初始化的全域性變數和靜態區域性變數,編譯的時候並未被分配空間,而是僅僅在.bss段中...

ELF檔案格式

elf指executable and linking format,不僅包含可執行檔案,也包含庫檔案,包括靜態庫和動態庫。準備的說,也就是三種 這不廢話嗎 可執行檔案 靜態鏈結庫 動態鏈結庫 要觀察elf的具體資訊,可以用以下幾個工具 nm lists symbols from object fil...