ELF文件程序表頭和代碼實現ELF文件加載

前面章節我們瞭解了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,意味着表頭對應的段需要加裝到內存中

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章