C函数调用其实和正常的没啥区别,着重看他调用原函数
(这里我就直接定位0xCE3CE448)
接着进去R2看他做了什么事情
(简单来说就是修改了进入之前已经压栈的LR,这样老函数退出的时候才能返回新函数调用老函数的下一条指令)
这里涉及到的静态值是inlinehook onhook时候做的事情,这个debug区域都是动态生成的,这里这涉及已经形成的代码逻辑分析,怎么算的还请看源码
jstring new_Func1(JNIEnv
*
env, jobject
*
jobject) {
LOGD(
"Called new_Func1"
);
jstring ret
=
(jstring) old_fuc_1(env, jobject);
const char
*
str_stc
=
env
-
>GetStringUTFChars(ret, NULL);
LOGD(
"修改前的ret = %s"
, str_stc);
jclass jMainAct
=
env
-
>FindClass(
"com/lzy/inlinehook/MainActivity"
);
jmethodID jm_makeText
=
env
-
>GetStaticMethodID(jMainAct,
"show"
,
"()V"
);
env
-
>CallStaticVoidMethod(jMainAct,jm_makeText,NULL);
return
env
-
>NewStringUTF(
"Hook this return value"
);
}
jstring new_Func1(JNIEnv
*
env, jobject
*
jobject) {
LOGD(
"Called new_Func1"
);
jstring ret
=
(jstring) old_fuc_1(env, jobject);
const char
*
str_stc
=
env
-
>GetStringUTFChars(ret, NULL);
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2020-10-8 10:17
被唱过阡陌编辑
,原因: