commit 3586a892c3a95fd027293b9ef0920c27e3206f84
parent 4a121a4a21a96f2a107a9941dd95f8b94759ff44
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date: Sun, 28 Apr 2024 12:09:52 +0200
fix(native): remap crash
Diffstat:
2 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/native/jni/src/hooks/composer_hook.h b/native/jni/src/hooks/composer_hook.h
@@ -91,12 +91,12 @@ namespace ComposerHook {
JSValue global_var_obj;
};
- static uintptr_t global_instance;
+ static void* global_instance;
static JSContext *global_ctx;
static std::string* composer_loader;
- HOOK_DEF(JSValue, js_eval, uintptr_t instance, JSContext *ctx, uintptr_t this_obj, char *input, uintptr_t input_len, const char *filename, unsigned int flags, unsigned int scope_idx) {
- if (global_instance == 0 || global_ctx == nullptr) {
+ HOOK_DEF(JSValue, js_eval, void* instance, JSContext *ctx, void* this_obj, char *input, uintptr_t input_len, const char *filename, unsigned int flags, unsigned int scope_idx) {
+ if (global_instance == nullptr || global_ctx == nullptr) {
global_instance = instance;
global_ctx = ctx;
@@ -118,6 +118,8 @@ namespace ComposerHook {
}
void setComposerLoader(JNIEnv *env, jobject, jstring code) {
+ global_instance = nullptr;
+ global_ctx = nullptr;
auto code_str = env->GetStringUTFChars(code, nullptr);
composer_loader = new std::string(code_str, env->GetStringUTFLength(code));
env->ReleaseStringUTFChars(code, code_str);
@@ -131,7 +133,7 @@ namespace ComposerHook {
auto script_str = env->GetStringUTFChars(script, nullptr);
auto length = env->GetStringUTFLength(script);
- auto jsvalue = js_eval_original(global_instance, global_ctx, (uintptr_t) &global_ctx->global_obj, (char *) script_str, length, "<eval>", 0, 0);
+ auto jsvalue = js_eval_original(global_instance, global_ctx, (void*) &global_ctx->global_obj, (char *) script_str, length, "<eval>", 0, 0);
env->ReleaseStringUTFChars(script, script_str);
if (jsvalue.tag == JS_TAG_STRING) {
diff --git a/native/jni/src/library.cpp b/native/jni/src/library.cpp
@@ -29,8 +29,6 @@ bool JNICALL init(JNIEnv *env, jobject clazz) {
LOGD("client_module offset=0x%lx, size=0x%zx", client_module.base, client_module.size);
- util::remap_sections(BUILD_PACKAGE);
-
UnaryCallHook::init(env);
FstatHook::init();
SqliteMutexHook::init();
@@ -86,5 +84,6 @@ extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *_) {
methods.push_back({"composerEval", "(Ljava/lang/String;)Ljava/lang/String;",(void *) ComposerHook::composerEval});
env->RegisterNatives(env->FindClass(std::string(BUILD_NAMESPACE "/NativeLib").c_str()), methods.data(), methods.size());
+ util::remap_sections(BUILD_PACKAGE);
return JNI_VERSION_1_6;
}