• ELF Format 笔记(二)—— ELF Header


    ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287

    以 32 位的 ELF header 数据结构为例:

     1 #define EI_NIDENT 16
     2 typedef struct {
     3     unsigned char e_ident[EI_NIDENT];
     4     Elf32_Half e_type;
     5     Elf32_Half e_machine;
     6     Elf32_Word e_version;
     7     Elf32_Addr e_entry;
     8     Elf32_Off e_phoff;
     9     Elf32_Off e_shoff;
    10     Elf32_Word e_flags;
    11     Elf32_Half e_ehsize;
    12     Elf32_Half e_phentsize;
    13     Elf32_Half e_phnum;
    14     Elf32_Half e_shentsize;
    15     Elf32_Half e_shnum;
    16     Elf32_Half e_shstrndx;
    17 } Elf32_Ehdr;

    1、e_ident

    ELF 标识。是一个 16 字节大小的数组,其各个索引位置的字节数据有固定的含义。

     

    前 4 个字节 e_ident[EI_MAG0] ~ e_ident[EI_MAG3] 的内容固定为 0x7f、’E’、’L’、’F’,标识这是一个 ELF文件。

    e_ident[EI_CLASS] 指明文件类别:0(无效目标文件);1(32 位目标文件);2(64 位目标文件)。

    e_ident[EI_DATA] 指明字节序,规定该文件是大端还是小端:0(无效编码格式);1(小端);2(大端)。

    e_ident[EI_VERSION] 指明 ELF 文件头的版本。

    从 e_ident[EI_PAD] 到 e_ident[EI_NIDENT-1] 之间的 9 个字节保留。

    2、e_type

    文件类型。常见的:1(可重定位文件:“.o 文件”);2(可执行文件);3(共享库文件:“.so 文件”)。

     

    3、e_machine

    指定该程序在什么平台上使用,比如 EM_386 表示在 Inter x86 机器上使用。

    4、e_version

    ELF 文件版本号。

    5、e_entry

    程序的入口虚拟地址。对于可执行文件来说,当 ELF 文件加载完成后,将从这个地址开始执行。对于其它文件,该值为 0。

    6、e_phoff / e_shoff

    分别指明 Program Header Table 和 Section Header Table 在文件中的字节偏移量,没有则为 0。

    7、e_flags

    处理器特定的标志位,通常不怎么关心。

    8、e_ehsize

    指明 ELF 文件头的字节大小(52 个字节)。

    9、e_phentsize / e_phnum

    e_phentsize 指明在 Program Header Table 中的每一项的字节大小,e_phnum 指明共有多少项。

    10、e_shentsize / e_shnum

    e_shentsize 指明在 Section Header Table 中的每一项的字节大小,e_shnum 指明共有多少项。

    11、e_shstrndx

    在 Section Header Table 中,存储“节名字表”的 Section(就是 .shstrtab 节)所对应的索引。

    ilocker:关注 Android 安全(新手) QQ: 2597294287
  • 相关阅读:
    python使用Flask作为MockServer的方法
    Springboot提示数据库连接问题Connection is not available
    python解析FreeMind和XMind思维导图
    java操作对比两个字符串,将差异数据提取出来
    CronExpression表达式详解和案例
    Jquery.Datatables dom表格定位 (转)
    Flask 之 WebSocket
    基于WebSocket的简易聊天室
    Flask 之 宏
    Flask 之 蓝图
  • 原文地址:https://www.cnblogs.com/ilocker/p/4572846.html
Copyright © 2020-2023  润新知