gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:52:31 27 4
gpt4 key购买 nike

虽然也有类似的问题(例如 ABC ),但他们的答案并不能解决我的问题。

我使用的是针对 Android API 18 的 Android Studio 1.5.1(Android KitKat 4.4 之前的版本,因此我处理的是 Dalvik,而不是 ART 运行时)。

我的问题是:

(1) 当我使用以下代码时,我可以打印所有sun.misc.Unsafe methods available in Android的列表,所以我认为我可以使用 reflection 访问它们,但我不知道如何使用 reflection 调用它们。

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

(3) 如果 (1) 可行但 (2) 不可行,如何将整数(例如 int test=123)放入任何 native 内存地址并使用 sun.misc.Unsafe 方法打印其内存地址在Android中通过反射?

        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/unsafe

关于java - 在Android中,如何使用Java反射调用sun.misc.Unsafe方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56769628/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com