最近分析一个东西,看了看它的加载机制,这里直接把伪代码贴出来
[SP
,#
0x38+var_24
]
0x18 FindClass
0x1C4 GetStaticMethodID
0x1C8 CallStaticObjectMethod
0x84 GetMethodID
0x88 CallObjectMethod
0x29C NewStringUTF
0x70 NewObject
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
,"******");
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
,"******")
R5 jobject startClass
= (*env
)->CallObjectMethod(env
,R4
,startClass
)
jmethodID startClassInit_id
= (*env
)->GetMethodID(env
,start
,"<init>","()V")
R4 jobject kS
= (*env
)->NewObject(env
,main
,startClass
);
jmethodID main_id
= (*env
)->GetMethodID(env
,startClass
,"main","(Landroid/content/Context;)V");
(*env
)->CallVoidMethod(env
,*****,startClass
,context
)