前面章節我們了解了ELF檔案的頭部結構,這次我們深入了解另一個非常重要的資料結構,那就是程式表頭,作業系統嚴重依賴該結構來加載ELF檔案或是實作動態鏈接,程式表頭反映的是當ELF加載到記憶體后所形成的“視圖”或結構,也就是說ELF檔案存在硬碟上或者被加載到記憶體,它展現出來的形態不一致,
我們先看程式表頭的資料結構:
typedef struct {
unit32_t p_type; #資料型別
uint332_t p_flags; #標志位
uint64_t p_offset; #在ELF檔案中的偏移
uint64_t p_vaddr; #虛擬地址
uint64_t p_paddr; #物理地址
uint64_t p_fllesz; #在硬碟上的大小
uint64_t p_memsz; #在記憶體中大小
uint64_t p_align; #記憶體對齊方式
} Elf64_Phdr;
使用命令 readelf --wide --segments a.out可以讀取程式表頭內容資訊:

這里需要注意的是,程式表頭其實沒有什么新意,它其實應前面說過的若干個段所形成的集合,接下來我們看每個欄位的含義,
p_type對應表頭的型別,常用的數值有PT_LOAD, PT_DYNAMIC, PT_INTER,如果取值PT_LOAD,意味著表頭對應的段需要加裝到記憶體中
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/234826.html
標籤:AI
