zoukankan      html  css  js  c++  java
  • 动态链接库的ELF头分析

    ELF(Executable and Linking Format)用于存储Linux程序。

    ELF文件分三种类型: 1、目标文件(通常是.o); 2、可执行文件(我们的运行文件)   3、动态库(.so)

    ELF头的各个字段:

    typedef struct {
      unsigned char  e_ident[EI_NIDENT];  /* File identification. */
      Elf32_Half  e_type;    /* File type. */
      Elf32_Half  e_machine;  /* Machine architecture. */
      Elf32_Word  e_version;  /* ELF format version. */
      Elf32_Addr  e_entry;  /* Entry point. */
      Elf32_Off  e_phoff;  /* Program header file offset. */
      Elf32_Off  e_shoff;  /* Section header file offset. */
      Elf32_Word  e_flags;  /* Architecture-specific flags. */
      Elf32_Half  e_ehsize;  /* Size of ELF header in bytes. */
      Elf32_Half  e_phentsize;  /* Size of program header entry. */
      Elf32_Half  e_phnum;  /* Number of program header entries. */
      Elf32_Half  e_shentsize;  /* Size of section header entry. */
      Elf32_Half  e_shnum;  /* Number of section header entries. */
      Elf32_Half  e_shstrndx;  /* Section name strings section. */
    } Elf32_Ehdr;
    

    e_ident、e_type、e_machine、e_version、e_flags和e_ehsize字段比较固定;

    e_entry 入口地址与文件类型有关(动态库就是0);

    目前e_ehsize(ELF HEAD SIZE,32位系统上固定为52字节,也就是0x34;64位系统上是64字节) = 52字节;

    e_shentsize = 40字节(固定的,也就是0x28);

    e_phentsize = 32字节(0x20)。

    e_shoff(未改动?)、e_shentsize(固定为0x28?)、e_shnum和e_shstrndx与链接视图有关;

    e_phoff、e_phentsize和e_phnum与装载(执行)视图有关。

      (图片摘自看雪,下面reference list中的[1])

    图中可以看出:Program header位于ELF header后面,Section Header位于ELF文件的尾部。那可以推出:

    e_phoff (a.k.a Program header file offset) = sizeof(e_ehsize);  /* e_ehsize : Size of ELF header in bytes. */

    整个ELF文件大小 = e_shoff + e_shnum * sizeof(e_shentsize) + 1;

    暂到这里,后面有些看不下去了。。

    -------------------------

    e_shnum  =  (file_size  – e_shoff) / sizeof(Elf32_Shdr) ;  e_shstrndx = e_shnum -1; //Elf32_Shdr:节区头部表项的大小 = e_shentsize =0x28

    参考:

    [1]http://bbs.pediy.com/showthread.php?t=191649

    [2]http://bbs.pediy.com/showthread.php?t=192874

    [3]http://blog.csdn.net/hhhbbb/article/details/6855004

    [4]http://baike.sogou.com/v12102619.htm

  • 相关阅读:
    Pwn2Own 内核 TencentOS
    锤子思维的局限性
    内心宁静 Life
    ANTLRWorks: The ANTLR GUI Development Environment
    汇编 while vs for
    CatBoost is a high-performance open source library for gradient boosting on decision trees
    What is ERP
    专利 案件管理系统
    质量:零缺陷 & 零Bug
    SaaS协会 腾讯千帆
  • 原文地址:https://www.cnblogs.com/larrylawrence/p/4118063.html
Copyright © 2011-2022 走看看