Androidj本義系機器人,如果再某個軟件出現(xiàn)就應(yīng)該譯為教程或者應(yīng)用軟件
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),翼城企業(yè)網(wǎng)站建設(shè),翼城品牌網(wǎng)站建設(shè),網(wǎng)站定制,翼城網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,翼城網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
這是因為你的studio設(shè)置了省電模式,你可以通過 FilePower Save Mode取消掉
用途在Art中Hook JNI相關(guān)函數(shù)。存在jobject jclass 參數(shù)時需要得到具體的類名。
在Art虛擬機中:
jobject在內(nèi)存中表現(xiàn)為:art::mirror::Object,可從GetObjectClass方法中分析得到(art/runtime/jni_internal.cc)
jclass在內(nèi)存中表現(xiàn)為:art::mirror::Class,可從GetSuperclass方法中分析得到(art/runtime/jni_internal.cc)
獲取類名重點在art::mirror::Class類中,通過分析Class 類發(fā)現(xiàn)在art/runtime/mirror/class-inl.h頭文件中存在一個獲取類名的方法
上述方法存在兩個問題:
綜上所述,GetName不適合獲取類名
在dalvik虛擬機中存在一個方法dvmDecodeIndirectRef,可以將jobject、jclass轉(zhuǎn)為對應(yīng)的內(nèi)存結(jié)構(gòu)指針。
經(jīng)過查找發(fā)現(xiàn)在/art/runtime/thread.cc中存在一個方法DecodeJObject可以將jobject、jclass轉(zhuǎn)換為對應(yīng)的內(nèi)存結(jié)構(gòu)指針
DecodeJObject是Thread類的一個方法,通過dlsym拿到方法地址后,其表現(xiàn)形式如下:
第一個參數(shù)表示this即當(dāng)前對象。可以通過如下方法獲取Thread對象的實例
同時發(fā)現(xiàn)/art/runtime/mirror/class.cc中存在GetDescriptor方法可以獲取art::mirror::Class的類名
GetDescriptor是Class類的一個方法,通過dlsym拿到方法地址后,其表現(xiàn)形式如下:
第一個參數(shù)表示this即當(dāng)前對象??梢酝ㄟ^DecodeJObject獲取Class對象的實例,
在最終可以整理得到獲取jclass類名的方法:
獲取jobject方法就簡單一點其內(nèi)存結(jié)構(gòu)可以精簡如下:
其中klass就是Class對象的指針,最終整理后的方法如下:
上述方法太過于麻煩,后面給出一個簡單的方法,可以模擬dalvik解析dex拿到類名。不早了,睡了