Dalvik 虚拟机的 dvmResolveClass 方法

Android安全交流群:478084054

Dalvik在解释执行指令代码时,如果遇到没有解析过的类(如创建第一个class实例或在类产生前访问其静态成员时),就会调用dvmResolveClass方法来加载目标类。

dvmResolveClass的实现在“/dalvik/vm/oo/Resolve.cpp”文件中。

Dalvik 虚拟机的 dvmResolveClass 方法_第1张图片

这里只贴出部分关键代码,对于非基本类型(int、long…),调用dvmFindClassNoInit方法进行加载。

dvmFindClassNoInit的实现在“/dalvik/vm/oo/Class.cpp”文件中。

Dalvik 虚拟机的 dvmResolveClass 方法_第2张图片

这里假设加载的类非系统类,loader不为NULL,则继续调用findClassFromLoaderNoInit方法进行加载。

该方法的实现也在“/dalvik/vm/oo/Class.cpp”文件中。

这里只贴出关键代码,它实际是调用参数loader的loadClass方法来加载类的。

Dalvik 虚拟机的 dvmResolveClass 方法_第3张图片

关于ClassLoader的loadClass方法可以参考:http://www.jianshu.com/p/c83435189428。

了解这些类加载相关的知识对dex脱壳颇有帮助,比如DexHunter为什么是在defineClassNative方法中完成脱壳工作?

你可能感兴趣的:(Dalvik 虚拟机的 dvmResolveClass 方法)