zoukankan      html  css  js  c++  java
  • ELF文件格式内容

     

    在计算机科学中,是一种用于二进制文件可执行文件目标代码、共享库和核心转储格式文件。
     

    ELF文件组成部分

      ELF文件由4部分组成,分别是ELF头(ELF header)、程序头表(Program header table)、节(Section)和节头表(Section header table)。实际上,一个文件中不一定包含全部内容,而且他们的位置也未必如同所示这样安排,只有ELF头的位置是固定的,其余各部分的位置、大小等信息由ELF头中的各项值来决定。
     

    ELF header

    格式代码如下:

    #define EI_NIDENT 16
      typedef struct{
      unsigned char e_ident[EI_NIDENT];
      Elf32_Half e_type;
      Elf32_Half e_machine;
      Elf32_Word e_version;
      Elf32_Addr e_entry;
      Elf32_Off e_phoff;
      Elf32_Off e_shoff;
      Elf32_Word e_flags;
      Elf32_Half e_ehsize;
      Elf32_Half e_phentsize;
      Elf32_Half e_phnum;
      Elf32_Half e_shentsize;
      Elf32_Half e_shnum;
      Elf32_Half e_shstrndx;
      }Elf32_Ehdr;

    数据类型说明:

    名称 大小 对齐 用途
    Elf32_Addr 4 4 无符号程序地址
    Elf32_Half 2 2 无符号中等大小整数
    Elf32_Off 4 4 无符号文件偏移
    Elf32_Sword 4 4 有符号大整数
    Elf32_Word 4 4 无符号大整数
    unsigned char 1 1 无符号小整数
     

    代码项含义:

    最开头是16个字节的e_ident, 其中包含用以表示ELF文件的字符,以及其他一些与机器无关的信息。开头的4个字节值固定不变,为0x7f和ELF三个字符。
    e_type 它标识的是该文件的类型。
    e_machine 表明运行该程序需要的体系结构。
    e_version 表示文件的版本。
    e_entry 程序的入口地址。
    e_phoff 表示Program header table 在文件中的偏移量(以字节计数)。
    e_shoff 表示Section header table 在文件中的偏移量(以字节计数)。
    e_flags 对IA32而言,此项为0。
    e_ehsize 表示ELF header大小(以字节计数)。
    e_phentsize 表示Program header table中每一个条目的大小。
    e_phnum 表示Program header table中有多少个条目。
    e_shentsize 表示Section header table中的每一个条目的大小。
      
    e_shnum 表示Section header table中有多少个条目。
      
    e_shstrndx 包含节名称的字符串是第几个节(从零开始计数)。
     

    Program header

    Program header描述的是一个段在文件中的位置、大小以及它被放进内存后所在的位置和大小。

    格式代码如下:

    typedef struct {
    Elf32_Wordp_type;
    Elf32_Offp_offset;
    Elf32_Addr p_vaddr;
    Elf32_Addr p_paddr;
    Elf32_Wordp_filesz;
    Elf32_Word p_memsz;
    Elf32_Word p_flags;
    Elf32_Word p_align;
    }

    代码项含义:

    p_type 当前Program header所描述的段的类型。
    p_offset 段的第一个字节在文件中的偏移。
    p_vaddr 段的一个字节在内存中的虚拟地址
    p_paddr 在物理内存定位相关的系统中,此项是为物理地址保留。
    p_filesz 段在文件中的长度。
    p_memsz 段在内存中的长度。
    p_flags 与段相关的标志。
    p_align 根据此项值来确定段在文件及内存中如何对齐。
  • 相关阅读:
    CSS边框
    各大网站注册的用处(个人看法)
    20121011 外边距
    20120921碎碎念
    20121011 CSS一
    20120919碎碎念
    CSS 文本装饰属性
    外边距合并
    EverBox开发笔记1
    “Core Data”中的“dynamic implementation”
  • 原文地址:https://www.cnblogs.com/wsw-seu/p/8282388.html
Copyright © 2011-2022 走看看