首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JNI本机静态方法拦截

JNI本机静态方法拦截
EN

Stack Overflow用户
提问于 2017-05-15 21:14:02
回答 1查看 416关注 0票数 0

在我的项目中,我想使用JNI-agent来拦截java-static-native方法的结果。

我的基本方法是在绑定时将所有静态方法重新绑定到我的拦截器方法。拦截器方法将接受不同数量的参数,并在被调用时将它们转发给相应的静态函数。

这是一种合适的方法吗?现在,在我的实现中,我很难将截取函数中的变量参数转发给实际的函数……

(c++ forward function call)

有没有人有更好的方法呢?或者我正在以一种过于复杂的方式做一些事情?

EN

回答 1

Stack Overflow用户

发布于 2017-05-15 22:33:30

va_arg不会给你提供参数的类型信息。在最好的情况下,您将获得参数计数,并且如果您的所有函数都有不同的参数计数(除了JNIEnv*jclass之外),那么您将能够让它工作。

如果您正在截取特定的方法,那么您可以构建一个截取方法的表。只需使用JavaH生成存根,如果愿意可以使用重命名,然后构建您的JNINativeMethod表。

代码语言:javascript
复制
static JNINativeMethod JVM_Methods[] =
{
   // grab function names and signatures from JavaH stubs
   {"OnDeepLink",    "(Ljava/lang/String;)V",    (void*)& JNI_OnDeepLink},
   ...
};
int JVM_Methods_Count = N;

// register your overrides
jint nRes = g_env->RegisterNatives(activity, JVM_Methods, JVM_Methods_Count);

此外,我有一个小技巧,在注册C函数后,我将回调到活动/类中,并设置一个布尔值,表明它们是链接的。我是动态链接的,所以我需要在执行调用之前检查是否设置了它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43980545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档