-
-
[旧帖] [求助]Dex内存加载直接调用defineClassNative的问题 0.00雪花
-
发表于: 2015-10-30 10:58 2338
-
在DEX动态夹在过程中,/libcore/dalvik/src/main/java/dalvik/system/DexFile.java中方法native Class defineClassNative(String name, ClassLoader loader, int cookie)实现对dex的加载
其对应C层dalvik_system_DexFile.cpp中的void Dalvik_dalvik_system_DexFile_defineClass函数:
static void Dalvik_dalvik_system_DexFile_defineClass(const u4* args,
JValue* pResult)
{
StringObject* nameObj = (StringObject*) args[0];
Object* loader = (Object*) args[1];
int cookie = args[2];
……
}
现在我想绕过java层,直接调用层的这个函数。三个参数String name, ClassLoader loader, int cookie传递到jni中之后得到jstring classname, jobject cl, jint cookie,构造参数如下:
struct StringObject *nameObj;
nameObj= (struct StringObject *) strclassname;
struct Object *loaderObj;
loaderObj= (struct Object *) cl;
u4 args[ ] = {strclassname,loaderObj,cookie};
现在不清楚的是数据结构StringObject和Object该如何构造,Android源码/dalvik/vn/oo/Object.h中有这两个结构的定义,但是依赖关系比较复杂,直接拷贝过来不行。希望各位能指点指点
其对应C层dalvik_system_DexFile.cpp中的void Dalvik_dalvik_system_DexFile_defineClass函数:
static void Dalvik_dalvik_system_DexFile_defineClass(const u4* args,
JValue* pResult)
{
StringObject* nameObj = (StringObject*) args[0];
Object* loader = (Object*) args[1];
int cookie = args[2];
……
}
现在我想绕过java层,直接调用层的这个函数。三个参数String name, ClassLoader loader, int cookie传递到jni中之后得到jstring classname, jobject cl, jint cookie,构造参数如下:
struct StringObject *nameObj;
nameObj= (struct StringObject *) strclassname;
struct Object *loaderObj;
loaderObj= (struct Object *) cl;
u4 args[ ] = {strclassname,loaderObj,cookie};
现在不清楚的是数据结构StringObject和Object该如何构造,Android源码/dalvik/vn/oo/Object.h中有这两个结构的定义,但是依赖关系比较复杂,直接拷贝过来不行。希望各位能指点指点
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
看原图
赞赏
雪币:
留言: