日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

dex文件格式二

發(fā)布時間:2023/12/20 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dex文件格式二 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一. dex文件頭

(1) magic value在DexFile.c ? dexFileParse函數中 會先檢查magic opt
啥是magic opt呢? 我們剛剛從cache目錄拷貝出來的那個
前面的dey 036就是magic opt
在源碼中會先解析magic opt,然后重設dexfile指針

重設magic opt指針后開始解析magic value這 8 個 字節(jié)一般是常量。數組的值可以轉換為一個字符串如下 :{ 0x64 0x65 0x78 0x0a 0x30 0x33 0x35 0x00 } = "dex\n035\0"

(2) checksum文件校驗碼 ,使用alder32 算法校驗文件先用dexheader先校驗,校驗失敗在使用opt header去校驗

其校驗算法如下除去maigc,checksum 外余下的所有文件區(qū)域 ,用于檢查文件錯誤

(3)?signaturesignature , 使用 SHA-1 算法 hash 除去 magic ,checksum 和 signature 外余下的所有文件區(qū)域 ,用于唯一識別本文件
由此可見我們在修改了dex文件之后,得先修正signature然后在修正checksum
(4) file_sizeDex 文件的大小 ,源碼中會拿該字段和傳入的長度值進行比較

(5) header_sizeheader 區(qū)域的大小 ,單位 Byte ,一般固定為 0x70 常量在DexSwapVerify.c ?dexSwapAndVerify
高版本不知道是不是這樣校驗的 大于居然沒有置為okay
(6) endian_tag大小端標簽 ,標準 .dex 文件格式為小端 ,此項一般固定為 0x12345678常量?
CmdUtils.c ?程序調用主線從dexOpenAndMap->dexSwapAndVerifyIfNecessary->dexSwapAndVerify->swapDexHeader
這里邏輯有點繞,他默認就會轉換一次, 如果是小尾,轉換之后就是大尾,那么校驗就不會通過如果是大尾方式, 就轉換成小尾, 校驗通過,繼續(xù)后面的轉換流程
還一個校驗是如果是odex格式,那么已經是優(yōu)化之后的,則不需要轉換

其轉換算法如下:

(6) link_size和link_off這個兩個字段是表示鏈接數據的大小和偏移值
CHECK_OFFSET_RANGE 只是檢查是否超出文件指針范圍


(7) map_offmap item 的偏移地址 ,該 item 屬于 data 區(qū)里的內容 ,值要大于等于 data_off 的大小 。

其結構體指向:

MapItem

對應的枚舉值

010Editor中呈現(xiàn)

(8) string_ids_size和string_ids_off這兩個字段表示dex中用到的所有的字符串內容的大小和偏移值,我們需要解析完這部分,然后用一個字符串池存起來,后面有其他的數據結構會用索引值來訪問字符串,這個池子也是非常重要的。后面會詳細介紹string_ids的數據結構
(9) type_ids_size和type_ids_off這兩個字段表示dex中的類型數據結構的大小和偏移值,比如類類型,基本類型等信息,后面會詳細介紹type_ids的數據結構
(10) proto_ids_size和type_ids_off這兩個字段表示dex中的元數據信息數據結構的大小和偏移值,描述方法的元數據信息,比如方法的返回類型,參數類型等信息,后面會詳細介紹proto_ids的數據結構
(11) field_ids_size和field_ids_off這兩個字段表示dex中的字段信息數據結構的大小和偏移值,后面會詳細介紹field_ids的數據結構
(12) method_ids_size和method_ids_off這兩個字段表示dex中的方法信息數據結構的大小和偏移值,后面會詳細介紹method_ids的數據結構
(13) class_defs_size和class_defs_off這兩個字段表示dex中的類信息數據結構的大小和偏移值,這個數據結構是整個dex中最復雜的數據結構,他內部層次很深,包含了很多其他的數據結構,所以解析起來也很麻煩,所以后面會著重講解這個數據結構
沒有類的話,dex校驗會失敗
(14) data_size和data_off這兩個字段表示dex中數據區(qū)域的結構信息的大小和偏移值,這個結構中存放的是數據區(qū)域,比如我們定義的常量值等信息。到這里我們就看完了dex的頭部信息,頭部包含的信息還是很多的,主要就兩個個部分:1) 魔數+簽名+文件大小等信息2) 后面的各個數據結構的大小和偏移值,都是成對出現(xiàn)的下一節(jié)我們就來開始介紹各個數據結構的信息


來自為知筆記(Wiz)

轉載于:https://www.cnblogs.com/bingghost/p/5825515.html

總結

以上是生活随笔為你收集整理的dex文件格式二的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。