Example #1
0
        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();
 }
Example #4
0
 internal JvmField(JvmEnvironment environment, jfieldID fieldId)
 {
     _environment = environment;
     _fieldId     = fieldId;
 }
Example #5
0
 internal jobject GetObjectField(jobject objectHandle, jfieldID fieldId)
 {
     var result = RawInterface.GetObjectField(this, objectHandle, fieldId);
     HandleException();
     return result;
 }
Example #6
0
 internal JvmFieldRemoteHandle(JvmClassRemoteHandle @class, jfieldID field)
 {
     Class  = @class;
     Handle = field.Handle.ToInt64();
 }
Example #7
0
 internal bool GetBooleanField(jobject objectHandle, jfieldID fieldId)
 {
     var result = RawInterface.GetBooleanField(this, objectHandle, fieldId) != 0;
     HandleException();
     return result;
 }
Example #8
0
 internal jobject GetStaticObjectField(jclass classHandle, jfieldID fieldId)
 {
     var result = RawInterface.GetStaticObjectField(this, classHandle, fieldId);
     HandleException();
     return result;
 }
Example #9
0
 internal double GetStaticDoubleField(jclass classHandle, jfieldID fieldId)
 {
     var result = RawInterface.GetStaticDoubleField(this, classHandle, fieldId);
     HandleException();
     return result;
 }
Example #10
0
 internal bool GetStaticBooleanField(jclass classHandle, jfieldID fieldId)
 {
     bool result = RawInterface.GetStaticBooleanField(this, classHandle, fieldId) != 0;
     HandleException();
     return result;
 }
Example #11
0
        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);
            }
        }