Как связаться с агентом jvmti, подключенным к работающей JVM
Я хотел знать, как мне связаться с агентом jvmti, который я подключил на работающей JVM с помощью API присоединения. Когда я говорю сообщать, вот что я имел в виду: я хочу вызвать нативные функции, расположенные на моем агенте jvmti, эта функция вернет мне данные (например, значения полей) работающей JVM, которые я «заразил» ранее агентом.
Вот агент; Я еще не добавил нативные функции:
#include <jvmti.h>
JNIEXPORT jint JNICALL Agent_OnAttach(JavaVM* vm, char* options, void* reserved);
jvmtiEnv* create_jvmti_env(JavaVM* vm);
JNIEnv* create_jni_env(JavaVM* vm);
void init_jvmti_capabilities(jvmtiEnv* env);
JNIEXPORT jint JNICALL Agent_OnAttach(JavaVM* vm, char* options, void* reserved) {
jvmtiEnv* jvmti = create_jvmti_env(vm);
init_jvmti_capabilities(jvmti);
JNIEnv* jni = create_jni_env(vm);
return JNI_OK;
}
jvmtiEnv* create_jvmti_env(JavaVM* vm) {
jvmtiEnv* env;
vm->GetEnv((void **) &env, JVMTI_VERSION_1_2);
return env;
}
JNIEnv* create_jni_env(JavaVM* vm) {
JNIEnv* env;
vm->GetEnv( (void **) &env, JNI_VERSION_1_8);
return env;
}
void init_jvmti_capabilities(jvmtiEnv* env) {
jvmtiCapabilities capabilities;
env->GetPotentialCapabilities( &capabilities);
env->AddCapabilities( &capabilities);
}