繁体   English   中英

在Android中,如何使用Java反射调用sun.misc.Unsafe方法?

[英]In Android, how to invoke sun.misc.Unsafe methods using Java reflection?

尽管存在类似的问题(例如ABC ),但它们的答案并不能解决我的问题。

我正在使用针对Android API 18的Android Studio 1.5.1(在Android KitKat 4.4之前,所以我在处理Dalvik,而不是ART运行时)。

我的问题是:

(1)当我使用以下代码时,我可以打印Android中所有可用的sun.misc.Unsafe方法的列表,因此我认为我可以使用反射来访问它们,但是我不知道如何使用反射来调用它们。

(2)如果可能(1),如何通过反射在Android中使用sun.misc.Unsafe方法找到magicNumber地址(在下面的代码中)?

(3)如果(1)可行但(2)不可能,如何在Android的本地内存地址中使用整数(例如int test = 123)并使用sun.misc.Unsafe方法通过以下方式打印其内存地址:反射?

        String ClassName = "sun.misc.Unsafe";
        int magicNumber = 0x23420023 ;
    try {
        Class classToInvestigate = Class.forName(ClassName);
        Constructor[] aClassConstructors = classToInvestigate.getDeclaredConstructors();
        for(Constructor c : aClassConstructors){
            System.out.println("********************* constructor="+c);
        }

        Method[] aClassMethods = classToInvestigate.getDeclaredMethods();
        for(Method m : aClassMethods){
            System.out.println("********************* method="+m);

        }
        Field theUnsafe = classToInvestigate.getDeclaredField("THE_ONE");
        theUnsafe.setAccessible(true);
        Object unsafe = theUnsafe.get(null);

    } catch (ClassNotFoundException e) {
        // Class not found!
    }
    catch (Exception e) {
        // Unknown exception
    }

不幸的是, sun.misc.Unsafe类未包含在android标准库中,您应该在反射之间使用它,但是我发现了另一个解决方案:在我的库中的预编译直接代理类之间使用它: https : //github.com/iamironz/不安全的

该类将为您返回几乎所有现有JVM实现(包括Android(两个VM版本))上的Unsafe实例: https : //github.com/noctarius/tengi/blob/master/java/tengi-core/src/main/java/ com / noctarius / tengi / core / impl / UnsafeUtil.java

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM