androidj,android基础知识
Androidj是什么
Androidj本义系机器人,如果再某个软件出现就应该译为教程或者应用软件
创新互联是一家集网站建设,翼城企业网站建设,翼城品牌网站建设,网站定制,翼城网站建设报价,网络营销,网络优化,翼城网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
一个android 项目,类文件都变成了 J 开头的文件
这是因为你的studio设置了省电模式,你可以通过 FilePower Save Mode取消掉
19)(一)'>android 从jobject、jclass获取类名(API>19)(一)
用途在Art中Hook JNI相关函数。存在jobject jclass 参数时需要得到具体的类名。
在Art虚拟机中:
jobject在内存中表现为:art::mirror::Object,可从GetObjectClass方法中分析得到(art/runtime/jni_internal.cc)
jclass在内存中表现为:art::mirror::Class,可从GetSuperclass方法中分析得到(art/runtime/jni_internal.cc)
获取类名重点在art::mirror::Class类中,通过分析Class 类发现在art/runtime/mirror/class-inl.h头文件中存在一个获取类名的方法
上述方法存在两个问题:
综上所述,GetName不适合获取类名
在dalvik虚拟机中存在一个方法dvmDecodeIndirectRef,可以将jobject、jclass转为对应的内存结构指针。
经过查找发现在/art/runtime/thread.cc中存在一个方法DecodeJObject可以将jobject、jclass转换为对应的内存结构指针
DecodeJObject是Thread类的一个方法,通过dlsym拿到方法地址后,其表现形式如下:
第一个参数表示this即当前对象。可以通过如下方法获取Thread对象的实例
同时发现/art/runtime/mirror/class.cc中存在GetDescriptor方法可以获取art::mirror::Class的类名
GetDescriptor是Class类的一个方法,通过dlsym拿到方法地址后,其表现形式如下:
第一个参数表示this即当前对象。可以通过DecodeJObject获取Class对象的实例,
在最终可以整理得到获取jclass类名的方法:
获取jobject方法就简单一点其内存结构可以精简如下:
其中klass就是Class对象的指针,最终整理后的方法如下:
上述方法太过于麻烦,后面给出一个简单的方法,可以模拟dalvik解析dex拿到类名。不早了,睡了
分享名称:androidj,android基础知识
文章分享:http://azwzsj.com/article/dsisedh.html