diff --git a/edxp-core/src/main/cpp/main/include/art/runtime/gc/heap.h b/edxp-core/src/main/cpp/main/include/art/runtime/gc/heap.h index 1cba0282..dfb65e69 100644 --- a/edxp-core/src/main/cpp/main/include/art/runtime/gc/heap.h +++ b/edxp-core/src/main/cpp/main/include/art/runtime/gc/heap.h @@ -33,45 +33,45 @@ namespace art { // @ApiSensitive(Level.MIDDLE) static void Setup(void *handle, HookFunType hook_func) { int api_level = edxp::GetAndroidApiLevel(); - size_t OFFSET_classlinker; // Get offset from art::Runtime::RunRootClinits() call in IDA + size_t OFFSET_heap; // Get offset from art::Runtime::RunRootClinits() call in IDA switch (api_level) { case __ANDROID_API_O__: [[fallthrough]]; case __ANDROID_API_O_MR1__: if constexpr(edxp::is64) { - OFFSET_classlinker = 464; + OFFSET_heap = 0x180; } else { - OFFSET_classlinker = 284; + OFFSET_heap = 0xF4; } break; case __ANDROID_API_P__: if constexpr(edxp::is64) { - OFFSET_classlinker = 528; + OFFSET_heap = 0x1C0; } else { - OFFSET_classlinker = 336; + OFFSET_heap = 0x128; } break; case __ANDROID_API_Q__: if constexpr(edxp::is64) { - OFFSET_classlinker = 480; + OFFSET_heap = 0x190; } else { - OFFSET_classlinker = 280; + OFFSET_heap = 0xF0; } break; default: - LOGE("No valid offset for art::Runtime::class_linker_ found. Using Android R."); + LOGE("No valid offset for art::Runtime::heap_ found. Using Android R."); [[fallthrough]]; case __ANDROID_API_R__: if constexpr(edxp::is64) { - OFFSET_classlinker = 392; + OFFSET_heap = 392; } else { - OFFSET_classlinker = 236; + OFFSET_heap = 236; } break; } void *thiz = *reinterpret_cast( - reinterpret_cast(Runtime::Current()->Get()) + OFFSET_classlinker); - LOGD("HEAP object: %p", thiz); + reinterpret_cast(Runtime::Current()->Get()) + OFFSET_heap); + LOGD("art::runtime::Heap object: %p", thiz); instance_ = new Heap(thiz); RETRIEVE_FUNC_SYMBOL(WaitForGcToComplete, "_ZN3art2gc4Heap19WaitForGcToCompleteENS0_7GcCauseEPNS_6ThreadE");