diff --git a/edxp-core/src/main/cpp/main/include/art/runtime/art_method.h b/edxp-core/src/main/cpp/main/include/art/runtime/art_method.h index 3c3da32e..57d0342a 100644 --- a/edxp-core/src/main/cpp/main/include/art/runtime/art_method.h +++ b/edxp-core/src/main/cpp/main/include/art/runtime/art_method.h @@ -10,10 +10,6 @@ namespace art { namespace art_method { - - inline static size_t oat_header_length; - inline static int32_t oat_header_code_length_offset; - CREATE_MEM_FUNC_SYMBOL_ENTRY(std::string, PrettyMethod, void *thiz, bool with_signature) { if (UNLIKELY(thiz == nullptr)) return "null"; @@ -26,67 +22,8 @@ namespace art { return PrettyMethod(thiz, true); } -// CREATE_MEM_HOOK_STUB_ENTRIES( -// LP_SELECT("_ZN3art9ArtMethod23GetOatQuickMethodHeaderEj", "_ZN3art9ArtMethod23GetOatQuickMethodHeaderEm"), -// void *, GetOatQuickMethodHeader, -// (void * thiz, uintptr_t pc), { -// // This is a partial copy from AOSP. We only touch them if they are hooked. -// if (UNLIKELY(edxp::isHooked(thiz))) { -// uintptr_t original_ep = -// reinterpret_cast(getOriginalEntryPointFromTargetMethod( -// thiz)) & ~0x1; -// if (original_ep) { -// char *code_length_loc = -// reinterpret_cast(original_ep) + -// oat_header_code_length_offset; -// uint32_t code_length = -// *reinterpret_cast(code_length_loc) & -// ~0x80000000u; -// LOGD("art_method::GetOatQuickMethodHeader: ArtMethod=%p (%s), isHooked=true, original_ep=0x%zux, code_length=0x%x, pc=0x%zux", -// thiz, PrettyMethod(thiz).c_str(), -// original_ep, code_length, pc); -// if (original_ep <= pc && -// pc <= original_ep + code_length) -// return reinterpret_cast( -// original_ep - -// oat_header_length); -// // If PC is not in range, we mark it as not found. -// LOGD("art_method::GetOatQuickMethodHeader: PC not found in current method."); -// return nullptr; -// } else { -// LOGD("art_method::GetOatQuickMethodHeader: ArtMethod=%p (%s) isHooked but not backup, fallback to system", -// thiz, PrettyMethod(thiz).c_str()); -// } -// } -// return backup(thiz, pc); -// }); - static void Setup(void *handle, HookFunType hook_func) { LOGD("art_method hook setup, handle=%p", handle); - int api_level = edxp::GetAndroidApiLevel(); - switch (api_level) { - case __ANDROID_API_O__: - [[fallthrough]]; - case __ANDROID_API_O_MR1__: - [[fallthrough]]; - case __ANDROID_API_P__: - oat_header_length = 24; - oat_header_code_length_offset = -4; - break; - default: - LOGW("No valid offset in SDK %d for oat_header_length, using offset from Android R", - api_level); - [[fallthrough]]; - case __ANDROID_API_Q__: - [[fallthrough]]; - case __ANDROID_API_R__: - oat_header_length = 8; - oat_header_code_length_offset = -4; - break; - } -// edxp::HookSyms(handle, hook_func, GetOatQuickMethodHeader); - - RETRIEVE_MEM_FUNC_SYMBOL(PrettyMethod, "_ZN3art9ArtMethod12PrettyMethodEb"); } } diff --git a/edxp-core/src/main/cpp/main/include/art/runtime/jit/jit_code_cache.h b/edxp-core/src/main/cpp/main/include/art/runtime/jit/jit_code_cache.h deleted file mode 100644 index 2421798b..00000000 --- a/edxp-core/src/main/cpp/main/include/art/runtime/jit/jit_code_cache.h +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once - -#include "base/object.h" -#include "art/runtime/art_method.h" - -namespace art { - - namespace jit { - -// CREATE_MEM_HOOK_STUB_ENTRIES("_ZN3art3jit12JitCodeCache37GetSavedEntryPointOfPreCompiledMethodEPNS_9ArtMethodE", -// const void*, GetSavedEntryPointOfPreCompiledMethod, (void *thiz, -// void *art_method), { -// if (UNLIKELY(edxp::isHooked(art_method))) { -// LOGD("Found hooked method %p (%s), return entrypoint as jit entrypoint", art_method, -// art::art_method::PrettyMethod(art_method).c_str()); -// return getEntryPoint(art_method); -// } -// return backup(thiz, art_method); -// }); -// - static void HookJitCacheCode(void *handle, HookFunType hook_func) { - const int api_level = edxp::GetAndroidApiLevel(); - // For android R, the invisibly initialization makes static methods initializes multiple - // times in non-x86 devices. So we need to hook this function to make sure - // our hooked entry point won't be overwritten. - // This is for SandHook and YAHFA - if (api_level >= __ANDROID_API_R__) { -// edxp::HookSyms(handle, hook_func, GetSavedEntryPointOfPreCompiledMethod); - } - } - - } - -} diff --git a/edxp-core/src/main/cpp/main/include/art/runtime/oat_file_manager.h b/edxp-core/src/main/cpp/main/include/art/runtime/oat_file_manager.h deleted file mode 100644 index 79c7b68a..00000000 --- a/edxp-core/src/main/cpp/main/include/art/runtime/oat_file_manager.h +++ /dev/null @@ -1,34 +0,0 @@ - -#pragma once - -#include "base/object.h" - -namespace art { - - namespace oat_file_manager { - - CREATE_HOOK_STUB_ENTRIES( - "_ZN3art14OatFileManager24SetOnlyUseSystemOatFilesEv", // 9 & 11 - void, SetOnlyUseSystemOatFiles, (), { - return; - }); - - CREATE_HOOK_STUB_ENTRIES( - "_ZN3art14OatFileManager24SetOnlyUseSystemOatFilesEbb", // 10 - void, SetOnlyUseSystemOatFilesQ, (), { - return; - }); - - // @ApiSensitive(Level.LOW) - // http://androidxref.com/9.0.0_r3/xref/art/runtime/oat_file_manager.cc#637 - static void DisableOnlyUseSystemOatFiles(void *handle, HookFunType hook_func) { - const int api_level = edxp::GetAndroidApiLevel(); - if (api_level >= __ANDROID_API_P__) { - edxp::HookSyms(handle, hook_func, SetOnlyUseSystemOatFiles, - SetOnlyUseSystemOatFilesQ); - } - } - - } - -} diff --git a/edxp-core/src/main/cpp/main/src/native_hook.cpp b/edxp-core/src/main/cpp/main/src/native_hook.cpp index fbe548c2..7f2328b3 100644 --- a/edxp-core/src/main/cpp/main/src/native_hook.cpp +++ b/edxp-core/src/main/cpp/main/src/native_hook.cpp @@ -17,8 +17,6 @@ #include "art/runtime/class_linker.h" #include "art/runtime/gc/heap.h" #include "art/runtime/hidden_api.h" -#include "art/runtime/oat_file_manager.h" -#include "art/runtime/jit/jit_code_cache.h" #include "art/runtime/art_method.h" #include "art/runtime/instrumentation.h" #include "art/runtime/reflection.h" @@ -84,8 +82,6 @@ namespace edxp { art::ClassLinker::Setup(art_handle, hook_func); art::mirror::Class::Setup(art_handle, hook_func); art::JNIEnvExt::Setup(art_handle, hook_func); -// art::oat_file_manager::DisableOnlyUseSystemOatFiles(art_handle, hook_func); -// art::jit::HookJitCacheCode(art_handle, hook_func); art::instrumentation::DisableUpdateHookedMethodsCode(art_handle, hook_func); art::PermissiveAccessByReflection(art_handle, hook_func);