Перехват нативного статического метода JNI

В моем проекте я хочу использовать JNI-агент для перехвата результатов методов java-static-native.

Мой базовый подход заключается в том, чтобы связать все статические методы с моим методом-перехватчиком. Метод перехватчика принимает переменное число аргументов и при вызове перенаправляет их в соответствующую статическую функцию.

Это подходящий подход? Прямо сейчас в моей реализации я изо всех сил пытаюсь передать переменные аргументы от функции-перехватчика фактической функции …

(прямой вызов функции c ++)

У кого-нибудь есть идея лучшего подхода к этому? Или я делаю что-то слишком сложным образом?

0

Решение

va_arg не собирается давать вам информацию о типе параметров. В лучшем случае вы получите количество параметров, и если все ваши функции имеют различное количество параметров (за исключением JNIEnv* а также jclass) тогда вы сможете заставить его работать.

Если вы перехватываете определенные методы, вы можете создать таблицу методов перехвата. Просто используйте JavaH для генерации заглушек, используйте переименования, если хотите, и затем создайте свою таблицу JNINativeMethod.

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]