jvmti:jni getobjectclass,有时getintfieldcrashes崩溃

时间:2017-03-21 16:08:54

标签: crash sigsegv jvmti jnienv

我正在为java程序编写一个jvmti代理。我正在尝试读取堆栈上的对象。使用在VMinit / vmstart事件上收到的jnienv指针。 我成功地使用foll在methodexit事件上读取对象: 从getlocalvariableentry()得到变量(槽); 从变量签名使用jni函数获取对象,使用getlocalobject函数作为对象的引用对象/子类。然后如果它是对象的子类; JNI :: getobjectclass();使用返回的类并获取类中的字段; 使用getclassfields();然后从getfieldname()获取字段签名;然后根据其签名为字段调用适当的函数,例如int字段的getintfield()。 我曾经尝试过在函数中的try块内创建的对象,该函数会引发methodexit事件;我每次都在Getobjectclass()时遇到崩溃(SIGSEGV)。这是因为对象已被破坏超出范围;如果是这样,如何在函数出口处读取函数的try块中的变量值。 在读取Integer的jobject(来自localvariabletableentry)对象时获取崩溃,我调用getintfield()作为其第一个成员的int字段成员MIN_VALUE。如果我只是尝试读取成员"值"然后调用getintfield()的Integer类不会崩溃。 这是崩溃,因为我试图读取类的静态最终成员,即。成员MIN_VALUE整数类。 如何解决这个问题并避免崩溃?

0 个答案:

没有答案