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://pwwzsj.com/article/dsisedh.html