2016-11-9 17:34
jmethodID mtd_mark = env->GetStaticMethodID(javaClass, "nativeMark", "()V");
if (!mtd_mark)
return -1;
size_t startAddress = (size_t) mtd_mark;
size_t targetAddress = (size_t) mark;
void* art_work_around_app_jni_bugs = ptr_art_work_around_app_jni_bugs();
// if (art_work_around_app_jni_bugs) {
// targetAddress = (size_t)art_work_around_app_jni_bugs;
// }
int offset = 0;
bool found = false;
size_t addr = 0;
while (true) {
addr = startAddress + offset;
if (addr == targetAddress) {
found = true;
break;
}
offset += 4;
if (offset >= 100) {
LOGW("Ops: Unable to find the jni function.");
break;
}
}
env->UnregisterNatives(javaClass);
env->DeleteLocalRef(javaClass);
if (found) {
if (!isArt) {
offset += (sizeof(int) + sizeof(void *));
}
LOGW("Hoho, Get the offset : %d.", offset);
return offset;
}
楼主,这个地方去获取本地函数和java函数的偏移一直报错,为什么不直接HookopenDexFile这个函数