簡體   English   中英

ELF中Program header和Section Header的區別

[英]Difference between Program header and Section Header in ELF

Q1 ELF中Program header和Section Header有什么區別?

Q1.1 segment 和 section 有什么區別?

我相信 pheaders 只指向部分。

Q2。 文件 Header 和程序 Header 有什么區別?

根據 GNU ld linker 腳本, 使用 ID:GNU Linker

PHDRS
{
name type [ FILEHDR ] [ PHDRS ] [ AT ( address ) ]
[ FLAGS ( flags ) ] ;
}

您可以使用程序 header 類型后出現的 FILEHDR 和 PHDRS 關鍵字來進一步描述該段的內容。 FILEHDR 關鍵字表示該段應包含 ELF 文件 header。PHDRS 關鍵字表示該段應包含 ELF 程序頭本身。

這有點令人困惑。

Executable & Linkable Format wikipage有一張很好的圖片解釋了 ELF,以及它的程序頭和節頭之間的區別。 另見精靈(5)

[initial] 程序頭定義了在execve(2)時投影到虛擬內存(可執行文件的角度)中的段(在運行該 ELF 可執行文件的進程地址空間 [final] 部分標題定義了部分(可鏈接的觀點,對於ld(1)等...)。 每個部分都屬於一個段(並且在執行時可能可見,也可能不可見——即映射到內存中)。 ELF 文件頭告訴程序頭表和節頭表在哪里。

還可以使用objdump(1)readelf(1)來探索 Linux 系統上存在的幾個 ELF 文件(可執行文件、共享對象、可鏈接對象)。

Levine 的Linkers & Loaders書中有一章詳細解釋了這一點。

而 Drepper 的論文How to Write Shared Libraries也有一些很好的解釋。

Q1 Program header和ELF中的Section Header有什么區別?

  • 程序 header 描述了系統准備程序執行所需的段或其他信息。
  • section 是一個界面,可以代表很多東西。 在這里查看詳細信息(搜索Elf64_Shdr
  • 段 header 在段內。

Q1.1 segment 和 section 有什么區別?

  • 一個段由一個或多個部分組成,盡管這一事實對程序 header 是透明的。

Q2。 文件 Header 和程序 Header 有什么區別?

  • ELF 文件 header。它出現在每個 ELF 文件的開頭(請參閱/usr/include/elf.h )。 它還具有此文件中存在的程序頭的數量。
  • ELF 文件始終以 ELF 文件 header 開頭。它引用程序頭。 您至少需要一個程序 header。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM