commit 8ca4cd6995735592d472fe1849af41c74e28f641
parent d28733275b23495b0be3192b2c3f3ca9d99c9aa4
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date: Fri, 31 May 2024 18:34:37 +0200
fix(native): dobby crash
Diffstat:
8 files changed, 24 insertions(+), 6 deletions(-)
diff --git a/native/jni/src/dobby_helper.h b/native/jni/src/dobby_helper.h
@@ -0,0 +1,16 @@
+#pragma once
+
+#include <pthread.h>
+#include <sys/mman.h>
+#include <string.h>
+#include <dobby.h>
+#include "logger.h"
+
+
+static pthread_mutex_t hook_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+static void inline SafeHook(void *addr, void *hook, void **original) {
+ pthread_mutex_lock(&hook_mutex);
+ DobbyHook(addr, hook, original);
+ pthread_mutex_unlock(&hook_mutex);
+}+
\ No newline at end of file
diff --git a/native/jni/src/hooks/composer_hook.h b/native/jni/src/hooks/composer_hook.h
@@ -184,6 +184,6 @@ namespace ComposerHook {
LOGE("js_eval_ptr signature not found");
return;
}
- DobbyHook((void*) js_eval_ptr, (void *) js_eval, (void **) &js_eval_original);
+ SafeHook((void*) js_eval_ptr, (void *) js_eval, (void **) &js_eval_original);
}
}
\ No newline at end of file
diff --git a/native/jni/src/hooks/custom_emoji_font.h b/native/jni/src/hooks/custom_emoji_font.h
@@ -15,6 +15,6 @@ namespace CustomEmojiFont {
}
void init() {
- DobbyHook((void *) DobbySymbolResolver("libc.so", "open"), (void *)open_hook, (void **)&open_hook_original);
+ SafeHook((void *) DobbySymbolResolver("libc.so", "open"), (void *)open_hook, (void **)&open_hook_original);
}
}
\ No newline at end of file
diff --git a/native/jni/src/hooks/duplex_hook.h b/native/jni/src/hooks/duplex_hook.h
@@ -21,6 +21,6 @@ namespace DuplexHook {
}
void init(JNIEnv* env) {
- DobbyHook((void *)env->functions->IsSameObject, (void *)IsSameObject, (void **)&IsSameObject_original);
+ SafeHook((void *)env->functions->IsSameObject, (void *)IsSameObject, (void **)&IsSameObject_original);
}
}
\ No newline at end of file
diff --git a/native/jni/src/hooks/fstat_hook.h b/native/jni/src/hooks/fstat_hook.h
@@ -22,6 +22,6 @@ namespace FstatHook {
}
void init() {
- DobbyHook((void *)DobbySymbolResolver("libc.so", "fstat"), (void *)fstat_hook, (void **)&fstat_hook_original);
+ SafeHook((void *)DobbySymbolResolver("libc.so", "fstat"), (void *)fstat_hook, (void **)&fstat_hook_original);
}
}
\ No newline at end of file
diff --git a/native/jni/src/hooks/sqlite_mutex.h b/native/jni/src/hooks/sqlite_mutex.h
@@ -41,6 +41,6 @@ namespace SqliteMutexHook {
LOGE("sqlite3 openDatabase sig not found");
return;
}
- DobbyHook((void *) open_database_sig, (void *) sqlite3_open_hook, (void **) &sqlite3_open_hook_original);
+ SafeHook((void *) open_database_sig, (void *) sqlite3_open_hook, (void **) &sqlite3_open_hook_original);
}
}
\ No newline at end of file
diff --git a/native/jni/src/hooks/unary_call.h b/native/jni/src/hooks/unary_call.h
@@ -79,7 +79,7 @@ namespace UnaryCallHook {
native_lib_on_unary_call_method = env->GetMethodID(env->GetObjectClass(common::native_lib_object), "onNativeUnaryCall", "(Ljava/lang/String;[B)L" BUILD_NAMESPACE "/NativeRequestData;");
if (unaryCall_func != 0) {
- DobbyHook((void *)unaryCall_func, (void *)unaryCall_hook, (void **)&unaryCall_hook_original);
+ SafeHook((void *)unaryCall_func, (void *)unaryCall_hook, (void **)&unaryCall_hook_original);
} else {
LOGE("Can't find unaryCall signature");
}
diff --git a/native/jni/src/library.cpp b/native/jni/src/library.cpp
@@ -4,6 +4,7 @@
#include <vector>
#include <thread>
+#include "dobby_helper.h"
#include "logger.h"
#include "common.h"
#include "hooks/unary_call.h"