国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Android DEX 基礎

Original 2016-11-16 15:58:18 373
abstract:1、什么是dex?簡單說就是優(yōu)化后的android版.exe。每個apk安裝包里都有。相對于PC上的java虛擬機能運行.class;android上的Davlik虛擬機能運行.dex。為何要研究dex格式?因為dex里面包含了所有app代碼,利用反編譯工具可以獲取java源碼。理解并修改dex文件,就能更好的apk破解和防破解。 2、dex好處dex文件有個天大的好處:它可以直接用De

1、什么是dex?

簡單說就是優(yōu)化后的android版.exe。每個apk安裝包里都有。
相對于PC上的java虛擬機能運行.class;android上的Davlik虛擬機能運行.dex。
為何要研究dex格式?因為dex里面包含了所有app代碼,利用反編譯工具可以獲取java源碼。理解并修改dex文件,就能更好的apk破解和防破解。

 

2、dex好處

dex文件有個天大的好處:它可以直接用DexClassLoader類加載,這叫動態(tài)加載。于是我們只要在dex上加殼,在程序運行時脫殼,就可以規(guī)避靜態(tài)反編譯的風險。

 

3、一般的反編譯流程是什么樣子的。

    1、下載apk文件,然后解壓 ,得到 class.dex 文件

    2、用dex2jar 把 class.dex 還原成 classes-dex2jar.jar 文件

    3、用 jd-gui.exe 把 classes-dex2jar.jar 文件打開,就可以看到源碼了。

 

4、Android 為什么會出現(xiàn) 65536限制問題?

  在Android系統(tǒng)中,一個App的所有代碼都在一個Dex文件里面。Dex是一個類似Jar的包,存儲了很多Java編譯字節(jié)碼的歸檔文件。因為Android系統(tǒng)使用Dalvik虛擬機,所以需要把使用Java Compiler編譯之后的class文件轉(zhuǎn)換成Dalvik能夠執(zhí)行的class文件。這里需要強調(diào)的是,Dex和Jar一樣是一個歸檔文件,里面仍然是Java代碼對應的字節(jié)碼文件。當Android系統(tǒng)啟動一個應用的時候,有一步是對Dex進行優(yōu)化,這個過程有一個專門的工具來處理,叫DexOpt。DexOpt的執(zhí)行過程是在第一次加載Dex文件的時候執(zhí)行的。這個過程會生成一個ODEX文件,即Optimised Dex。執(zhí)行ODex的效率會比直接執(zhí)行Dex文件的效率要高很多。但是在早期的Android系統(tǒng)中,DexOpt有一個問題,也就是這篇文章想要說明并解決的問題。DexOpt會把每一個類的方法id檢索起來,存在一個鏈表結構里面。但是這個鏈表的長度是用一個short類型來保存的,導致了方法id的數(shù)目不能夠超過65536個。當一個項目足夠大的時候,顯然這個方法數(shù)的上限是不夠的。盡管在新版本的Android系統(tǒng)中,DexOpt修復了這個問題,但是我們?nèi)匀恍枰獙舷到y(tǒng)做兼容。


Release Notes

Popular Entries