RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

Android文件格式詳解

哆啦安全 ? 來源:哆啦安全 ? 2024-01-02 10:21 ? 次閱讀

1.dex文件格式

dex是android虛擬機的可執(zhí)行字節(jié)碼文件,java文件經(jīng)過javac編譯成class文件,class文件又被dx處理后生成dex文件。

wKgaomWTcyGAespiAABUNfZ3pUw199.png

dex文件分為四大部分: DEX文件頭,索引結構區(qū),data數(shù)據(jù)區(qū),靜態(tài)鏈接數(shù)據(jù)區(qū)。

所有的代碼和數(shù)據(jù)都放在data數(shù)據(jù)區(qū)中,索引結構區(qū)中存放的是data中各種數(shù)據(jù)的對應的偏移和索引。

wKgZomWTcyGAKGVvAABTNmV3blM069.png

利用010查看一個dex文件的信息,可以發(fā)現(xiàn)此文件并沒有靜態(tài)鏈接數(shù)據(jù)區(qū)。

2.odex和oat格式

在android4.4之前,android為了優(yōu)化程序執(zhí)行效率使用的是JIT(just-in-time)即時編譯,也就是程序運行時編譯。因為apk文件是一個zip壓縮包的格式,每次系統(tǒng)啟動程序時都需要從apk中讀取dex文件并加載執(zhí)行,為了減少程序啟動時從apk讀取dex文件所需要的,android在apk第一次安裝的時候dexopt將程序的dex文件進行優(yōu)化生成odex文件,并將其放在了/data/dalvik-cache目錄下。等下次apk啟動時直接加載這個目錄中經(jīng)過優(yōu)化的odex文件減少啟動所需要的時間(優(yōu)化基于當前系統(tǒng)的dalvik虛擬機版本,不同版本上的odex文件無法進行兼容)。在程序運行時android虛擬機會對一些執(zhí)行頻率較高的熱點函數(shù)進行jit編譯生成對應的本地代碼,下次再執(zhí)行此函數(shù)的時候直接執(zhí)行對應的本地代碼提高了執(zhí)行的效率,注意jit編譯的代碼只會存在于內(nèi)存中并不會持久化保存再磁盤中,下次啟動apk后執(zhí)行此函數(shù)還需要解釋執(zhí)行。

在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文件后不需要經(jīng)過處理就可以直接運行,它在編譯時就從字節(jié)碼裝換成機器碼了,因此運行速度更快。不過android4.4之后oat文件的后綴還是odex,但是已經(jīng)不是android4.4之前的文件格式,而是ELF格式封裝的本地機器碼.可以認為oat在dex上加了一層殼,可以從oat里提取出dex.

wKgaomWTcyGAWFU6AABrBrcvzT8733.png

因為此時的oat文件是一個標準的elf文件,識別其是不是oat文件的標準就是看其符號表。

wKgZomWTcyGAUHu5AABXj-L9TYk340.png

oatdata指向的是ELF文件的.rodata節(jié)區(qū),存放了OAT文件頭OATHeader,OAT的DEX文件頭,原始DEX文件的DexFile等信息。

oatexec指向的是ELF文件的.text節(jié)區(qū),這里存放的是編譯生成的指定平臺的二進制代碼。

oatlastword指向的是對應oat文件的結尾。

wKgaomWTcyGAduFFAABpPifzAio955.png

3.vdex文件格式

在android8.0(Android O)之前dex文件嵌入到oat文件本身中,在Android 8.0之后dex2oat將classes.dex優(yōu)化生成兩個文件oat文件(.odex)和vdex文件(.vdex)

odex文件中包含了本機代碼的OAT

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

wKgZomWTcyGAdnF_AADo2UEo-lU107.png

4.art文件格式

ART虛擬機在執(zhí)行dex文件時,需要將dex文件中使用的類,字符串等信息轉換為自定義的結構。art文件就是保存了apk中使用的一些類,字符串等信息的ART內(nèi)部表示,可以加快程序啟動的速度。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Android
    +關注

    關注

    12

    文章

    3935

    瀏覽量

    127339
  • 文件格式
    +關注

    關注

    0

    文章

    19

    瀏覽量

    15079
  • 程序
    +關注

    關注

    117

    文章

    3785

    瀏覽量

    81001
  • 虛擬機
    +關注

    關注

    1

    文章

    914

    瀏覽量

    28160

原文標題:Android的dex、odex、oat、vdex、art文件格式

文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    RIFF文件格式簡介

    RIFF(Resources Interchange File Format)中文翻譯為資源互換文件格式,是Windows下大部分多媒體文件遵循的一種文件結構。
    的頭像 發(fā)表于 10-07 16:25 ?1727次閱讀
    RIFF<b class='flag-5'>文件格式</b>簡介

    App加固技術解析:DEX文件格式詳解

    1、DEX文件格式的解析  Android應用的源代碼主要分為java與C/C++兩部分,其中java編譯后的文件是DEX文件,也是Android
    發(fā)表于 09-28 11:21

    MP3 文件格式資料

    MP3 文件格式資料
    發(fā)表于 04-08 03:37 ?22次下載

    如何光繪輸出AutoCAD文件格式

    教你光繪輸出AutoCAD文件格式
    發(fā)表于 06-07 15:16 ?36次下載

    .mpp文件格式打開軟件下載

    .mpp文件格式打開
    發(fā)表于 07-07 13:14 ?2517次下載

    適用于IPTV大并發(fā)應用的文件格式

    分析交互式網(wǎng)絡電視(IPTV)大并發(fā)應用的特性,提出一種適用于IPTV大并發(fā)應用的服務器內(nèi)部文件格式cl4文件格式。該文件格式采用了符合IPTV大并發(fā)應用特性的音視頻數(shù)據(jù)交織、媒體數(shù)
    發(fā)表于 04-15 10:02 ?17次下載

    LabVIEW數(shù)據(jù)文件格式的視頻教程

    LabVIEW數(shù)據(jù)文件格式的視頻教程 LabVIEW數(shù)據(jù)文件格式之華山論
    發(fā)表于 03-26 12:16 ?113次下載

    數(shù)碼相機伴侶的文件格式

    數(shù)碼相機伴侶的文件格式              文件格式指的是數(shù)碼相機伴侶獨特的文件系統(tǒng)結構在
    發(fā)表于 12-23 10:05 ?876次閱讀

    GIF圖形文件格式文檔

    GIF圖形文件格式文檔 GIF圖形文件格式文檔 GIF圖形文件格式文檔
    發(fā)表于 05-24 10:53 ?2次下載

    GIF文件格式詳解

    GIF文件格式詳解 GIF文件格式詳解 GIF文件格式詳解
    發(fā)表于 05-24 10:53 ?2次下載

    了解LabVIEW數(shù)據(jù)文件格式

    LabVIEW數(shù)據(jù)文件格式之華山論劍視頻教程
    的頭像 發(fā)表于 06-25 00:13 ?4831次閱讀
    了解LabVIEW數(shù)據(jù)<b class='flag-5'>文件格式</b>

    STM32--hex文件格式

    ? ? hex 是 Intel 公司制定的一種使用 ASCII 文本記錄機器碼或常量數(shù)據(jù)的文件格式,它可以燒錄到MCU中,被MCU執(zhí)行的一種文件格式。一個hex文件由多條記錄組成,而每條記錄由5個
    發(fā)表于 12-06 11:21 ?4次下載
    STM32--hex<b class='flag-5'>文件格式</b>

    WAV文件格式詳解

    WAV是微軟公司開發(fā)的一種音頻格式文件,用于保存Windows平臺的音頻信息資源,它符合資源互換文件格式(Resource Interchange File Format,RIFF)文件規(guī)范。標準
    的頭像 發(fā)表于 10-21 09:52 ?5304次閱讀
    WAV<b class='flag-5'>文件格式</b><b class='flag-5'>詳解</b>

    常用對象文件格式

    電子發(fā)燒友網(wǎng)站提供《常用對象文件格式.pdf》資料免費下載
    發(fā)表于 10-15 09:25 ?0次下載
    常用對象<b class='flag-5'>文件格式</b>

    EPS文件格式如何轉換 EPS和SVG文件的區(qū)別

    EPS文件格式轉換 EPS(Encapsulated PostScript)是一種用于存儲矢量圖形的文件格式,最初由Adobe公司開發(fā)。由于EPS文件在打印時能夠保持極高的質(zhì)量,并且廣泛被各種
    的頭像 發(fā)表于 11-19 10:31 ?398次閱讀
    RM新时代网站-首页