Почему обратный вызов JVMTi ClassPrepared срабатывает не на всех классах?
Например, я вызываю java.lang.System.load()
, но обратный вызов не запускается с классом java.lang.System
.
И как написано в документах:
Событие подготовки класса генерируется, когда подготовка класса завершена.... События подготовки класса не генерируются для примитивных классов (например, java.lang.Integer.TYPE).
Но System
класс не является примитивным классом.
Вот мой Agent_OnLoad
метод:
JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *vm, char *options, void *reserved) {
jvmtiEnv *jvmti;
if (vm->GetEnv((void **)&jvmti, JVMTI_VERSION_1_2) != JNI_OK)
ExitProcess(2);
jvmtiEventCallbacks callbacks = {0};
callbacks.ClassPrepare = ClassPrepare;
jvmti->SetEventCallbacks(&callbacks, sizeof(callbacks));
jvmti->SetEventNotificationMode(JVMTI_ENABLE, JVMTI_EVENT_CLASS_PREPARE, NULL);
return JNI_OK;
}