美文网首页
ELF 和DEX 文件格式详解

ELF 和DEX 文件格式详解

作者: le_du | 来源:发表于2019-11-27 17:33 被阅读0次

    ELF 文件格式

    linux Elf 文件格式,windows pe文件

    ELF 文件由三部分组成: ELF文件头(位置固定,大小也是固定的),段头表,节头表

    ELF文件头

    16进制显示
    7F 起始 45 4C 46 ELF对应ASCII码
    

    ELF 文件整体结构:

    ELF Header -> ELF 文件头的位置是固定的
    Segment Header Table -> ELF程序头描述的段的相关信息
    .shstrtab 该section包含了节的名称
    .bss 该section包含了在内存中程序的未初始化的数据,当程序运行开始时,系统将用0来初始化该区域。该section不占用文件空间,该section type = SHT_NOBITS
    .init 
    .text 可执行区域(代码)
    .rodata 只读数据
    .data 和.data1 该section 包含了在内存中程序的初始化数据
    .debug 该section包含了符号调试信息
    .dynamic 该section包含了动态链接信息,该section属性将包含SHF_ALLOC比特位,而SHF_WRITE比特位是否为1取决于处理器
    .dynsym 该section包含了动态链接符号表
    .fini 该section 包含了用于终止进程可执行指令代码
    .symtab 
    .hash 包含了符号hash表
    .line
    .strtab 字符串表
    .got 包含了全局偏移表
    .plt 程序链接表
    Section Header Table --> ELF 节头表描述的是节区的信息 动态用段,静态是节区
    程序加载的时候只会加载LOAD 段
    

    [图片上传失败...(image-2b3061-1574847164757)]
    )

    ELF 常用的数据格式:

    [图片上传失败...(image-69c5aa-1574847164757)]
    )

    readelf 的使用:

    -a 所有信息
    -h 头信息 magic type 段头表,类型, 段头偏移等
    -l 
    -S 节(动态叫段)
    -e 
    

    程序加载和动态链接

    实现程序加载和动态链接的主要技术有:

    程序头部(Program Header):描述与程序执行直接相关的目标文件结构信息。用来在文件中定位各个段的映像。
    同时包含其他一些用来为程序创建进程映像所必须的信息。
    程序加载:给定一个目标文件,系统加载该文件到内存,启动程序执行。
    动态链接:系统加载了程序以后,必须通过解析构成进程的目标文件之间的符号引用,以便完整地的构造进程映像.
    

    DEX 文件格式

    开始:64 65 78 0A 30 35 00 
    

    整体格式概要

    image

    DexFile整体文件结构

    DexHeader header;
    DexStringId StringIds[stringIdsSize]
    DexTypeId
    DexProtoId
    DexFieldId
    DexMethodId
    DexClassDef ClassDefs[]
    DexData Data[] 数据
    DexLink LinkData 链接
    

    DexHeader

    u1 magic[8] u几就是表明占位几个字节 版本信息
    u4 checkSum 文件的校验值 alder 32字节
    u1 signature 签名验证(sha-1)
    u4 fileSize 整个文件大小
    u4 headerSize       //文件头的大小
    u4 linkSize //链接段的大小
    u4 mapOff   //DexMapList文件偏移
    u4 fieldIdsOff
    ....
    u4 classDefsSize
    u4 classDefsOff 
    

    DexClassDef

    classDefsSize 和 classDefsOff来表示 DexClassDef

    struct DexClassDef{
        u4 classIdx;
        u4 accessFlags;
        u4 superClassIdx;
        u4 interfaceFileIdx;
    }
    

    详细见如下图:

    image

    文件格式相互之间的联系

    image

    Dex文件结构体
    详细链接安卓源码

    相关文章

      网友评论

          本文标题:ELF 和DEX 文件格式详解

          本文链接:https://www.haomeiwen.com/subject/gyfmwctx.html