文件(二)"/>
写一个工具来了解ELF文件(二)
转载请注明出处。
上一篇中讲到了ELF文件的基本介绍、ELF中定义的数据类型以及ELF文件的ELF Header结构
接下来就按照官方给出的视图(链接视图和执行视图)来介绍program header
program header中存放的是系统加载可执行程序所需要的所有信息,包括解释器路径、需要映射到内存中的段、动态链接段等
多个program header组成了program header table,该表起始位置、每个表项的大小和表项的个数。(program header组成的表,表项当然是每一个program header)
所以,解析到ELF header后,就可以根据ELF header中的内容拿到program header table接着解析了
program header table的位置一般来说紧跟着ELF header后,但是也有可能被修改(暂且不提)
Program Header
program header的结构体描述:
从上图可以看出,32位的program header结构和64位的还是有一些区别的,判断的时候就需要注意,仅仅是一个字段的位置变了,由于每个字段占用的size可能是不同的,所以两者就会有较大的差异了
- p_type:用于描述该段的类型或解释该段的作用
- p_offset:该段(数据)在文件中的位置
- p_vaddr:该段在内存中的位置,也就是VA,如果是DYN类型的文件,这里就是RVA
- p_paddr:官方的解释是**在物理地址关联的操作系统中,该字段是保留给物理地址的。由于 System V忽略了应用程序的物理地址,这个字段在可执行文件与共享文件中是未指定的。**貌似意思就是不用管,但是看到基本上所有的gcc编译出的文件这个字段和p_vaddr的数据相同
- p_filesz:该段在文件中的大小
- p_memsz:该段在内存中的大小
- p_flags:段的标识,包括读、写、执行(PF_R、PF_W、PF_X)
- p_align:对齐粒度,且该值为0或1时表示不需要对齐。
这个结构体相对来说较为简单,字段也易懂,这里多介绍一下p_type
更多推荐
写一个工具来了解ELF文件(二)
发布评论