0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Android文件格式详解

哆啦安全 来源:哆啦安全 2024-01-02 10:21 次阅读

1.dex文件格式

dex是android虚拟机的可执行字节码文件,java文件经过javac编译成class文件,class文件又被dx处理后生成dex文件。

wKgaomWTcyGAespiAABUNfZ3pUw199.png

dex文件分为四大部分: DEX文件头,索引结构区,data数据区,静态链接数据区。

所有的代码和数据都放在data数据区中,索引结构区中存放的是data中各种数据的对应的偏移和索引。

wKgZomWTcyGAKGVvAABTNmV3blM069.png

利用010查看一个dex文件的信息,可以发现此文件并没有静态链接数据区。

2.odex和oat格式

在android4.4之前,android为了优化程序执行效率使用的是JIT(just-in-time)即时编译,也就是程序运行时编译。因为apk文件是一个zip压缩包的格式,每次系统启动程序时都需要从apk中读取dex文件并加载执行,为了减少程序启动时从apk读取dex文件所需要的,android在apk第一次安装的时候dexopt将程序的dex文件进行优化生成odex文件,并将其放在了/data/dalvik-cache目录下。等下次apk启动时直接加载这个目录中经过优化的odex文件减少启动所需要的时间(优化基于当前系统的dalvik虚拟机版本,不同版本上的odex文件无法进行兼容)。在程序运行时android虚拟机会对一些执行频率较高的热点函数进行jit编译生成对应的本地代码,下次再执行此函数的时候直接执行对应的本地代码提高了执行的效率,注意jit编译的代码只会存在于内存中并不会持久化保存再磁盘中,下次启动apk后执行此函数还需要解释执行。

在android4.4之后,android使用的是AOT(Ahead-of-time)事前编译,也就是程序在运行前先编译。oat是ART虚拟机运行的文件,是ELF格式二进制文件,包含DEX和编译的本地机器指令,oat文件包含DEX文件,因此比ODEX文件占用空间更大。程序在首次安装的时候,dex2oat默认会把classes.dex编译成本地机器指令,生成ELF格式的OAT文件,并将其放在了/data/dalvik-cache或者是/data/app/packagename/目录下。ART加载OAT文件后不需要经过处理就可以直接运行,它在编译时就从字节码装换成机器码了,因此运行速度更快。不过android4.4之后oat文件的后缀还是odex,但是已经不是android4.4之前的文件格式,而是ELF格式封装的本地机器码.可以认为oat在dex上加了一层壳,可以从oat里提取出dex.

wKgaomWTcyGAWFU6AABrBrcvzT8733.png

因为此时的oat文件是一个标准的elf文件,识别其是不是oat文件的标准就是看其符号表。

wKgZomWTcyGAUHu5AABXj-L9TYk340.png

oatdata指向的是ELF文件的.rodata节区,存放了OAT文件头OATHeader,OAT的DEX文件头,原始DEX文件的DexFile等信息。

oatexec指向的是ELF文件的.text节区,这里存放的是编译生成的指定平台的二进制代码。

oatlastword指向的是对应oat文件的结尾。

wKgaomWTcyGAduFFAABpPifzAio955.png

3.vdex文件格式

在android8.0(Android O)之前dex文件嵌入到oat文件本身中,在Android 8.0之后dex2oat将classes.dex优化生成两个文件oat文件(.odex)和vdex文件(.vdex)

odex文件中包含了本机代码的OAT

vdex文件包含了原始的DEX文件副本

wKgZomWTcyGAdnF_AADo2UEo-lU107.png

4.art文件格式

ART虚拟机在执行dex文件时,需要将dex文件中使用的类,字符串等信息转换为自定义的结构。art文件就是保存了apk中使用的一些类,字符串等信息的ART内部表示,可以加快程序启动的速度。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Android
    +关注

    关注

    12

    文章

    3851

    浏览量

    125639
  • 文件格式
    +关注

    关注

    0

    文章

    17

    浏览量

    15015
  • 程序
    +关注

    关注

    114

    文章

    3631

    浏览量

    79541
  • 虚拟机
    +关注

    关注

    1

    文章

    855

    浏览量

    27377

原文标题:Android的dex、odex、oat、vdex、art文件格式

文章出处:【微信号:哆啦安全,微信公众号:哆啦安全】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    RIFF文件格式简介

    RIFF(Resources Interchange File Format)中文翻译为资源互换文件格式,是Windows下大部分多媒体文件遵循的一种文件结构。
    的头像 发表于 10-07 16:25 1043次阅读
    RIFF<b class='flag-5'>文件格式</b>简介

    Hex文件格式是什么意思

    hex文件格式hex文件格式是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex文件的方式有很多种,可以通过不同的编译器将C程序或者汇编程序编译生成hex。中文名hex
    发表于 01-12 06:17

    App加固技术解析:DEX文件格式详解

    1、DEX文件格式的解析  Android应用的源代码主要分为java与C/C++两部分,其中java编译后的文件是DEX文件,也是Android
    发表于 09-28 11:21

    MP3 文件格式资料

    MP3 文件格式资料
    发表于 04-08 03:37 22次下载

    如何光绘输出AutoCAD文件格式

    教你光绘输出AutoCAD文件格式
    发表于 06-07 15:16 36次下载

    .mpp文件格式打开软件下载

    .mpp文件格式打开
    发表于 07-07 13:14 2517次下载

    适用于IPTV大并发应用的文件格式

    分析交互式网络电视(IPTV)大并发应用的特性,提出一种适用于IPTV大并发应用的服务器内部文件格式cl4文件格式。该文件格式采用了符合IPTV大并发应用特性的音视频数据交织、媒体数
    发表于 04-15 10:02 17次下载

    LabVIEW数据文件格式的视频教程

    LabVIEW数据文件格式的视频教程 LabVIEW数据文件格式之华山论
    发表于 03-26 12:16 113次下载

    MD产品支持文件格式

    MD产品支持文件格式              支持文件
    发表于 12-22 10:06 1441次阅读

    数码相机伴侣的文件格式

    数码相机伴侣的文件格式              文件格式指的是数码相机伴侣独特的文件系统结构在
    发表于 12-23 10:05 823次阅读

    GIF图形文件格式文档

    GIF图形文件格式文档 GIF图形文件格式文档 GIF图形文件格式文档
    发表于 05-24 10:53 2次下载

    GIF文件格式详解

    GIF文件格式详解 GIF文件格式详解 GIF文件格式详解
    发表于 05-24 10:53 2次下载

    了解LabVIEW数据文件格式

    LabVIEW数据文件格式之华山论剑视频教程
    的头像 发表于 06-25 00:13 4439次阅读
    了解LabVIEW数据<b class='flag-5'>文件格式</b>

    STM32--hex文件格式

        hex 是 Intel 公司制定的一种使用 ASCII 文本记录机器码或常量数据的文件格式,它可以烧录到MCU中,被MCU执行的一种文件格式。一个hex文件由多条记录组成,而每条记录
    发表于 12-06 11:21 4次下载
    STM32--hex<b class='flag-5'>文件格式</b>

    WAV文件格式详解

    WAV是微软公司开发的一种音频格式文件,用于保存Windows平台的音频信息资源,它符合资源互换文件格式(Resource Interchange File Format,RIFF)文件规范。标准
    的头像 发表于 10-21 09:52 2177次阅读
    WAV<b class='flag-5'>文件格式</b><b class='flag-5'>详解</b>