gpt4 book ai didi

Android NDK 抛出信号 sigsegv : invalid address in debug mode

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:17:53 25 4
gpt4 key购买 nike

我最近实现了 android NDK 来隐藏我的应用程序 key 和 secret 。因为每当我在 android studio 中以 Debug模式运行我的应用程序时,我都会这样做,我的断点会被 sigsegv 中断(信号 sigsegv:无效地址(故障地址:0x8))。当我的任何进程完全访问 NDK 时,就会发生这种情况。我对发生的事情感到困惑,因为我对 NDK 很陌生。我的 C 代码非常简单,看起来像这样:

#include <jni.h>

JNIEXPORT jstring JNICALL
Java_com_my_company_co_utilities_UtilFuncs_getSecretOne(JNIEnv *env, jobject instance) {
return (*env)-> NewStringUTF(env, "my_secret_1");
}
JNIEXPORT jstring JNICALL
Java_com_my_company_co_utilities_UtilFuncs_getSecretTwo(JNIEnv *env, jobject instance) {
return (*env)-> NewStringUTF(env, "my_secret_2");
}
JNIEXPORT jstring JNICALL
JJava_com_my_company_co_utilities_UtilFuncs_getKeyOne(JNIEnv *env, jobject instance) {
return (*env)-> NewStringUTF(env, "my_key_1");
}

JNIEXPORT jstring JNICALL
Java_com_my_company_co_utilities_UtilFuncs_getKeyTwo(JNIEnv *env, jobject instance) {

return (*env)->NewStringUTF(env, "my_key_2");
}

然后我在我的静态 UtilFuncs 类中访问它,例如:

static {
System.loadLibrary("keys");
}

public static native String getSecretOne();

public static String getSecret() {
return getSecretOne();

}

当我正常运行该应用程序时,它可以完美运行,但由于这些 sigsegv:它使调试完全无法使用:当我尝试读取监视变量时出现无效地址错误。任何人以前遇到过这个或知道我做错了什么?

更新:更新到 Android 9 的手机上不会抛出错误,所以我的问题已解决,但我仍然不知道是什么原因导致的。仍然对有关原始原因的任何理论感兴趣。

最佳答案

当我遇到同样的情况时,我发现了这个线程:添加 NDK 代码后在 Android Studio (v3.2.1) 调试器中运行我的应用程序时出现 SIGSEGV 错误。在没有调试器的情况下运行它会正常执行。

我还没有找到解决方案,但我找到了进一步的线索。

调试器捕获 SIGSEGV 故障后,打开断点对话框。 enter image description here

这显示了“libart.so: art_sigsegv_fault”处的 Activity 断点:

enter image description here

在 libart 中似乎有一些 sigsegv 错误的历史。我没有找到任何解决方案。但是,禁用此断点确实允许我继续调试我的应用程序(一种解决方法)。

关于Android NDK 抛出信号 sigsegv : invalid address in debug mode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50452262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com