本机应用程序崩溃 - 获取内存地址问题 - com.android.runtime/lib64/libart.so & #00 0x00000000afef03c4 <unknown>



我正在将32位NDK项目迁移到64位。我们在项目中调用了许多库:如-libssl.so、libcrypto.so、libc.so、liblog.so、librcrashlytics.so

在这个项目中,我将通过fopen读取内核进程,但不知怎么的,我得到了致命信号错误和安卓logcat显示如下

A/libc:致命信号11(SIGSEGV(,代码1(SEGV_MAPERR(,故障地址tid 12462(eradocs.android(中的0xafef03c4,pid 12462(eradocs.android(

========================在堆栈跟踪上发现以下崩溃转储

#00 0x00000000afef03c4-此内存地址与上述致命信号错误匹配。

#06 0x000000000013f350/apex/com.android.runtime/lib64/libart.so(art_quick_generic_jni_蹦床+144((构建ID:d700c52998d7d76cb39e2001d670e654(

#07 0x00000000001365b8/apex/com.android.runtime/lib64/libart.so(art_quick_invoke_static_stub+568((构建ID:d700c52998d7d76cb39e2001d670e654(

#08 0x000000000014500c/apex/com.android.runtime/lib64/libart.so,art::JValue*,char const*(+276((BuildId:d700c52998d7d76cb39e2001d670e654(

#09 0x00000000002e2928/apex/com.android.runtime/lib64/libart.so(艺术::解释器:艺术解释器到编译代码桥(艺术:线程*,art::ArtMethod*,art::ShadowFrame*,无符号短字符,art:(JValue*(+384((建筑ID:d700c52998d7d76cb39e2001d670e654(

#10 0x00000000002ddb88/apex/com.android.runtime/lib64/libart.so(布尔艺术::解释器::DoCall<false,false>(艺术::艺术方法*,艺术::线程*,art::ShadowFrame&,art::指令const*,无符号short,art::JValue*(+892((BuildId:d700c52998d7d76cb39e2001d670e654(

#11 0x00000000005a28ac/apex/com.android.runtime/lib64/libart.so(MterInvokeStatic+372((构建ID:d700c52998d7d76cb39e2001d670e654(

#12 0x0000000000130994/apex/com.android.runtime/lib64/libart.so(mterp_invoke_static+20((构建ID:d700c52998d7d76cb39e2001d670e654(

#14 0x00000000002b3c3c/apex/com.android.runtime/lib64/libart.so

有人能帮我做这个堆叠竞赛吗?有没有办法找到造成这种情况的根本原因?

我敢打赌,您的一个库利用了funopen技巧,能够从本机代码中读取资产。这个技巧曾经奏效,但随着Android和NDK的发展,黑客很快就或多或少地过时了。我一直使用它,直到我升级了NDK,并遇到了类似的崩溃。

请参阅NDK第562期和这篇旧博客文章。两者都提到了这个SIGSEGV错误。

一些快速指针包括:

  • 检查是否定义了_BSD_SOURCE
  • 你升级NDK了吗
  • 您是否更改了minSdkVersion
  • 您是否从gcc更改为Clang

我对此崩溃的解决方案是完全避免funopen

相关内容

  • 没有找到相关文章

最新更新