MCPcopy Create free account
hub / github.com/Bzi-Han/AndroidSurfaceImgui / Resolve

Method Resolve

modules/ANativeWindowCreator.h:1238–1302  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1236 };
1237
1238 static void Resolve(const ResolverImpl &resolver = {})
1239 {
1240 static bool resolved = false;
1241
1242 if (resolved)
1243 return;
1244
1245 std::string systemVersionString(128, 0);
1246 systemVersionString.resize(__system_property_get("ro.build.version.release", systemVersionString.data()));
1247 if (!systemVersionString.empty())
1248 compat::SystemVersion = std::stoi(systemVersionString);
1249
1250 if (compat::SupportedMinVersion > compat::SystemVersion)
1251 {
1252 LogError("[!] Unsupported system version: %zu", compat::SystemVersion);
1253 return;
1254 }
1255
1256 LogInfo("[*] Starting to resolve symbols for Android %zu", compat::SystemVersion);
1257
1258#ifdef __LP64__
1259 auto libgui = resolver.Open("/system/lib64/libgui.so", RTLD_LAZY);
1260 auto libutils = resolver.Open("/system/lib64/libutils.so", RTLD_LAZY);
1261#else
1262 auto libgui = resolver.Open("/system/lib/libgui.so", RTLD_LAZY);
1263 auto libutils = resolver.Open("/system/lib/libutils.so", RTLD_LAZY);
1264#endif
1265 if (nullptr == libgui || nullptr == libutils)
1266 {
1267 LogError("[!] Failed to open libgui.so or libutils.so");
1268 throw std::runtime_error("Failed to open libgui.so or libutils.so");
1269 }
1270
1271 const auto &[libutilsApis, libguiApis] = ApiTableDescriptor::GetDefaultDescriptors();
1272 for (const auto &descriptor : libutilsApis)
1273 {
1274 if (!descriptor.IsSupported(compat::SystemVersion))
1275 continue;
1276
1277 *descriptor.storeToTarget = resolver.Resolve(libutils, descriptor.apiSignature);
1278 if (nullptr == *descriptor.storeToTarget)
1279 {
1280 LogError("[!] Version[Android %zu] [libutils] failed to resolve symbol: %s", compat::SystemVersion, descriptor.apiSignature);
1281 throw std::runtime_error("Failed to resolve symbol");
1282 }
1283 }
1284
1285 for (const auto &descriptor : libguiApis)
1286 {
1287 if (!descriptor.IsSupported(compat::SystemVersion))
1288 continue;
1289
1290 *descriptor.storeToTarget = resolver.Resolve(libgui, descriptor.apiSignature);
1291 if (nullptr == *descriptor.storeToTarget)
1292 {
1293 LogError("[!] Version[Android %zu] [libgui] failed to resolve symbol: %s", compat::SystemVersion, descriptor.apiSignature);
1294 throw std::runtime_error("Failed to resolve symbol");
1295 }

Callers

nothing calls this directly

Calls 1

IsSupportedMethod · 0.80

Tested by

no test coverage detected