Android 反射加载类

xiaoxiao2025-08-06  25

最近分析一个东西,看了看它的加载机制,这里直接把伪代码贴出来
[SP,#0x38+var_24] 0x18 FindClass 0x1C4 GetStaticMethodID 0x1C8 CallStaticObjectMethod 0x84 GetMethodID 0x88 CallObjectMethod 0x29C NewStringUTF 0x70 NewObject //Find context class jclass activityThread = (*env)->FindClass(env,"android/app/ActivityThread"); jmethodID currentActivityThread = (*env)->GetStaticMethodID(env,activityThread, "currentActivityThread", "()Landroid/app/ActivityThread;"); jobject at = (*env)->CallStaticObjectMethod(env,activityThread, currentActivityThread); jmethodID getApplication = (*env)->GetMethodID(env,activityThread, "getApplication", "()Landroid/app/Application;"); jobject context = (*env)->CallObjectMethod(env,at, getApplication); |||| [SP,#0x38+var_28] Context Get! jclass classLoader_p = (*env)->FindClass(env,"java/lang/ClassLoader"); jmethodID systemClassLoader_p = (*env)->GetStaticMethodID(env,classLoader_p,"getSystemClassLoader","()Ljava/lang/ClassLoader"); jobject at_p = (*env)->CallStaticObjectMethod(env,classLoader_p,systemClassLoader_p); ||| R11 classLoager Get! R9 jstring jL= (*env)->NewStringUTF(env,"*****"); R8 jstring pD= (*env)->NewStringUTF(env,"******"); //init DexClassLoader R6 jclass dexClassLoader = (*env)->FindClass(env,"dalvik/system/DexClassLoader"); R5 jmethodID dexClassLoader_id = (*env)->GetMethodID(env,dexClassLoader,"<init>","(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/ClassLoader;)V"); R11 jobject = (*env)->NewObject(env,dexClassLoader,dexClassLoader_id); R4 jmethodID findclass_id= (*env)->GetMethodID(env,dexClassLoader,"findClass","(Ljava/lang/String;)Ljava/lang/Class;"); R4 jmethodID loadClass_id = (*env)->GetMethodID(env,dexClassLoader,"loadClass","(Ljava/lang/String;)Ljava/lang/Class;"); jstring startClass = (*env)->NewStringUTF(env,"******"); jstring startfunc = (*env)->NewStringUTF(env,"******") //find start func R5 jobject startClass = (*env)->CallObjectMethod(env,R4,startClass) jmethodID startClassInit_id = (*env)->GetMethodID(env,start,"<init>","()V") //start main R4 jobject kS = (*env)->NewObject(env,main,startClass); jmethodID main_id = (*env)->GetMethodID(env,startClass,"main","(Landroid/content/Context;)V"); //invoke (*env)->CallVoidMethod(env,*****,startClass,context)
转载请注明原文地址: https://www.6miu.com/read-5034385.html

最新回复(0)