diff options
| -rw-r--r-- | tools/veridex/veridex.cc | 59 |
1 files changed, 30 insertions, 29 deletions
diff --git a/tools/veridex/veridex.cc b/tools/veridex/veridex.cc index bababce824..0253611795 100644 --- a/tools/veridex/veridex.cc +++ b/tools/veridex/veridex.cc @@ -192,35 +192,36 @@ class Veridex { std::vector<std::unique_ptr<VeridexResolver>> boot_resolvers; Resolve(boot_dex_files, resolver_map, type_map, &boot_resolvers); - // Now that boot classpath has been resolved, fill classes and reflection - // methods. - VeriClass::object_ = type_map["Ljava/lang/Object;"]; - VeriClass::class_ = type_map["Ljava/lang/Class;"]; - VeriClass::class_loader_ = type_map["Ljava/lang/ClassLoader;"]; - VeriClass::string_ = type_map["Ljava/lang/String;"]; - VeriClass::throwable_ = type_map["Ljava/lang/Throwable;"]; - VeriClass::forName_ = boot_resolvers[0]->LookupDeclaredMethodIn( - *VeriClass::class_, "forName", "(Ljava/lang/String;)Ljava/lang/Class;"); - VeriClass::getField_ = boot_resolvers[0]->LookupDeclaredMethodIn( - *VeriClass::class_, "getField", "(Ljava/lang/String;)Ljava/lang/reflect/Field;"); - VeriClass::getDeclaredField_ = boot_resolvers[0]->LookupDeclaredMethodIn( - *VeriClass::class_, "getDeclaredField", "(Ljava/lang/String;)Ljava/lang/reflect/Field;"); - VeriClass::getMethod_ = boot_resolvers[0]->LookupDeclaredMethodIn( - *VeriClass::class_, - "getMethod", - "(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;"); - VeriClass::getDeclaredMethod_ = boot_resolvers[0]->LookupDeclaredMethodIn( - *VeriClass::class_, - "getDeclaredMethod", - "(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;"); - VeriClass::getClass_ = boot_resolvers[0]->LookupDeclaredMethodIn( - *VeriClass::object_, "getClass", "()Ljava/lang/Class;"); - VeriClass::loadClass_ = boot_resolvers[0]->LookupDeclaredMethodIn( - *VeriClass::class_loader_, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;"); - - VeriClass* version = type_map["Landroid/os/Build$VERSION;"]; - if (version != nullptr) { - VeriClass::sdkInt_ = boot_resolvers[0]->LookupFieldIn(*version, "SDK_INT", "I"); + if (options.precise) { + // For precise mode we expect core-stubs to contain java.lang classes. + VeriClass::object_ = type_map["Ljava/lang/Object;"]; + VeriClass::class_ = type_map["Ljava/lang/Class;"]; + VeriClass::class_loader_ = type_map["Ljava/lang/ClassLoader;"]; + VeriClass::string_ = type_map["Ljava/lang/String;"]; + VeriClass::throwable_ = type_map["Ljava/lang/Throwable;"]; + VeriClass::forName_ = boot_resolvers[0]->LookupDeclaredMethodIn( + *VeriClass::class_, "forName", "(Ljava/lang/String;)Ljava/lang/Class;"); + VeriClass::getField_ = boot_resolvers[0]->LookupDeclaredMethodIn( + *VeriClass::class_, "getField", "(Ljava/lang/String;)Ljava/lang/reflect/Field;"); + VeriClass::getDeclaredField_ = boot_resolvers[0]->LookupDeclaredMethodIn( + *VeriClass::class_, "getDeclaredField", "(Ljava/lang/String;)Ljava/lang/reflect/Field;"); + VeriClass::getMethod_ = boot_resolvers[0]->LookupDeclaredMethodIn( + *VeriClass::class_, + "getMethod", + "(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;"); + VeriClass::getDeclaredMethod_ = boot_resolvers[0]->LookupDeclaredMethodIn( + *VeriClass::class_, + "getDeclaredMethod", + "(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;"); + VeriClass::getClass_ = boot_resolvers[0]->LookupDeclaredMethodIn( + *VeriClass::object_, "getClass", "()Ljava/lang/Class;"); + VeriClass::loadClass_ = boot_resolvers[0]->LookupDeclaredMethodIn( + *VeriClass::class_loader_, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;"); + + VeriClass* version = type_map["Landroid/os/Build$VERSION;"]; + if (version != nullptr) { + VeriClass::sdkInt_ = boot_resolvers[0]->LookupFieldIn(*version, "SDK_INT", "I"); + } } std::vector<std::unique_ptr<VeridexResolver>> app_resolvers; |