[發明專利]基于內存加載的dalvik字節碼優化方法有效
| 申請號: | 201611080987.8 | 申請日: | 2016-11-30 |
| 公開(公告)號: | CN106775843B | 公開(公告)日: | 2020-04-28 |
| 發明(設計)人: | 翟棟;譚源泉;康紅娟;鄧密密 | 申請(專利權)人: | 四川長虹電器股份有限公司 |
| 主分類號: | G06F9/445 | 分類號: | G06F9/445;G06F8/41;G06F8/30 |
| 代理公司: | 四川省成都市天策商標專利事務所 51213 | 代理人: | 陳靖 |
| 地址: | 621000 四*** | 國省代碼: | 四川;51 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 基于 內存 加載 dalvik 字節 優化 方法 | ||
1.一種基于內存加載的dalvik字節碼優化方法,其特征在于,它包括以下步驟:
步驟1,在java層調用本地方法讀取加密的DEX文件進行解密解壓,并將解密解壓后的DEX文件以字節碼的形式保存到棧內存中;
步驟2,采用反射調用DexFile的openDexFile方法,解析步驟1中的DEX文件字節碼得到一個DexOrJar結構體,將DexOrJar結構體的內容加載到gDvm中的userDexFile結構的hash表中,最后返回存儲DEX文件信息的DexOrJar結構體指針,記為cookie值;
所述步驟2具體包括:
步驟2.1,采用dlopen函數打開動態鏈接庫libdvm.so,返回一個句柄和符號;
步驟2.2,采用dlsym函數根據步驟2.1中返回的句柄和符號,拿到動態鏈接庫libdvm.so中內存加載DEX文件;
步驟2.3,調用native方法,得到并保存返回的cookie值;
步驟3,定義本地方法loadDex,傳遞DEX文件的字節數組和字節大小;
步驟4,重寫類加載器加載指定的類。
2.根據權利要求1所述的基于內存加載的dalvik字節碼優化方法,其特征在于,所述步驟2.2得到的native方法位于源碼:dalvik/vm/native/dalvik_system_DexFile.cpp類中,方法名稱是Dalvik_dalvik_system_DexFile_openDexFile_bytearray。
3.根據權利要求1所述的基于內存加載的dalvik字節碼優化方法,其特征在于,所述步驟3還包括定義一個Common.h類,所述Common.h類用于定義本地方法中用到的各個變量類型。
4.根據權利要求1所述的基于內存加載的dalvik字節碼優化方法,其特征在于,所述步驟4采用重寫類加載器的findClass方法,具體包括:
步驟4.1,采用反射調用DexFile的getClassNameList方法,傳遞步驟2中的cookie值得到DEX文件中的所有類;
步驟4.2,采用反射調用defineClass方法獲取Class對象。
5.根據權利要求1所述的基于內存加載的dalvik字節碼優化方法,其特征在于,所述步驟4中直接調用父類加載器的loadClass方法返回一個Class對象。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于四川長虹電器股份有限公司,未經四川長虹電器股份有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201611080987.8/1.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:一種可自定義的dex分包的方法
- 下一篇:一種批量刷固件的方法及裝置





