static System() { var setup = JNetHost.Run(runtime => { var clz_System = runtime.FindClass("java/lang/System"); var fid_out = runtime.GetStaticFieldID(clz_System, "out", "Ljava/io/PrintStream;"); var mid_getProperty = runtime.GetStaticMethodID(clz_System, "getProperty", "(Ljava/lang/String;)Ljava/lang/String;"); clz_System = (jclass)runtime.NewGlobalRef(clz_System); return(clz_System, fid_out, mid_getProperty); }); clz_System = setup.clz_System; fid_out = setup.fid_out; mid_getProperty = setup.mid_getProperty; }
private void HandleFieldModification(jvmtiEnvHandle env, JNIEnvHandle jniEnv, jthread threadHandle, jmethodID methodId, jlocation jlocation, jclass fieldClassHandle, jobject objectHandle, jfieldID fieldId, byte signatureType, jvalue newValue) { if (!VirtualMachine.IsAgentThread.Value) { // ignore events before VMInit if (AgentEventDispatcher == null) return; // dispatch this call to an agent thread Action<jvmtiEnvHandle, JNIEnvHandle, jthread, jmethodID, jlocation, jclass, jobject, jfieldID, byte, jvalue> method = HandleFieldModification; AgentEventDispatcher.Invoke(method, env, jniEnv, threadHandle, methodId, jlocation, fieldClassHandle, objectHandle, fieldId, signatureType, newValue); return; } //JvmEnvironment environment = JvmEnvironment.GetEnvironment(env); //JvmThreadReference thread = JvmThreadReference.FromHandle(environment, jniEnv, threadHandle, true); //JvmLocation location = new JvmLocation(environment, method, jlocation); //JvmClassReference fieldClass = JvmClassReference.FromHandle(environment, jniEnv, fieldClassHandle, true); //JvmObjectReference @object = JvmObjectReference.FromHandle(environment, jniEnv, objectHandle, true); //JvmField field = new JvmField(environment, fieldId); //foreach (var processor in _processors) //{ // processor.HandleFieldModification(environment, thread, location, fieldClass, @object, field, signatureType, newValue); //} }
internal JvmFieldRemoteHandle(JvmClassRemoteHandle @class, jfieldID field) { Class = @class; Handle = field.Handle.ToInt64(); }
internal JvmField(JvmEnvironment environment, jfieldID fieldId) { _environment = environment; _fieldId = fieldId; }
internal jobject GetObjectField(jobject objectHandle, jfieldID fieldId) { var result = RawInterface.GetObjectField(this, objectHandle, fieldId); HandleException(); return result; }
internal JvmFieldRemoteHandle(JvmClassRemoteHandle @class, jfieldID field) { Class = @class; Handle = field.Handle.ToInt64(); }
internal bool GetBooleanField(jobject objectHandle, jfieldID fieldId) { var result = RawInterface.GetBooleanField(this, objectHandle, fieldId) != 0; HandleException(); return result; }
internal jobject GetStaticObjectField(jclass classHandle, jfieldID fieldId) { var result = RawInterface.GetStaticObjectField(this, classHandle, fieldId); HandleException(); return result; }
internal double GetStaticDoubleField(jclass classHandle, jfieldID fieldId) { var result = RawInterface.GetStaticDoubleField(this, classHandle, fieldId); HandleException(); return result; }
internal bool GetStaticBooleanField(jclass classHandle, jfieldID fieldId) { bool result = RawInterface.GetStaticBooleanField(this, classHandle, fieldId) != 0; HandleException(); return result; }
private void HandleFieldModification(jvmtiEnvHandle env, JNIEnvHandle jniEnv, jthread threadHandle, jmethodID method, jlocation jlocation, jclass fieldClassHandle, jobject @objectHandle, jfieldID fieldId, byte signatureType, jvalue newValue) { JvmEnvironment environment = JvmEnvironment.GetEnvironment(env); JvmThreadReference thread = JvmThreadReference.FromHandle(environment, jniEnv, threadHandle, true); JvmLocation location = new JvmLocation(environment, method, jlocation); JvmClassReference fieldClass = JvmClassReference.FromHandle(environment, jniEnv, fieldClassHandle, true); JvmObjectReference @object = JvmObjectReference.FromHandle(environment, jniEnv, objectHandle, true); JvmField field = new JvmField(environment, fieldId); foreach (var processor in _processors) { processor.HandleFieldModification(environment, thread, location, fieldClass, @object, field, signatureType, newValue); } }