From 221f241fc714ba0077419c81ca3688d56699e486 Mon Sep 17 00:00:00 2001 From: Kejin Date: Mon, 30 Jun 2025 17:04:37 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20=E8=A7=84=E9=81=BF=20JNI=20DETECTED?= =?UTF-8?q?=20ERROR=20IN=20APPLICATION:=20obj=20=3D=3D=20null=20in=20call?= =?UTF-8?q?=20to=20GetLongField?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/src/main/cpp/pine.cpp | 4 ++++ core/src/main/java/top/canyie/pine/Pine.java | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/core/src/main/cpp/pine.cpp b/core/src/main/cpp/pine.cpp index 4b1cbd3..c2bb336 100644 --- a/core/src/main/cpp/pine.cpp +++ b/core/src/main/cpp/pine.cpp @@ -505,6 +505,10 @@ void Pine_getArgsX86(JNIEnv* env, jclass, jint javaExtras, jintArray javaArray, #endif void Pine_syncMethodInfo(JNIEnv* env, jclass, jobject javaOrigin, jobject javaBackup, jboolean skipDeclaringClass) { + if (javaOrigin == nullptr || javaBackup == nullptr) { + LOGW("syncMethodInfo: javaOrigin or javaBackup is null"); + return; + } auto origin = art::ArtMethod::FromReflectedMethod(env, javaOrigin); auto backup = art::ArtMethod::FromReflectedMethod(env, javaBackup); diff --git a/core/src/main/java/top/canyie/pine/Pine.java b/core/src/main/java/top/canyie/pine/Pine.java index 19be477..d5427e6 100644 --- a/core/src/main/java/top/canyie/pine/Pine.java +++ b/core/src/main/java/top/canyie/pine/Pine.java @@ -494,7 +494,15 @@ static Object callBackupMethod(HookRecord hookRecord, Object thisObject, Object[ // native entry of JNI method may be changed by RegisterNatives and UnregisterNatives, // so we need to update them when invoke backup method. Member origin = hookRecord.target; + if (origin == null) { + Log.w(TAG, "Target method is null!!!"); + return null; + } Method backup = hookRecord.backup; + if (backup == null) { + Log.w(TAG, "Backup method is null for " + hookRecord.target); + return null; + } Class declaring = origin.getDeclaringClass(); syncMethodInfo(origin, backup, hookRecord.skipUpdateDeclaringClass); // FIXME: GC happens here (you can add Runtime.getRuntime().gc() to test) will crash backup calling From 562291a8234afce3377e3b9457fc16f80791c549 Mon Sep 17 00:00:00 2001 From: Kejin Date: Mon, 30 Jun 2025 17:04:52 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20=E9=80=82=E9=85=8D=20android-15=2016?= =?UTF-8?q?kb?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/src/main/cpp/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/src/main/cpp/CMakeLists.txt b/core/src/main/cpp/CMakeLists.txt index 7032ee3..ac59f73 100644 --- a/core/src/main/cpp/CMakeLists.txt +++ b/core/src/main/cpp/CMakeLists.txt @@ -61,6 +61,10 @@ add_library(pine SHARED ${PINE_SOURCES}) find_library(log-lib log) find_package(cxx REQUIRED CONFIG) +# support 16KB +target_link_options(pine PRIVATE "-Wl,-z,max-page-size=16384") +target_link_options(pine PRIVATE "-Wl,-z,common-page-size=16384") + target_link_libraries(pine ${log-lib} cxx::cxx) ENABLE_LANGUAGE(ASM) From 83d9da70bb306c7919e5988b50b8b534d82d0b6e Mon Sep 17 00:00:00 2001 From: Kejin Date: Mon, 30 Jun 2025 17:05:19 +0800 Subject: [PATCH 3/3] fix: chmod u+x gradlew --- gradlew | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 gradlew diff --git a/gradlew b/gradlew old mode 100644 new mode 100755