[英]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有什么區別?
Elf64_Shdr
)Q1.1 segment 和 section 有什么區別?
Q2。 文件 Header 和程序 Header 有什么區別?
/usr/include/elf.h
)。 它還具有此文件中存在的程序頭的數量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.