ELF(三)程序头表

本文详细介绍了ELF(Executable and Linkable Format)程序头表,包括32位环境下的数据结构、示例和程序解释。程序头表由多个项组成,每个项包含段的类型、文件偏移量、虚拟和物理地址、大小、标志及对齐方式等信息。PT_LOAD、PT_DYNAMIC、PT_INTERP等段类型分别对应可装载段、动态链接信息和程序解释器。通过程序示例展示了如何读取和解析ELF文件的程序头表。
摘要由CSDN通过智能技术生成

程序头表

以32位为例;程序头表由几个项组成,其处理方式类似于数组项。

数据结构

/* Program segment header.  */

 

typedef struct

{

 Elf32_Word  p_type;                       /* Segment type */

         描述段的种类,其中段的种类如下:

         PT_NULL表示的段。

         PT_LOAD表示可装载段,在程序执行前从二进制文件映射到内存。

         PT_DYNAMIC表示段包含了用于动态链接器的信息

         PT_INTERP表示当前段指定了可用于动态链接的程序解释器。通常是ld-linux.so

         PT_NOTE指定一个段,其中可能包含专用的编译器信息。

         还有两个是处理器相关,内核不关注。

 Elf32_Off      p_offset;           /* Segment file offset *

         /所述段在文件中的偏移量(从起始位置计算,单位为字节)

 Elf32_Addr   p_vaddr;           /* Segment virtual address */

         给出了段的数据映射到虚拟地址空间中的位置(对于PT_LOAD类型的段)。只支持物理寻址,不支持虚拟寻址的系统,将使用p_paddr保持信息。

 Elf32_Addr   p_paddr;           /* Segment physical address */物理寻址支持

 Elf32_Word  p_filesz;            /* Segment size in file */段在二进制文件中的长度

 Elf32_Word  p_memsz;                  /* Segment size in memory */段在虚拟地址空间中的长度,与文件中的物理的长度差值可通过截断数据或填充0字节来补偿。

 Elf32_Word  p_flags;             /* Segment flags */

         保持了标志信息ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值